From 4e03bb337b450d547bbf3df28d0667f5e5b98ab0 Mon Sep 17 00:00:00 2001 From: juvancic Date: Tue, 30 May 2023 17:28:16 +0200 Subject: [PATCH 01/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_TypesAndValues.ttcn | 319 +++++++++++++------------ 1 file changed, 161 insertions(+), 158 deletions(-) diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn index 8a97ca9..9960607 100644 --- a/ttcn/LibIot/LibIot_TypesAndValues.ttcn +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -1,143 +1,146 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id: LibIot_TypesAndValues.ttcn 16 2009-06-16 15:06:42Z pintar $ - * @desc This module provides the (message) types and constants used by the test component + * @desc This module provides the (message) types and constants used by the test component * for Iot tests. */ module LibIot_TypesAndValues { - - import from LibCommon_BasicTypesAndValues {type UInt32, UInt16;} + + import from LibCommon_BasicTypesAndValues {type UInt32, UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} + import from LibCommon_VerdictControl {type FncRetCode;} - group commonTypes { - type enumerated IOTExecMode { e_realtime, e_offline } + group commonTypes { + type enumerated IOTExecMode { e_realtime, e_offline } - type record Status { - FncRetCode code, - charstring reason optional - } - - } - - group interfaceInformationrelatedTypes { - - /** - * - * @desc IP address type e.g. "127.0.0.1" - */ - type charstring IpAddress; - - /** - * - * @desc Type for port number, e.g. "5060" - */ - type UInt16 PortNumber; - - /** - * - * @desc List of port numbers - */ - type record of PortNumber PortNumberList; - - type record InterfaceAvailable { - charstring interfaceName, - boolean available - } - - type set of InterfaceAvailable InterfaceAvailableList; - - /** - * - * @desc Required information for IP interfaces - * @member domainName the domain name - * @member IpAddress the ip address - * @member portNumbers the list of port numbers where message are received - */ - type record IpInterfaceInfo { - charstring domainName optional, - IpAddress IpAddress, - PortNumberList portNumbers - } - - /** - * - * @desc List of IP interfacees - */ - type record of IpInterfaceInfo IpInterfaceInfoList; - - /** - * - * @desc Collection of different interface types, e.g for IP communications - * This type can be extended with new alternative for other interface types - */ - type union InterfaceInfo { - IpInterfaceInfoList IpInterfaceInfo - } - - /** - * - * @desc Type for representing EUT interface information for monitored logical interfaces - * @member interfaceName Name of logical interface - * @member interfaceInfo Interface information specific to this logical interface - */ - type record MonitorInterfaceInfo { - charstring interfaceName, - InterfaceInfo interfaceInfo - } - - /** - * - * @desc List of monitored interfaces - */ - type record of MonitorInterfaceInfo MonitorInterfaceInfoList; - - /** - * - * @desc List of VxLTE Monitor interfaces - */ + type record Status { + FncRetCode code, + charstring reason optional + } + + } + + group interfaceInformationrelatedTypes { + + /** + * + * @desc IP address type e.g. "127.0.0.1" + */ + type charstring IpAddress; + + /** + * + * @desc Type for port number, e.g. "5060" + */ + type UInt16 PortNumber; + + /** + * + * @desc List of port numbers + */ + type record of PortNumber PortNumberList; + + type record InterfaceAvailable { + charstring interfaceName, + boolean available + } + + type set of InterfaceAvailable InterfaceAvailableList; + + /** + * + * @desc Required information for IP interfaces + * @member domainName the domain name + * @member IpAddress the ip address + * @member portNumbers the list of port numbers where message are received + */ + type record IpInterfaceInfo { + charstring domainName optional, + IpAddress IpAddress, + PortNumberList portNumbers + } + + /** + * + * @desc List of IP interfacees + */ + type record of IpInterfaceInfo IpInterfaceInfoList; + + /** + * + * @desc Collection of different interface types, e.g for IP communications + * This type can be extended with new alternative for other interface types + */ + type union InterfaceInfo { + IpInterfaceInfoList IpInterfaceInfo + } + + /** + * + * @desc Type for representing EUT interface information for monitored logical interfaces + * @member interfaceName Name of logical interface + * @member interfaceInfo Interface information specific to this logical interface + */ + type record MonitorInterfaceInfo { + charstring interfaceName, + InterfaceInfo interfaceInfo + } + + /** + * + * @desc List of monitored interfaces + */ + type record of MonitorInterfaceInfo MonitorInterfaceInfoList; + + /** + * + * @desc List of VxLTE Monitor interfaces + */ type record VxLTEMonitorInterfaceList{ - MonitorInterfaceInfo gmA optional, - MonitorInterfaceInfo gmB optional, - MonitorInterfaceInfo ic optional, - MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - MonitorInterfaceInfo mwPS optional, - MonitorInterfaceInfo mwIS optional,// Mw interface at I-CSCF/S-CSCF - MonitorInterfaceInfo mwPB optional,// Mw interface at P-CSCF/IBCF - MonitorInterfaceInfo mwIB optional,// Mw interface at I-CSCF/IBCF - MonitorInterfaceInfo isc optional, - MonitorInterfaceInfo cxIH optional, - MonitorInterfaceInfo cxSH optional, - MonitorInterfaceInfo gx optional, - MonitorInterfaceInfo rx optional, - MonitorInterfaceInfo s6a optional, - MonitorInterfaceInfo s9 optional, - MonitorInterfaceInfo sh optional + MonitorInterfaceInfo gmA optional, + MonitorInterfaceInfo gmB optional, + MonitorInterfaceInfo mwPSAP optional,// MwMmMx interface at E,SCSCF to PSAP + MonitorInterfaceInfo ic optional, + MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + MonitorInterfaceInfo mwPS optional, + MonitorInterfaceInfo mwPE optional,// Mw interface at P-CSCF to E-CSCF + MonitorInterfaceInfo mwIS optional,// Mw interface at I-CSCF/S-CSCF + MonitorInterfaceInfo mwPB optional,// Mw interface at P-CSCF/IBCF + MonitorInterfaceInfo mwIB optional,// Mw interface at I-CSCF/IBCF + MonitorInterfaceInfo mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + MonitorInterfaceInfo isc optional, + MonitorInterfaceInfo cxIH optional, + MonitorInterfaceInfo cxSH optional, + MonitorInterfaceInfo gx optional, + MonitorInterfaceInfo rx optional, + MonitorInterfaceInfo s6a optional, + MonitorInterfaceInfo s9 optional, + MonitorInterfaceInfo sh optional } - /** - * - * @desc Product specific EUT interface information - * @member name the name of the vendor - * @member monitorInterfaces monitor interface configuration - */ - type record Product { - charstring productName, - MonitorInterfaceInfoList monitorInterfaces - } - - /** - * - * @desc List of product specificr EUT interface information - */ - type record of Product ProductList; - } - + /** + * + * @desc Product specific EUT interface information + * @member name the name of the vendor + * @member monitorInterfaces monitor interface configuration + */ + type record Product { + charstring productName, + MonitorInterfaceInfoList monitorInterfaces + } + + /** + * + * @desc List of product specificr EUT interface information + */ + type record of Product ProductList; + } + - group adapterConfigurationTypes { - + group adapterConfigurationTypes { + type union CaptureMode { LiveCapture liveCpature, OfflineCapture offlineCapture @@ -147,7 +150,7 @@ module LibIot_TypesAndValues { type record of charstring PhysicalInterfaceList; type record LiveCapture { - PhysicalInterfaceList physicalInterfaces, // TODO document example syntax + PhysicalInterfaceList physicalInterfaces, // TODO document example syntax RecordMode recordMode } @@ -165,8 +168,8 @@ module LibIot_TypesAndValues { } type record CaptureSource { - charstring sessionsPath, // e.g., the path where session's PCAP files are located like /tmp/19 - MergeFileList mergeFileList + charstring sessionsPath, // e.g., the path where session's PCAP files are located like /tmp/19 + MergeFileList mergeFileList } type record TimeOffset @@ -218,9 +221,9 @@ module LibIot_TypesAndValues { type enumerated ProtocolFilter { e_ip, - e_sip, - e_dns, - e_diameter + e_sip, + e_dns, + e_diameter } type record SetFilterReq { @@ -250,35 +253,35 @@ module LibIot_TypesAndValues { Status status } - } - with{ - encode "IOTCodec"; - } + } + with{ + encode "IOTCodec"; + } - group oracleRelatedTypes { - // used for PIXIT definition - type enumerated IotVerdictType { e_e2e, e_conformance } - - // used for verdict handling - type record VerdictType { - verdicttype verdict, - charstring reason optional - } - - type union IotVerdict { - VerdictType e2e, - VerdictType conformance - } - } - /** + group oracleRelatedTypes { + // used for PIXIT definition + type enumerated IotVerdictType { e_e2e, e_conformance } + + // used for verdict handling + type record VerdictType { + verdicttype verdict, + charstring reason optional + } + + type union IotVerdict { + VerdictType e2e, + VerdictType conformance + } + } + /** * @desc Default record */ - type record of default DefaultList; + type record of default DefaultList; - type record ComponentId { - charstring name, - integer index // explain more - } + type record ComponentId { + charstring name, + integer index // explain more + } - type set of ComponentId ComponentIdList; + type set of ComponentId ComponentIdList; } \ No newline at end of file -- GitLab From eef9304b647a4bd2ca8b19347fefe2a5bc7880cc Mon Sep 17 00:00:00 2001 From: juvancic Date: Tue, 30 May 2023 17:28:38 +0200 Subject: [PATCH 02/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_Functions.ttcn | 178 ++++++++++++++++++------ 1 file changed, 133 insertions(+), 45 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn index 77bbff2..2a0754e 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -1,23 +1,35 @@ /* - * @author STF 574 - * @version $Id: LibIot_VxLTE_Functions.ttcn 1 2020-05-29 15:06:42Z pintar $ - * @desc This module provides Functions parameters which need to be - * changeable within validation + * @author STF 574 + * @version $Id: LibIot_VxLTE_Functions.ttcn 1 2020-05-29 15:06:42Z pintar $ + * @desc This module provides Functions parameters which need to be + * changeable within validation */ module LibIot_VxLTE_Functions { - import from LibIot_TypesAndValues - { - type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, - ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailable, InterfaceAvailableList,MonitorInterfaceInfo, - VxLTEMonitorInterfaceList; - } - import from AtsImsIot_Templates { - template /*m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, - m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout,*/ - m_SetFilterReq/*, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, - m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any*/; + import from LibIot_TypesAndValues { + type + IOTExecMode, + IotVerdictType, + CaptureMode, + RecordMode, + FileList, + TimeOffset, + EutInterfaceInfoList, + ProtocolFilter, + IpAddress, + PortNumber, + ProductList, + InterfaceAvailable, + InterfaceAvailableList, + MonitorInterfaceInfo, + VxLTEMonitorInterfaceList; + } + import from AtsImsIot_Templates { + template /*m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, + m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout,*/ + m_SetFilterReq /*, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, + m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any*/; } import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Templates all; @@ -28,9 +40,9 @@ module LibIot_VxLTE_Functions { type record of charstring InterfaceNamesList; group ConfigurationFunctions{ /** - * @desc Check and create a list of monitor interfaces based on PIXITS - * @param - * @return the created monitor component list in vc_MonIntfList + * @desc Check and create a list of monitor interfaces based on PIXITS + * @param + * @return the created monitor component list in vc_MonIntfList */ function f_setVxLteMonIterfacesAvailability(/*inout VxLTEMonitorInterfaceList p_vxlteMonIntfList*/)runs on ImsTestCoordinator{ @@ -42,6 +54,9 @@ module LibIot_VxLTE_Functions { if (PX_SIP_GMB_MONITORENABLED == true){ vc_MonIntfList.gmB := valueof(m_MonIntf_Sip_Gm_B); } + if (PX_SIP_MW_PSAP_MONITORENABLED == true){ + vc_MonIntfList.mwPSAP := valueof(m_MonIntf_Sip_Mw_PSAP); + } if (PX_SIP_IC_MONITORENABLED == true){ vc_MonIntfList.ic := valueof(m_MonIntf_Sip_Ic); } @@ -51,6 +66,9 @@ module LibIot_VxLTE_Functions { if (PX_SIP_MW_PS_MONITORENABLED == true){ vc_MonIntfList.mwPS := valueof(m_MonIntf_Sip_Mw_PS); } + if (PX_SIP_MW_PE_MONITORENABLED == true){ + vc_MonIntfList.mwPE := valueof(m_MonIntf_Sip_Mw_PE); + } if (PX_SIP_MW_IS_MONITORENABLED == true){ vc_MonIntfList.mwIS := valueof(m_MonIntf_Sip_Mw_IS); } @@ -60,12 +78,14 @@ module LibIot_VxLTE_Functions { if (PX_SIP_MW_IB_MONITORENABLED == true){ vc_MonIntfList.mwIB := valueof(m_MonIntf_Sip_Mw_IB); } + if (PX_SIP_MW_IE_MONITORENABLED == true){ + vc_MonIntfList.mwIE := valueof(m_MonIntf_Sip_Mw_IE); + } if (PX_SIP_ISC_MONITORENABLED == true){ vc_MonIntfList.isc := valueof(m_MonIntf_Sip_ISC); } - if (PX_DIAMETER_CX_IH_MONITORENABLED == true){ vc_MonIntfList.cxIH := valueof(m_MonIntf_Diameter_Cx_IH); } @@ -86,14 +106,14 @@ module LibIot_VxLTE_Functions { } if (PX_DIAMETER_SH_MONITORENABLED == true){ vc_MonIntfList.sh := valueof(m_MonIntf_Diameter_Sh); - } + } } /** - * @desc Create monitor components based on vc_MonIntfList - * @param - * @return the created monitor components in vc_vxlte_monitor_components + * @desc Create monitor components based on vc_MonIntfList + * @param + * @return the created monitor components in vc_vxlte_monitor_components */ function f_cf_createVxLteMonitor() runs on ImsTestCoordinator{ @@ -104,6 +124,9 @@ module LibIot_VxLTE_Functions { vc_vxlte_monitor_components.gmB := f_cf_create_monitor_sip ( vc_MonIntfList.gmB); } + if (isvalue(vc_MonIntfList.mwPSAP)){ + vc_vxlte_monitor_components.mwPSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mwPSAP); + } if (isvalue(vc_MonIntfList.ic)){ vc_vxlte_monitor_components.ic := f_cf_create_monitor_sip ( vc_MonIntfList.ic); } @@ -114,6 +137,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwPS)){ vc_vxlte_monitor_components.mwPS := f_cf_create_monitor_sip ( vc_MonIntfList.mwPS); } + if (isvalue(vc_MonIntfList.mwPE)){ + vc_vxlte_monitor_components.mwPE := f_cf_create_monitor_sip ( vc_MonIntfList.mwPE); + } if (isvalue(vc_MonIntfList.mwIS)){ vc_vxlte_monitor_components.mwIS := f_cf_create_monitor_sip ( vc_MonIntfList.mwIS); } @@ -123,6 +149,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwIB)){ vc_vxlte_monitor_components.mwIB := f_cf_create_monitor_sip ( vc_MonIntfList.mwIB); } + if (isvalue(vc_MonIntfList.mwIE)){ + vc_vxlte_monitor_components.mwIE := f_cf_create_monitor_sip ( vc_MonIntfList.mwIE); + } if (isvalue(vc_MonIntfList.isc)){ vc_vxlte_monitor_components.isc := f_cf_create_monitor_sip ( vc_MonIntfList.isc); @@ -154,23 +183,23 @@ module LibIot_VxLTE_Functions { } /** - * @desc Start monitor components based on vc_MonIntfList - * @param - * @return Created monitor components in vc_vxlte_monitor_components are connected/mapped + * @desc Start monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are connected/mapped */ function f_cf_VxLteMonitor_Up() runs on ImsTestCoordinator{ - //Initialize the Adapter (including the TrafficCapture process). + //Initialize the Adapter (including the TrafficCapture process). timer tc_noAct; f_cf_initCapture(); if (isvalue(vc_MonIntfList.gmA)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmA); vc_vxlte_monitor_components.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( + valueof (m_SetFilterReq( e_sip, {vc_MonIntfList.gmA.interfaceInfo} - ) - ))); + ) + ))); } if (isvalue(vc_MonIntfList.gmB)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.gmB); @@ -182,6 +211,16 @@ module LibIot_VxLTE_Functions { ))); } + if (isvalue(vc_MonIntfList.mwPSAP)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPSAP); + vc_vxlte_monitor_components.mwPI.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPSAP.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.ic)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.ic); vc_vxlte_monitor_components.ic.start(f_cf_setFilter( @@ -210,6 +249,15 @@ module LibIot_VxLTE_Functions { ) ))); } + if (isvalue(vc_MonIntfList.mwPE)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPE); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwPE.interfaceInfo} + ) + ))); + } if (isvalue(vc_MonIntfList.mwIS)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIS); vc_vxlte_monitor_components.mwIS.start(f_cf_setFilter( @@ -237,6 +285,15 @@ module LibIot_VxLTE_Functions { ) ))); } + if (isvalue(vc_MonIntfList.mwIE)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwIE); + vc_vxlte_monitor_components.mwPS.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwIE.interfaceInfo} + ) + ))); + } if (isvalue(vc_MonIntfList.isc)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.isc); @@ -323,9 +380,9 @@ module LibIot_VxLTE_Functions { } /** - * @desc Stops monitor components based on vc_MonIntfList - * @param - * @return Created monitor components in vc_vxlte_monitor_components are disconnected/unmapped + * @desc Stops monitor components based on vc_MonIntfList + * @param + * @return Created monitor components in vc_vxlte_monitor_components are disconnected/unmapped */ function f_cf_VxLteMonitor_Down() runs on ImsTestCoordinator{ //Stop traffic capture processing. @@ -337,7 +394,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.gmB)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmB); } - + if (isvalue(vc_MonIntfList.mwPSAP)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPSAP); + } if (isvalue(vc_MonIntfList.ic)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.ic); } @@ -348,6 +407,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwPS)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPS); } + if (isvalue(vc_MonIntfList.mwPE)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPE); + } if (isvalue(vc_MonIntfList.mwIS)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIS); } @@ -357,6 +419,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwIB)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIB); } + if (isvalue(vc_MonIntfList.mwIE)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwIE); + } if (isvalue(vc_MonIntfList.isc)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.isc); @@ -413,23 +478,26 @@ module LibIot_VxLTE_Functions { /** * @desc Check monitor component based on interface name - * @param - * @return true - Monitorinteface available/active + * @param + * @return true - Monitorinteface available/active * false - Monitorinteface not exists or not available/active */ function f_SipMonitorInterface_available(charstring p_interfaceName) runs on ImsTestCoordinator return boolean{ // if (vc_vxlte_monitor_components.gmA.vc_interfacename) {return true;} if ((isvalue(vc_MonIntfList.gmA)) and (vc_MonIntfList.gmA.interfaceName==p_interfaceName)){ return true;} - if ((isvalue(vc_MonIntfList.gmB)) and (vc_MonIntfList.gmB.interfaceName==p_interfaceName)){ return true;} + //if ((isvalue(vc_MonIntfList.gmB)) and (vc_MonIntfList.gmB.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwPSAP)) and (vc_MonIntfList.mwPSAP.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.ic)) and (vc_MonIntfList.ic.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwPI)) and (vc_MonIntfList.mwPI.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwPS)) and (vc_MonIntfList.mwPS.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwPE)) and (vc_MonIntfList.mwPE.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwIS)) and (vc_MonIntfList.mwIS.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwPB)) and (vc_MonIntfList.mwPB.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwIB)) and (vc_MonIntfList.mwIB.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwIE)) and (vc_MonIntfList.mwIE.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.isc)) and (vc_MonIntfList.isc.interfaceName==p_interfaceName)){ return true;} @@ -437,9 +505,9 @@ module LibIot_VxLTE_Functions { } /** - * @desc Check monitor component based on interface name - * @param - * @return true - Monitorinteface available/active + * @desc Check monitor component based on interface name + * @param + * @return true - Monitorinteface available/active * false - Monitorinteface not exists or not available/active */ function f_DiameterMonitorInterface_available(charstring p_interfaceName) runs on ImsTestCoordinator return boolean{ @@ -463,7 +531,7 @@ module LibIot_VxLTE_Functions { var InterfaceAvailableList v_VxLTE_MonIntf_Available; var InterfaceAvailable v_InterfaceAvailable; - var SipInterfaceMonitor v_gmA, v_gmB, v_ic, v_mwPI, v_mwPS, v_mwSI, v_mwPB, v_mwIB, v_isc; + var SipInterfaceMonitor v_gmA, v_gmB, v_mwPSAP, v_ic, v_mwPI, v_mwPS, v_mwPE, v_mwSI, v_mwPB, v_mwIB, v_mwIE, v_isc; var DiameterInterfaceMonitor v_cxIH, v_cxSH, v_gx, v_rx, v_s6a, v_s9, v_sh; if (PX_SIP_GMA_MONITORENABLED == true){ @@ -477,9 +545,17 @@ module LibIot_VxLTE_Functions { v_InterfaceAvailable.interfaceName := PX_SIP_GMB_INTERFACENAME; v_InterfaceAvailable.available := PX_SIP_GMB_MONITORENABLED; v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); - v_gmB := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Gm_B)/*PX_SIP_GMB_INTERFACENAME*/ ); + v_gmB := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Gm_B)/*PX_SIP_GMB_INTERFACENAME*/); f_cf_monitor_up_sip(v_gmB); } + if (PX_SIP_MW_PSAP_MONITORENABLED == true){ + + v_InterfaceAvailable.interfaceName := PX_SIP_MW_PSAP_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MW_PSAP_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mwPSAP := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_PSAP)/*PX_SIP_MW_PSAP_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mwPSAP); + } if (PX_SIP_IC_MONITORENABLED == true){ v_InterfaceAvailable.interfaceName := PX_SIP_IC_INTERFACENAME; v_InterfaceAvailable.available := PX_SIP_IC_MONITORENABLED; @@ -502,6 +578,13 @@ module LibIot_VxLTE_Functions { v_mwPS := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_PS)/*PX_SIP_MW_PS_INTERFACENAME*/ ); f_cf_monitor_up_sip(v_mwPS); } + if (PX_SIP_MW_PE_MONITORENABLED == true){ + v_InterfaceAvailable.interfaceName := PX_SIP_MW_PE_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MW_PE_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mwPE := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_PE)/*PX_SIP_MW_PE_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mwPE); + } if (PX_SIP_MW_IS_MONITORENABLED == true){ v_InterfaceAvailable.interfaceName := PX_SIP_MW_IS_INTERFACENAME; v_InterfaceAvailable.available := PX_SIP_MW_IS_MONITORENABLED; @@ -530,8 +613,13 @@ module LibIot_VxLTE_Functions { v_isc := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_ISC)/*PX_SIP_ISC_INTERFACENAME*/ ); f_cf_monitor_up_sip(v_isc); } - - + if (PX_SIP_MW_IE_MONITORENABLED == true){ + v_InterfaceAvailable.interfaceName := PX_SIP_MW_IE_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MW_IE_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mwIE := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_IE)/*PX_SIP_MW_IE_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mwIE); + } if (PX_DIAMETER_CX_IH_MONITORENABLED == true){ v_InterfaceAvailable.interfaceName := PX_DIAMETER_CX_IH_INTERFACENAME; @@ -581,7 +669,7 @@ module LibIot_VxLTE_Functions { v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); v_sh := f_cf_create_monitor_diameter ( valueof(m_MonIntf_Diameter_Sh)/*PX_DIAMETER_SH_INTERFACENAME*/ ); f_cf_monitor_up_diameter(v_sh); - } + } } function f_update_MonitorInterfaceList( -- GitLab From 4250efdb0af304bc66e7e26fdc5fef28c95fcb24 Mon Sep 17 00:00:00 2001 From: juvancic Date: Tue, 30 May 2023 17:28:52 +0200 Subject: [PATCH 03/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 42 +++++++++++++++++----------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn index edf4938..03225dd 100644 --- a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn @@ -1,16 +1,16 @@ /* * @author STF574, TTF006 - * @version $Id: LibIot_VxLTE_PIXITS.ttcn 1 2020-05-29 15:06:42Z pintar $ + * @version $Id: LibIot_VxLTE_PIXITS.ttcn 1 2020-05-29 15:06:42Z pintar $ * @desc This module provides PIXIT parameters which need to be * changeable within validation */ -module LibIot_VxLTE_PIXITS { +module LibIot_VxLTE_PIXITS { - import from LibIot_TypesAndValues + import from LibIot_TypesAndValues { - type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, - ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; + type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, + ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; } group VxLTEMonitorInterfaces_PIXITS{ @@ -49,48 +49,58 @@ module LibIot_VxLTE_PIXITS { modulepar boolean PX_SIP_IC_MONITORENABLED := true; }//end group Ic - //A.8.4 PIXIT items for the Mw Interface + //A.8.4 PIXIT items for the Mw Interface //The Mw interface connects an x-CSCF with another x-CSCF or an IBCF using the SIP and SDP protocols as defined in ETSI TS 124 229 [1]. group Mw{ + modulepar charstring PX_SIP_MW_PSAP_INTERFACENAME := "Mw PSAP"; //MwMmMx interface between E,S-CSCF and PSAP modulepar charstring PX_SIP_MW_PI_INTERFACENAME := "Mw PI"; //Mw interface between P-CSCF and I-CSCF modulepar charstring PX_SIP_MW_PS_INTERFACENAME := "Mw PS"; //Mw interface between P-CSCF and S-CSCF + modulepar charstring PX_SIP_MW_PE_INTERFACENAME := "Mw PE"; //Mw interface between P-CSCF and E-CSCF modulepar charstring PX_SIP_MW_IS_INTERFACENAME := "Mw SI"; //Mw interface between S-CSCF and I-CSCF modulepar charstring PX_SIP_MW_PB_INTERFACENAME := "Mw PB"; //Mw interface between P-CSCF and IBCF modulepar charstring PX_SIP_MW_IB_INTERFACENAME := "Mw IB"; //Mw interface between I-CSCF and IBCF + modulepar charstring PX_SIP_MW_IE_INTERFACENAME := "Mw IE"; //Mw interface between I/S-CSCF and E-CSCF + modulepar charstring PX_SIP_MW_PSAP_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of PSAP + modulepar integer PX_SIP_MW_PSAP_PORT := 5060; //Mw Port number of PSAP modulepar charstring PX_SIP_MW_P_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of P-CSCF modulepar integer PX_SIP_MW_P_CSCF_PORT := 5060; //Mw Port number of P-CSCF modulepar charstring PX_SIP_MW_I_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of I-CSCF modulepar integer PX_SIP_MW_I_CSCF_PORT := 5080; //Mw Port number of I-CSCF modulepar charstring PX_SIP_MW_S_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of S-CSCF modulepar integer PX_SIP_MW_S_CSCF_PORT := 5090; //Mw Port number of S-CSCF + modulepar charstring PX_SIP_MW_E_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of E-CSCF + modulepar integer PX_SIP_MW_E_CSCF_PORT := 5095; //Mw Port number of E-CSCF modulepar charstring PX_SIP_MW_IBCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of IBCF modulepar integer PX_SIP_MW_IBCF_PORT := 5050; //Mw Port number of IBCF + modulepar boolean PX_SIP_MW_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only modulepar boolean PX_SIP_MW_PI_MONITORENABLED := true; //true - Monitor enabled for PI connection only modulepar boolean PX_SIP_MW_PS_MONITORENABLED := true; //true - Monitor enabled for PS connection only + modulepar boolean PX_SIP_MW_PE_MONITORENABLED := true; //true - Monitor enabled for PE connection only modulepar boolean PX_SIP_MW_IS_MONITORENABLED := true; //true - Monitor enabled for IS connection only modulepar boolean PX_SIP_MW_PB_MONITORENABLED := true; //true - Monitor enabled for PB connection only modulepar boolean PX_SIP_MW_IB_MONITORENABLED := true; //true - Monitor enabled for IB connection only + modulepar boolean PX_SIP_MW_IE_MONITORENABLED := true; //true - Monitor enabled for IE connection only }//end group Mw - //A.8.* PIXIT items for the Isc Interface + //A.8.* PIXIT items for the Isc Interface //The Isc interface connects an S-CSCF with AS using the SIP and SDP protocols as defined in ETSI TS 124 229 [1]. group Isc{ - modulepar charstring PX_SIP_ISC_INTERFACENAME := "Isc"; //Isc interface between S-CSCF and AS - modulepar charstring PX_SIP_ISC_S_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98";// Isc IP address of S-CSCF - modulepar integer PX_SIP_ISC_S_CSCF_PORT := 5090;// Isc Port number of S-CSCF - modulepar charstring PX_SIP_ISC_AS_IPADDR := "fe80::21a:a0ff:fe07:98";// Isc IP address of AS - modulepar integer PX_SIP_ISC_AS_PORT := 5100;// Isc Port number of AS - modulepar boolean PX_SIP_ISC_MONITORENABLED := true; + modulepar charstring PX_SIP_ISC_INTERFACENAME := "Isc"; //Isc interface between S-CSCF and AS + modulepar charstring PX_SIP_ISC_S_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98";// Isc IP address of S-CSCF + modulepar integer PX_SIP_ISC_S_CSCF_PORT := 5090;// Isc Port number of S-CSCF + modulepar charstring PX_SIP_ISC_AS_IPADDR := "fe80::21a:a0ff:fe07:98";// Isc IP address of AS + modulepar integer PX_SIP_ISC_AS_PORT := 5100;// Isc Port number of AS + modulepar boolean PX_SIP_ISC_MONITORENABLED := true; }//end group Isc }//end group SIp group Diameter{ - //A.8.5 PIXIT items for the Cx Interface + //A.8.5 PIXIT items for the Cx Interface //The Cx interface connects an I- or S-CSCF with an HSS using the Diameter protocol as defined ETSI TS 129 228 [3] and ETSI TS 129 229 [4]. group Cx{ modulepar charstring PX_DIAMETER_CX_IH_INTERFACENAME := "Cx IH"; //Cx interface between I-CSCF and HSS modulepar charstring PX_DIAMETER_CX_SH_INTERFACENAME := "Cx SH"; //Cx interface between S-CSCF and HSS - modulepar charstring PX_DIAMETER_CX_I_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Charstring Cx IP address of I-CSCF + modulepar charstring PX_DIAMETER_CX_I_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Charstring Cx IP address of I-CSCF modulepar integer PX_DIAMETER_CX_I_CSCF_PORT := 3868; //Cx Port number of I-CSCF modulepar charstring PX_DIAMETER_CX_S_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Cx IP address of S-CSCF modulepar integer PX_DIAMETER_CX_S_CSCF_PORT := 3868; //Cx Port number of S-CSCF @@ -101,7 +111,7 @@ module LibIot_VxLTE_PIXITS { modulepar boolean PX_DIAMETER_CX_IH_MONITORENABLED := true; //true - Monitor enabled for IH connection only }//end group Cx - //A.8.6 PIXIT items for the Gx Interface + //A.8.6 PIXIT items for the Gx Interface //The Gx interface connects a PCRF with a PGW using the Diameter protocol as defined in ETSI TS 129 212 [8]. group Gx{ modulepar charstring PX_DIAMETER_GX_INTERFACENAME := "Gx"; //Gx interface between PCRF and PGW -- GitLab From 377e72798ee509782526bea481c4a0ee0d288055 Mon Sep 17 00:00:00 2001 From: juvancic Date: Tue, 30 May 2023 17:29:05 +0200 Subject: [PATCH 04/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_Templates.ttcn | 721 +++++++++++++----------- 1 file changed, 389 insertions(+), 332 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn index 99439e2..66b2e37 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn @@ -1,337 +1,394 @@ /* - * @author STF 574 - * @version $Id: LibIot_VxLTE_Templates.ttcn 1 2020-05-29 15:06:42Z pintar $ - * @desc This module provides Templates parameters which need to be - * changeable within validation + * @author STF 574 + * @version $Id: LibIot_VxLTE_Templates.ttcn 1 2020-05-29 15:06:42Z pintar $ + * @desc This module provides Templates parameters which need to be + * changeable within validation */ -module LibIot_VxLTE_Templates { +module LibIot_VxLTE_Templates { - import from LibIot_TypesAndValues - { - type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, - ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; - } - import from LibIot_VxLTE_PIXITS all; - - group VxLTEMonitorInterfaces_Templates{ - group EPC{ - group Diameter{ - template MonitorInterfaceInfo m_MonIntf_Diameter_S6a := - { - interfaceName := PX_DIAMETER_S6A_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "mme.epc.domain",//TODO: define as PIXIT - IpAddress := PX_DIAMETER_S6A_MME_IPADDR, - portNumbers := {PX_DIAMETER_S6A_MME_PORT} - }, - { - domainName := "hss.epc.domain", - IpAddress := PX_DIAMETER_S6A_HSS_IPADDR, - portNumbers := {PX_DIAMETER_S6A_HSS_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Diameter_S9 := - { - interfaceName := PX_DIAMETER_S9_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "hpcrf.epc.domain", - IpAddress := PX_DIAMETER_S9_H_PCRF_IPADDR, - portNumbers := {PX_DIAMETER_S9_H_PCRF_PORT} - }, - { - domainName := "vpcrf.epc.domain", - IpAddress := PX_DIAMETER_S9_V_PCRF_IPADDR, - portNumbers := {PX_DIAMETER_S9_V_PCRF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Diameter_Gx := - { - interfaceName := PX_DIAMETER_GX_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcrf.epc.domain", - IpAddress := PX_DIAMETER_GX_PCRF_IPADDR, - portNumbers := {PX_DIAMETER_GX_PCRF_PORT} - }, - { - domainName := "pgw.epc.domain", - IpAddress := PX_DIAMETER_GX_PGW_IPADDR, - portNumbers := {PX_DIAMETER_GX_PGW_PORT} - } - } - } - }; - }//end group Diameter - - }//end group EPC - - group IMS{ - - group Sip{ - template MonitorInterfaceInfo m_MonIntf_Sip_Gm_A := - { - interfaceName := PX_SIP_GMA_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_GMA_PCSCF_IPADDR, - portNumbers := {PX_SIP_GMA_PCSCF_PORT} - }, - { - domainName := omit, - IpAddress := PX_SIP_GMA_UE_IPADDR, - portNumbers := {PX_SIP_GMA_UE_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Gm_B := - { - interfaceName := PX_SIP_GMB_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_GMB_PCSCF_IPADDR, - portNumbers := {PX_SIP_GMB_PCSCF_PORT} - }, - { - domainName := omit, - IpAddress := PX_SIP_GMB_UE_IPADDR, - portNumbers := {PX_SIP_GMB_UE_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Ic := - { - interfaceName := PX_SIP_IC_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "ibcfa.ims.domain", - IpAddress := PX_SIP_IC_IBCF_A_IPADDR, - portNumbers := {PX_SIP_IC_IBCF_A_PORT} - }, - { - domainName := "ibcfb.ims.domain", - IpAddress := PX_SIP_IC_IBCF_B_IPADDR, - portNumbers := {PX_SIP_IC_IBCF_B_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PI:= - { - interfaceName := PX_SIP_MW_PI_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_MW_P_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_P_CSCF_PORT} - }, - { - domainName := "icscf.ims.domain", - IpAddress := PX_SIP_MW_I_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_I_CSCF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PS:= - { - interfaceName := PX_SIP_MW_PS_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_MW_P_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_P_CSCF_PORT} - }, - { - domainName := "scscf.ims.domain", - IpAddress := PX_SIP_MW_S_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_S_CSCF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_IS:= - { - interfaceName := PX_SIP_MW_IS_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "scscf.ims.domain", - IpAddress := PX_SIP_MW_I_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_I_CSCF_PORT} - }, - { - domainName := "icscf.ims.domain", - IpAddress := PX_SIP_MW_S_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_S_CSCF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_ISC:= - { - interfaceName := PX_SIP_ISC_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "scscf.ims.domain", - IpAddress := PX_SIP_ISC_S_CSCF_IPADDR, - portNumbers := {PX_SIP_ISC_S_CSCF_PORT} - }, - { - domainName := "as.ims.domain", - IpAddress := PX_SIP_ISC_AS_IPADDR, - portNumbers := {PX_SIP_ISC_AS_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PB:= - { - interfaceName := PX_SIP_MW_PB_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_MW_P_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_P_CSCF_PORT} - }, - { - domainName := "ibcf.ims.domain", - IpAddress := PX_SIP_MW_IBCF_IPADDR, - portNumbers := {PX_SIP_MW_IBCF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_IB:= - { - interfaceName := PX_SIP_MW_IB_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "icscf.ims.domain", - IpAddress := PX_SIP_MW_I_CSCF_IPADDR, - portNumbers := {PX_SIP_MW_I_CSCF_PORT} - }, - { - domainName := "ibcf.ims.domain", - IpAddress := PX_SIP_MW_IBCF_IPADDR, - portNumbers := {PX_SIP_MW_IBCF_PORT} - } - } - } - }; - }//end group Sip - - group Diameter{ - template MonitorInterfaceInfo m_MonIntf_Diameter_Rx := - { - interfaceName := PX_DIAMETER_RX_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "pcscf.ims.domain", - IpAddress := PX_DIAMETER_RX_P_CSCF_IPADDR, - portNumbers := {PX_DIAMETER_RX_P_CSCF_PORT} - }, - { - domainName := "pcrf.ims.domain", - IpAddress := PX_DIAMETER_RX_PCRF_IPADDR, - portNumbers := {PX_DIAMETER_RX_PCRF_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Diameter_Cx_IH := - { - interfaceName := PX_DIAMETER_CX_IH_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "icscf.ims.domain", - IpAddress := PX_DIAMETER_CX_I_CSCF_IPADDR, - portNumbers := {PX_DIAMETER_CX_I_CSCF_PORT} - }, - { - domainName := "hss.ims.domain", - IpAddress := PX_DIAMETER_CX_HSS_IPADDR, - portNumbers := {PX_DIAMETER_CX_HSS_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Diameter_Cx_SH := - { - interfaceName := PX_DIAMETER_CX_SH_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "scscf.ims.domain", - IpAddress := PX_DIAMETER_CX_S_CSCF_IPADDR, - portNumbers := {PX_DIAMETER_CX_S_CSCF_PORT} - }, - { - domainName := "hss.ims.domain", - IpAddress := PX_DIAMETER_CX_HSS_IPADDR, - portNumbers := {PX_DIAMETER_CX_HSS_PORT} - } - } - } - }; - - template MonitorInterfaceInfo m_MonIntf_Diameter_Sh := - { - interfaceName := PX_DIAMETER_SH_INTERFACENAME, - interfaceInfo := { - IpInterfaceInfo := { - { - domainName := "as.ims.domain", - IpAddress := PX_DIAMETER_SH_AS_IPADDR, - portNumbers := {PX_DIAMETER_SH_AS_PORT} - }, - { - domainName := "hss.ims.domain", - IpAddress := PX_DIAMETER_SH_HSS_IPADDR, - portNumbers := {PX_DIAMETER_SH_HSS_PORT} - } - } - } - }; - - }//end group Diameter - - }//end group IMS - - }//end group VxLTEMonitorInterfaces_Templates + import from LibIot_TypesAndValues + { + type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, + ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; + } + import from LibIot_VxLTE_PIXITS all; + + group VxLTEMonitorInterfaces_Templates{ + group EPC{ + group Diameter{ + template MonitorInterfaceInfo m_MonIntf_Diameter_S6a := + { + interfaceName := PX_DIAMETER_S6A_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "mme.epc.domain",//TODO: define as PIXIT + IpAddress := PX_DIAMETER_S6A_MME_IPADDR, + portNumbers := {PX_DIAMETER_S6A_MME_PORT} + }, + { + domainName := "hss.epc.domain", + IpAddress := PX_DIAMETER_S6A_HSS_IPADDR, + portNumbers := {PX_DIAMETER_S6A_HSS_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Diameter_S9 := + { + interfaceName := PX_DIAMETER_S9_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "hpcrf.epc.domain", + IpAddress := PX_DIAMETER_S9_H_PCRF_IPADDR, + portNumbers := {PX_DIAMETER_S9_H_PCRF_PORT} + }, + { + domainName := "vpcrf.epc.domain", + IpAddress := PX_DIAMETER_S9_V_PCRF_IPADDR, + portNumbers := {PX_DIAMETER_S9_V_PCRF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Diameter_Gx := + { + interfaceName := PX_DIAMETER_GX_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcrf.epc.domain", + IpAddress := PX_DIAMETER_GX_PCRF_IPADDR, + portNumbers := {PX_DIAMETER_GX_PCRF_PORT} + }, + { + domainName := "pgw.epc.domain", + IpAddress := PX_DIAMETER_GX_PGW_IPADDR, + portNumbers := {PX_DIAMETER_GX_PGW_PORT} + } + } + } + }; + }//end group Diameter + + }//end group EPC + + group IMS{ + + group Sip{ + template MonitorInterfaceInfo m_MonIntf_Sip_Gm_A := + { + interfaceName := PX_SIP_GMA_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_GMA_PCSCF_IPADDR, + portNumbers := {PX_SIP_GMA_PCSCF_PORT} + }, + { + domainName := omit, + IpAddress := PX_SIP_GMA_UE_IPADDR, + portNumbers := {PX_SIP_GMA_UE_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Gm_B := + { + interfaceName := PX_SIP_GMB_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_GMB_PCSCF_IPADDR, + portNumbers := {PX_SIP_GMB_PCSCF_PORT} + }, + { + domainName := omit, + IpAddress := PX_SIP_GMB_UE_IPADDR, + portNumbers := {PX_SIP_GMB_UE_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PSAP:= + { + interfaceName := PX_SIP_MW_PSAP_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_S_CSCF_IPADDR,//or PX_SIP_MW_IBCF_IPADDR//TODO:extend IPaddress to recordof + portNumbers := {PX_SIP_MW_S_CSCF_PORT} + }, + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_PSAP_IPADDR, + portNumbers := {PX_SIP_MW_PSAP_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Ic := + { + interfaceName := PX_SIP_IC_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ibcfa.ims.domain", + IpAddress := PX_SIP_IC_IBCF_A_IPADDR, + portNumbers := {PX_SIP_IC_IBCF_A_PORT} + }, + { + domainName := "ibcfb.ims.domain", + IpAddress := PX_SIP_IC_IBCF_B_IPADDR, + portNumbers := {PX_SIP_IC_IBCF_B_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PI:= + { + interfaceName := PX_SIP_MW_PI_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_P_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_P_CSCF_PORT} + }, + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_I_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_I_CSCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PS:= + { + interfaceName := PX_SIP_MW_PS_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_P_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_P_CSCF_PORT} + }, + { + domainName := "scscf.ims.domain", + IpAddress := PX_SIP_MW_S_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_S_CSCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PE:= + { + interfaceName := PX_SIP_MW_PE_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_P_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_P_CSCF_PORT} + }, + { + domainName := "ecscf.ims.domain", + IpAddress := PX_SIP_MW_E_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_E_CSCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_IS:= + { + interfaceName := PX_SIP_MW_IS_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ims.domain", + IpAddress := PX_SIP_MW_I_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_I_CSCF_PORT} + }, + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_S_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_S_CSCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_IE:= + { + interfaceName := PX_SIP_MW_IS_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ims.domain", + IpAddress := PX_SIP_MW_I_CSCF_IPADDR,//or PX_SIP_MW_S-CSCF_IPADDR//TODO:extend IPaddress to recordof + portNumbers := {PX_SIP_MW_I_CSCF_PORT,PX_SIP_MW_S_CSCF_PORT} + }, + { + domainName := "ecscf.ims.domain", + IpAddress := PX_SIP_MW_E_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_E_CSCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_ISC:= + { + interfaceName := PX_SIP_ISC_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ims.domain", + IpAddress := PX_SIP_ISC_S_CSCF_IPADDR, + portNumbers := {PX_SIP_ISC_S_CSCF_PORT} + }, + { + domainName := "as.ims.domain", + IpAddress := PX_SIP_ISC_AS_IPADDR, + portNumbers := {PX_SIP_ISC_AS_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PB:= + { + interfaceName := PX_SIP_MW_PB_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_P_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_P_CSCF_PORT} + }, + { + domainName := "ibcf.ims.domain", + IpAddress := PX_SIP_MW_IBCF_IPADDR, + portNumbers := {PX_SIP_MW_IBCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_IB:= + { + interfaceName := PX_SIP_MW_IB_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_I_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_I_CSCF_PORT} + }, + { + domainName := "ibcf.ims.domain", + IpAddress := PX_SIP_MW_IBCF_IPADDR, + portNumbers := {PX_SIP_MW_IBCF_PORT} + } + } + } + }; + }//end group Sip + + group Diameter{ + template MonitorInterfaceInfo m_MonIntf_Diameter_Rx := + { + interfaceName := PX_DIAMETER_RX_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_DIAMETER_RX_P_CSCF_IPADDR, + portNumbers := {PX_DIAMETER_RX_P_CSCF_PORT} + }, + { + domainName := "pcrf.ims.domain", + IpAddress := PX_DIAMETER_RX_PCRF_IPADDR, + portNumbers := {PX_DIAMETER_RX_PCRF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Diameter_Cx_IH := + { + interfaceName := PX_DIAMETER_CX_IH_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "icscf.ims.domain", + IpAddress := PX_DIAMETER_CX_I_CSCF_IPADDR, + portNumbers := {PX_DIAMETER_CX_I_CSCF_PORT} + }, + { + domainName := "hss.ims.domain", + IpAddress := PX_DIAMETER_CX_HSS_IPADDR, + portNumbers := {PX_DIAMETER_CX_HSS_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Diameter_Cx_SH := + { + interfaceName := PX_DIAMETER_CX_SH_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "scscf.ims.domain", + IpAddress := PX_DIAMETER_CX_S_CSCF_IPADDR, + portNumbers := {PX_DIAMETER_CX_S_CSCF_PORT} + }, + { + domainName := "hss.ims.domain", + IpAddress := PX_DIAMETER_CX_HSS_IPADDR, + portNumbers := {PX_DIAMETER_CX_HSS_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Diameter_Sh := + { + interfaceName := PX_DIAMETER_SH_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "as.ims.domain", + IpAddress := PX_DIAMETER_SH_AS_IPADDR, + portNumbers := {PX_DIAMETER_SH_AS_PORT} + }, + { + domainName := "hss.ims.domain", + IpAddress := PX_DIAMETER_SH_HSS_IPADDR, + portNumbers := {PX_DIAMETER_SH_HSS_PORT} + } + } + } + }; + + }//end group Diameter + + }//end group IMS + + }//end group VxLTEMonitorInterfaces_Templates } \ No newline at end of file -- GitLab From bfb7459ba1738477d763c57b1c0d9f538436b06a Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 09:14:43 +0200 Subject: [PATCH 05/84] Add psap entry --- ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index 237f831..0e1161a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -76,6 +76,8 @@ module AtsImsIot_TestConfiguration { const charstring c_s6a := "S6a"; //* interface monitor name Rx const charstring c_gx := "Gx"; + //* interface monitor name Mm/Mx/Mw + const charstring c_psap := "Psap"; } group mappingFunctions { -- GitLab From b3a7854430568ceecbf5dd1f8ad2fc8efd7c93e4 Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 09:27:41 +0200 Subject: [PATCH 06/84] added emergency config parameters/intefcaes --- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 32 +++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index a86c232..de189c1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -122,20 +122,23 @@ module AtsImsIot_TestSystem { type record CF_VXLTE_Interfaces{ SipInterfaceMonitor gmA optional, SipInterfaceMonitor gmB optional, - SipInterfaceMonitor ic optional, - SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - SipInterfaceMonitor mwPS optional, - SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF - SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF - SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF - SipInterfaceMonitor isc optional, - DiameterInterfaceMonitor cxIH optional, - DiameterInterfaceMonitor cxSH optional, - DiameterInterfaceMonitor gx optional, - DiameterInterfaceMonitor rx optional, - DiameterInterfaceMonitor s6a optional, - DiameterInterfaceMonitor s9 optional, - DiameterInterfaceMonitor sh optional + SipInterfaceMonitor mwPSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional } type record CF_ATT_old { @@ -162,4 +165,5 @@ module AtsImsIot_TestSystem { SipInterfaceMonitor gmB } } // end of g_release15 + } \ No newline at end of file -- GitLab From 45b22fdcbb8ac97c7b463889f20c62c279ff3800 Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 09:28:03 +0200 Subject: [PATCH 07/84] added emergency config parameters/intefcaes --- ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index 237f831..706c4b3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -1806,6 +1806,6 @@ module AtsImsIot_TestConfiguration { } // end of function f_cf_epc_call_rel15_down - } // end group g_release15 + } // end group g_release15 } \ No newline at end of file -- GitLab From 1272237e7de55c36ed27fc3b039baf234cb8a1e2 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 11:47:32 +0200 Subject: [PATCH 08/84] Finalyze TD_VoLTE_ECO_INT_INI_01_01 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 288 +++++++++++- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 428 +++++++++++++++++ .../AtsImsIot_TP_behavior_MW_EC.ttcn | 433 ++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 257 +++++++++++ 4 files changed, 1392 insertions(+), 14 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ab2dbcb..4c3eb52 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_Emergency { // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; @@ -26,6 +26,8 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_PS all; import from AtsImsIot_TP_behavior_MW_SI all; import from AtsImsIot_TP_behavior_MW_IS all; + import from AtsImsIot_TP_behavior_MW_EC all; + import from AtsImsIot_TP_behavior_MW_EB all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; import from AtsImsIot_TP_behavior_GX all; @@ -115,7 +117,7 @@ module AtsImsIot_Emergency { f_cf_adapter_down ( ); }else{ //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); } } // End of testcase TD_VoLTE_ECO_INT_REG_01 @@ -171,7 +173,7 @@ module AtsImsIot_Emergency { f_cf_adapter_down ( ); }else{ //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); } } // End of testcase TD_VoLTE_ECO_INT_REG_02 @@ -182,15 +184,262 @@ module AtsImsIot_Emergency { */ group EmergencySessionEmergencyBearerOperations { - } // End of group EmergencySessionEmergencyBearerOperations - - /** - * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration - */ - group EmergencyNetworkDetachment { - group EmergencySessionEstablishment { + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option1: IBCF is connect to another network and the interface between the IBCF and the PSAP is the Ic interface + */ + testcase TD_VoLTE_ECO_INT_INI_01_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble +// f_mtc_userRegistration(v_ueA, v_userInfoA); +// f_mtc_userRegistration(v_psap, v_userInfoB); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 32 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_01_01 + + group f_TD_VoLTE_ECO_INT_INI_01_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01 + + } // End of f_TD_VoLTE_ECO_INT_INI_01_01 + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, v_sip); + + f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // INVITE Event 12 + + // 183 Session Progress + f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + // PRACK after 183 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + //f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 + // FIXME f_mtc_check_TP_???_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + // PRACK after 180 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + // f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + //f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + //f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 25 + f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + // FIXME f_mtc_check_TP_???_2XXRESP_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + // FIXME f_mtc_check_TP_???_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 32 + f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_01_02 + + group f_TD_VoLTE_ECO_INT_INI_01_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_TD_VoLTE_ECO_INT_INI_01_02 + + } // End of f_TD_VoLTE_ECO_INT_INI_01 + } // End of group EmergencySessionEstablishment group EmergencySessionRelease { @@ -201,6 +450,17 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionAbortOrReject + } // End of group EmergencySessionEmergencyBearerOperations + + /** + * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration + */ + group EmergencyNetworkDetachment { + + group EmergencySessionDetachment { + + } // End of group EmergencySessionDetachment + } // End of group EmergencyNetworkDetachment } // End of group Interoperability diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn new file mode 100644 index 0000000..850ca5a --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -0,0 +1,428 @@ +/** + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at E-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MW_EB { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_MW_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 100_Trying + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_IBCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the E-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_IBCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the E-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_IBCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_EP_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the E-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn new file mode 100644 index 0000000..83ca8b7 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -0,0 +1,433 @@ +/** + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF + */ + +module AtsImsIot_TP_behavior_MW_EC { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_ECSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_ECSCF_INVITE_01 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 100_Trying + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_ECSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_ECSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_ECSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_ECSCF_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 4d82cc0..64b7ee0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -891,4 +891,261 @@ module AtsImsIot_Templates_MW { } // End of group g_icscf + group g_ecscf { + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_INVITE_02 + + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_MW_ECSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_INVITE_01 := { + } // End of template mw_TP_MW_ECSCF_RE_INVITE_02 + + template (present) Response mw_TP_MW_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_100Trying_01 + + template (present) Response mw_TP_MW_ECSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_100Trying_01 := { + } // End of template mw_TP_MW_ECSCF_100Trying_02 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MW_ECSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_180Ringing_01 := { + } // End of template mw_TP_MW_ECSCF_180Ringing_02 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_ECSCF_183SessionProgress_01 + + template (present) Response mw_TP_MW_ECSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_183SessionProgress_01 := { + } // End of template mw_TP_MW_ECSCF_183SessionProgress_02 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_ECSCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_ECSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_ECSCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_ECSCF_ACK_02 + + } + + group g_ibcf { + + /** + * @desc INVITE Request checking TP_MW_IBCF_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MW_IBCF_INVITE_01 (template (present) SipUrl p_ECSCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_ECSCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_ECSCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MW_IBCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_100Trying_01 + + template (present) Response mw_TP_MW_IBCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_180Ringing_01 + + template (present) Response mw_TP_MW_IBCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MW_IBCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MW_IBCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_ACK_01 + + template (present) ACK_Request mw_TP_MW_IBCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_IBCF_ACK_01 := { + msgHeader := { + route := omit + } + } // End of template mw_TP_MW_IBCF_ACK_02 + + } + } // End of module AtsImsIot_Templates_MW \ No newline at end of file -- GitLab From ff98c218d533178c14a96e33fd7108d38cb7a7cb Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 11:52:22 +0200 Subject: [PATCH 09/84] Finalyze TD_VoLTE_ECO_INT_INI_01_01 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 1 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 33 ++++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn | 67 -------------------- 3 files changed, 34 insertions(+), 67 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn delete mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 4c3eb52..f7e4da1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -28,6 +28,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_IS all; import from AtsImsIot_TP_behavior_MW_EC all; import from AtsImsIot_TP_behavior_MW_EB all; + import from AtsImsIot_TP_behavior_MM all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; import from AtsImsIot_TP_behavior_GX all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn new file mode 100644 index 0000000..c071450 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -0,0 +1,33 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MM interface + */ +module AtsImsIot_TP_behavior_MM { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_GM all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + +} // end module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn deleted file mode 100644 index 69203d7..0000000 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW.ttcn +++ /dev/null @@ -1,67 +0,0 @@ -/* - * @author STF 574 - * @version $Id$ - * @desc This module provides the TP behaviour functions at MW interface - */ -// FIXME To be removed, use AtsImsIot_TP_behavior_MW_PS, AtsImsIot_TP_behavior_MW_SI and AtsImsIot_TP_behavior_MW_IS to prevent very huge module -//module AtsImsIot_TP_behavior_MW -//{ -// -// import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator; } -// import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} -// import from AtsImsIot_Templates {template all;} -// import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } -// import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; -// import from LibIms_UpperTester {type ImsUserInfo;} -// import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} -// import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } -// import from LibSip_SIPTypesAndValues all; -// import from LibSip_Templates all; -// -// import from LibSip_Common { -// type -// GenericParam, -// SemicolonParam_List -// } -// -// import from AtsImsIot_Functions all; -// import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} -// // LibSip -// import from LibSip_SDPTypes { type SDP_media_desc_list }; -// // LibMsrp -// import from LibMsrp_TypesAndValues { type MsrpURI }; -// import from LibMsrp_Functions { function f_str2msrpUri }; -// import from LibMsrp_Templates { -// template -// m_msrpSend_Dummy, mw_msrpSEND_toPath_fromPath_contentType, -// m_msrpReport_Dummy, mw_msrpREPORT_success, -// m_msrpResponse_Dummy, mw_msrpResponse_toPath_fromPath, -// mw_toPath, mw_fromPath, mw_msrpResponse_toPath_fromPath_with_transferReports, -// m_msrpURIs_ToPath_Dummy, m_msrpURIs_FromPath_Dummy, -// mw_contentType -// }; -// import from DiameterS6a_Templates all; -// import from DiameterS6a_PIXITS all; -// import from DiameterGx_Templates all; -// // LibDiameter -// import from LibDiameter_Templates all; -//// import from DiameterRx_Templates all; -// -// -// -//group g_PCSCF { -// -// -//} // end group g_PCSCF -// -//group g_ICSCF { -// -// -//} // end group g_ICSCF -// -//group g_SCSCF { -// -// -//} // end group g_SCSCF -// -//} // end module AtsImsIot_TP_behavior_MW \ No newline at end of file -- GitLab From 55397b934ef82db8f2c7b87e87568ff36250abdd Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:09:27 +0200 Subject: [PATCH 10/84] added emergency config parameters/intefcaes --- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index de189c1..011bf0a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -122,7 +122,9 @@ module AtsImsIot_TestSystem { type record CF_VXLTE_Interfaces{ SipInterfaceMonitor gmA optional, SipInterfaceMonitor gmB optional, - SipInterfaceMonitor mwPSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP SipInterfaceMonitor ic optional, SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used SipInterfaceMonitor mwPS optional, -- GitLab From 629d4deb50116afedf9715c60b4aa6f834973b9e Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:09:46 +0200 Subject: [PATCH 11/84] added emergency config parameters/intefcaes --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 46 ++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ab2dbcb..ed04df0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -47,7 +47,51 @@ module AtsImsIot_Emergency { group NetworkAttachment { group UENetworkAttachmentWithUSIM { - + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VxLTE_INT_ATT_01 } // End of group UENetworkAttachmentWithUSIM group UENetworkAttachmentWithoutUSIM { -- GitLab From deda1f1d6fc1178e5a8d17e719b079df62f5a3c0 Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:10:01 +0200 Subject: [PATCH 12/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_Templates.ttcn | 46 ++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn index 66b2e37..12cc045 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn @@ -118,15 +118,15 @@ module LibIot_VxLTE_Templates { } }; - template MonitorInterfaceInfo m_MonIntf_Sip_Mw_PSAP:= + template MonitorInterfaceInfo m_MonIntf_Sip_MmB_PSAP:= { - interfaceName := PX_SIP_MW_PSAP_INTERFACENAME, + interfaceName := PX_SIP_MM_B_PSAP_INTERFACENAME, interfaceInfo := { IpInterfaceInfo := { { domainName := "pcscf.ims.domain", - IpAddress := PX_SIP_MW_S_CSCF_IPADDR,//or PX_SIP_MW_IBCF_IPADDR//TODO:extend IPaddress to recordof - portNumbers := {PX_SIP_MW_S_CSCF_PORT} + IpAddress := PX_SIP_MW_IBCF_IPADDR, + portNumbers := {PX_SIP_MW_IBCF_PORT} }, { domainName := "icscf.ims.domain", @@ -136,6 +136,44 @@ module LibIot_VxLTE_Templates { } } }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Mw_EB:= + { + interfaceName := PX_SIP_MW_EB_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_E_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_E_CSCF_PORT} + }, + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_IBCF_IPADDR, + portNumbers := {PX_SIP_MW_IBCF_PORT} + } + } + } + }; + + template MonitorInterfaceInfo m_MonIntf_Sip_MwS_PSAP:= + { + interfaceName := PX_SIP_MW_S_PSAP_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "pcscf.ims.domain", + IpAddress := PX_SIP_MW_S_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_S_CSCF_PORT} + }, + { + domainName := "icscf.ims.domain", + IpAddress := PX_SIP_MW_PSAP_IPADDR, + portNumbers := {PX_SIP_MW_PSAP_PORT} + } + } + } + }; template MonitorInterfaceInfo m_MonIntf_Sip_Ic := { -- GitLab From 6fd1f5426495ab0dc09db5bf056d51a4d02eaa2d Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:10:18 +0200 Subject: [PATCH 13/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn index 03225dd..934c366 100644 --- a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn @@ -52,7 +52,9 @@ module LibIot_VxLTE_PIXITS { //A.8.4 PIXIT items for the Mw Interface //The Mw interface connects an x-CSCF with another x-CSCF or an IBCF using the SIP and SDP protocols as defined in ETSI TS 124 229 [1]. group Mw{ - modulepar charstring PX_SIP_MW_PSAP_INTERFACENAME := "Mw PSAP"; //MwMmMx interface between E,S-CSCF and PSAP + modulepar charstring PX_SIP_MM_B_PSAP_INTERFACENAME := "Mm IBCF PSAP"; //Mm interface between IBCF and PSAP + modulepar charstring PX_SIP_MW_EB_INTERFACENAME := "Mw ECSCF IBCF"; //Mw interface between ECSCF and IBCF + modulepar charstring PX_SIP_MW_S_PSAP_INTERFACENAME := "Mw SCSCF PSAP"; //Mw interface between S-CSCF and PSAP modulepar charstring PX_SIP_MW_PI_INTERFACENAME := "Mw PI"; //Mw interface between P-CSCF and I-CSCF modulepar charstring PX_SIP_MW_PS_INTERFACENAME := "Mw PS"; //Mw interface between P-CSCF and S-CSCF modulepar charstring PX_SIP_MW_PE_INTERFACENAME := "Mw PE"; //Mw interface between P-CSCF and E-CSCF @@ -72,7 +74,9 @@ module LibIot_VxLTE_PIXITS { modulepar integer PX_SIP_MW_E_CSCF_PORT := 5095; //Mw Port number of E-CSCF modulepar charstring PX_SIP_MW_IBCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of IBCF modulepar integer PX_SIP_MW_IBCF_PORT := 5050; //Mw Port number of IBCF - modulepar boolean PX_SIP_MW_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only + modulepar boolean PX_SIP_MM_B_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only + modulepar boolean PX_SIP_MW_EB_MONITORENABLED := true; //true - Monitor enabled for PE connection only + modulepar boolean PX_SIP_MW_S_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only modulepar boolean PX_SIP_MW_PI_MONITORENABLED := true; //true - Monitor enabled for PI connection only modulepar boolean PX_SIP_MW_PS_MONITORENABLED := true; //true - Monitor enabled for PS connection only modulepar boolean PX_SIP_MW_PE_MONITORENABLED := true; //true - Monitor enabled for PE connection only -- GitLab From 47d0f7f927706a0a164252001994f5663a9fa148 Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:10:27 +0200 Subject: [PATCH 14/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_Functions.ttcn | 93 +++++++++++++++++++------ 1 file changed, 73 insertions(+), 20 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn index 2a0754e..2de6b27 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -54,9 +54,15 @@ module LibIot_VxLTE_Functions { if (PX_SIP_GMB_MONITORENABLED == true){ vc_MonIntfList.gmB := valueof(m_MonIntf_Sip_Gm_B); } - if (PX_SIP_MW_PSAP_MONITORENABLED == true){ - vc_MonIntfList.mwPSAP := valueof(m_MonIntf_Sip_Mw_PSAP); - } + if (PX_SIP_MM_B_PSAP_MONITORENABLED == true){ + vc_MonIntfList.mmB_PSAP := valueof(m_MonIntf_Sip_MmB_PSAP); + } + if (PX_SIP_MW_EB_MONITORENABLED == true){ + vc_MonIntfList.mwEB := valueof(m_MonIntf_Sip_Mw_EB); + } + if (PX_SIP_MW_S_PSAP_MONITORENABLED == true){ + vc_MonIntfList.mwS_PSAP := valueof(m_MonIntf_Sip_MwS_PSAP); + } if (PX_SIP_IC_MONITORENABLED == true){ vc_MonIntfList.ic := valueof(m_MonIntf_Sip_Ic); } @@ -124,9 +130,15 @@ module LibIot_VxLTE_Functions { vc_vxlte_monitor_components.gmB := f_cf_create_monitor_sip ( vc_MonIntfList.gmB); } - if (isvalue(vc_MonIntfList.mwPSAP)){ - vc_vxlte_monitor_components.mwPSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mwPSAP); - } + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + vc_vxlte_monitor_components.mmB_PSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mmB_PSAP); + } + if (isvalue(vc_MonIntfList.mwEB)){ + vc_vxlte_monitor_components.mwEB := f_cf_create_monitor_sip ( vc_MonIntfList.mwEB); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + vc_vxlte_monitor_components.mwS_PSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mwS_PSAP); + } if (isvalue(vc_MonIntfList.ic)){ vc_vxlte_monitor_components.ic := f_cf_create_monitor_sip ( vc_MonIntfList.ic); } @@ -211,16 +223,33 @@ module LibIot_VxLTE_Functions { ))); } - if (isvalue(vc_MonIntfList.mwPSAP)){ - f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwPSAP); - vc_vxlte_monitor_components.mwPI.start(f_cf_setFilter( + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mmB_PSAP); + vc_vxlte_monitor_components.mmB_PSAP.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, - {vc_MonIntfList.mwPSAP.interfaceInfo} + {vc_MonIntfList.mmB_PSAP.interfaceInfo} ) ))); } - + if (isvalue(vc_MonIntfList.mwEB)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwEB); + vc_vxlte_monitor_components.mwEB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwEB.interfaceInfo} + ) + ))); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwS_PSAP); + vc_vxlte_monitor_components.mwS_PSAP.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mwS_PSAP.interfaceInfo} + ) + ))); + } if (isvalue(vc_MonIntfList.ic)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.ic); vc_vxlte_monitor_components.ic.start(f_cf_setFilter( @@ -394,9 +423,15 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.gmB)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.gmB); } - if (isvalue(vc_MonIntfList.mwPSAP)){ - f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwPSAP); + if (isvalue(vc_MonIntfList.mmB_PSAP)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mmB_PSAP); } + if (isvalue(vc_MonIntfList.mwEB)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwEB); + } + if (isvalue(vc_MonIntfList.mwS_PSAP)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwS_PSAP); + } if (isvalue(vc_MonIntfList.ic)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.ic); } @@ -488,7 +523,9 @@ module LibIot_VxLTE_Functions { if ((isvalue(vc_MonIntfList.gmA)) and (vc_MonIntfList.gmA.interfaceName==p_interfaceName)){ return true;} //if ((isvalue(vc_MonIntfList.gmB)) and (vc_MonIntfList.gmB.interfaceName==p_interfaceName)){ return true;} - if ((isvalue(vc_MonIntfList.mwPSAP)) and (vc_MonIntfList.mwPSAP.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mmB_PSAP)) and (vc_MonIntfList.mmB_PSAP.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwEB)) and (vc_MonIntfList.mwEB.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwS_PSAP)) and (vc_MonIntfList.mwS_PSAP.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.ic)) and (vc_MonIntfList.ic.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwPI)) and (vc_MonIntfList.mwPI.interfaceName==p_interfaceName)){ return true;} @@ -531,7 +568,7 @@ module LibIot_VxLTE_Functions { var InterfaceAvailableList v_VxLTE_MonIntf_Available; var InterfaceAvailable v_InterfaceAvailable; - var SipInterfaceMonitor v_gmA, v_gmB, v_mwPSAP, v_ic, v_mwPI, v_mwPS, v_mwPE, v_mwSI, v_mwPB, v_mwIB, v_mwIE, v_isc; + var SipInterfaceMonitor v_gmA, v_gmB, v_mmBPSAP, v_mwEB, v_mwSPSAP, v_ic, v_mwPI, v_mwPS, v_mwPE, v_mwSI, v_mwPB, v_mwIB, v_mwIE, v_isc; var DiameterInterfaceMonitor v_cxIH, v_cxSH, v_gx, v_rx, v_s6a, v_s9, v_sh; if (PX_SIP_GMA_MONITORENABLED == true){ @@ -548,14 +585,30 @@ module LibIot_VxLTE_Functions { v_gmB := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Gm_B)/*PX_SIP_GMB_INTERFACENAME*/); f_cf_monitor_up_sip(v_gmB); } - if (PX_SIP_MW_PSAP_MONITORENABLED == true){ + if (PX_SIP_MM_B_PSAP_MONITORENABLED == true){ - v_InterfaceAvailable.interfaceName := PX_SIP_MW_PSAP_INTERFACENAME; - v_InterfaceAvailable.available := PX_SIP_MW_PSAP_MONITORENABLED; + v_InterfaceAvailable.interfaceName := PX_SIP_MM_B_PSAP_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MM_B_PSAP_MONITORENABLED; v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); - v_mwPSAP := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_PSAP)/*PX_SIP_MW_PSAP_INTERFACENAME*/ ); - f_cf_monitor_up_sip(v_mwPSAP); + v_mmBPSAP := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_MmB_PSAP)/*PX_SIP_MW_PSAP_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mmBPSAP); } + if (PX_SIP_MW_EB_MONITORENABLED == true){ + + v_InterfaceAvailable.interfaceName := PX_SIP_MW_EB_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MW_EB_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mwEB := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_EB)/*PX_SIP_MW_PI_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mwEB); + } + if (PX_SIP_MW_S_PSAP_MONITORENABLED == true){ + + v_InterfaceAvailable.interfaceName := PX_SIP_MW_S_PSAP_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_MW_S_PSAP_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mwSPSAP := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_MwS_PSAP)/*PX_SIP_MW_PSAP_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mwSPSAP); + } if (PX_SIP_IC_MONITORENABLED == true){ v_InterfaceAvailable.interfaceName := PX_SIP_IC_INTERFACENAME; v_InterfaceAvailable.available := PX_SIP_IC_MONITORENABLED; -- GitLab From d0c21c5ebc89203a9322fde25dc67a44bc7dbf6a Mon Sep 17 00:00:00 2001 From: juvancic Date: Wed, 31 May 2023 12:10:44 +0200 Subject: [PATCH 15/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_TypesAndValues.ttcn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn index 9960607..f8a5c88 100644 --- a/ttcn/LibIot/LibIot_TypesAndValues.ttcn +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -100,7 +100,9 @@ module LibIot_TypesAndValues { type record VxLTEMonitorInterfaceList{ MonitorInterfaceInfo gmA optional, MonitorInterfaceInfo gmB optional, - MonitorInterfaceInfo mwPSAP optional,// MwMmMx interface at E,SCSCF to PSAP + MonitorInterfaceInfo mmB_PSAP optional,// Mm interface at IBCF to PSAP + MonitorInterfaceInfo mwEB optional,// Mw interface at ECSCF to IBCF + MonitorInterfaceInfo mwS_PSAP optional,// Mw interface at SCSCF to PSAP MonitorInterfaceInfo ic optional, MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used MonitorInterfaceInfo mwPS optional, -- GitLab From 914b5a639a58a2ad419eb847cd53764948cada67 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 12:15:52 +0200 Subject: [PATCH 16/84] Inteface issues fixed in TD_VoLTE_ECO_INT_INI_01_01 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 50 +++++++------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 73 +++++++++++++++++++- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 31 +++++++++ 3 files changed, 126 insertions(+), 28 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index f7e4da1..75e0dba 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -38,7 +38,6 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_SH all; import from AtsImsIot_TP_behavior_RX all; - /** * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) */ @@ -242,8 +241,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) @@ -251,7 +250,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 14 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -262,7 +261,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 23 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -274,13 +273,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 27 + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 32 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 @@ -349,7 +348,7 @@ module AtsImsIot_Emergency { //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -364,20 +363,21 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mw??, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mw??, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // INVITE Event 12 + f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // 183 Session Progress f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 // PRACK after 183 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 //Rx/Gx exchange after 183(SDP) was received at P-CSCF @@ -386,31 +386,31 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 - // FIXME f_mtc_check_TP_???_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 24 + f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + // FIXME f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 // PRACK after 180 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_PCSCF_PRACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 15 + // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - //f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 - //f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 25 - f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + //f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 26 + //f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 25 + f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.mwB_PSAP); // 200 OK – Event 26 // FIXME f_mtc_check_TP_???_2XXRESP_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 28 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPS, -, v_sip); // Event 31 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 // FIXME f_mtc_check_TP_???_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index c071450..bbee515 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -5,7 +5,7 @@ */ module AtsImsIot_TP_behavior_MM { - // LibIms + // LibIms import from LibIms_Templates all; import from LibIms_UpperTester all; // LibIot @@ -24,10 +24,77 @@ module AtsImsIot_TP_behavior_MM { import from LibMsrp_Templates all; // AtsImsIot import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; import from AtsImsIot_Templates all; - import from AtsImsIot_Templates_GM all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; - + + group imsInvite { + + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the PSAP entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_EBCF_A entity + * } + * then { + * the PSAP entity sends an 100_Trying + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_PSAP_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_PSAP_INVITE_01 + + } // End of group imsInvite } // end module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn new file mode 100644 index 0000000..2fbd11a --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -0,0 +1,31 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MM interface + */ +module AtsImsIot_Templates_MM { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + +} // End of module AtsImsIot_Templates_MM -- GitLab From 388568b83efa3c3113213864d3ceaf736746b587 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 12:20:12 +0200 Subject: [PATCH 17/84] Inteface issues fixed in TD_VoLTE_ECO_INT_INI_01_01 --- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 4 ++-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn | 6 +++--- ttcn/LibIot/LibIot_PIXITS.ttcn | 7 +++++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index bbee515..b0586e4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -70,7 +70,7 @@ module AtsImsIot_TP_behavior_MM { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -78,7 +78,7 @@ module AtsImsIot_TP_behavior_MM { { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 83ca8b7..f1a840e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -82,7 +82,7 @@ module AtsImsIot_TP_behavior_MW_EC { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -90,7 +90,7 @@ module AtsImsIot_TP_behavior_MW_EC { { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, @@ -335,7 +335,7 @@ module AtsImsIot_TP_behavior_MW_EC { in SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_EUT_B); // Check the 200 OK p_monitorCompRef.start( diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn index f5112ac..04018fe 100644 --- a/ttcn/LibIot/LibIot_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -281,6 +281,13 @@ module LibIot_PIXITS { modulepar integer PX_EUT_B_B2 := 2; + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for PSAP + * + */ + modulepar integer PX_PSAP := 3; + /** * * @desc Selects if interfaces should be considered in the evaluation -- GitLab From bbaee712fcf818d6719f4d7f680a787d3ce5aeaf Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 12:50:13 +0200 Subject: [PATCH 18/84] Finalyze TD_VoLTE_ECO_INT_INI_01_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 344 +++++++++++++++++- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 103 ++++++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 12 - 5 files changed, 448 insertions(+), 27 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 92c1276..1697f60 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -411,7 +411,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 - f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); + f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 @@ -430,8 +430,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_1XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 - // FIXME f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -444,16 +444,14 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - //f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 26 - //f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.mwB_PSAP, true); // 200 OK – Event 25 - f_mtc_check_TP_MM_PSAP_2XXRESP_03(vc_vxlte_monitor_components.mwB_PSAP); // 200 OK – Event 26 - // FIXME f_mtc_check_TP_???_2XXRESP_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - // FIXME f_mtc_check_TP_???_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index b0586e4..445028a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -32,7 +32,7 @@ module AtsImsIot_TP_behavior_MM { group imsInvite { /** - * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * @desc Verify that the IBCF successfully processes an initial INVITE (Originating Leg).. * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -43,7 +43,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the PSAP entity receives an INVITE containing + * the IMS_IBCF_A entity receives an INVITE containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_PSAP_SIP_URI, * CallId indicating value PX_UE_A_CALLID, @@ -55,11 +55,22 @@ module AtsImsIot_TP_behavior_MM { * Version indicating value "0" * ; * ;; - * from the IMS_EBCF_A entity + * from the IMS_E_CSCF_A entity * } * then { - * the PSAP entity sends an 100_Trying - * to the IMS_IBCF_A entity + * the IMS_IBCF_A entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the PSAP entity * } * } */ @@ -97,4 +108,325 @@ module AtsImsIot_TP_behavior_MM { } // End of group imsInvite -} // end module AtsImsIot_TP_behavior_MM \ No newline at end of file + group ims100Trying { + + /** + * @desc Verify that the IBCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_IBCF_A entity receives a 100_Trying + * from the PSAP entity + * } + * then { + * the IMS_IBCF_A entity sends a 100_Trying + * to the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_IBCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the IBCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_IBCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_IBCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MM_PSAP_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MM_PSAP_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the IBCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_IBCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_IBCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MM_PSAP_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MM_PSAP_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the IBCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_IBCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the PSAP entity + * } + * then { + * the IMS_IBCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MM_PSAP_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MM_PSAP_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the IBCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_IBCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_IBCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_PSAP_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MM_PSAP_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_ACK_01 + + } // End of group imsAck + +} // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 850ca5a..d8148b1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -297,7 +297,7 @@ module AtsImsIot_TP_behavior_MW_EB { * Expected behaviour * ensure that { * when { - * the IMS_EP_CSCF_A entity receives a 200_Ok containing + * the IMS_E_CSCF_A entity receives a 200_Ok containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 2fbd11a..4a48304 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -28,4 +28,107 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; + /** + * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MM_PSAP_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_100Trying_01 + + template (present) Response mw_TP_MM_PSAP_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_180Ringing_01 + + template (present) Response mw_TP_MM_PSAP_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MM_PSAP_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MM_PSAP_ACK_01 + } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 64b7ee0..96595a8 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -1133,18 +1133,6 @@ module AtsImsIot_Templates_MW { } } } // End of template mw_TP_MW_IBCF_ACK_01 - - template (present) ACK_Request mw_TP_MW_IBCF_ACK_02( // TODO To be enforced - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) SipUrl p_ack_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_IBCF_ACK_01 := { - msgHeader := { - route := omit - } - } // End of template mw_TP_MW_IBCF_ACK_02 } -- GitLab From 93e3ad91dceb0bd5333ff24f4bc11eb5e3ffdf5d Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Wed, 31 May 2023 14:17:43 +0200 Subject: [PATCH 19/84] Finalyze TD_VoLTE_ECO_INT_INI_01_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 27 +++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1697f60..5c2d43f 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -386,7 +386,7 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // Preamble - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -476,12 +476,31 @@ module AtsImsIot_Emergency { group f_TD_VoLTE_ECO_INT_INI_01_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_TD_VoLTE_ECO_INT_INI_01_02 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02 - } // End of f_TD_VoLTE_ECO_INT_INI_01 + } // End of group f_TD_VoLTE_ECO_INT_INI_01_02 + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option3: IBCF is connected to the PSTN network + */ + testcase TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator system IotSystemInterface { + + } // End of TC TD_VoLTE_ECO_INT_INI_01_03 + + group f_TD_VoLTE_ECO_INT_INI_01_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03 + + } // End of group f_TD_VoLTE_ECOf_TD_VoLTE_ECO_INT_INI_01_03_INT_INI_01 } // End of group EmergencySessionEstablishment -- GitLab From 2f3ad8424dcadcb69c6bd30b49dfbbabdc3525eb Mon Sep 17 00:00:00 2001 From: pintar Date: Wed, 31 May 2023 15:15:14 +0200 Subject: [PATCH 20/84] New TP for Gx and configuration updates --- test_purposes/Cx/TP_CX.tplan2 | 6 ++--- test_purposes/Gx/TP_GX.tplan2 | 43 ++++++++++++++++++++++++++++++--- test_purposes/Rx/TP_RX.tplan2 | 6 ++--- test_purposes/S6a/TP_S6A.tplan2 | 2 +- test_purposes/Sip_Common.tplan2 | 33 +++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 11 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 20bdf54..317cdfe 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -29,7 +29,7 @@ Package TP_CX { "TS 129 228 [4], clause 6.1.1 and tables 6.1.1.1 and 6.1.1.2", "TS 129 229 [5], clauses 6.1.1 and 6.1.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -81,7 +81,7 @@ Package TP_CX { Reference "TS 129 228 [4], clause 6.1.1.1" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -120,7 +120,7 @@ Package TP_CX { "TS 129 228 [4], clause 6.1.2", "TS 129 229 [5], clauses 6.1.3 and 6.1.4" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index 0e22af9..d7db5b0 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -29,7 +29,7 @@ Package TP_GX { Reference "TS 129 212 [9], clauses 4.5.15.2.1" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -70,15 +70,50 @@ Package TP_GX { } } // End of TP_GX_PCRF_ECO_CCA_01 + + + Test Purpose { + TP Id TP_GX_PCRF_ECO_CCA_02 + //TP_EPC_7004_01 and TP_EPC_7004_02 from TS 103 029 V5.1.1 + Test objective "Verify that IUT when receives CC-Request for PCC Rules sends a CC-Answer in case of emergency detachment procedure." + + Reference + "TS 129 212 [9], clause 4.5.15.2.4" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A + } + + Expected behaviour + ensure that { + when { + the EPC_PGW_A entity sends an CCR containing + CC_Request_Type_AVP + indicating value TERMINATION_REQUEST; + to the EPC_PCRF_A entity + } + then { + the EPC_PCRF_A entity sends the CCA containing + Result_Code_AVP + indicating value DIAMETER_SUCCESS; + to the EPC_PGW_A entity + } + } + } // End of TP_GX_PCRF_ECO_CCA_02 + Test Purpose { - TP Id TP_GX_PCRF_CCA_02 + TP Id TP_GX_PCRF_EMC_CCA_01 - Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency services sends a CC-Answer in case of attachment procedure." + Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency call sends a CC-Answer in case of attachment procedure." Reference "TS 129 212 [9], clauses 4.5.15.2.1" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 index 9489a2b..a2a924a 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -29,7 +29,7 @@ Package TP_RX { Reference "TS 129 214 [8], Annex A.5" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -69,7 +69,7 @@ Package TP_RX { Reference "TS 129 214 [8], Annex A.5" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -108,7 +108,7 @@ Package TP_RX { Reference "TS 129 214 [8], Annex A.5" //clauses 4.4.1, A.1, A.2 and annex B" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index 25fafe6..b33fcf8 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -29,7 +29,7 @@ Package TP_S6A { Reference "TS 129 272 [10], clause 5.2.1.1.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 63ab6e5..f42aa2a 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -183,6 +183,23 @@ Package Sip_Common { connection between IMS_S_CSCF_A.g and IMS_AS_A.g ; + Test Configuration CF_VoLTE_INT_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_A of type SipComponent + SUT component IMS_S_CSCF_A of type SipComponent + SUT component IMS_I_CSCF_A of type SipComponent + SUT component IMS_AS_A of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + connection between UE_A.g and IMS_P_CSCF_A.g + connection between IMS_P_CSCF_A.g and IMS_S_CSCF_A.g + connection between IMS_S_CSCF_A.g and IMS_I_CSCF_A.g + connection between IMS_I_CSCF_A.g and IMS_IBCF_A.g + connection between IMS_IBCF_A.g and IMS_IBCF_B.g + connection between IMS_S_CSCF_A.g and IMS_AS_A.g + ; + Test Configuration CF_VxLTE_RMI containing SUT component UE_A of type SipComponent @@ -199,6 +216,22 @@ Package Sip_Common { connection between IMS_IBCF_B.g and IMS_IBCF_A.g ; + Test Configuration CF_VoLTE_RMI_ES + containing + SUT component UE_A of type SipComponent + SUT component IMS_P_CSCF_B of type SipComponent + SUT component IMS_S_CSCF_B of type SipComponent + SUT component IMS_I_CSCF_B of type SipComponent + SUT component IMS_AS_B of type SipComponent + SUT component IMS_IBCF_B of type SipComponent + SUT component IMS_IBCF_A of type SipComponent + connection between UE_A.g and IMS_P_CSCF_B.g + connection between IMS_P_CSCF_B.g and IMS_S_CSCF_B.g + connection between IMS_S_CSCF_B.g and IMS_I_CSCF_B.g + connection between IMS_I_CSCF_B.g and IMS_IBCF_B.g + connection between IMS_IBCF_B.g and IMS_IBCF_A.g + ; + Test Configuration CF_VxLTE_RMI_A containing SUT component UE_B of type SipComponent -- GitLab From ad43b390127e741096d0203a57f848ca8ff03aba Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:45:29 +0200 Subject: [PATCH 21/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_VxLTE_Functions.ttcn | 33 ++++++++++++++++++++++--- ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 6 ++++- ttcn/LibIot/LibIot_VxLTE_Templates.ttcn | 31 ++++++++++++++++++----- 3 files changed, 60 insertions(+), 10 deletions(-) diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn index 2de6b27..a785056 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -60,6 +60,9 @@ module LibIot_VxLTE_Functions { if (PX_SIP_MW_EB_MONITORENABLED == true){ vc_MonIntfList.mwEB := valueof(m_MonIntf_Sip_Mw_EB); } + if (PX_SIP_ML_E_LRF_MONITORENABLED == true){ + vc_MonIntfList.mlE_LRF := valueof(m_MonIntf_Sip_Ml_E_LRF); + } if (PX_SIP_MW_S_PSAP_MONITORENABLED == true){ vc_MonIntfList.mwS_PSAP := valueof(m_MonIntf_Sip_MwS_PSAP); } @@ -136,6 +139,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwEB)){ vc_vxlte_monitor_components.mwEB := f_cf_create_monitor_sip ( vc_MonIntfList.mwEB); } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + vc_vxlte_monitor_components.mlE_LRF := f_cf_create_monitor_sip ( vc_MonIntfList.mlE_LRF); + } if (isvalue(vc_MonIntfList.mwS_PSAP)){ vc_vxlte_monitor_components.mwS_PSAP := f_cf_create_monitor_sip ( vc_MonIntfList.mwS_PSAP); } @@ -241,6 +247,15 @@ module LibIot_VxLTE_Functions { ) ))); } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + f_cf_monitor_up_sip(vc_vxlte_monitor_components.mlE_LRF); + vc_vxlte_monitor_components.mlE_LRF.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {vc_MonIntfList.mlE_LRF.interfaceInfo} + ) + ))); + } if (isvalue(vc_MonIntfList.mwS_PSAP)){ f_cf_monitor_up_sip(vc_vxlte_monitor_components.mwS_PSAP); vc_vxlte_monitor_components.mwS_PSAP.start(f_cf_setFilter( @@ -429,6 +444,9 @@ module LibIot_VxLTE_Functions { if (isvalue(vc_MonIntfList.mwEB)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwEB); } + if (isvalue(vc_MonIntfList.mlE_LRF)){ + f_cf_monitor_down_sip(vc_vxlte_monitor_components.mlE_LRF); + } if (isvalue(vc_MonIntfList.mwS_PSAP)){ f_cf_monitor_down_sip(vc_vxlte_monitor_components.mwS_PSAP); } @@ -521,11 +539,12 @@ module LibIot_VxLTE_Functions { // if (vc_vxlte_monitor_components.gmA.vc_interfacename) {return true;} if ((isvalue(vc_MonIntfList.gmA)) and (vc_MonIntfList.gmA.interfaceName==p_interfaceName)){ return true;} - //if ((isvalue(vc_MonIntfList.gmB)) and (vc_MonIntfList.gmB.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.gmB)) and (vc_MonIntfList.gmB.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mmB_PSAP)) and (vc_MonIntfList.mmB_PSAP.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwEB)) and (vc_MonIntfList.mwEB.interfaceName==p_interfaceName)){ return true;} - if ((isvalue(vc_MonIntfList.mwS_PSAP)) and (vc_MonIntfList.mwS_PSAP.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mlE_LRF)) and (vc_MonIntfList.mlE_LRF.interfaceName==p_interfaceName)){ return true;} + if ((isvalue(vc_MonIntfList.mwS_PSAP)) and (vc_MonIntfList.mwS_PSAP.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.ic)) and (vc_MonIntfList.ic.interfaceName==p_interfaceName)){ return true;} if ((isvalue(vc_MonIntfList.mwPI)) and (vc_MonIntfList.mwPI.interfaceName==p_interfaceName)){ return true;} @@ -568,7 +587,7 @@ module LibIot_VxLTE_Functions { var InterfaceAvailableList v_VxLTE_MonIntf_Available; var InterfaceAvailable v_InterfaceAvailable; - var SipInterfaceMonitor v_gmA, v_gmB, v_mmBPSAP, v_mwEB, v_mwSPSAP, v_ic, v_mwPI, v_mwPS, v_mwPE, v_mwSI, v_mwPB, v_mwIB, v_mwIE, v_isc; + var SipInterfaceMonitor v_gmA, v_gmB, v_mmBPSAP, v_mwEB, v_mlE_LRF, v_mwSPSAP, v_ic, v_mwPI, v_mwPS, v_mwPE, v_mwSI, v_mwPB, v_mwIB, v_mwIE, v_isc; var DiameterInterfaceMonitor v_cxIH, v_cxSH, v_gx, v_rx, v_s6a, v_s9, v_sh; if (PX_SIP_GMA_MONITORENABLED == true){ @@ -601,6 +620,14 @@ module LibIot_VxLTE_Functions { v_mwEB := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Mw_EB)/*PX_SIP_MW_PI_INTERFACENAME*/ ); f_cf_monitor_up_sip(v_mwEB); } + if (PX_SIP_ML_E_LRF_MONITORENABLED == true){ + + v_InterfaceAvailable.interfaceName := PX_SIP_ML_E_LRF_INTERFACENAME; + v_InterfaceAvailable.available := PX_SIP_ML_E_LRF_MONITORENABLED; + v_VxLTE_MonIntf_Available := f_update_MonitorInterfaceList(v_VxLTE_MonIntf_Available,v_InterfaceAvailable); + v_mlE_LRF := f_cf_create_monitor_sip ( valueof(m_MonIntf_Sip_Ml_E_LRF)/*PX_SIP_MW_PI_INTERFACENAME*/ ); + f_cf_monitor_up_sip(v_mlE_LRF); + } if (PX_SIP_MW_S_PSAP_MONITORENABLED == true){ v_InterfaceAvailable.interfaceName := PX_SIP_MW_S_PSAP_INTERFACENAME; diff --git a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn index 934c366..f240415 100644 --- a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn @@ -54,6 +54,7 @@ module LibIot_VxLTE_PIXITS { group Mw{ modulepar charstring PX_SIP_MM_B_PSAP_INTERFACENAME := "Mm IBCF PSAP"; //Mm interface between IBCF and PSAP modulepar charstring PX_SIP_MW_EB_INTERFACENAME := "Mw ECSCF IBCF"; //Mw interface between ECSCF and IBCF + modulepar charstring PX_SIP_ML_E_LRF_INTERFACENAME := "Ml ECSCF LRF"; //Ml interface between ECSCF and LRF modulepar charstring PX_SIP_MW_S_PSAP_INTERFACENAME := "Mw SCSCF PSAP"; //Mw interface between S-CSCF and PSAP modulepar charstring PX_SIP_MW_PI_INTERFACENAME := "Mw PI"; //Mw interface between P-CSCF and I-CSCF modulepar charstring PX_SIP_MW_PS_INTERFACENAME := "Mw PS"; //Mw interface between P-CSCF and S-CSCF @@ -72,10 +73,13 @@ module LibIot_VxLTE_PIXITS { modulepar integer PX_SIP_MW_S_CSCF_PORT := 5090; //Mw Port number of S-CSCF modulepar charstring PX_SIP_MW_E_CSCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of E-CSCF modulepar integer PX_SIP_MW_E_CSCF_PORT := 5095; //Mw Port number of E-CSCF + modulepar charstring PX_SIP_ML_LRF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of E-CSCF + modulepar integer PX_SIP_ML_LRF_PORT := 5095; //Mw Port number of E-CSCF modulepar charstring PX_SIP_MW_IBCF_IPADDR := "fe80::21a:a0ff:fe07:98"; //Mw IP address of IBCF modulepar integer PX_SIP_MW_IBCF_PORT := 5050; //Mw Port number of IBCF modulepar boolean PX_SIP_MM_B_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only - modulepar boolean PX_SIP_MW_EB_MONITORENABLED := true; //true - Monitor enabled for PE connection only + modulepar boolean PX_SIP_MW_EB_MONITORENABLED := true; //true - Monitor enabled for EB connection only + modulepar boolean PX_SIP_ML_E_LRF_MONITORENABLED := true; //true - Monitor enabled for E-LRF connection only modulepar boolean PX_SIP_MW_S_PSAP_MONITORENABLED := true; //true - Monitor enabled for PSAP connection only modulepar boolean PX_SIP_MW_PI_MONITORENABLED := true; //true - Monitor enabled for PI connection only modulepar boolean PX_SIP_MW_PS_MONITORENABLED := true; //true - Monitor enabled for PS connection only diff --git a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn index 12cc045..357cc67 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Templates.ttcn @@ -124,12 +124,12 @@ module LibIot_VxLTE_Templates { interfaceInfo := { IpInterfaceInfo := { { - domainName := "pcscf.ims.domain", + domainName := "ibcf.ims.domain", IpAddress := PX_SIP_MW_IBCF_IPADDR, portNumbers := {PX_SIP_MW_IBCF_PORT} }, { - domainName := "icscf.ims.domain", + domainName := "psap.ims.domain", IpAddress := PX_SIP_MW_PSAP_IPADDR, portNumbers := {PX_SIP_MW_PSAP_PORT} } @@ -143,18 +143,37 @@ module LibIot_VxLTE_Templates { interfaceInfo := { IpInterfaceInfo := { { - domainName := "pcscf.ims.domain", + domainName := "ecscf.ims.domain", IpAddress := PX_SIP_MW_E_CSCF_IPADDR, portNumbers := {PX_SIP_MW_E_CSCF_PORT} }, { - domainName := "icscf.ims.domain", + domainName := "ibcf.ims.domain", IpAddress := PX_SIP_MW_IBCF_IPADDR, portNumbers := {PX_SIP_MW_IBCF_PORT} } } } }; + + template MonitorInterfaceInfo m_MonIntf_Sip_Ml_E_LRF:= + { + interfaceName := PX_SIP_ML_E_LRF_INTERFACENAME, + interfaceInfo := { + IpInterfaceInfo := { + { + domainName := "ecscf.ims.domain", + IpAddress := PX_SIP_MW_E_CSCF_IPADDR, + portNumbers := {PX_SIP_MW_E_CSCF_PORT} + }, + { + domainName := "lrf.ims.domain", + IpAddress := PX_SIP_ML_LRF_IPADDR, + portNumbers := {PX_SIP_ML_LRF_PORT} + } + } + } + }; template MonitorInterfaceInfo m_MonIntf_Sip_MwS_PSAP:= { @@ -162,12 +181,12 @@ module LibIot_VxLTE_Templates { interfaceInfo := { IpInterfaceInfo := { { - domainName := "pcscf.ims.domain", + domainName := "scscf.ims.domain", IpAddress := PX_SIP_MW_S_CSCF_IPADDR, portNumbers := {PX_SIP_MW_S_CSCF_PORT} }, { - domainName := "icscf.ims.domain", + domainName := "psap.ims.domain", IpAddress := PX_SIP_MW_PSAP_IPADDR, portNumbers := {PX_SIP_MW_PSAP_PORT} } -- GitLab From 3e7630538ed7e78a52df71f60fb00be6d6a1a6d6 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:45:51 +0200 Subject: [PATCH 22/84] added emergency config parameters/intefcaes --- ttcn/LibIot/LibIot_TypesAndValues.ttcn | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn index f8a5c88..6cb6f32 100644 --- a/ttcn/LibIot/LibIot_TypesAndValues.ttcn +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -102,6 +102,7 @@ module LibIot_TypesAndValues { MonitorInterfaceInfo gmB optional, MonitorInterfaceInfo mmB_PSAP optional,// Mm interface at IBCF to PSAP MonitorInterfaceInfo mwEB optional,// Mw interface at ECSCF to IBCF + MonitorInterfaceInfo mlE_LRF optional, //Ml interface at ECSCF to LRF MonitorInterfaceInfo mwS_PSAP optional,// Mw interface at SCSCF to PSAP MonitorInterfaceInfo ic optional, MonitorInterfaceInfo mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used -- GitLab From e06666bbab29f938626015dbe6697d7c3b511f92 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:46:45 +0200 Subject: [PATCH 23/84] added emergency attach TD --- .../AtsImsIot_Diameter_Templates.ttcn | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index 9680275..fe9060e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -21,7 +21,7 @@ module AtsImsIot_Diameter_Templates { import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code}; + import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code, Subscription_Data_AVP}; import from LibDiameter_Types_S9_AVPs all; group DiameterHeaderFields { @@ -387,6 +387,13 @@ module AtsImsIot_Diameter_Templates { final_unit_action := * } + template User_Equipment_Info_AVP mw_userEquipmentInfo_IMEI:= + { + aVP_Header := mw_aVP_Header_any_Code(458/*c_User_Equipment_Info_code*/), + user_Equipment_Info_Type := {aVP_Header := ?/*459*/, aVP_Data := IMEISV_E/*0*/ }, + user_Equipment_Info_Value := ? + } + } //end group GxHeaderFields group S6aHeaderFields{ @@ -396,6 +403,10 @@ module AtsImsIot_Diameter_Templates { cancellation_Type := p_cancellation_Type } // End of template m_cancellationType + template Subscription_Data_AVP mw_subscriptionData_emergencyInfo:= { + aVP_Header := mw_aVP_Header_any_Code(c_subscription_Data_AVP_Code), + emergency_Info := ? + } } //end group S6aHeaderFields @@ -1004,6 +1015,38 @@ module AtsImsIot_Diameter_Templates { } } + template CCR_MSG mw_CCR_SubscriberIMSI_qosInformation_class5_ES(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + template CCR_MSG mw_CCR_SubscriberIMEI_qosInformation_class5_ES(CC_Request_Ty_Type p_avpData) modifies mw_CCR_basic := { + cCR_Body :={ + cC_Request_Type := mw_cC_Request_Type(p_avpData), + //subscription_Id := {*,mw_subscription_Id(mw_subscription_Id_Type(END_USER_IMSI_E))}, + user_Equipment_Info := mw_userEquipmentInfo_IMEI, + iP_CAN_Type := ?, + rat_Type := ?, + called_Station_Id := ?, + pDN_Connection_ID := *, + framed_IP_Address := ?, + //framed_IPv6_Prefix := *, + //bearer_Usage := mw_bearer_Usage(IMS_SIGNALLING_E), + qoS_Information := mw_qoS_Information, + default_EPS_Bearer_QoS := mw_default_EPS_Bearer_QoS_Class_5 + } + } + template RAR_MSG mw_RAR_ChargingRuleInstall(template Charging_Rule_Install_AVP p_Charging_Rule_Install) modifies mw_RAR_Gx_basic := { rAR_Body :={ charging_Rule_Install := {p_Charging_Rule_Install} @@ -1161,6 +1204,13 @@ module AtsImsIot_Diameter_Templates { ula_Flags := ? } } + template ULA_MSG mw_ULA_subsdata_flags modifies mw_ULA_resultCode_flags := { + uLA_Body :={ + //result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + //ula_Flags := ? + subscription_Data :=mw_subscriptionData_emergencyInfo + } + } }// end group S6aRequestMessageTemplates }//end group S6aMessageTemplates -- GitLab From 3a28069e777e383a51e6fb9b411b29ea68d00d3f Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:47:02 +0200 Subject: [PATCH 24/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 50 +++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1697f60..c656fd3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -79,8 +79,8 @@ module AtsImsIot_Emergency { // test body // Check that user A starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) - f_mtc_check_TP_S6A_HSS_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) - f_mtc_check_TP_GX_PCRF_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) // postamble f_mtc_userRadioEnabled ( v_ueA, false, true ); @@ -93,11 +93,55 @@ module AtsImsIot_Emergency { //log... setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } - } // End of TC TC_VxLTE_INT_ATT_01 + } // End of TC TC_VoLTE_ECO_INT_ATT_01 } // End of group UENetworkAttachmentWithUSIM group UENetworkAttachmentWithoutUSIM { + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_ECO_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_ATT_02 } // End of group UENetworkAttachmentWithoutUSIM } // End of group NetworkAttachment -- GitLab From 0c7f6cf5816499d674a2543cf12c330d8a355bf0 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:47:29 +0200 Subject: [PATCH 25/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 186 ++++++++++++++++++- 1 file changed, 185 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 7596bc0..779e6a0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -463,7 +463,8 @@ group g_PGW { } } // End of function f_mtc_check_TP_GX_PGW_RAA_04 - + group ES{ + } //end group ES } // end group g_PGW group g_PCRF { @@ -1106,7 +1107,190 @@ group g_PCRF { } } // End of function f_mtc_check_TP_GX_PCRF_RAR_04 + group ES{ + /** + * Starts monitor component behavior for TP_GX_PCRF_ECO_CCA_01 + * @param p_monitorCompRef Reference to monitor component + *
+		 Test objective  "Verify that IUT when receives CC-Request for PCC Rules containing IMSI for emergency services sends a CC-Answer in case of attachment procedure."
+        
+        Reference 
+            "TS 129 212 [9], clauses 4.5.15.2.1"
+        
+        Config Id CF_VoLTE_INT_ES
+        
+        PICS Selection NONE
+        
+        Initial conditions with {
+            the UE_A entity isNotAttachedTo the EPC_A and
+            the UE_A entity isNotRegisteredTo the IMS_A
+        }
+        
+        Expected behaviour
+            ensure that {
+                when {
+                    the EPC_PGW_A entity sends an CCR containing
+                        CC_Request_Type_AVP indicating value INITIAL_REQUEST
+                        Subscription_Id_AVP containing
+                            Subscription_Id_Type_AVP
+                                indicating value END_USER_IMSI;,
+                        IP_CAN_Type_AVP indicating value RestrictedToEmergencyServices,
+                        RAT_Type_AVP,
+                        Called_Station_Id_AVP indicating value "Emergency_APN"
+                        Framed_IP_Address_AVP
+                        "or" Framed_IP6_IP_Address_AVP
+                        QoS_Information_AVP
+                        Default_EPS_Bearer_QoS_AVP containing
+                            QoS_Class_Identifier_AVP
+                                indicating value '5'
+                            Allocation_Retention_Priority_AVP containing
+                                Priority_Level_AVP
+                                Pre_emption_Capablity_AVP
+                                Pre_emption_Vulnerability_AVP;;;
+                    to the EPC_PCRF_A entity
+                }
+                then {
+                    the EPC_PCRF_A entity sends the CCA containing
+                        Result_Code_AVP
+                            indicating value DIAMETER_SUCCESS;
+                    to the EPC_PGW_A entity
+                }
+            }
+		 * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_ECO_CCA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_01 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_01 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_ECO_CCA_01 + + /** + * Starts monitor component behavior for TP_GX_PCRF_ECO_CCA_02 + * @param p_monitorCompRef Reference to monitor component + *
+		 Test objective  "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency services sends a CC-Answer in case of attachment procedure."
+        
+        Reference 
+            "TS 129 212 [9], clauses 4.5.15.2.1"
+        
+        Config Id CF_VxLTE_INT
+        
+        PICS Selection NONE
+        
+        Initial conditions with {
+            the UE_A entity isNotAttachedTo the EPC_A and
+            the UE_A entity isNotRegisteredTo the IMS_A
+        }
+        
+        Expected behaviour
+            ensure that {
+                when {
+                    the EPC_PGW_A entity sends an CCR containing
+                        CC_Request_Type_AVP indicating value INITIAL_REQUEST,
+                        User_Equipment_Info_AVP containing
+                             User_Equipment_Info_Type_AVP indicating value IMEISV
+                             User_Equipment_Info_Value_AVP;,
+                        IP_CAN_Type_AVP indicating value RestrictedToEmergencyServices,
+                        RAT_Type_AVP,
+                        Called_Station_Id_AVP indicating value "Emergency_APN"
+                        Framed_IP_Address_AVP
+                        "or" Framed_IP6_IP_Address_AVP
+                        QoS_Information_AVP
+                        Default_EPS_Bearer_QoS_AVP containing
+                            QoS_Class_Identifier_AVP
+                                indicating value '5'
+                            Allocation_Retention_Priority_AVP containing
+                                Priority_Level_AVP
+                                Pre_emption_Capablity_AVP
+                                Pre_emption_Vulnerability_AVP;;;
+                    to the EPC_PCRF_A entity
+                }
+                then {
+                    the EPC_PCRF_A entity sends the CCA containing
+                        Result_Code_AVP
+                            indicating value DIAMETER_SUCCESS;
+                    to the EPC_PGW_A entity
+                }
+            }
+		 * 
+ * @see TS 103 653-1 clause 7.7 + */ + function f_mtc_check_TP_GX_PCRF_ECO_CCA_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMEI_qosInformation_class5_ES(INITIAL_REQUEST_E) } + }, + { + DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_02 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + }, + { + DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_02 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_ECO_CCA_02 + } //end group ES } // end group g_PCRF -- GitLab From c4550902ceefa02ea10db59d9bfc63ed3a701baa Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:47:42 +0200 Subject: [PATCH 26/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 84 ++++++++++++++++++- 1 file changed, 83 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn index ebfc870..f8a1a1a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -97,6 +97,8 @@ group g_HSS { ); p_monitorCompRef.done; } + + } // End of function f_mtc_check_TP_S6A_HSS_AIA_01 /** @@ -371,7 +373,84 @@ group g_HSS { } } // End of function f_mtc_check_TP_S6A_HSS_ULA_02 - + group ES{ + /** + * Starts monitor component behavior for TP_S6A_HSS_ECO_ULA_01 + * @param p_monitorCompRef Reference to monitor component + *
+		 *Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP."
+         *
+         *Reference 
+         *   "TS 129 272 [10], clause 5.2.1.1.2"
+        
+         *Config Id CF_VxLTE_INT_ES
+        
+         *PICS Selection NONE
+        
+         *Initial conditions with {
+         *   the UE_A entity isNotAttachedTo the EPC_A and
+         *   the UE_A entity isNotRegisteredTo the IMS_A
+         *}
+         *
+         *Expected behaviour
+         *   ensure that {
+         *       when {
+         *           the EPC_MME_A entity sends a ULR
+         *           to the IMS_HSS_A entity
+         *       }
+         *       then {
+         *           the IMS_HSS_A entity sends the ULA containing
+         *               Subscription_Data_AVP containing
+         *                   Emergency_Info_AVP indicating value PDN_GW;,
+         *               Result_Code_AVP
+         *                   indicating value DIAMETER_SUCCESS
+         *               ULA_Flags_AVP;
+         *           to the EPC_MME_A entity
+         *       }
+         *   } 
+		 * 
+ */ + function f_mtc_check_TP_S6A_HSS_ECO_ULA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// p_monitorCompRef.start ( +// f_Iot_Diameter_receive( +// { +// DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } +// }, +// { +// DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } +// }, +// {0, omit}, +// "TP_S6A_HSS_ULA_01 - ULR", +// p_forward_to_mtc, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_subsdata_flags } + }, + { + DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + }, + {0, omit}, + "TP_S6A_HSS_ECO_ULA_01 - ULA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_ECO_ULA_01 + + }// end group ES } // end group g_HSS group g_MME { @@ -675,6 +754,9 @@ group g_MME { } } // End of function f_mtc_check_TP_S6A_MME_ULR_02 + group ES{ + + }// end group ES } // end group g_MME -- GitLab From 2f830fe984c366ca0aa865bd203c892af21c1487 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 09:48:02 +0200 Subject: [PATCH 27/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index 011bf0a..41150fe 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -124,6 +124,7 @@ module AtsImsIot_TestSystem { SipInterfaceMonitor gmB optional, SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP SipInterfaceMonitor ic optional, SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used -- GitLab From f57b2a27638ee2864a3faebcf848ede160b56669 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Thu, 1 Jun 2023 10:09:59 +0200 Subject: [PATCH 28/84] Finalyze INT_INI Test Cases skeloton, Add TD_VoLTE_ECO_INT_REL_01_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 602 +++++++++++++++++- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 266 +++++++- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 138 ++++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 54 ++ .../AtsImsIot_TestConfiguration.ttcn | 1 + ttcn/LibIot/LibIot_PIXITS.ttcn | 13 +- 6 files changed, 1017 insertions(+), 57 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 5c2d43f..b5f160e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -202,9 +202,9 @@ module AtsImsIot_Emergency { f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 - f_mtc_check_TP_GM_PCSCF_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 13, 22 - f_mtc_check_TP_MW_PCSCF_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Events 14, 21 - f_mtc_check_TP_MW_ICSCF_REGISTER_04(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_GM_PCSCF_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_REGISTER_05(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble @@ -231,15 +231,17 @@ module AtsImsIot_Emergency { group EmergencySessionEstablishment { /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option1: IBCF is connect to another network and the interface between the IBCF and the PSAP is the Ic interface - */ + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option1: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface + */ testcase TD_VoLTE_ECO_INT_INI_01_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -262,14 +264,13 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // Preamble -// f_mtc_userRegistration(v_ueA, v_userInfoA); -// f_mtc_userRegistration(v_psap, v_userInfoB); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); @@ -355,15 +356,17 @@ module AtsImsIot_Emergency { } // End of f_TD_VoLTE_ECO_INT_INI_01_01 /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface - */ + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ testcase TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -386,12 +389,13 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); @@ -484,13 +488,61 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_INT_INI_01_02 /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option3: IBCF is connected to the PSTN network - */ + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @remark This is option3: IBCF is connected to the PSTN network + */ testcase TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03(); + + // Test body + // TODO + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_01_03 group f_TD_VoLTE_ECO_INT_INI_01_03 { @@ -500,12 +552,510 @@ module AtsImsIot_Emergency { // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03 - } // End of group f_TD_VoLTE_ECOf_TD_VoLTE_ECO_INT_INI_01_03_INT_INI_01 + } // End of group f_TD_VoLTE_ECO_INT_INI_01_03 + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration. + * On successful call setup, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow. These are pushed towards PCRF and EPC as request for creation of adequate bearers + * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator system IotSystemInterface { + + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); + + f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + // PRACK after 183 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + // PRACK after 180 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 + f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_02 + + group f_TD_VoLTE_ECO_INT_INI_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02 + + } // End of group f_TD_VoLTE_ECO_INT_INI_02 + + /** + * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment withinout registration. + * On successful emergency call setup with UE-A attached to EPC A but not attached to IMS A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP without registration + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface { + + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + // No registration for user A + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); + + f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + // PRACK after 183 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + // PRACK after 180 Session Progress: require field is present + // FIXME Add check of requires SIP message header to check PRACK + // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 + f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_03 + + group f_TD_VoLTE_ECO_INT_INI_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03 + + } // End of group f_TD_VoLTE_ECO_INT_INI_03 + + /** + * @desc TODO + * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @see ETSI TS 103 795-2 Clause 5.3.1.4 Emergency session establishment with LRF involvement + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME, // IBCF -> PSAP + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_04 + + group f_TD_VoLTE_ECO_INT_INI_04 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04 + + } // End of group f_TD_VoLTE_ECO_INT_INI_04 + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered + * Verifying the functionality of the PSAP callback feature, ensuring that the callback is successfully initiated, routed and that media is correctly transmitted over the dedicated bearer. The callback must use the same media as the original emergency call + * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_05 + + group f_TD_VoLTE_ECO_INT_INI_05 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05 + + } // End of group f_TD_VoLTE_ECO_INT_INI_05 + } // End of group EmergencySessionEstablishment group EmergencySessionRelease { + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. + * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @remark This is option2: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface + */ + testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_02 + + group f_TD_VoLTE_ECO_INT_REL_01_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 + + } // End of f_TD_VoLTE_ECO_INT_REL_01_02 + } // End of group EmergencySessionRelease group EmergencySessionAbortOrReject { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index d8148b1..715f085 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -75,32 +75,32 @@ module AtsImsIot_TP_behavior_MW_EB { * } * } */ - function f_mtc_check_TP_MW_IBCF_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mdw_TP_MW_IBCF_INVITE_01( - ( - mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_IBCF_INVITE_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 + function f_mtc_check_TP_MW_IBCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_MW_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 } // End of group imsInvite @@ -358,8 +358,74 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 - } // End of group ims200Ok - + /** + * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * from the UE_B entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_200OK_02 + + } // End of group ims200Ok + group imsAck { /** @@ -425,4 +491,148 @@ module AtsImsIot_TP_behavior_MW_EB { } // End of group imsAck + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_IBCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_200OK_BYE_01 + + } // End of group ims200OkBye + } // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index f1a840e..a0664d7 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -430,4 +430,142 @@ module AtsImsIot_TP_behavior_MW_EC { } // End of group imsAck + group imsBye { + + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_ECSCF_BYE_01 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ECSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ECSCF_200OK_BYE_01 + + } // End of group ims200OkBye + } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 96595a8..c03827e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -1027,6 +1027,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_ECSCF_ACK_02 + template (present) BYE_Request mw_TP_MW_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + } group g_ibcf { @@ -1134,6 +1161,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_IBCF_ACK_01 + template (present) BYE_Request mw_TP_MW_IBCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_BYE_01 + } } // End of module AtsImsIot_Templates_MW \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index b5b948a..b43963b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -52,6 +52,7 @@ module AtsImsIot_TestConfiguration { const charstring c_trigger_B := "User B"; //* eut trigger name User A const charstring c_userUE_A := "User A"; + const charstring c_userUE_A_emergency := "User A Emergency"; const charstring c_userUE_A2 := "User A2"; //* eut trigger name User B const charstring c_userUE_B := "User B"; diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn index 04018fe..05c54b7 100644 --- a/ttcn/LibIot/LibIot_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -256,11 +256,18 @@ module LibIot_PIXITS { */ modulepar integer PX_EUT_A := 0; + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_A + * + */ + modulepar integer PX_EUT_A_EMERGENCY := 1; + /** * * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B */ - modulepar integer PX_EUT_B := 1; + modulepar integer PX_EUT_B := 2; /** * @@ -278,7 +285,7 @@ module LibIot_PIXITS { * * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B_B2 */ - modulepar integer PX_EUT_B_B2 := 2; + modulepar integer PX_EUT_B_B2 := 3; /** @@ -286,7 +293,7 @@ module LibIot_PIXITS { * @desc Selects product based on index in PX_PRODCUTS vendor list for PSAP * */ - modulepar integer PX_PSAP := 3; + modulepar integer PX_PSAP := 12; /** * -- GitLab From 67f8c9228114349ecece0e462d8b73fd76d8e78a Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Thu, 1 Jun 2023 11:13:34 +0200 Subject: [PATCH 29/84] Finalyze test cases TD_VoLTE_ECO_INT_REL_01_01/02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 184 +++++++++++++++- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 5 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 204 +++++++++++++++--- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 212 +++++++++++-------- 4 files changed, 474 insertions(+), 131 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 03c8ec3..093c65e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -285,7 +285,6 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -308,8 +307,8 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + // PSAP is not known from the IMS A f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01(); // Test body @@ -434,7 +433,11 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02(); // Test body @@ -542,7 +545,6 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -551,7 +553,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP })) { var SipMessage v_sip; @@ -566,7 +568,7 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + // PSAP is not known from the IMS A f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03(); // Test body @@ -1010,6 +1012,97 @@ module AtsImsIot_Emergency { group EmergencySessionRelease { + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. + * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @remark This is option1: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 + f_mtc_check_TP_MM_PSAP_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_01 + + group f_TD_VoLTE_ECO_INT_REL_01_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 + + } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 + /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers @@ -1100,6 +1193,83 @@ module AtsImsIot_Emergency { } // End of f_TD_VoLTE_ECO_INT_REL_01_02 + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. + * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @remark This is option3: IBCF is connected to the PSTN network + */ + testcase TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_03 + + group f_TD_VoLTE_ECO_INT_REL_01_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 + + } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 + } // End of group EmergencySessionRelease group EmergencySessionAbortOrReject { diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index b8bd9b0..02bda0b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -22,6 +22,11 @@ group SUT_CONF { * @desc charstring for PChargingVector TP_IC_IBCF_INVITE_04 */ modulepar charstring PX_IMS_A_ICID := "PX_IMS_A_ICID"; + + /** + * @desc Set to true of PSAP shall be registered to the IMS + */ + modulepar boolean PX_PSAP_REGISTERED := true; } // end group SUT_CONF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 445028a..dc62386 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -32,7 +32,7 @@ module AtsImsIot_TP_behavior_MM { group imsInvite { /** - * @desc Verify that the IBCF successfully processes an initial INVITE (Originating Leg).. + * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -43,7 +43,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives an INVITE containing + * the IMS_E_CSCF_A entity receives an INVITE containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_PSAP_SIP_URI, * CallId indicating value PX_UE_A_CALLID, @@ -53,9 +53,7 @@ module AtsImsIot_TP_behavior_MM { * MessageBody containing * SDP containing * Version indicating value "0" - * ; - * ;; - * from the IMS_E_CSCF_A entity + * from the IMS_P_CSCF_A entity * } * then { * the IMS_IBCF_A entity sends an INVITE containing @@ -67,9 +65,7 @@ module AtsImsIot_TP_behavior_MM { * PAccessNetworkInfo, * MessageBody containing * SDP containing - * Version indicating value "0" - * ; - * ;; + * Version indicating value "0" * to the PSAP entity * } * } @@ -111,7 +107,7 @@ module AtsImsIot_TP_behavior_MM { group ims100Trying { /** - * @desc Verify that the IBCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -122,16 +118,16 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives a 100_Trying + * the IMS_E_CSCF_A entity receives a 100_Trying * from the PSAP entity * } * then { - * the IMS_IBCF_A entity sends a 100_Trying - * to the IMS_E_CSCF_A entity + * the IMS_E_CSCF_A entity sends a 100_Trying + * to the IMS_P_CSCF_A entity * } * } */ - function f_mtc_check_TP_MW_IBSCF_100Trying_01( + function f_mtc_check_TP_MM_PSAP_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -140,7 +136,7 @@ module AtsImsIot_TP_behavior_MM { // Check the 100 TRYING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( + { mw_SipResponse(mw_TP_MM_PSAP_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -148,21 +144,21 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MW_IBCF_100Trying_01", + "TP_MM_PSAP_100Trying_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 + } // End of function f_mtc_check_TP_MM_PSAP_100Trying_01 } // End of group ims100Trying group ims180Ringing { /** - * @desc Verify that the IBCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * @desc Verify that the IMS_E_CSCF_A successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -173,7 +169,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives a 180_Ringing containing + * the IMS_E_CSCF_A entity receives a 180_Ringing containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, @@ -183,14 +179,14 @@ module AtsImsIot_TP_behavior_MM { * from the PSAP entity * } * then { - * the IMS_IBCF_A entity sends a 180_Ringing containing + * the IMS_E_CSCF_A entity sends a 180_Ringing containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, * Via indicating value PX_PSAP_VIA, * Route indicating value PX_PSAP_SERVICE_ROUTE * ; - * to the IMS_E_CSCF_A entity + * to the IMS_P_CSCF_A entity * } * } */ @@ -227,7 +223,7 @@ module AtsImsIot_TP_behavior_MM { group ims183SessionProgress { /** - * @desc Verify that the IBCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * @desc Verify that the IMS_E_CSCF_A successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -238,7 +234,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives a 183_SessionProgress containing + * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing * From indicating value PX_SAP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_SAP_CALLID, @@ -248,14 +244,14 @@ module AtsImsIot_TP_behavior_MM { * from the PSAP entity * } * then { - * the IMS_IBCF_A entity sends a 183_SessionProgress containing + * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, * Via indicating value PX_PSAP_VIA, * Route indicating value PX_PSAP_SERVICE_ROUTE * ; - * to the IMS_E_CSCF_A entity + * to the IMS_P_CSCF_A entity * } * } */ @@ -290,7 +286,7 @@ module AtsImsIot_TP_behavior_MM { group ims200Ok { /** - * @desc Verify that the IBCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * @desc Verify that the IMS_E_CSCF_A successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -301,7 +297,7 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives a 200_Ok containing + * the IMS_E_CSCF_A entity receives a 200_Ok containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, @@ -314,7 +310,7 @@ module AtsImsIot_TP_behavior_MM { * from the PSAP entity * } * then { - * the IMS_IBCF_A entity sends a 200_Ok containing + * the IMS_E_CSCF_A entity sends a 200_Ok containing * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_PSAP_CALLID, @@ -324,7 +320,7 @@ module AtsImsIot_TP_behavior_MM { * PChargingFunctionAddresses, * PPreferredIdentity * ; - * to the IMS_E_CSCF_A entity + * to the IMS_P_CSCF_A entity * } * } */ @@ -367,7 +363,7 @@ module AtsImsIot_TP_behavior_MM { group imsAck { /** - * @desc Verify that the IBCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and * the PSAP entity isAttachedTo the EPC_B and @@ -378,17 +374,17 @@ module AtsImsIot_TP_behavior_MM { * Expected behaviour * ensure that { * when { - * the IMS_IBCF_A entity receives an ACK containing + * the IMS_E_CSCF_A entity receives an ACK containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_PSAP_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, * Route indicating value PX_UE_A_SERVICE_ROUTE * ; - * from the IMS_E_CSCF_A entity + * from the IMS_P_CSCF_A entity * } * then { - * the IMS_IBCF_A entity sends an ACK containing + * the IMS_E_CSCF_A entity sends an ACK containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_PSAP_SIP_URI, * CallId indicating value PX_UE_A_CALLID, @@ -429,4 +425,148 @@ module AtsImsIot_TP_behavior_MM { } // End of group imsAck + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_PSAP_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MM_PSAP_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_PSAP_BYE_01 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_PSAP_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MM_PSAP_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MM_PSAP_200OK_BYE_01 + + } // End of group ims200OkBye + } // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 4a48304..ddded2b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -28,107 +28,135 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; - /** - * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 - */ - template(present) INVITE_Request mdw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, - template (present) From p_from := ?, - template (present) To p_to := ?) - modifies mw_INVITE_Request_Base := { - msgHeader := { - fromField := p_from, - toField := p_to, - route := ({ - fieldName := ROUTE_E, - routeBody := { - *, - complement(mw_routeBody(p_IBCF_SIP_URI)), - * - } - }, omit), - recordRoute := { - fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} - }, - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - *, + /** + * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 + */ + template(present) INVITE_Request mdw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, // {id := "icid-value", paramValue := ?}, - *, - {id := "orig-ioi", paramValue := ?}, - *, + *, + {id := "orig-ioi", paramValue := ?}, + *, // complement({id := "term-ioi", paramValue := ?}), - *, - complement({id := "access-network-charging-info", paramValue := ?}), - * - } - }, - pAccessNetworkInfo := omit - } - } + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } - template (present) Response mw_TP_MM_PSAP_100Trying_01( + template (present) Response mw_TP_MM_PSAP_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_100Trying_01 + + template (present) Response mw_TP_MM_PSAP_180Ringing_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? - ) modifies mw_100Trying_Base := { - msgHeader := { - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_TP_MM_PSAP_100Trying_01 - - template (present) Response mw_TP_MM_PSAP_180Ringing_01( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_180Ringing_Base := { - msgHeader := { - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_TP_MM_PSAP_180Ringing_01 - - template (present) Response mw_TP_MM_PSAP_183SessionProgress_01( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_183SessionProgress_Base := { - msgHeader := { - cSeq := p_cSeq, - fromField := p_from, - toField := p_to + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_180Ringing_01 + + template (present) Response mw_TP_MM_PSAP_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MM_PSAP_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MM_PSAP_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } } - } // End of template mw_TP_MM_PSAP_183SessionProgress_01 + } + } // End of template mw_TP_MM_PSAP_ACK_01 - template (present) ACK_Request mw_TP_MM_PSAP_ACK_01( // TODO To be enforced - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) SipUrl p_ack_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_ACK_Request_Base := { - requestLine := { - method := ACK_E, - requestUri := p_ack_uri, // @TODO - sipVersion := c_sipNameVersion - }, - msgHeader := { - callId := p_callId, - fromField := p_from, - toField := p_to, - route := { - fieldName := ROUTE_E, - routeBody := { - *, - ?, - * - } + template (present) BYE_Request mw_TP_MM_PSAP_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * } } - } // End of template mw_TP_MM_PSAP_ACK_01 + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + } // End of module AtsImsIot_Templates_MM -- GitLab From 3e9ff04e808f41ed364a7052ec3479b512fd5c15 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Thu, 1 Jun 2023 12:05:00 +0200 Subject: [PATCH 30/84] Review TD_VoLTE_ECO_INT_REG_01 and TD_VoLTE_ECO_INT_REG_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 32 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 97 ++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 209 +++++++++++++++++ .../AtsImsIot_TP_behavior_MW_IS.ttcn | 197 ++++++++++++++++ .../AtsImsIot_TP_behavior_MW_PS.ttcn | 222 ++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 22 ++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 40 +++- 7 files changed, 803 insertions(+), 16 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 093c65e..f781b36 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -181,18 +181,18 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body - f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 - f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 - f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 - f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 - f_mtc_check_TP_GM_PCSCF_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 - f_mtc_check_TP_MW_PCSCF_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 - f_mtc_check_TP_MW_ICSCF_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 - f_mtc_check_TP_CX_HSS_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 + f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble @@ -239,16 +239,18 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body - f_mtc_check_TP_GM_PCSCF_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 - f_mtc_check_TP_MW_PCSCF_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 - f_mtc_check_TP_MW_ICSCF_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwIS, true); // Event 7, 10 - f_mtc_check_TP_CX_HSS_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_ECO_UAA_01(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 f_mtc_check_TP_CX_HSS_MAA_01(vc_vxlte_monitor_components.cxSH);// Event 8, 9 - f_mtc_check_TP_GM_PCSCF_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 13, 22 - f_mtc_check_TP_MW_PCSCF_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Events 14, 21 - f_mtc_check_TP_MW_ICSCF_REGISTER_05(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.gmA); // Events 13, 22 + f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Events 14, 21 + f_mtc_check_TP_MW_ICSCF_REGISTER_03(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 + + f_mtc_check_TP_CX_HSS_ECO_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn index 55300d3..3d3f7a4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -501,6 +501,103 @@ group g_HSS { } } // End of function f_mtc_check_TP_CX_HSS_UAA_01 + /** + * Starts monitor component behavior for f_mtc_check_TP_CX_HSS_ECO_UAA_01 + * @param p_monitorCompRef Reference to monitor component + *
+     * Test objective  "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE initial registration and sends UA-Answer."
+     *
+     * 
+     * 
+     * Config Id CF_VxLTE_INT
+     * 
+     * Initial conditions with {
+     *     the UE_A entity isNotRegisteredTo the IMS_A
+     * }
+     * 
+     * ensure that {
+     *     when {
+     *         the IMS_I_CSCF_A entity sends a UAR containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *                 indicating value NO_STATE_MAINTAINED,
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP
+     *             Public_Identity_AVP
+     *             Visited_Network_Identifier_AVP
+     *             User_Authorization_Type_AVP 
+     *                 indicating value REGISTRATION,
+     *             User_Name_AVP
+     *             Destination_Host_AVP
+     *             Destination_Realm_AVP
+     *             UAR_Flags_AVP 
+     *                 indicating value IMS_Emergency_Registration_bit_not_set
+     *             ;
+     *         to the IMS_HSS_A entity
+     *     }
+     *     then {
+     *         the IMS_HSS_A entity sends the UAA containing
+     *             Session_ID_AVP
+     *             Vendor_Specific_Application_Id_AVP
+     *             Auth_Session_State_AVP
+     *             Origin_Host_AVP
+     *             Origin_Realm_AVP 
+     *             not Result_Code_AVP
+     *             Experimental_Result_AVP containing
+     *                 Experimental_Result_Code_AVP 
+     *                     indicating value DIAMETER_FIRST_REGISTRATION
+     *                 ;
+     *             ;
+     *         to the IMS_I_CSCF_A entity
+     *     }
+     * }
+     * 
+ * @see TS 103 653-1 clause 7.4 + */ + function f_mtc_check_TP_CX_HSS_ECO_UAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + }, + { + DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + }, + { + DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + }, + {0, omit}, + "TP_CX_HSS_UAA_01 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_ECO_UAA_01 + /** * Starts monitor component behavior for TP_CX_HSS_UAA_02 * @param p_monitorCompRef Reference to monitor component diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index cec6cb6..e51ee8c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -220,6 +220,117 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;, + * Contact indicating value "sos" + * ; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01 + /** * @desc Verify that the P-CSCF successfully processes a first registration (Successful) * Initial conditions with { @@ -424,6 +535,104 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 + /** + * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03 + function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index 21076ef..14428e2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -190,6 +190,107 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_01 + /** + * @desc Verify that the I-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;, + * Contact indicating value "sos" + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other,/*(mw_credentialIntegrityYes)*/ + -, -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_01 + /** * @desc Verify that the I-CSCF successfully processes a full registration (Successful). * Initial conditions with { @@ -395,6 +496,102 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_03 + /** + * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03 + function f_mtc_check_TP_MW_ICSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := true diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index c6aaded..f46dad4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -215,6 +215,119 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_01 + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * icid indicating value PX_TO_BE_DEFINED, + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require_HDR indicating value "path", + * Supported indicating value "path" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;, + * Contact indicating value "sos" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check first REGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other,/*(mw_credentialIntegrityYes)*/ + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01 + /** * @desc Verify that the P-CSCF successfully processes a full registration (Successful). * Initial conditions with { @@ -447,6 +560,115 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_03 + /** + * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * to the IMS_I_CSCF_A entity + * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_ECO_REGISTER_01( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { mw_SipRequest(mw_REGISTER_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03 + function f_mtc_check_TP_MW_PCSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := true diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index ce18a37..6f8599a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -215,6 +215,19 @@ module AtsImsIot_Templates_GM { } } // End of template mw_TP_GM_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -233,6 +246,15 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_03 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index c03827e..a7fefb5 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -223,6 +223,19 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_MW_PCSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -789,6 +802,20 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_ICSCF_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_01 + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_02( template (present) From p_from := ?, template (present) To p_to := ?, @@ -829,7 +856,18 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_ICSCF_REGISTER_03 - template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( + template(present) REGISTER_Request mw_TP_MW_ICSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template (present) Path p_Path := ?, + template (present) PChargingVector p_pChargingVector := ?, + template (present) PVisitedNetworkID p_pVisitedNetworkID := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_MW_ICSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_MW_ICSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_MW_ICSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, template (present) Authorization p_authorization := ?, -- GitLab From 82d02a4c0166725630503980780db5ca206fa588 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 15:41:02 +0200 Subject: [PATCH 31/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 41 +++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 093c65e..81f1e26 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -106,7 +106,7 @@ module AtsImsIot_Emergency { * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ - testcase TC_VoLTE_ECO_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + testcase TC_VoLTE_EMC_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); @@ -128,7 +128,7 @@ module AtsImsIot_Emergency { // Check that user A starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) - f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) // postamble f_mtc_userRadioEnabled ( v_ueA, false, true ); @@ -1284,7 +1284,44 @@ module AtsImsIot_Emergency { group EmergencyNetworkDetachment { group EmergencySessionDetachment { + /** + * @desc Emergency Network Detachment (with/without) emergency registration + * + * @see + */ + testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_01 } // End of group EmergencySessionDetachment } // End of group EmergencyNetworkDetachment -- GitLab From fa2f60915fdbe0d71c603b5630d2c8c95f0bb073 Mon Sep 17 00:00:00 2001 From: juvancic Date: Thu, 1 Jun 2023 15:41:20 +0200 Subject: [PATCH 32/84] added emergency attach TD --- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 779e6a0..4ae196b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -1251,7 +1251,7 @@ group g_PCRF { *
* @see TS 103 653-1 clause 7.7 */ - function f_mtc_check_TP_GX_PCRF_ECO_CCA_02( + function f_mtc_check_TP_GX_PCRF_EMC_CCA_01( DiameterInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in boolean p_forward_to_mtc := false -- GitLab From 22d6c2f6d82330f939eb71c93daba697e15206d9 Mon Sep 17 00:00:00 2001 From: Schmitting Date: Thu, 1 Jun 2023 16:02:34 +0200 Subject: [PATCH 33/84] Added not PChargingFunctionAddresses, to TP_MM_ECSCF_ECO_INVITE_01/02 --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 4812f21..c28b56d 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -169,6 +169,7 @@ Package TP_E_CSCF { Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, RecordRoute PX_E_CSCF_SERVICE_ROUTE, PChargingVector, + not PChargingFunctionAddresses, MessageBody; to the IM_CN entity } @@ -213,6 +214,7 @@ Package TP_E_CSCF { Via indicating value PX_E_CSCF_VIA, Route indicating value LRF_provided_SIP_URI, RecordRoute PX_E_CSCF_SERVICE_ROUTE, + not PChargingFunctionAddresses, PChargingVector, MessageBody; to the IM_CN entity -- GitLab From dcdefe61e2e491230b5bbdccc13d27f09d3d7ce7 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Thu, 1 Jun 2023 16:31:38 +0200 Subject: [PATCH 34/84] Syntax issues fixed --- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 6f8599a..f205d51 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -221,7 +221,7 @@ module AtsImsIot_Templates_GM { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ?, + template (present) Contact p_contact := ? ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { msgHeader := { contact := p_contact diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index a7fefb5..bede675 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -229,7 +229,7 @@ module AtsImsIot_Templates_MW { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ?, + template (present) Contact p_contact := ? ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { msgHeader := { contact := p_contact -- GitLab From d174e1b9b98b734c794f6f1b5ed642508edd3b5b Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 10:17:17 +0200 Subject: [PATCH 35/84] Add skeleton for all TCs in Test Descriptions (Interoperability at HPLMN) --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 1691 ++++++++++++++++---- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 11 +- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 2 +- 3 files changed, 1389 insertions(+), 315 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 48d192a..4b2f27d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -157,8 +157,8 @@ module AtsImsIot_Emergency { */ testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -215,8 +215,8 @@ module AtsImsIot_Emergency { */ testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -277,136 +277,12 @@ module AtsImsIot_Emergency { group EmergencySessionEstablishment { /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option1: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface - */ - testcase TD_VoLTE_ECO_INT_INI_01_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); - var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP - })) - { - var SipMessage v_sip; - - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_psap ); - f_cf_VxLteMonitor_Up(); - - // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01(); - - // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); - - //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 - f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 - f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 - f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 - f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 - //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - - - f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - - f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) - f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) - f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 - f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 - - // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - //Rx/Gx exchange after 183(SDP) was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 - f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 - f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 - f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 - f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - - f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 - f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 - f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 - f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 - - f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - - // Postamble - f_mtc_EndCall(v_ueA); - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); - //f_cf_int_call_down(v_config); - - //unmap/disconnect component ports - f_cf_user_down ( v_psap ); - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_01_01 - - group f_TD_VoLTE_ECO_INT_INI_01_01 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01() runs on ImsTestCoordinator { - log("If the test case fails, please check the preconditions"); - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_01 - - } // End of f_TD_VoLTE_ECO_INT_INI_01_01 - - /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of IMS A. * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ - testcase TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -440,7 +316,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02(); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -525,95 +401,28 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_01_02 - - group f_TD_VoLTE_ECO_INT_INI_01_02 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02() runs on ImsTestCoordinator { - log("If the test case fails, please check the preconditions"); - // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_02 - - } // End of group f_TD_VoLTE_ECO_INT_INI_01_02 - - /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment. - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option3: IBCF is connected to the PSTN network - */ - testcase TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); - var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP - })) - { - var SipMessage v_sip; - - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_psap ); - f_cf_VxLteMonitor_Up(); - - // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03(); - - // Test body - // TODO - - // Postamble - f_mtc_EndCall(v_ueA); - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); - //f_cf_int_call_down(v_config); - - //unmap/disconnect component ports - f_cf_user_down ( v_psap ); - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_01_03 + } // End of TC TD_VoLTE_ECO_INT_INI_01 - group f_TD_VoLTE_ECO_INT_INI_01_03 { + group f_TD_VoLTE_ECO_INT_INI_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01 - } // End of group f_TD_VoLTE_ECO_INT_INI_01_03 + } // End of group f_TD_VoLTE_ECO_INT_INI_01 /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration. - * On successful call setup, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow. These are pushed towards PCRF and EPC as request for creation of adequate bearers + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of IMS A. * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ testcase TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); @@ -638,7 +447,11 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02(); // Test body @@ -736,10 +549,9 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_INT_INI_02 /** - * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment withinout registration. - * On successful emergency call setup with UE-A attached to EPC A but not attached to IMS A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP without registration - * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment without any registration. + * PSAP is located in the IM CN subsystem of IMS A. + * @see ETSI TS 103 795-2 Clause 5.3.1.4 UE calling PSAP without any registration */ testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -868,9 +680,9 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_INT_INI_03 /** - * @desc TODO - * On successful emergency call setup with UE-A attached to EPC A, the P-CSCF should derive from the SDP offer and answer, descriptions of the Service Data Flow - * @see ETSI TS 103 795-2 Clause 5.3.1.4 Emergency session establishment with LRF involvement + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF + * @see ETSI TS 103 795-2 Clause 5.3.1.5 UE calling PSAP in same network, LRF derived PSAP URI * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ testcase TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator system IotSystemInterface { @@ -940,17 +752,15 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_INT_INI_04 /** - * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered - * Verifying the functionality of the PSAP callback feature, ensuring that the callback is successfully initiated, routed and that media is correctly transmitted over the dedicated bearer. The callback must use the same media as the original emergency call - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of another network connected via IBCF. + * @see ETSI TS 103 795-2 Clause 5.3.1.6 UE calling PSAP in other network via IBCF */ - testcase TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator system IotSystemInterface { - + testcase TD_VoLTE_ECO_INT_INI_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -959,7 +769,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; @@ -973,14 +783,69 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + // PSAP is not known from the IMS A f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 @@ -1005,22 +870,1074 @@ module AtsImsIot_Emergency { function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); - // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05 - } // End of group f_TD_VoLTE_ECO_INT_INI_05 - - } // End of group EmergencySessionEstablishment - - group EmergencySessionRelease { + } // End of f_TD_VoLTE_ECO_INT_INI_05 /** - * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of another network vonnected via IBCF. The PSAP URI is delivered by the LRF. + * @see ETSI TS 103 795-2 Clause 5.3.1.7 UE calling PSAP in other network via IBCF, LRF derived PSAP URI + * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + */ + testcase TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_06 + + group f_TD_VoLTE_ECO_INT_INI_06 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06 + + } // End of group f_TD_VoLTE_ECO_INT_INI_06 + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the PSTN connected via BGCF. + * @see ETSI TS 103 795-2 Clause 5.3.1.8 UE calling PSAP in PSTN via BGCF + */ + testcase TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + // PSAP is not known from the IMS A + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07(); + + // Test body + // TODO + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_07 + + group f_TD_VoLTE_ECO_INT_INI_07 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07 + + } // End of group f_TD_VoLTE_ECO_INT_INI_07 + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * PSAP is located in the PSTN connected via BGCF. The PSAP URI is delivered by the LRF + * @see ETSI TS 103 795-2 Clause 5.3.1.9 UE calling PSAP in PSTN via BGCF, LRF derived PSAP URI + */ + testcase TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_08 + + group f_TD_VoLTE_ECO_INT_INI_08 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08 + + } // End of group f_TD_VoLTE_ECO_INT_INI_08 + + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP + @remark Opetion 1: PSAP is in IMS A netwwork + */ + testcase TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_09_01 + + group f_TD_VoLTE_ECO_INT_INI_09_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01 + + } // End of group f_TD_VoLTE_ECO_INT_INI_09_01 + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP + @remark Opetion 2: PSAP is not in IMS A netwwork + */ + testcase TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_09_02 + + group f_TD_VoLTE_ECO_INT_INI_09_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02 + + } // End of group f_TD_VoLTE_ECO_INT_INI_09_02 + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP + @remark Opetion 2: PSAP is in PSTN netwwork + */ + testcase TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + // TODO + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_09_03 + + group f_TD_VoLTE_ECO_INT_INI_09_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03 + + } // End of group f_TD_VoLTE_ECO_INT_INI_09_03 + + } // End of group EmergencySessionEstablishment + + group EmergencySessionRelease { + + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @remark This is option 1: PSAP is in IMA A network + */ + testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 + f_mtc_check_TP_MM_PSAP_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_01 + + group f_TD_VoLTE_ECO_INT_REL_01_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 + + } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 + + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @remark This is option 2: PSAP is not in IMS A network + */ + testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_02 + + group f_TD_VoLTE_ECO_INT_REL_01_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 + + } // End of f_TD_VoLTE_ECO_INT_REL_01_02 + + /** + * @desc To perform originating UE session release and the tear down of related dedicated bearers. * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release - * @remark This is option1: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface + * @remark This is option 3: PSAP is in PSTN network + */ + testcase TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_01_03 + + group f_TD_VoLTE_ECO_INT_REL_01_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 + + } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 + + /** + * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @remark This is option 1: PSAP is in IMS A network + */ + testcase TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 + f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_02_01 + + group f_TD_VoLTE_ECO_INT_REL_02_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01 + + } // End of group f_TD_VoLTE_ECO_INT_REL_02_01 + + /** + * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @remark This is option2: PSAP is not in IMS A network + */ + testcase TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 + f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_02_02 + + group f_TD_VoLTE_ECO_INT_REL_02_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02 + + } // End of group f_TD_VoLTE_ECO_INT_REL_02_02 + + /** + * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. + * On call release initiated bye PSAP, the P-CSCF A should trigger the removal of all relevant previously created bearers + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @remark This is option2: PSAP is in the same network + */ + testcase TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 + f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REL_02_03 + + group f_TD_VoLTE_ECO_INT_REL_02_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03 + + } // End of group f_TD_VoLTE_ECO_INT_REL_02_03 + + } // End of group EmergencySessionRelease + + group EmergencySessionAbortOrReject { + + /** + * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @remark This is option 1: PSAP is in IMA A network + */ + testcase TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_ABT_01_01 + + group f_TD_VoLTE_ECO_INT_ABT_01_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01 + + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_01 + + /** + * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @remark This is option 1: PSAP is not in IMA A network + */ + testcase TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_ABT_01_02 + + group f_TD_VoLTE_ECO_INT_ABT_01_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02 + + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_02 + + /** + * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @remark This is option 1: PSAP is in PSTN network */ - testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -1034,7 +1951,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; @@ -1056,29 +1973,91 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_psap); f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 - f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_MM_PSAP_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_ABT_01_03 + + group f_TD_VoLTE_ECO_INT_ABT_01_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03 + + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_03 - //Rx/Gx exchange after BYE was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 - f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) - f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) - f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + /** + * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @remark This is option 1: PSAP is in IMA A network + */ + testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + })) + { + var SipMessage v_sip; + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01(); - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO - f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); @@ -1094,25 +2073,24 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_01 + } // End of TC TD_VoLTE_ECO_INT_REJ_01_01 - group f_TD_VoLTE_ECO_INT_REL_01_01 { + group f_TD_VoLTE_ECO_INT_REJ_01_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01 - } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_01 /** - * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release - * @remark This is option2: IBCF is connected to another IMS network and the interface between the IBCF and the PSAP is the Ic interface + * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @remark This is option 1: PSAP is not in IMA A network */ - testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + testcase TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); @@ -1125,7 +2103,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; @@ -1147,29 +2125,91 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_psap); f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 - f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 + // TODO + + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_ueB); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REJ_01_02 + + group f_TD_VoLTE_ECO_INT_REJ_01_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02 + + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_02 - //Rx/Gx exchange after BYE was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 - f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) - f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) - f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + /** + * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @remark This is option 1: PSAP is in PSTN network + */ + testcase TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + })) + { + var SipMessage v_sip; + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckCallEstablished(v_ueA); // Event 1 + f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03(); - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + // TODO - f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); @@ -1185,23 +2225,22 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_02 + } // End of TC TD_VoLTE_ECO_INT_REJ_01_03 - group f_TD_VoLTE_ECO_INT_REL_01_02 { + group f_TD_VoLTE_ECO_INT_REJ_01_03 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03 - } // End of f_TD_VoLTE_ECO_INT_REL_01_02 + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_03 - /** - * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * On call release, the P-CSCF A should trigger the removal of all relevant previously created bearers - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release - * @remark This is option3: IBCF is connected to the PSTN network + /** + * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected. + * @see ETSI TS 103 795-2 Clause 5.3.4.3 Emergency Session Reject */ - testcase TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -1215,7 +2254,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_PSTN_INTERFACENAME // IBCF -> PSTN -> PSAP + PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { var SipMessage v_sip; @@ -1237,15 +2276,15 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_psap); f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 + f_mtc_userCheckCallCancelled(v_ueB); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); @@ -1261,35 +2300,31 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_03 + } // End of TC TD_VoLTE_ECO_INT_REJ_02 - group f_TD_VoLTE_ECO_INT_REL_01_03 { + group f_TD_VoLTE_ECO_INT_REJ_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02 - } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 - - } // End of group EmergencySessionRelease - - group EmergencySessionAbortOrReject { + } // End of group f_TD_VoLTE_ECO_INT_REJ_02 } // End of group EmergencySessionAbortOrReject } // End of group EmergencySessionEmergencyBearerOperations /** - * @see ETSI TS 103 795-2 Clause 5.4 Emergency Deregistration + * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment */ group EmergencyNetworkDetachment { group EmergencySessionDetachment { + /** - * @desc Emergency Network Detachment (with/without) emergency registration - * - * @see + * @desc To demonstrate UE initiated network emergency detachment (IP-CAN session termination) for a UE that has not yet emergency registered to the IMS or for UE that has been emergency registered to the IMS + * @see ETSI TS 103 795-2 Clause 5.5.1 UE Emergency Network Detachment (with/without Emergency Registration) */ testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { @@ -1324,6 +2359,44 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } } // End of TC TC_VoLTE_ECO_INT_DTC_01 + + /** + * @desc To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session + * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session + */ + testcase TC_VoLTE_ECO_INT_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + // TODO + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_02 + } // End of group EmergencySessionDetachment } // End of group EmergencyNetworkDetachment diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index f205d51..1377f79 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -247,11 +247,12 @@ module AtsImsIot_Templates_GM { } // End of template mw_TP_GM_PCSCF_REGISTER_03 template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_03( - template (present) From p_from := ?, - template (present) To p_to := ?, - template (present) Authorization p_authorization := ?, - template PChargingVector p_pChargingVector := *, - template PVisitedNetworkID p_pVisitedNetworkID := * + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ? ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index 41150fe..f0d76d6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -123,7 +123,7 @@ module AtsImsIot_TestSystem { SipInterfaceMonitor gmA optional, SipInterfaceMonitor gmB optional, SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP - SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP SipInterfaceMonitor ic optional, -- GitLab From b6bf678af6bb919025fbcc8ee5da8f3021bcc6cf Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:04:20 +0200 Subject: [PATCH 36/84] Review sequence for TD_VoLTE_ECO_INT_INI_01 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 141 ++++++-------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 103 +++++----- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 176 ++++++++++++------ 3 files changed, 232 insertions(+), 188 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 4b2f27d..b2e580d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -280,7 +280,6 @@ module AtsImsIot_Emergency { * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the IM CN subsystem of IMS A. * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration - * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -295,7 +294,6 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -321,7 +319,7 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -333,25 +331,16 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - - f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 - f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - // PRACK after 183 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 @@ -359,32 +348,24 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 - f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22 - // PRACK after 180 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 + f_mtc_userAnswerCall(v_psap); // Event 20 - f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 - f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 - f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_userCheckCallEstablished(v_ueA); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 // Postamble f_mtc_EndCall(v_ueA); @@ -469,24 +450,24 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 - f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 // PRACK after 183 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + //f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 //Rx/Gx exchange after 183(SDP) was received at P-CSCF @@ -495,29 +476,29 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 // PRACK after 180 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + // f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 @@ -600,24 +581,24 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - f_mtc_check_TP_MM_PSAP_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 - f_mtc_check_TP_MM_PSAP_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 // PRACK after 183 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + //f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 //Rx/Gx exchange after 183(SDP) was received at P-CSCF @@ -626,29 +607,29 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_MM_PSAP_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 // PRACK after 180 Session Progress: require field is present // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_ECSCF_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + // f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - f_mtc_check_TP_MM_PSAP_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_PSAP_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 @@ -802,8 +783,8 @@ module AtsImsIot_Emergency { //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_ECSCF_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MW_ECSCF_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); @@ -815,7 +796,7 @@ module AtsImsIot_Emergency { // 183 Session Progress f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 //Rx/Gx exchange after 183(SDP) was received at P-CSCF @@ -826,7 +807,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 - f_mtc_check_TP_MW_ECSCF_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_userCheckRinging(v_psap); @@ -838,11 +819,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_ECSCF_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 @@ -1341,9 +1322,9 @@ module AtsImsIot_Emergency { //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 - f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_MM_PSAP_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 @@ -1353,7 +1334,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 f_mtc_userCheckCallTerminated(v_ueA); // Event 22 @@ -1431,7 +1412,7 @@ module AtsImsIot_Emergency { //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 - f_mtc_check_TP_MW_ECSCF_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 @@ -1443,7 +1424,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_ECSCF_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 f_mtc_userCheckCallTerminated(v_ueA); // Event 22 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index dc62386..4181294 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -32,45 +32,42 @@ module AtsImsIot_TP_behavior_MM { group imsInvite { /** - * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_IBCF_A entity sends an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * to the PSAP entity - * } - * } + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } */ - function f_mtc_check_TP_MM_PSAP_INVITE_01( + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -100,7 +97,7 @@ module AtsImsIot_TP_behavior_MM { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MM_PSAP_INVITE_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 } // End of group imsInvite @@ -127,7 +124,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_100Trying_01( + function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -151,7 +148,7 @@ module AtsImsIot_TP_behavior_MM { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_100Trying_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01 } // End of group ims100Trying @@ -190,7 +187,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_180RINGING_01( + function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -216,7 +213,7 @@ module AtsImsIot_TP_behavior_MM { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_180RINGING_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01 } // End of group ims180Ringing @@ -255,7 +252,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01( + function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -279,7 +276,7 @@ module AtsImsIot_TP_behavior_MM { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_183SESSION_PROGRESS_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01 } // End of group ims183SessionProgress @@ -324,7 +321,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_200OK_01( + function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -356,7 +353,7 @@ module AtsImsIot_TP_behavior_MM { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_200OK_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01 } // End of group ims200Ok @@ -395,7 +392,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_ACK_01( + function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -421,7 +418,7 @@ module AtsImsIot_TP_behavior_MM { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_ACK_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01 } // End of group imsAck @@ -461,7 +458,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_BYE_01( + function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -497,7 +494,7 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_PSAP_BYE_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 } // End of group imsBye @@ -540,7 +537,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_PSAP_200OK_BYE_01( + function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -565,7 +562,7 @@ module AtsImsIot_TP_behavior_MM { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MM_PSAP_200OK_BYE_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01 } // End of group ims200OkBye diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index a0664d7..98c80ff 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -33,53 +33,45 @@ module AtsImsIot_TP_behavior_MW_EC { group imsInvite { /** - * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg).. + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A * } - * * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * to the IMS_EBCF_A entity + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * MessageBody; + * to the IMS_E_CSCF entity * } * } */ - function f_mtc_check_TP_MW_ECSCF_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); @@ -105,7 +97,81 @@ module AtsImsIot_TP_behavior_MW_EC { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MW_ECSCF_INVITE_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01 + + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating valuePX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 } // End of group imsInvite @@ -132,7 +198,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_100Trying_01( + function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -156,7 +222,7 @@ module AtsImsIot_TP_behavior_MW_EC { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_100Trying_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01 } // End of group ims100Trying @@ -195,7 +261,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_180RINGING_01( + function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -221,7 +287,7 @@ module AtsImsIot_TP_behavior_MW_EC { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_180RINGING_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01 } // End of group ims180Ringing @@ -260,7 +326,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01( + function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -284,7 +350,7 @@ module AtsImsIot_TP_behavior_MW_EC { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_183SESSION_PROGRESS_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01 } // End of group ims183SessionProgress @@ -329,7 +395,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_200OK_01( + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -361,7 +427,7 @@ module AtsImsIot_TP_behavior_MW_EC { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_200OK_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01 } // End of group ims200Ok @@ -400,7 +466,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_ACK_01( + function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -426,7 +492,7 @@ module AtsImsIot_TP_behavior_MW_EC { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_ACK_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01 } // End of group imsAck @@ -466,7 +532,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_BYE_01( + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -494,7 +560,7 @@ module AtsImsIot_TP_behavior_MW_EC { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_ECSCF_BYE_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 } // End of group imsBye @@ -539,7 +605,7 @@ module AtsImsIot_TP_behavior_MW_EC { * } * } */ - function f_mtc_check_TP_MW_ECSCF_200OK_BYE_01( + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -564,7 +630,7 @@ module AtsImsIot_TP_behavior_MW_EC { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_ECSCF_200OK_BYE_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 } // End of group ims200OkBye -- GitLab From 886f0789b53952a54864e6d93ffdb98a84a7c51e Mon Sep 17 00:00:00 2001 From: Schmitting Date: Fri, 2 Jun 2023 11:22:08 +0200 Subject: [PATCH 37/84] Added missing TPs: TP_GM.tplan2 TP_GM_PCSCF_ECO_BYE_01 TP_GM_PCSCF_ECO_CANCEL_01 TP_MW.tplan2 TP_MW_PCSCF_ECO_BYE_01 TP_MW_PCSCF_ECO_CANCEL_01 TP_MW_PCSCF_ECO_INVITE_04 TP_MW_PCSCF_ECO_480INVITE_01 TP_E_CSCF.tplan2 TP_MM_ECSCF_ECO_BYE_01 TP_MX_ECSCF_ECO_BYE_01 TP_MI_ECSCF_ECO_BYE_01 TP_MM_ECSCF_ECO_CANCEL_01 TP_MX_ECSCF_ECO_CANCEL_01 TP_MI_ECSCF_ECO_CANCEL_01 --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 268 +++++++++++++++++++++++++- test_purposes/Gm/TP_GM.tplan2 | 74 +++++++ test_purposes/Mw/TP_MW_PS.tplan2 | 190 ++++++++++++++++++ test_purposes/Sip_Common.tplan2 | 6 + 4 files changed, 536 insertions(+), 2 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index c28b56d..189d637 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -370,7 +370,7 @@ Package TP_E_CSCF { orig_ioi_parameter indicating value "Operator Identifier Of ImsA";, MessageBody; - to the IMS_IBCF_A entity + to the IMS_BGCF_A entity } } @@ -419,11 +419,275 @@ Package TP_E_CSCF { orig_ioi_parameter indicating value "Operator Identifier Of ImsA";, MessageBody; - to the IMS_IBCF_A entity + to the IMS_BGCF_A entity } } } // End of TP_MI_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_BYE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency + Call and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_BYE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency + Call and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_BYE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency + Call and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_CANCEL_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency + Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IM_CN entity + } + } + + } // End of TP_MM_ECSCF_ECO_CANCEL_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_CANCEL_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency + Call under establishment and routes the request to the IBCF for a PSAP in another network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity hasAchievedInitialEmergencyINVITE via the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_IBCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_CANCEL_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_CANCEL_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency + Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_P_CSCF_A entity + } + then { + the IMS_E_CSCF entity sends a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_BGCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_CANCEL_01 + } // End of Package TP_E_CSCF diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index f6c8418..fb479a6 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -422,5 +422,79 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_INVITE_04 + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." + + Reference + "ETSI TS 124 229 [2] Clauses 5.1.6.9" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a BYE + } + then { + the IMS_P_CSCF_A entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + the IMS_P_CSCF_A entity receives a CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_CANCEL_01 + } // End of Package TP_GM diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index c33d606..aa276bb 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -345,5 +345,195 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_ECO_INVITE_03 + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_04 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.5" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity not isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value "Anonymous", + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + MessageBody; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_04 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_480INVITE_01 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if the E-CSCF informs the P-CSCF that Emergency Services are currently not available." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.5" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 480_INVITE containing // Temporarily Unavailable + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.6.9, 5.4.5.2 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity hasAchievedInitialEmergencyINVITE and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends an CANCEL containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_MW_PCSCF_ECO_CANCEL_01 + } // End of Package TP_MW_PS diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index f42aa2a..6be366c 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -47,6 +47,7 @@ Package Sip_Common { - IMS_P_CSCF_A - IMS_I_CSCF_A - IMS_S_CSCF_A + - IMS_BGCF_A - IMS_IBCF_A - IMS_AS_A - IMS_HSS_A @@ -62,6 +63,8 @@ Package Sip_Common { - receives - sends - forwards + // to express route to PSAP + - via // Initial conditions - isTriggeredToStart - isTriggeredToStartEmergencyCall @@ -88,6 +91,7 @@ Package Sip_Common { - registeredPublicIdsWithTelUriAndSipUri - hasReceivedSubsequentOrTargetRefreshRequestInDialog - previouslyEstablishedCallWith + - previouslyEstablishedEmergencyCallWith - isRequestedToSend - isRequestedToEstablishEmergencyCall - isRequestedToEstablisheCallTypeEmergencyCall @@ -99,6 +103,7 @@ Package Sip_Common { - hasAchievedFirstREGISTER - hasResponded486INVITE - hasAchievedInitialINVITE + - hasAchievedInitialEmergencyINVITE - hasAchievedINVITE - hasSentINVITETo - supportsRoutingTo @@ -151,6 +156,7 @@ Package Sip_Common { SipMessage r_200_Ok; SipMessage r_2xx_Any; SipMessage r_3xx_Any; + SipMessage r_380_AlternativeService; SipMessage r_401_Unauthorized; SipMessage r_403_Forbidden; SipMessage r_404_NotFound; -- GitLab From 3ac93f8b6ed5a4e4f303db008d9662a2d2cd39b0 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:27:12 +0200 Subject: [PATCH 38/84] Review sequence for TD_VoLTE_ECO_INT_INI_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 77 +++++------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 126 +++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 10 +- 3 files changed, 160 insertions(+), 53 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index b2e580d..89682d6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -294,7 +294,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -338,15 +338,15 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 //Rx/Gx exchange after 183(SDP) was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 - f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 - f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 - f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 @@ -354,7 +354,7 @@ module AtsImsIot_Emergency { f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 - f_mtc_userAnswerCall(v_psap); // Event 20 + f_mtc_userAnswerCall(v_psap); // Event 26 f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 @@ -412,8 +412,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -449,59 +448,41 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - // PRACK after 183 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 //Rx/Gx exchange after 183(SDP) was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 - f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 - f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 - f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - // PRACK after 180 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 + f_mtc_userAnswerCall(v_psap); // Event 26 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 - f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 - f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_userCheckCallEstablished(v_ueA); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 // Postamble f_mtc_EndCall(v_ueA); diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index e51ee8c..93f36b6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -1261,6 +1261,66 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 + /** + * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). * Initial conditions with { @@ -1329,6 +1389,72 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_02 + /** + * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * // TODO Geolocation header maybe added later, check! + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02 + function f_mtc_check_TP_GM_PCSCF_INVITE_03( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 4181294..ded58e6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -68,12 +68,12 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); // Check the INVITE -- GitLab From 999af1cd51b531d654500a6d7b28d749c6cbbe1d Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:34:55 +0200 Subject: [PATCH 39/84] Review sequence for TD_VoLTE_ECO_INT_INI_02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 89682d6..f031555 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -925,7 +925,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index ddded2b..f0ca8b4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -31,7 +31,7 @@ module AtsImsIot_Templates_MM { /** * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 */ - template(present) INVITE_Request mdw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template(present) INVITE_Request mw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, template (present) From p_from := ?, template (present) To p_to := ?) modifies mw_INVITE_Request_Base := { @@ -66,7 +66,7 @@ module AtsImsIot_Templates_MM { }, pAccessNetworkInfo := omit } - } + } template (present) Response mw_TP_MM_PSAP_100Trying_01( template (present) CSeq p_cSeq := ?, -- GitLab From 0556e26fb6e646a53352c1e8219d4b3902ef3aa8 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:39:04 +0200 Subject: [PATCH 40/84] Review sequence for TD_VoLTE_ECO_INT_INI_03 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 63 +++++++++---------------- 1 file changed, 22 insertions(+), 41 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index f031555..513719c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -528,8 +528,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCF -> PSAP })) { var SipMessage v_sip; @@ -561,59 +560,41 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 - f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - // PRACK after 183 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - //f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - //f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 //Rx/Gx exchange after 183(SDP) was received at P-CSCF - f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 - f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 - f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 - f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - // PRACK after 180 Session Progress: require field is present - // FIXME Add check of requires SIP message header to check PRACK - // f_mtc_check_TP_MW_PCSCF_ECO_PRACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 - // f_mtc_check_TP_GM_PCSCF_PRACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 + f_mtc_userAnswerCall(v_psap); // Event 26 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 26 - f_mtc_check_TP_MW_IBCF_200OK(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 - f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 - f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 33 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_userCheckCallEstablished(v_ueA); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 // Postamble f_mtc_EndCall(v_ueA); -- GitLab From d3e28654ebb9c3642ff62f8959e635e678fd21c2 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:44:35 +0200 Subject: [PATCH 41/84] Review sequence for TD_VoLTE_ECO_INT_INI_03 --- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 1377f79..35b6edd 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -381,12 +381,31 @@ module AtsImsIot_Templates_GM { } } // End of template mw_TP_GM_PCSCF_INVITE_01 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ? ) modifies mw_TP_GM_PCSCF_INVITE_01 := { - } // End of template mw_TP_GM_PCSCF_INVITE_03 + } // End of template mw_TP_GM_PCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_02 template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_03( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, -- GitLab From d0978364507d86b7455cf7eb3ee211c761709f42 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 11:48:07 +0200 Subject: [PATCH 42/84] Review sequence for TD_VoLTE_ECO_INT_INI_03 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 1 + 1 file changed, 1 insertion(+) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 513719c..7c5f8d6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -22,6 +22,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; import from AtsImsIot_Functions all; + import from AtsImsIot_Templates all; import from AtsImsIot_TP_behavior_GM all; import from AtsImsIot_TP_behavior_MW_PS all; import from AtsImsIot_TP_behavior_MW_SI all; -- GitLab From 4594b5f66c74b7ef3076d652d1a9af735decd706 Mon Sep 17 00:00:00 2001 From: Yann Garcia Date: Fri, 2 Jun 2023 12:43:41 +0200 Subject: [PATCH 43/84] Review sequence for TD_VoLTE_ECO_INT_INI_04 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 66 +++++++-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn | 142 +++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 7 + ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn | 83 +++++++++++ 4 files changed, 290 insertions(+), 8 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 7c5f8d6..a12755a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -30,6 +30,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_EC all; import from AtsImsIot_TP_behavior_MW_EB all; import from AtsImsIot_TP_behavior_MM all; + import from AtsImsIot_TP_behavior_ML all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; import from AtsImsIot_TP_behavior_GX all; @@ -642,9 +643,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME, // IBCF -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + PX_SIP_MM_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF })) { var SipMessage v_sip; @@ -659,15 +659,65 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04(); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 12 + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 + + f_mtc_userCheckRinging(v_psap); // Event 21 + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 21 + f_mtc_userAnswerCall(v_psap); // Event 28 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 25 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 28 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 29 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 30 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 31 + f_mtc_userCheckCallEstablished(v_psap); // Event 31 // Postamble f_mtc_EndCall(v_ueA); diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn new file mode 100644 index 0000000..08ca556 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn @@ -0,0 +1,142 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at ML interface + */ +module AtsImsIot_TP_behavior_ML { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the LRF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_LRF entity + * } + * } + */ + function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_ML_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01 + + } // End of group imsInvite + + group ims3xxx { + + function f_mtc_check_TP_ML_ECSCF_ECO_3xx_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_ML_ECSCF_3XX_Base_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_ML_ECSCF_ECO_3xxx_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ML_ECSCF_ECO_3xx_01 + + } // End of group ims183SessionProgress + +} // End of module AtsImsIot_TP_behavior_ML \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index eb1a9bc..7b149a1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -1920,6 +1920,13 @@ module AtsImsIot_Templates { messageBody := *, payload := * } + template Response mdw_3XX_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, (300..399), ?}, + msgHeader := ?, + messageBody := *, + payload := * + } template Response mw_401Unauthorized_Base modifies m_Response_Dummy := { statusLine := {c_sipNameVersion, 401, ?}, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn new file mode 100644 index 0000000..073ab4a --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn @@ -0,0 +1,83 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at ML interface + */ +module AtsImsIot_Templates_ML { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_ML_PSAP_INVITE_01 + */ + template(present) INVITE_Request mw_TP_ML_ECSCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_ML_ECSCF_3XX_Base_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ML_ECSCF_3XX_Base_01 + +} // End of module AtsImsIot_Templates_ML -- GitLab From 1dada00cb8abaa3dab066679ecbc9a79a39d069f Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 5 Jun 2023 14:41:25 +0200 Subject: [PATCH 44/84] Create TITAN version based on NG112 project - Step 1 --- .gitmodules | 4 + LICENSE | 2 +- Makefile | 124 + README.md | 334 + ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc | 130 + ccsrc/EncDec/LibEmtel/module.mk | 1 + ccsrc/EncDec/LibSip/LibSip_Encdec.cc | 372 + .../LibSip/LibSip_SMSFunctions_Encdec.cc | 9 + ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc | 109 + .../EncDec/LibSip/LibSip_Templates_Encdec.cc | 9 + ccsrc/EncDec/LibSip/module.mk | 5 + ccsrc/Ports/LibDiameter/DiameterPort.cc | 246 + ccsrc/Ports/LibDiameter/DiameterPort.hh | 64 + ccsrc/Ports/LibDiameter/module.mk | 3 + ccsrc/Ports/LibHttp/HttpPort.cc | 117 + ccsrc/Ports/LibHttp/HttpPort.hh | 46 + ccsrc/Ports/LibHttp/module.mk | 3 + ccsrc/Ports/LibSip/OperatorPort.hh | 31 + ccsrc/Ports/LibSip/SipPort.cc | 246 + ccsrc/Ports/LibSip/SipPort.hh | 64 + ccsrc/Ports/LibSip/module.mk | 3 + ccsrc/Protocols/Diameter/diameter_layer.cc | 146 + ccsrc/Protocols/Diameter/diameter_layer.hh | 104 + .../Diameter/diameter_layer_factory.hh | 45 + ccsrc/Protocols/Diameter/module.mk | 3 + ccsrc/Protocols/Http/http_codec_emtel.cc | 111 + ccsrc/Protocols/Http/http_codec_emtel.hh | 18 + ccsrc/Protocols/Http/module.mk | 3 + ccsrc/Protocols/Sip/module.mk | 17 + ccsrc/Protocols/Sip/sip_codec_ack_request.cc | 46 + ccsrc/Protocols/Sip/sip_codec_ack_request.hh | 24 + ccsrc/Protocols/Sip/sip_codec_bye_request.cc | 46 + ccsrc/Protocols/Sip/sip_codec_bye_request.hh | 24 + .../Protocols/Sip/sip_codec_cancel_request.cc | 46 + .../Protocols/Sip/sip_codec_cancel_request.hh | 24 + ccsrc/Protocols/Sip/sip_codec_headers.cc | 3305 ++ ccsrc/Protocols/Sip/sip_codec_headers.hh | 132 + ccsrc/Protocols/Sip/sip_codec_info_request.cc | 46 + ccsrc/Protocols/Sip/sip_codec_info_request.hh | 24 + .../Protocols/Sip/sip_codec_invite_request.cc | 46 + .../Protocols/Sip/sip_codec_invite_request.hh | 24 + ccsrc/Protocols/Sip/sip_codec_message_body.cc | 929 + ccsrc/Protocols/Sip/sip_codec_message_body.hh | 41 + .../Sip/sip_codec_message_request.cc | 46 + .../Sip/sip_codec_message_request.hh | 24 + .../Protocols/Sip/sip_codec_notify_request.cc | 46 + .../Protocols/Sip/sip_codec_notify_request.hh | 24 + .../Sip/sip_codec_options_request.cc | 46 + .../Sip/sip_codec_options_request.hh | 24 + .../Sip/sip_codec_register_request.cc | 46 + .../Sip/sip_codec_register_request.hh | 24 + ccsrc/Protocols/Sip/sip_codec_request.cc | 210 + ccsrc/Protocols/Sip/sip_codec_request.hh | 45 + ccsrc/Protocols/Sip/sip_codec_response.cc | 191 + ccsrc/Protocols/Sip/sip_codec_response.hh | 46 + .../Sip/sip_codec_subscribe_request.cc | 46 + .../Sip/sip_codec_subscribe_request.hh | 24 + ccsrc/Protocols/Sip/sip_layer.cc | 146 + ccsrc/Protocols/Sip/sip_layer.hh | 129 + ccsrc/Protocols/Sip/sip_layer_factory.hh | 45 + config.mk | 6 + docs/o2.cfg | 1768 ++ emergency-iop.code-workspace | 7 + install.sh | 35 + plantuml/README.md | 0 plantuml/__main__.py | 180 + plantuml/etsi-style.iuml | 46 + plantuml/plantuml.jar | Bin 0 -> 8383820 bytes plantuml/regex_list.py | 124 + scripts/build_titan.bash | 106 + scripts/devenv.bash.ubuntu | 73 + scripts/f.bash | 19 + scripts/generate_png.sh | 17 + scripts/run_all.bash | 60 + scripts/run_mtc.bash | 48 + scripts/run_ptcs.bash | 31 + scripts/titan_repos.txt | 56 + scripts/update_user_name.sh | 16 + titan-test-system-framework | 1 + ttcn/AtsImsIot/module.mk | 52 + .../module.mk | 2 + .../module/Abstract_Socket_CNL113384.tpd | 61 + .../module/LICENSE | 277 + .../module/README.md | 14 + .../doc/Abstract_Socket_CNL113384_1551.adoc | 1125 + .../doc/Abstract_Socket_CNL113384_1551.pdf | 25084 ++++++++++++++++ .../doc/Abstract_Socket_CNL113384_PRI.doc | Bin 0 -> 92672 bytes .../module/doc/images/Abstract socket.png | Bin 0 -> 5335 bytes .../module/src/Abstract_Socket.cc | 2821 ++ .../module/src/Abstract_Socket.grp | 35 + .../module/src/Abstract_Socket.hh | 414 + ttcn/patch_lib_common_titan/module.mk | 9 + .../ttcn/LibCommon_BasicTypesAndValues.ttcn | 247 + .../ttcn/LibCommon_DataStrings.ttcn | 168 + .../ttcn/LibCommon_Sync.ttcn | 1359 + .../module.mk | 1 + ttcn/patch_lib_diameter_titan/module.mk | 15 + ttcn/patch_lib_http/module.mk | 8 + .../ttcn/LibHttp_Functions.ttcn | 326 + .../ttcn/LibHttp_JsonMessageBodyTypes.ttcn | 24 + .../ttcn/LibHttp_JsonTemplates.ttcn | 121 + .../ttcn/LibHttp_Templates.ttcn | 428 + .../ttcn/LibHttp_TestSystem.ttcn | 38 + .../ttcn/LibHttp_XmlMessageBodyTypes.ttcn | 62 + .../ttcn/LibHttp_XmlTemplates.ttcn | 1095 + ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn | 1548 + .../patch_lib_ims_titan/LibIms_Templates.ttcn | 4632 +++ ttcn/patch_lib_ims_titan/module.mk | 6 + ttcn/patch_lib_iot_titan/module.mk | 10 + ttcn/patch_lib_msrp_titan/module.mk | 6 + ttcn/patch_lib_sip_titan/LibSip_Common.ttcn | 42 + .../LibSip_EncdecDeclarations.ttcn | 120 + .../LibSip_MessageBodyTypes.ttcn | 62 + ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn | 149 + ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn | 406 + .../LibSip_SIPTypesAndValues.ttcn | 2001 ++ .../LibSip_SMSFunctions.ttcn | 48 + .../LibSip_SMSTemplates.ttcn | 304 + .../LibSip_SMSTypesAndValues.ttcn | 485 + .../LibSip_SimpleMsgSummaryTypes.ttcn | 61 + ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn | 5042 ++++ .../patch_lib_sip_titan/LibSip_Templates.ttcn | 4691 +++ ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn | 113 + ...etsi_org_ngn_params_xml_comm_div_info.ttcn | 389 + ...etsi_org_ngn_params_xml_simservs_mcid.ttcn | 105 + ...etsi_org_ngn_params_xml_simservs_pstn.ttcn | 689 + ...etsi_org_ngn_params_xml_simservs_xcap.ttcn | 621 + ttcn/patch_lib_sip_titan/module.mk | 26 + .../urn_3gpp_ns_cw_1_0.ttcn | 79 + .../urn_ietf_params_xml_ns_common_policy.ttcn | 223 + ...rn_ietf_params_xml_ns_conference_info.ttcn | 572 + .../urn_ietf_params_xml_ns_reginfo.ttcn | 165 + ...urn_ietf_params_xml_ns_resource_lists.ttcn | 194 + .../urn_oma_xml_xdm_common_policy.ttcn | 98 + ttcn/patch_lib_upper_tester_titan/module.mk | 1 + virtualization/docker-dev/Dockerfile | 28 + .../docker-dev/Dockerfile.stfubuntu | 86 + virtualization/docker-dev/README.md | 99 + virtualization/docker-dev/build.sh | 25 + .../docker-dev/home/etc/init.d/10-titan.sh | 53 + .../docker-dev/home/etc/init.d/30-osip.sh | 14 + .../home/etc/init.d/40-etsi_AtsImsIot.sh | 41 + .../docker-dev/home/etc/init.d/50-doxygen.sh | 17 + .../docker-dev/home/etc/titan_repos.txt | 56 + virtualization/docker-dev/run.sh | 11 + virtualization/docker/Dockerfile | 60 + virtualization/docker/docker-entrypoint.sh | 58 + virtualization/docker/docker-run.sh | 15 + virtualization/vagrant/Vagrantfile | 73 + virtualization/vagrant/provisioner.bash | 132 + 150 files changed, 68322 insertions(+), 1 deletion(-) create mode 100644 Makefile create mode 100644 ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc create mode 100644 ccsrc/EncDec/LibEmtel/module.mk create mode 100644 ccsrc/EncDec/LibSip/LibSip_Encdec.cc create mode 100644 ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc create mode 100644 ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc create mode 100644 ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc create mode 100644 ccsrc/EncDec/LibSip/module.mk create mode 100644 ccsrc/Ports/LibDiameter/DiameterPort.cc create mode 100644 ccsrc/Ports/LibDiameter/DiameterPort.hh create mode 100644 ccsrc/Ports/LibDiameter/module.mk create mode 100644 ccsrc/Ports/LibHttp/HttpPort.cc create mode 100644 ccsrc/Ports/LibHttp/HttpPort.hh create mode 100644 ccsrc/Ports/LibHttp/module.mk create mode 100644 ccsrc/Ports/LibSip/OperatorPort.hh create mode 100644 ccsrc/Ports/LibSip/SipPort.cc create mode 100644 ccsrc/Ports/LibSip/SipPort.hh create mode 100644 ccsrc/Ports/LibSip/module.mk create mode 100644 ccsrc/Protocols/Diameter/diameter_layer.cc create mode 100644 ccsrc/Protocols/Diameter/diameter_layer.hh create mode 100644 ccsrc/Protocols/Diameter/diameter_layer_factory.hh create mode 100644 ccsrc/Protocols/Diameter/module.mk create mode 100644 ccsrc/Protocols/Http/http_codec_emtel.cc create mode 100644 ccsrc/Protocols/Http/http_codec_emtel.hh create mode 100644 ccsrc/Protocols/Http/module.mk create mode 100644 ccsrc/Protocols/Sip/module.mk create mode 100644 ccsrc/Protocols/Sip/sip_codec_ack_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_ack_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_bye_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_bye_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_cancel_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_cancel_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_headers.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_headers.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_info_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_info_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_invite_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_invite_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_message_body.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_message_body.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_message_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_message_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_notify_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_notify_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_options_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_options_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_register_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_register_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_response.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_response.hh create mode 100644 ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc create mode 100644 ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh create mode 100644 ccsrc/Protocols/Sip/sip_layer.cc create mode 100644 ccsrc/Protocols/Sip/sip_layer.hh create mode 100644 ccsrc/Protocols/Sip/sip_layer_factory.hh create mode 100644 config.mk create mode 100644 docs/o2.cfg create mode 100644 emergency-iop.code-workspace create mode 100755 install.sh create mode 100644 plantuml/README.md create mode 100644 plantuml/__main__.py create mode 100644 plantuml/etsi-style.iuml create mode 100644 plantuml/plantuml.jar create mode 100644 plantuml/regex_list.py create mode 100755 scripts/build_titan.bash create mode 100755 scripts/devenv.bash.ubuntu create mode 100755 scripts/f.bash create mode 100755 scripts/generate_png.sh create mode 100755 scripts/run_all.bash create mode 100755 scripts/run_mtc.bash create mode 100755 scripts/run_ptcs.bash create mode 100644 scripts/titan_repos.txt create mode 100755 scripts/update_user_name.sh create mode 160000 titan-test-system-framework create mode 100644 ttcn/AtsImsIot/module.mk create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp create mode 100644 ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh create mode 100644 ttcn/patch_lib_common_titan/module.mk create mode 100644 ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn create mode 100644 ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn create mode 100644 ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn create mode 100644 ttcn/patch_lib_config_and_trigger_titan/module.mk create mode 100644 ttcn/patch_lib_diameter_titan/module.mk create mode 100644 ttcn/patch_lib_http/module.mk create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_Functions.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_Templates.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_TestSystem.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn create mode 100644 ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn create mode 100644 ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn create mode 100644 ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn create mode 100644 ttcn/patch_lib_ims_titan/module.mk create mode 100644 ttcn/patch_lib_iot_titan/module.mk create mode 100644 ttcn/patch_lib_msrp_titan/module.mk create mode 100644 ttcn/patch_lib_sip_titan/LibSip_Common.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn create mode 100644 ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn create mode 100644 ttcn/patch_lib_sip_titan/module.mk create mode 100644 ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn create mode 100644 ttcn/patch_lib_upper_tester_titan/module.mk create mode 100644 virtualization/docker-dev/Dockerfile create mode 100644 virtualization/docker-dev/Dockerfile.stfubuntu create mode 100644 virtualization/docker-dev/README.md create mode 100755 virtualization/docker-dev/build.sh create mode 100755 virtualization/docker-dev/home/etc/init.d/10-titan.sh create mode 100755 virtualization/docker-dev/home/etc/init.d/30-osip.sh create mode 100755 virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh create mode 100755 virtualization/docker-dev/home/etc/init.d/50-doxygen.sh create mode 100644 virtualization/docker-dev/home/etc/titan_repos.txt create mode 100755 virtualization/docker-dev/run.sh create mode 100644 virtualization/docker/Dockerfile create mode 100755 virtualization/docker/docker-entrypoint.sh create mode 100755 virtualization/docker/docker-run.sh create mode 100644 virtualization/vagrant/Vagrantfile create mode 100755 virtualization/vagrant/provisioner.bash diff --git a/.gitmodules b/.gitmodules index f269600..68eb61f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,3 +14,7 @@ path = ttcn/LibIms url = https://forge.etsi.org/rep/LIBS/LibIms.git branch = TTF006 +[submodule "titan-test-system-framework"] + path = titan-test-system-framework + url = https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + branch = devel diff --git a/LICENSE b/LICENSE index 2df8cd5..c7a6ba0 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2022 ETSI +Copyright 2019 ETSI Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..2659c9e --- /dev/null +++ b/Makefile @@ -0,0 +1,124 @@ +-include config.mk + +ifeq (,$(ATS)) + $(error ATS shall be defined) +endif + +ifeq (,$(TOPDIR)) + TOPDIR := . +endif + +ifeq (,$(TTCN3_DIR)) + $(error TTCN3_DIR shall be defined in config.mk) +endif +first: all + +define IncludeModule +undefine sources +undefine modules +undefine includes +include $(1)/module.mk +$$(foreach S, $$(sources), $$(eval all_sources += $(1)/$$(S))) +$$(foreach I, $$(includes), $$(eval all_includes += $(1)/$$(I))) +$$(foreach M, $$(modules), $$(eval $$(call IncludeModule, $$(if $$(filter /%, $$(M)), $$(M), $(1)/$$(M))))) +endef + +all_includes := $(TTCN3_DIR)/include $(TTCN3_DIR)/src /usr/include/libxml2 +defines += TITAN_RUNTIME_2 _NO_SOFTLINKS_ $(ATS) AS_USE_SSL +libs += $(TTCN3_DIR)/lib/libttcn3-rt2-parallel.a -lstdc++fs + +ifeq (Windows_NT,$(OS)) +# Silence linker warnings. +LDFLAGS += -Wl,--enable-auto-import,--enable-runtime-pseudo-reloc +defines += WIN32 +libs += $(patsubst %, -L%/lib, $(OPENSSL_DIR)) +all_includes += $(addsuffix /include, $(OPENSSL_DIR)) +libs += $(WPCAP_DLL_PATH) +else +defines += LINUX +libs += -lpcap -lrt -lpthread +endif + +libs += -lssl -lcrypto -lxml2 -L$(OSIP_LIB) -losipparser2 + +$(eval $(call IncludeModule, $(TOPDIR)/ttcn/$(ATS))) + +outdir := $(TOPDIR)/build/$(ATS) +bindir := $(TOPDIR)/bin + +sources := $(sort $(all_sources)) +includes := $(outdir) $(outdir)/.. $(all_includes) $(NPCAP_INCLUDE) $(OSIP_INCLUDE) + +ifeq (Windows_NT,$(OS)) + EXE=.exe +endif + +ttcn_sources := $(filter %.ttcn , $(sources)) +ttcn3_sources := $(filter %.ttcn3, $(sources)) +xsd_sources := $(filter %.xsd, $(sources)) + +tt_sources := $(ttcn_sources) $(ttcn3_sources) $(xsd_sources) +cc_sources := $(filter %.cc, $(sources)) + +gen_ttcn_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.cc, $(ttcn_sources)))) +gen_ttcn_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn, %.hh, $(ttcn_sources)))) +gen_ttcn3_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.cc, $(ttcn3_sources)))) +gen_ttcn3_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.ttcn3, %.hh, $(ttcn3_sources)))) +gen_xsd_sources := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd, %.cc, $(xsd_sources)))) +gen_xsd_headers := $(addprefix $(outdir)/, $(notdir $(patsubst %.xsd, %.hh, $(xsd_sources)))) + +gen_sources := $(gen_ttcn_sources) $(gen_ttcn3_sources) $(gen_xsd_sources) +gen_headers := $(gen_ttcn_headers) $(gen_ttcn3_headers) $(gen_xsd_headers) + +gen_objects := $(patsubst %.cc, %.o, $(gen_sources)) +cc_objects := $(patsubst %.cc, $(outdir)/%.o, $(cc_sources)) + +.PHONY: all FORCE echo + +all: $(bindir) $(outdir) $(bindir)/$(ATS)$(EXE) + +echo_sources: + @echo -e "$(addsuffix \n,$(all_sources))" + +echo: echo_sources + @echo -e "sources:\n $(addsuffix \n, $(sources))" + @echo -e "gen_sources:\n $(addsuffix \n, $(gen_sources))" + @echo -e "gen_objects:\n $(addsuffix \n, $(gen_objects))" + @echo -e "cc_objects:\n $(addsuffix \n, $(cc_objects))" + @echo -e "includes:\n $(addsuffix \n, $(includes))" + @echo -e "defines: $(addsuffix \n, $(defines))" + +clean: + rm -f $(outdir)/$(ATS)$(EXE) $(gen_objects) $(gen_sources) $(gen_headers) $(cc_objects) $(outdir)/.generate + +regen: force_regen $(outdir)/.generate +force_regen: + rm -f $(outdir)/.generate + +$(outdir) $(bindir): + mkdir -p $@ + +$(bindir)/$(ATS)$(EXE): $(gen_objects) $(cc_objects) + g++ -g -O0 -std=c++17 -o $@ $(LDFLAGS) $(gen_objects) $(cc_objects) $(libs) + +$(gen_objects) :%.o :%.cc + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +$(cc_objects) : $(outdir)/%.o : %.cc + mkdir -p $(dir $@) + g++ -g -O0 -std=c++17 -c $(addprefix -D, $(defines)) $(addprefix -I, $(includes)) -o $@ $< + +$(gen_sources): $(outdir)/.generate + +$(outdir)/.generate: Makefile $(tt_sources) + $(foreach F, $(wildcard ttcn/patch_ims_titan/*.ttcn), cp $(F) ttcn/LibIms/ttcn;) + $(foreach F, $(wildcard ttcn/patch_sip_titan/*.ttcn), cp $(F) ttcn/LibSip/ttcn;) + $(foreach F, $(wildcard ttcn/patch_lib_common_titan/ttcn/*.ttcn), cp $(F) ttcn/LibCommon/ttcn;) + $(foreach F, $(wildcard ttcn/patch_lib_http/*.ttcn), cp $(F) ttcn/LibIts/ttcn/Http;) + $(TTCN3_DIR)/bin/compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources) + touch $@ + +$(foreach S, $(ttcn_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn, %.cc, $(S))): $(S))) +$(foreach S, $(ttcn3_sources), $(eval $(outdir)/$(notdir $(patsubst %.ttcn3, %.cc, $(S))): $(S))) +$(foreach S, $(xsd_sources), $(eval $(outdir)/$(notdir $(patsubst %.xsd, %.cc, $(S))): $(S))) + diff --git a/README.md b/README.md index e69de29..aad3949 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,334 @@ +# Voice and Video over LTE/Emergency VoLTE Interoperability Tests + +## Introduction +This repositories contains the test specifications and test adapter code +for interoprability tests to ETSI TS 1037 950-2 (Core Network and Interoperability Testing (INT); Network Interoperability Test Description for emergency services over VoLTE; (3GPP™ Release 15); Part 2: Test Descriptions). + +## Contact information +Email at cti_support at etsi dot org + +## License +The content of this repository and the files contained are released under the BSD-3-Clause License. +See the attached LICENSE file or visit +https://forge.etsi.org/legal-matters + +## Standard links +- ETSI TS 103 795-1: "Core Network and Interoperability Testing (INT); Network Interoperability Test Description for emergency services over VoLTE; (3GPP™ Release 15); Part 1: Test Purposes (TP)" +- ETSI TS 124 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; 5G; IP multimedia call control protocol based on Session Initiation Protocol (SIP) and Session Description Protocol (SDP); Stage 3 (3GPP TS 24.229 Release 15)" +- ETSI TS 129 165: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; 5G; Inter-IMS Network to Network Interface (NNI) (3GPP TS 29.165 Release 15)" +- ETSI TS 129 228: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; IP Multimedia (IM) Subsystem Cx and Dx Interfaces; Signalling flows and message contents (3GPP TS 29.228 Release 15)". +- ETSI TS 129 229: "Digital cellular telecommunications system (Phase 2+) (GSM); Universal Mobile Telecommunications System (UMTS); LTE; Cx and Dx interfaces based on the Diameter protocol; Protocol details (3GPP TS 29.229 Release 15)" + +## RFC links +- + +NOTE All draft can be found in the 'IETF XML Registry', accessible [here](https://www.iana.org/assignments/xml-registry/xml-registry.xhtml) + +# Installation + +The ETSI Emergency VoLTE Interoperability Tests project builds and tests regularly on the following platforms: + + - Linux (Ubuntu) + +Note: The [OpenSSL](https://www.openssl.org) version > 1.1.x is also required. + +## How to do it? + +They are two different methods: +- Using [Vagrant](https://www.vagrantup.com/) +- Using [Docker](https://www.docker.com/) + +How to choose one of these methods is depending of your host system. + +NOTE: In all case, if you want to setup an continuous integration process (e.g. Jenkins), Docker is the best choice. + + +### The host system is Windows +The both methods require a virtual machine. You can use either VirtualBox or WMware. +In this case, the easiest way is to use Vagrant. + + +### The host system is Linux +Vagrant requires a virtual machine. You can use either VirtualBox or WMware. +Docker does not need a virtual machine, so it is the more efficant way. + + +## Using TITAN compiler on a Docker image + +In this configuration, TITAN compiler is located on a Docker image and the sources and the outputs are located on the host. + +Pre-requisites on your host machine: +- Install Docker + +Procedure on the host machine: +- Open a Terminal +- Clone the ETSI Emergency VoLTE Interoperability Test System +- From the ETSI Emergency VoLTE Interoperability Test System root directory, build the Docker image executing the following commands: + +```sh +$ cd ./virtualization/docker +$ docker build --no-cache --tag alpine-emergency-iop -f Dockerfile --force-rm . +$ docker images +``` + +To build the Emergency VoLTE Interoperability Test Suite, execute the following command: + +```sh +$ ./docker-run.sh build +``` + +Possble other options are 'clean' to remove all the build outputs or 'rebuild' to force a build of the Test Suite after a 'clean'. + +To retrieve the list of the available test cases, execute the following command: + +```sh +$ ./docker-run.sh list +``` + +Before to execute the Emergency VoLTE Interoperability Test Suite, prepare, edit and update the configuration file: + +```sh +$ ln -sf ../../etc/AtsXxx/AtsXxx_yyy.cf_ ../../etc/AtsXxx/AtsXxx.cfg +$ vi ../../etc/AtsXxx/AtsXxx.cfg # To update it +``` + +To execute the Emergency VoLTE Interoperability Test Suite, execute the following command: + +```sh +$ ./docker-run.sh run +``` + +Notes: +- The Emergency VoLTE Interoperability Test System is listening on port 443 +- Updating the file etc/AtsXxx/AtsXxx.cfg is about (e.g. etc/AtsBCF/AtsBCF.cfg): +. Selecting the test(s) to be executed +. Updating value of PICs and PIXITs +. Updating HTTP port setting + +## Using development Docker image + +In this configuration, the TITAN compiler, the sources and the outputs are located on the Docker image. + +Pre-requisites on your host machine: +- Install Docker + +Procedure for a Windows host machine: +- On your host machine, open a the Docker Quickstart Terminal +- On your host machine, clone the ETSI EEmergency Communications project. NOTE that only Docker folder and .jenkins.sh script file are required +- From the ETSI Emergency VoLTE Interoperability Tests project root directory, execute the following commands: + +```sh +$ ./.jenkins.sh +... +``` + +NOTE The creation and the installations will take some time to achieve +- Start the container + +```sh +$ ./docker/run-container.sh +... +``` + +- Switch to the next clause (Usage) + + +## Using Vagrant + +Pre-requisites on your host machine: +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [Vagrant](https://www.vagrantup.com/intro/getting-started/) +- Install Vagrant plugin vagrant-vbguest +- Credentials to access [ETSI forge](https://forge.etsi.org/gitlab/users/sign_in) + - Set the environment variable USERNAME to your ETSI EOL account user name + - Set the environment variable PASSWORD to your ETSI EOL account password + +Procedure: +- On your host machine, open a command line session (PuTTY, DOS window...) +- From the ETSI Emergency VoLTE Interoperability Tests project, clone the Vagrant folder +- In the file Vagrantfile, modify the tag config.vm.provision replacing & strings by your ETSI credentials +- In the Vagrant folder, execute the following commands: + +```sh +$ vagrant up --provider virtualbox --provision +... +``` + +NOTE The creation and the installations will take some time to achieve +- Stop vagrant virtual machine + +```sh +$ vagrant halt +... +``` + +- Update the file 'Vagrantfile' to match with your networks configuration +- Re-start the vagrant virtual machine and log to to the machine + +```sh +$ vagrant up +... +$ vagrant ssh +``` + +- Switch to the next clause (Usage) + +NOTE The user password is vagrant. + + +## From scratch + +Pre-requisites: +- Install Virtualbox + +Procedure: +- Install a new Linux Virtual machine (Mint, Debian...) +- Update your system with the latest version of kernel and security packages +- Install the following packages (According to the Linux chosen, the package naming can be different) + autoconf + bison + build-essential + cmake + curl + dos2unix + doxygen + emacs + expect + flex + g++:latest + gcc:latest + graphviz + gdb + git-core + gnutls-bin + libglib2.0-dev + libpcap-dev + libgcrypt-dev + libncurses5-dev + libssl-dev + libtool-bin + libtool + libwireshark-dev + libxml2-dev + lsof + ntp + pkg-config + qt5-default + qtmultimedia5-dev + libqt5svg5-dev + subversion + sudo + sshpass + tcpdump + texlive-font-utils + tshark + valgrind + vim + vsftpd + xutils-dev + tree + tzdata + unzip + wget + xsltproc +- In your home directory, create the following folders: + - $HOME/frameworks, + - $HOME/dev + - $HOME/lib + +- In $HOME/frameworks, build the following package: + - Eclipse IDE for C/C++ Developers, according the procedure specified [here](https://www.eclipse.org/cdt/) + - TITAN, according the procedure specified [here](https://github.com/eclipse/titan.core) + - Import the TITAN plugin into your Eclipse IDE, according the procedure specified [here](https://github.com/eclipse/titan.core) + +- Install LibOSIP framework +```sh +$ cd ${HOME}/frameworks +$ git clone https://git.savannah.gnu.org/git/osip.git ./osip +$ cd osip +$ ./autogen.sh +$ ./configure --prefix=/home/etsi +$ make && make install +``` + +- Clone the ETSI Emergency VoLTE Interoperability Tests project into $HOME/dev folder + +```sh +$ git clone --recurse-submodules --branch devel https://forge.etsi.org/rep/int/vxlte/emergency-iop.git +``` + +- Apply patches +```sh +$ cd /home/etsi/dev/emergency-iop/ +$ ./install.sh +``` + +- Update your default environment with the content of the script $HOME/dev/emergency-iop/scripts/devenv.bash.ubuntu + +- Switch to the next clause (Usage) + + +# Generate certificates for TLS and Emergency VoLTE Interoperability security support + +This clause describes how generate certificates desrived from Let's encrypt certificate. These certificate will be used for TS mutual authentication. +NOTE: +- Certficates shall be renewed every 3 months +- The port 80 shall be vailable for standalone validation + +Pre-requisites: +- You need to install python and [certbot](https://manpages.ubuntu.com/manpages/impish/en/man1/certbot.1.html). + +To generate certifcates, execute the following command: + +```sh +$ export REQUESTS_CA_BUNDLE=$(dirname `python -c "import certifi; print(certifi.where())"`) +$ mkdir -p $HOME/var/ssl +$ sudo certbot certonly --debug --emergency-iop-tls-cert --config-dir $HOME/var/ssl --work-dir $HOME/var/ssl --logs-dir $HOME/var/ssl --standalone --agree-tos --email -d -w $HOME/var/ssl/ +``` + +NOTE: For testing certificate generation and renewal, use the certbot's --dry-run option. + + +# Usage + +This clause describes how to compile and execute an Abstract Test Suite. +The procedures below illustrate how to run the CAM test suite. The same procedures will apply for any other ETSI Emergency Communications test suite. + + +Pre-requisites: +- Your machine is installed following one of the installation method describes in the previous clause +- Your are logged as 'etsi' or 'vagrant' user + +Procedure in TITAN command line: +- Open several SSH session (PuTTY...) +- Change to the directory ~/dev/emergency-iop/ +- Build the test suite you want to exectue (e.g. LIS test suite) + +```sh +$ cd ~/dev/emergency-iop/ +$ export ATS=AtsImsIot +$ make +... +``` + +- Edit the file ../etc/AtsImsIot/AtsImsIot.cfg +- Update the following fields: + - system.httpPort.params + - system.SIPP.params + - system.DIAMETER.params + +- To run the test suitem, execute the following command: + +```sh +$ cd ~/dev/emergency-iop/scripts +$ ./run-all.bash +... +``` + +- The log files are located in ../logs/AtsImsIot folder. You can edit them using any editor or using the Eclipse TITAN log plugins + + +# How to Report a Bug + +The ETSI Emergency VoLTE Interoperability Tests project is under constant development, so it is possible that you will +encounter a bug while using it. Please report bugs at cti_support at etsi dot org. diff --git a/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc b/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc new file mode 100644 index 0000000..b13692a --- /dev/null +++ b/ccsrc/EncDec/LibEmtel/LibNg112_EncDec.cc @@ -0,0 +1,130 @@ +#include "LibNg112_EncdecDeclarations.hh" + +#include "json_codec.hh" + +#include "loggers.hh" + +namespace LibNg112__EncdecDeclarations { // TODO File to be removed + +/* BITSTRING enc__DequeueRegistrationRequest(const LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) { + loggers::get_instance().log_msg(">>> enc__DequeueRegistrationRequest: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__DequeueRegistrationRequest(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationRequest& p) { + loggers::get_instance().log_msg(">>> dec__DequeueRegistrationRequest: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__DequeueRegistrationResponse(const LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) { + loggers::get_instance().log_msg(">>> enc__DequeueRegistrationResponse: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__DequeueRegistrationResponse(BITSTRING& pdu, LibNg112__DequeueRegistration::DequeueRegistrationResponse& p) { + loggers::get_instance().log_msg(">>> dec__DequeueRegistrationResponse: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__ServiceStatePayload(const LibNg112__SubscriptionPayloads::ServiceStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__ServiceStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__ServiceStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ServiceStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__ServiceStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__ElementStatePayload(const LibNg112__SubscriptionPayloads::ElementStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__ElementStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__ElementStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::ElementStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__ElementStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__SecurityPosturePayload(const LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) { + loggers::get_instance().log_msg(">>> enc__SecurityPosturePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__SecurityPosturePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::SecurityPosturePayload& p) { + loggers::get_instance().log_msg(">>> dec__QueueStdec__SecurityPosturePayloadtePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } + + BITSTRING enc__QueueStatePayload(const LibNg112__SubscriptionPayloads::QueueStatePayload& p) { + loggers::get_instance().log_msg(">>> enc__QueueStatePayload: ", (const Base_Type&)p); + + OCTETSTRING os; + json_codec codec; + codec.encode(p, os); + + return oct2bit(os); + } + + INTEGER dec__QueueStatePayload(BITSTRING& pdu, LibNg112__SubscriptionPayloads::QueueStatePayload& p) { + loggers::get_instance().log_msg(">>> dec__QueueStatePayload: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + json_codec codec; + codec.decode(os, p); + + return 0; + } +*/ +} // End of namespace LibNg112__EncdecDeclarations + diff --git a/ccsrc/EncDec/LibEmtel/module.mk b/ccsrc/EncDec/LibEmtel/module.mk new file mode 100644 index 0000000..43f2b71 --- /dev/null +++ b/ccsrc/EncDec/LibEmtel/module.mk @@ -0,0 +1 @@ +sources := LibNg112_EncDec.cc diff --git a/ccsrc/EncDec/LibSip/LibSip_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Encdec.cc new file mode 100644 index 0000000..add0174 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Encdec.cc @@ -0,0 +1,372 @@ + +#include "LibSip_EncdecDeclarations.hh" +#include "LibSip_XMLTypes.hh" + +#include "sip_codec_register_request.hh" +#include "sip_codec_invite_request.hh" +#include "sip_codec_options_request.hh" +#include "sip_codec_bye_request.hh" +#include "sip_codec_ack_request.hh" +#include "sip_codec_subscribe_request.hh" +#include "sip_codec_notify_request.hh" +#include "sip_codec_info_request.hh" +#include "sip_codec_message_request.hh" +#include "sip_codec_message_body.hh" +#include "sip_codec_response.hh" + +#include "loggers.hh" + +namespace LibSip__EncdecDeclarations { + + BITSTRING fx__enc__Request(const LibSip__SIPTypesAndValues::Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__Request: ", p); + + float duration; + std::string tag("fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__Request -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__REGISTER__Request(const LibSip__SIPTypesAndValues::REGISTER__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__REGISTER__Request: ", p); + + float duration; + std::string tag("fx__enc__REGISTER__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_register_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__REGISTER__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__INVITE__Request(const LibSip__SIPTypesAndValues::INVITE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__INVITE__Request: ", p); + + float duration; + std::string tag("fx__enc__INVITE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_invite_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__INVITE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__OPTIONS__Request(const LibSip__SIPTypesAndValues::OPTIONS__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__OPTIONS__Request: ", p); + + float duration; + std::string tag("fx__enc__OPTIONS__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_options_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__OPTIONS__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__BYE__Request(const LibSip__SIPTypesAndValues::BYE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__BYE__Request: ", p); + + float duration; + std::string tag("fx__enc__BYE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_bye_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__BYE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__ACK__Request(const LibSip__SIPTypesAndValues::ACK__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__ACK__Request: ", p); + + float duration; + std::string tag("fx__enc__ACK__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_ack_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__ACK__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__CANCEL__Request(const LibSip__SIPTypesAndValues::CANCEL__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__PRACK__Request(const LibSip__SIPTypesAndValues::PRACK__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__NOTIFY__Request(const LibSip__SIPTypesAndValues::NOTIFY__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__NOTIFY__Request: ", p); + + float duration; + std::string tag("fx__enc__NOTIFY__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_notify_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__NOTIFY__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__SUBSCRIBE__Request(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__SUBSCRIBE__Request: ", p); + + float duration; + std::string tag("fx__enc__SUBSCRIBE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_subscribe_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__SUBSCRIBE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__MESSAGE__Request(const LibSip__SIPTypesAndValues::MESSAGE__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__MESSAGE__Request: ", p); + + float duration; + std::string tag("fx__enc__MESSAGE__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_message_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__MESSAGE__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__PUBLISH__Request(const LibSip__SIPTypesAndValues::PUBLISH__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__UPDATE__Request(const LibSip__SIPTypesAndValues::UPDATE__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__REFER__Request(const LibSip__SIPTypesAndValues::REFER__Request& p) { return BITSTRING(); } + BITSTRING fx__enc__INFO__Request(const LibSip__SIPTypesAndValues::INFO__Request& p) { + loggers::get_instance().log_msg(">>> fx__enc__INFO__Request: ", p); + + float duration; + std::string tag("fx__enc__INFO__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_info_request codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__INFO__Request: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + + BITSTRING fx__enc__Response(const LibSip__SIPTypesAndValues::Response& p) { + loggers::get_instance().log_msg(">>> fx__enc__Response: ", p); + + float duration; + std::string tag("fx__enc__Response"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_response codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__Response: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + BITSTRING fx__enc__Raw(const CHARSTRING& p) { return BITSTRING(); } + BITSTRING fx__enc__SMS(const LibSip__SimpleMsgSummaryTypes::SimpleMsgSummary& pdu) { return BITSTRING(); } + + BITSTRING fx__enc__MessageBody(const LibSip__MessageBodyTypes::MessageBody& pdu) { + loggers::get_instance().log_msg(">>> fx__enc__MessageBody: ", pdu); + + float duration; + std::string tag("fx__enc__MessageBody"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + sip_codec_message_body codec; + if (codec.encode(pdu, os) == -1) { + loggers::get_instance().warning("fx__enc__MessageBody: -1 result code was returned"); + return int2bit(0, 1); + } + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__REGISTER__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::REGISTER__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__REGISTER__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_register_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__INVITE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::INVITE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__INVITE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_invite_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__OPTIONS__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::OPTIONS__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__OPTIONS__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_options_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__BYE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::BYE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__BYE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_bye_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__ACK__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::ACK__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__ACK__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_ack_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__CANCEL__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::CANCEL__Request& p) { return INTEGER(0); } + INTEGER fx__dec__PRACK__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::PRACK__Request& p) { return INTEGER(0); } + INTEGER fx__dec__NOTIFY__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::NOTIFY__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__NOTIFY__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_notify_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__SUBSCRIBE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__SUBSCRIBE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_subscribe_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__MESSAGE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::MESSAGE__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__MESSAGE__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_message_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__PUBLISH__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::PUBLISH__Request& p) { return INTEGER(0); } + INTEGER fx__dec__UPDATE__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::UPDATE__Request& p) { return INTEGER(0); } + INTEGER fx__dec__REFER__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::REFER__Request& p) { return INTEGER(0); } + INTEGER fx__dec__INFO__Request(BITSTRING& pdu, LibSip__SIPTypesAndValues::INFO__Request& p) { + loggers::get_instance().log_msg(">>> fx__dec__INFO__Request: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_info_request codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__Response(BITSTRING& pdu, LibSip__SIPTypesAndValues::Response& p) { + loggers::get_instance().log_msg(">>> fx__dec__Response: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_response codec; + codec.decode(os, p); + + return 0; + } + + INTEGER fx__dec__SMS(BITSTRING& pdu, LibSip__SimpleMsgSummaryTypes::SimpleMsgSummary& p) { return INTEGER(0); } + + INTEGER fx__dec__MessageBody(BITSTRING& pdu, LibSip__MessageBodyTypes::MessageBody& p) { + loggers::get_instance().log_msg(">>> fx__dec__MessageBody: ", pdu); + + OCTETSTRING os = bit2oct(pdu); + sip_codec_message_body codec; + codec.decode(os, p); + + return 0; + } +} // End of namespace LibSip__EncdecDeclarations diff --git a/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc new file mode 100644 index 0000000..65e0af8 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_SMSFunctions_Encdec.cc @@ -0,0 +1,9 @@ +#include "LibSip_SMSFunctions.hh" + +#include "loggers.hh" + +namespace LibSip__SMSFunctions { + + HEXSTRING fx__GetSC__TimeStamp(const INTEGER& p__TimeZone) { return int2hex(0, 14); }; + +} // End of namespace LibSip__SMSFunctions diff --git a/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc new file mode 100644 index 0000000..35a2970 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Steps_Encdec.cc @@ -0,0 +1,109 @@ +#include +#include +#include + +#include + +#include "LibSip_Steps.hh" + +#include "loggers.hh" + +#include "converter.hh" + +namespace LibSip__Steps { + + int calculate_md5(const std::string& p_data, std::string& p_md5) + { + loggers::get_instance().log(">>> calculate_md5: %s", p_data.c_str()); + + MD5_CTX md5_context; + ::MD5_Init(&md5_context); + + loggers::get_instance().log("calculate_md5: length=%d", p_data.length()); + ::MD5_Update(&md5_context, p_data.c_str(), p_data.length()); // TODO Add support of block size > 512 + + const size_t digestlen = 16; + unsigned char digest[digestlen]; + ::MD5_Final(digest, &md5_context); + p_md5 = converter::get_instance().bytes_to_hexa(std::vector(digest, digest + digestlen)); + + loggers::get_instance().log("<<< calculate_md5: %s", p_md5.c_str()); + return 0; + } + + CHARSTRING fx__rndStr() { + static const char alphanum[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + static int length = 10; + char s[length] = { 0 }; + for (int i = 0; i < length - 1; ++i) { + s[i] = alphanum[rand() % (sizeof(alphanum) - 1)]; + } // End of 'for' statement + return CHARSTRING(s); + }; + + CHARSTRING fx__putInLowercase(const CHARSTRING& p__string) { + std::string s(static_cast(p__string)); + std::transform(s.begin(), s.end(), s.begin(), ::tolower); + return CHARSTRING(s.c_str()); + }; + + CHARSTRING fx__getIpAddr(const CHARSTRING& p__host__name) { return CHARSTRING(""); }; + + CHARSTRING fx__calculateDigestResponse(const CHARSTRING& p__nonce, const CHARSTRING& p__cnonce, const CHARSTRING& p__user, const CHARSTRING& p__realm, const CHARSTRING& p__passwd, const CHARSTRING& p__alg, const CHARSTRING& p__nonceCount, const CHARSTRING& p__method, const CHARSTRING& p__qop, const CHARSTRING& p__URI, const CHARSTRING& p__HEntity) { + loggers::get_instance().log(">>> fx__calculateDigestResponse"); + + // Buid a1=USERNAME:REALM:PASSWORD + std::string a1(static_cast(p__user)); + a1 += ":"; + a1 += static_cast(p__realm); + a1 += ":"; + a1 += static_cast(p__passwd); + if (a1.find("\"") != std::string::npos) { + a1 = std::regex_replace(a1, std::regex("\""), ""); + } + loggers::get_instance().log("fx__calculateDigestResponse: a1='%s'", a1.c_str()); + std::string md5_a1; + calculate_md5(a1, md5_a1); + + // Buid a2=METHOD:DIGESTURI + std::string a2(static_cast(p__method)); + a2 += ":"; + a2 += static_cast(p__URI); + if (a2.find("\"") != std::string::npos) { + a2 = std::regex_replace(a2, std::regex("\""), ""); // TODO Move to converter + } + loggers::get_instance().log("fx__calculateDigestResponse: a2='%s'", a2.c_str()); + std::string md5_a2; + calculate_md5(a2, md5_a2); + + // Buid resp=HA1:NONCE:HA2 + std::string resp(md5_a1); + resp += ":"; + resp += static_cast(p__nonce); + resp += ":"; + resp += md5_a2; + loggers::get_instance().log("fx__calculateDigestResponse: resp='%s'", resp.c_str()); + std::string md5_resp; + calculate_md5(resp, md5_resp); + + // Convert into Base64 + std::vector u = converter::get_instance().string_to_bytes(md5_resp); + md5_resp = converter::get_instance().bytes_to_string(converter::get_instance().buffer_to_base64(u)); + + loggers::get_instance().log("<<< fx__calculateDigestResponse: '%s'", md5_resp.c_str()); + return CHARSTRING(md5_resp.c_str()); + }; + + CHARSTRING fx__encodeBase64(const CHARSTRING& p__value) { + std::vector s(static_cast(p__value), static_cast(p__value) + p__value.lengthof()); + std::vector o = converter::get_instance().buffer_to_base64(s); + return CHARSTRING(o.size(), (const char*)o.data()); + }; + + CHARSTRING fx__decodeBase64(const CHARSTRING& p__value) { + std::vector s(static_cast(p__value), static_cast(p__value) + p__value.lengthof()); + std::vector o = converter::get_instance().base64_to_buffer(s); + return CHARSTRING(o.size(), (const char*)o.data()); + }; + +} // End of namespace LibSip__Steps diff --git a/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc b/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc new file mode 100644 index 0000000..2c68f22 --- /dev/null +++ b/ccsrc/EncDec/LibSip/LibSip_Templates_Encdec.cc @@ -0,0 +1,9 @@ +#include "LibSip_Templates.hh" + +#include "loggers.hh" + +namespace LibSip__Templates { + + INTEGER fx__calculateXMLBodyLen(const LibSip__XMLTypes::XmlBody& p__mb) { return INTEGER(0); }; + +} // End of namespace LibSip__Templates diff --git a/ccsrc/EncDec/LibSip/module.mk b/ccsrc/EncDec/LibSip/module.mk new file mode 100644 index 0000000..86e1710 --- /dev/null +++ b/ccsrc/EncDec/LibSip/module.mk @@ -0,0 +1,5 @@ +sources := \ + LibSip_Encdec.cc \ + LibSip_SMSFunctions_Encdec.cc \ + LibSip_Steps_Encdec.cc \ + LibSip_Templates_Encdec.cc diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.cc b/ccsrc/Ports/LibDiameter/DiameterPort.cc new file mode 100644 index 0000000..787f480 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/DiameterPort.cc @@ -0,0 +1,246 @@ +#include "DiameterPort.hh" +#include "sip_layer_factory.hh" +#include "loggers.hh" + +namespace LibDiameter__Interface { + + DiameterPort::DiameterPort(const char *par_port_name): DiameterPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("DiameterPort::outgoing_send") { + // Nothing to do + } // End of constructor + + DiameterPort::~DiameterPort() { + loggers::get_instance().log(">>> DiameterPort::~DiameterPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void DiameterPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("DiameterPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void DiameterPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void DiameterPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void DiameterPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void DiameterPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void DiameterPort::Handle_Timeout(double time_since_last_call) {}*/ + + void DiameterPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> DiameterPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("DiameterPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("DiameterPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("DiameterPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void DiameterPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> DiameterPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void DiameterPort::user_start() + { + loggers::get_instance().log(">>> DiameterPort::user_start"); + + } // End of user_start method + + void DiameterPort::user_stop() + { + loggers::get_instance().log(">>> DiameterPort::user_stop"); + + } // End of user_stop method + + void DiameterPort::receiveMsg (const LibDiameter__SIPTypesAndValues::Request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> DiameterPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::REGISTER__E) { + incoming_message(LibDiameter__SIPTypesAndValues::REGISTER__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::INVITE__E) { + incoming_message(LibDiameter__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::SUBSCRIBE__E) { + incoming_message(LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::NOTIFY__E) { + incoming_message(LibDiameter__SIPTypesAndValues::NOTIFY__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::BYE__E) { + incoming_message(LibDiameter__SIPTypesAndValues::BYE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::INFO__E) { + incoming_message(LibDiameter__SIPTypesAndValues::INFO__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::OPTIONS__E) { + incoming_message(LibDiameter__SIPTypesAndValues::OPTIONS__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::MESSAGE__E) { + incoming_message(LibDiameter__SIPTypesAndValues::MESSAGE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::CANCEL__E) { + incoming_message(LibDiameter__SIPTypesAndValues::CANCEL__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::ACK__E) { + incoming_message(LibDiameter__SIPTypesAndValues::ACK__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else { + incoming_message(p_ind); + } + } // End of method receiveMsg + + void DiameterPort::receiveMsg (const LibDiameter__SIPTypesAndValues::Response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> DiameterPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + +} + diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.hh b/ccsrc/Ports/LibDiameter/DiameterPort.hh new file mode 100644 index 0000000..354d7b6 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/DiameterPort.hh @@ -0,0 +1,64 @@ +#pragma once + +#include "LibDiameter_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibDiameter__SIPTypesAndValues { + class REGISTER__Request; +} + +namespace LibDiameter__Interface { + + class DiameterPort : public DiameterPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + DiameterPort(const char *par_port_name); + ~DiameterPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__SIPTypesAndValues::Request& p_ind, const params& p_params); + void receiveMsg (const LibDiameter__SIPTypesAndValues::Response& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibDiameter__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibDiameter__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibDiameter__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibDiameter__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::PRACK__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::PUBLISH__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::UPDATE__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::REFER__Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const CHARSTRING& send_par, const Address4SIP *destination_address) { }; + }; // End of class DiameterPort + +} + diff --git a/ccsrc/Ports/LibDiameter/module.mk b/ccsrc/Ports/LibDiameter/module.mk new file mode 100644 index 0000000..f7f5df3 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/module.mk @@ -0,0 +1,3 @@ +sources := DiameterPort.cc +includes := . + diff --git a/ccsrc/Ports/LibHttp/HttpPort.cc b/ccsrc/Ports/LibHttp/HttpPort.cc new file mode 100644 index 0000000..30b524f --- /dev/null +++ b/ccsrc/Ports/LibHttp/HttpPort.cc @@ -0,0 +1,117 @@ +#include "HttpPort.hh" +#include "http_layer_factory.hh" +#include "http_layer.hh" +#include "http_codec_emtel.hh" +#include "loggers.hh" + +#include "LibHttp_TypesAndValues.hh" + +namespace LibHttp__TestSystem { + + HttpPort::HttpPort(const char *par_port_name): HttpPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("HttpPort::outgoing_send") { + // Nothing to do + } // End of constructor + + HttpPort::~HttpPort() { + loggers::get_instance().log(">>> HttpPort::~HttpPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void HttpPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("HttpPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void HttpPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void HttpPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void HttpPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void HttpPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void HttpPort::Handle_Timeout(double time_since_last_call) {}*/ + + void HttpPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> HttpPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("HttpPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("HttpPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + if (!static_cast(_layer)->set_codec(new http_codec_emtel())) { + loggers::get_instance().error("HttpPort::user_map: Null codec"); + } + static_cast(_layer)->add_upper_port(this); + } else { + loggers::get_instance().error("HttpPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void HttpPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> HttpPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void HttpPort::user_start() + { + loggers::get_instance().log(">>> HttpPort::user_start"); + + } // End of user_start method + + void HttpPort::user_stop() + { + loggers::get_instance().log(">>> HttpPort::user_stop"); + + } // End of user_stop method + + void HttpPort::outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par) + { + loggers::get_instance().log_msg(">>> HttpPort::outgoing_send: payload=", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void HttpPort::receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> HttpPort::receive_msg: ", p_ind); + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } + +} // End of namespace LibHttp__TestSystem + diff --git a/ccsrc/Ports/LibHttp/HttpPort.hh b/ccsrc/Ports/LibHttp/HttpPort.hh new file mode 100644 index 0000000..7d8b1af --- /dev/null +++ b/ccsrc/Ports/LibHttp/HttpPort.hh @@ -0,0 +1,46 @@ +#pragma once + +#include "LibHttp_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibHttp__TypesAndValues { + class HttpMessage; +} + +namespace LibHttp__TestSystem { + + class HttpPort : public HttpPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + HttpPort(const char *par_port_name); + ~HttpPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + void receiveMsg (const LibHttp__TypesAndValues::HttpMessage& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + void outgoing_send(const LibHttp__TypesAndValues::HttpMessage& send_par); + }; // End of class HttpPort + +} // End of namespace LibHttp__TestSystem + diff --git a/ccsrc/Ports/LibHttp/module.mk b/ccsrc/Ports/LibHttp/module.mk new file mode 100644 index 0000000..0fba8bd --- /dev/null +++ b/ccsrc/Ports/LibHttp/module.mk @@ -0,0 +1,3 @@ +sources := HttpPort.cc +includes := . + diff --git a/ccsrc/Ports/LibSip/OperatorPort.hh b/ccsrc/Ports/LibSip/OperatorPort.hh new file mode 100644 index 0000000..a44d316 --- /dev/null +++ b/ccsrc/Ports/LibSip/OperatorPort.hh @@ -0,0 +1,31 @@ + + +#pragma once + +#include "LibSip_Interface.hh" + +namespace LibSip__Interface { + + class OperatorPort : public OperatorPort_BASE { + public: + OperatorPort(const char *par_port_name): OperatorPort_BASE(par_port_name) { }; + ~OperatorPort() { }; + + protected: + virtual void outgoing_call(const s__SIP__conversation_call& call_par) { }; + virtual void outgoing_call(const s__SIP__ringing_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcementA_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcementB_call& call_par) { }; + virtual void outgoing_call(const s__SIP__announcement_call& call_par) { }; + virtual void outgoing_call(const s__SIP__voiceMessage_call& call_par) { }; + virtual void outgoing_call(const s__SIP__mediastopped_call& call_par) { }; + virtual void outgoing_reply(const s__SIP__conversation_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__ringing_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcementA_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcementB_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__announcement_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__voiceMessage_reply& reply_par) { }; + virtual void outgoing_reply(const s__SIP__mediastopped_reply& reply_par) { }; + }; // End of class OperatorPort + +} diff --git a/ccsrc/Ports/LibSip/SipPort.cc b/ccsrc/Ports/LibSip/SipPort.cc new file mode 100644 index 0000000..cb54e16 --- /dev/null +++ b/ccsrc/Ports/LibSip/SipPort.cc @@ -0,0 +1,246 @@ +#include "SipPort.hh" +#include "sip_layer_factory.hh" +#include "loggers.hh" + +namespace LibSip__Interface { + + SipPort::SipPort(const char *par_port_name): SipPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("SipPort::outgoing_send") { + // Nothing to do + } // End of constructor + + SipPort::~SipPort() { + loggers::get_instance().log(">>> SipPort::~SipPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void SipPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("SipPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void SipPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void SipPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void SipPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void SipPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void SipPort::Handle_Timeout(double time_since_last_call) {}*/ + + void SipPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> SipPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("SipPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("SipPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("SipPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void SipPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> SipPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void SipPort::user_start() + { + loggers::get_instance().log(">>> SipPort::user_start"); + + } // End of user_start method + + void SipPort::user_stop() + { + loggers::get_instance().log(">>> SipPort::user_stop"); + + } // End of user_stop method + + void SipPort::receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> SipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::REGISTER__E) { + incoming_message(LibSip__SIPTypesAndValues::REGISTER__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::INVITE__E) { + incoming_message(LibSip__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::SUBSCRIBE__E) { + incoming_message(LibSip__SIPTypesAndValues::SUBSCRIBE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::NOTIFY__E) { + incoming_message(LibSip__SIPTypesAndValues::NOTIFY__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::BYE__E) { + incoming_message(LibSip__SIPTypesAndValues::BYE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::INFO__E) { + incoming_message(LibSip__SIPTypesAndValues::INFO__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::OPTIONS__E) { + incoming_message(LibSip__SIPTypesAndValues::OPTIONS__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::MESSAGE__E) { + incoming_message(LibSip__SIPTypesAndValues::MESSAGE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::CANCEL__E) { + incoming_message(LibSip__SIPTypesAndValues::CANCEL__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else if (p_ind.requestLine().method() == LibSip__SIPTypesAndValues::Method::ACK__E) { + incoming_message(LibSip__SIPTypesAndValues::ACK__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); + } else { + incoming_message(p_ind); + } + } // End of method receiveMsg + + void SipPort::receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> SipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address) + { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + + void SipPort::outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address) { + loggers::get_instance().log_msg(">>> SipPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } + +} + diff --git a/ccsrc/Ports/LibSip/SipPort.hh b/ccsrc/Ports/LibSip/SipPort.hh new file mode 100644 index 0000000..cc39af5 --- /dev/null +++ b/ccsrc/Ports/LibSip/SipPort.hh @@ -0,0 +1,64 @@ +#pragma once + +#include "LibSip_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +namespace LibSip__Interface { + + class SipPort : public SipPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + SipPort(const char *par_port_name); + ~SipPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params); + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + virtual void outgoing_send(const LibSip__SIPTypesAndValues::Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibSip__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::PRACK__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::PUBLISH__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibSip__SIPTypesAndValues::UPDATE__Request& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibSip__SIPTypesAndValues::REFER__Request& send_par, const Address4SIP *destination_address) { }; + void outgoing_send(const LibSip__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); + virtual void outgoing_send(const CHARSTRING& send_par, const Address4SIP *destination_address) { }; + }; // End of class SipPort + +} + diff --git a/ccsrc/Ports/LibSip/module.mk b/ccsrc/Ports/LibSip/module.mk new file mode 100644 index 0000000..7c59970 --- /dev/null +++ b/ccsrc/Ports/LibSip/module.mk @@ -0,0 +1,3 @@ +sources := SipPort.cc +includes := . + diff --git a/ccsrc/Protocols/Diameter/diameter_layer.cc b/ccsrc/Protocols/Diameter/diameter_layer.cc new file mode 100644 index 0000000..cf90816 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer.cc @@ -0,0 +1,146 @@ +#include "LibSip_Interface.hh" +#include "LibSip_SIPTypesAndValues.hh" + +#include "diameter_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +diameter_layer::diameter_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> diameter_layer::diameter_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::REGISTER__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_register.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::INVITE__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_invite.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::ACK__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_ack.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_subscribe.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_message.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_options.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::BYE__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_bye.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::CANCEL__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_cancel.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_notify.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::INFO__Request& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_info.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::Response& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_response.encode(p_diameter_message, data); + send_data(data, _params); +} + +void diameter_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> diameter_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void diameter_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> diameter_layer::receive_data: ", data); + + // Decode SIP message + if ((data[0].get_octet() == 'S') && (data[1].get_octet() == 'I') && (data[2].get_octet() == 'P')) { // SIP... Assume it is a responce + LibDiameter__SIPTypesAndValues::Response diameter_response; + if (_codec_response.decode(data, diameter_response) == -1) { + loggers::get_instance().warning("diameter_layer::receive_data: Failed to decode response data"); + return; + } + // Pass it to the ports + to_all_upper_ports(diameter_response, p_params); + } else { // Assume it is a request + LibDiameter__SIPTypesAndValues::Request diameter_request; + if (_codec_request.decode(data, diameter_request) == -1) { + loggers::get_instance().warning("diameter_layer::receive_data: Failed to decode request data"); + return; + } + // Pass it to the ports + to_all_upper_ports(diameter_request, p_params); + } +} + +diameter_layer_factory diameter_layer_factory::_f; + diff --git a/ccsrc/Protocols/Diameter/diameter_layer.hh b/ccsrc/Protocols/Diameter/diameter_layer.hh new file mode 100644 index 0000000..12638eb --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer.hh @@ -0,0 +1,104 @@ +/*! + * \file diameter_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibDiameter__Interface { + class DiameterPort; //! Forward declaration of TITAN class +} + +namespace LibDiameter__SIPTypesAndValues { + class REGISTER__Request; //! Forward declaration of TITAN class + class INVITE__Request; //! Forward declaration of TITAN class + class ACK__Request; //! Forward declaration of TITAN class + class SUSCRIBE__Request; //! Forward declaration of TITAN class + class MESSAGE__Request; //! Forward declaration of TITAN class + class OPTIONS__Request; //! Forward declaration of TITAN class + class CANCEL__Request; //! Forward declaration of TITAN class + class NOTIFY__Request; //! Forward declaration of TITAN class + class INFO__Request; //! Forward declaration of TITAN class + class BYE__Request; //! Forward declaration of TITAN class + class Resquest; //! Forward declaration of TITAN class + class Response; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class diameter_layer + * \brief This class provides a factory class to create an diameter_layer class instance + */ +class diameter_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the diameter_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + diameter_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the diameter_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + diameter_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~diameter_layer() { }; + + void sendMsg(const LibDiameter__SIPTypesAndValues::REGISTER__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::INVITE__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::ACK__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::BYE__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::CANCEL__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::INFO__Request& p_diameter_message, params& p_param); + + void sendMsg(const LibDiameter__SIPTypesAndValues::Response& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class diameter_layer + diff --git a/ccsrc/Protocols/Diameter/diameter_layer_factory.hh b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh new file mode 100644 index 0000000..ca541ec --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file diameter_layer_factory.hh + * \brief Header file for ITS Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "diameter_layer.hh" + +/*! + * \class diameter_layer_factory + * \brief This class provides a factory class to create an diameter_layer class instance + */ +class diameter_layer_factory : public layer_factory { + static diameter_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + diameter_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("DIAMETER", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new diameter_layer(p_type, p_param); + }; +}; // End of class diameter_layer_factory + diff --git a/ccsrc/Protocols/Diameter/module.mk b/ccsrc/Protocols/Diameter/module.mk new file mode 100644 index 0000000..d2e13f7 --- /dev/null +++ b/ccsrc/Protocols/Diameter/module.mk @@ -0,0 +1,3 @@ +sources := \ + diameter_layer.cc +includes := . diff --git a/ccsrc/Protocols/Http/http_codec_emtel.cc b/ccsrc/Protocols/Http/http_codec_emtel.cc new file mode 100644 index 0000000..31b69f4 --- /dev/null +++ b/ccsrc/Protocols/Http/http_codec_emtel.cc @@ -0,0 +1,111 @@ +#include "http_codec_emtel.hh" + +#include "loggers.hh" + +bool http_codec_emtel::encode_body_xml(const LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type) { + loggers::get_instance().log(">>> http_codec_emtel::encode_body_xml"); + + std::map > >::const_iterator it; + bool processed = false; + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Content-Type:'%s'", p_content_type.c_str()); + if (p_content_type.find("held") != std::string::npos) { + it = _codecs.find("held"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Call 'held_codec'"); + _codecs["held"]->encode((Record_Type&)p_xml_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } else if (p_content_type.find("lost") != std::string::npos) { + it = _codecs.find("lost"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_xml: Call 'lost_codec'"); + _codecs["lost"]->encode((Record_Type&)p_xml_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } // TODO Add new HTTP message codec_gen here + if (!processed) { + loggers::get_instance().warning("http_codec_emtel::encode_body_xml: Unsupported HTTP codec_gen, use raw field as default"); + p_encoding_buffer = OCTETSTRING(0, nullptr); + } + + return true; +} + +bool http_codec_emtel::decode_body_xml(const OCTETSTRING &p_data, LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, const std::string &p_content_type, params* p_params) { + loggers::get_instance().log(">>> http_codec_emtel::decode_body_xml"); + + if ( + ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:geopriv:held\"") != std::string::npos) || + ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:pidf\"") != std::string::npos) + ) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Find 'urn:ietf:params:xml:ns:geopriv:held'"); + if (_codecs["held"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Call 'held_codec'"); + if (_codecs["held"]->decode(p_data, (Record_Type&)p_xml_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: Failed to decode HELD message"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_xml: Decoded message:", p_xml_body); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No codec_gen for HELD"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + } else if ((*p_params)["decode_str"].find("=\"urn:ietf:params:xml:ns:lost1\"") != std::string::npos) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Find 'urn:ietf:params:xml:ns:lost1'"); + if (_codecs["lost"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_xml: Call 'lost_codec'"); + if (_codecs["lost"]->decode(p_data, (Record_Type&)p_xml_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: Failed to decode LOST message"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_xml: Decoded message:", p_xml_body); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No codec_gen for LOST"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + } else { + loggers::get_instance().warning("http_codec_emtel::decode_body_xml: No XML codec_gen found"); + p_xml_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } + + return true; +} + +bool http_codec_emtel::encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type) { + loggers::get_instance().log(">>> http_codec_emtel::encode_body_json"); + + std::map > >::const_iterator it; + bool processed = false; + loggers::get_instance().log("http_codec_emtel::encode_body_json: Content-Type:'%s'", p_content_type.c_str()); + if (p_content_type.find("json") != std::string::npos) { + it = _codecs.find("json"); // TODO Use params + if (it != _codecs.cend()) { + loggers::get_instance().log("http_codec_emtel::encode_body_json: Call 'json_codec'"); + _codecs["json"]->encode((Record_Type&)p_json_body, p_encoding_buffer); // TODO Use params + processed = true; + } + } // TODO Add new HTTP message codec_gen here + if (!processed) { + loggers::get_instance().warning("http_codec_emtel::encode_body_json: Unsupported HTTP codec_gen, use raw field as default"); + p_encoding_buffer = OCTETSTRING(0, nullptr); + } + + return true; +} +bool http_codec_emtel::decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params) { + loggers::get_instance().log(">>> http_codec_emtel::decode_body_json"); + + if (_codecs["json"].get() != nullptr) { + loggers::get_instance().log("http_codec_emtel::decode_body_json: Call 'json_codec'"); + if (_codecs["json"]->decode(p_data, (Record_Type&)p_json_body, p_params) == -1) { + loggers::get_instance().warning("http_codec_emtel::decode_body_json: Failed to decode JSON message"); + p_json_body.raw() = CHARSTRING(p_data.lengthof(), (char*)static_cast(p_data)); + } else { + loggers::get_instance().log_msg("http_codec_emtel::decode_body_json: Decoded message:", p_json_body); + } + } + + return true; +} \ No newline at end of file diff --git a/ccsrc/Protocols/Http/http_codec_emtel.hh b/ccsrc/Protocols/Http/http_codec_emtel.hh new file mode 100644 index 0000000..9e4f30b --- /dev/null +++ b/ccsrc/Protocols/Http/http_codec_emtel.hh @@ -0,0 +1,18 @@ +#pragma once + +#include "http_codec.hh" + +#include "LibHttp_MessageBodyTypes.hh" + +class http_codec_emtel : public http_codec { + +public: + explicit http_codec_emtel() : http_codec(){}; + virtual ~http_codec_emtel(){}; + +protected: //! \protectedsection + bool encode_body_xml(const LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type); + bool decode_body_xml(const OCTETSTRING &p_data, LibHttp__XmlMessageBodyTypes::XmlBody &p_xml_body, const std::string &p_content_type, params* p_params); + bool encode_body_json(const LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, OCTETSTRING &p_encoding_buffer, const std::string &p_content_type); + bool decode_body_json(const OCTETSTRING &p_data, LibHttp__JsonMessageBodyTypes::JsonBody &p_json_body, const std::string &p_content_type, params* p_params); +}; // End of class http_codec_emtel diff --git a/ccsrc/Protocols/Http/module.mk b/ccsrc/Protocols/Http/module.mk new file mode 100644 index 0000000..0acfc84 --- /dev/null +++ b/ccsrc/Protocols/Http/module.mk @@ -0,0 +1,3 @@ +sources := http_codec_emtel.cc +includes := . + diff --git a/ccsrc/Protocols/Sip/module.mk b/ccsrc/Protocols/Sip/module.mk new file mode 100644 index 0000000..84c4b97 --- /dev/null +++ b/ccsrc/Protocols/Sip/module.mk @@ -0,0 +1,17 @@ +sources := \ + sip_codec_ack_request.cc \ + sip_codec_headers.cc \ + sip_codec_message_body.cc \ + sip_codec_options_request.cc \ + sip_codec_request.cc \ + sip_codec_subscribe_request.cc \ + sip_codec_bye_request.cc \ + sip_codec_invite_request.cc \ + sip_codec_message_request.cc \ + sip_codec_register_request.cc \ + sip_codec_cancel_request.cc \ + sip_codec_notify_request.cc \ + sip_codec_info_request.cc \ + sip_codec_response.cc \ + sip_layer.cc +includes := . diff --git a/ccsrc/Protocols/Sip/sip_codec_ack_request.cc b/ccsrc/Protocols/Sip/sip_codec_ack_request.cc new file mode 100644 index 0000000..8cdc943 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_ack_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_ack_request.hh" +#include "loggers.hh" + +int sip_codec_ack_request::encode (const LibSip__SIPTypesAndValues::ACK__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_ack_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_ack_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_ack_request::encode: data=", data); + return 0; +} + +int sip_codec_ack_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::ACK__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_ack_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::ACK__E) { + loggers::get_instance().warning("sip_codec_ack_request::decode: Wrong SIP Method, expected ACK"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_ack_request.hh b/ccsrc/Protocols/Sip/sip_codec_ack_request.hh new file mode 100644 index 0000000..801f6de --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_ack_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class ACK__Request; +} + +class sip_codec_ack_request: public codec_gen < +LibSip__SIPTypesAndValues::ACK__Request, +LibSip__SIPTypesAndValues::ACK__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_ack_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_ack_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::ACK__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::ACK__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_ack_request diff --git a/ccsrc/Protocols/Sip/sip_codec_bye_request.cc b/ccsrc/Protocols/Sip/sip_codec_bye_request.cc new file mode 100644 index 0000000..816d9aa --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_bye_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_bye_request.hh" +#include "loggers.hh" + +int sip_codec_bye_request::encode (const LibSip__SIPTypesAndValues::BYE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_bye_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_bye_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_bye_request::encode: data=", data); + return 0; +} + +int sip_codec_bye_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::BYE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_bye_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::BYE__E) { + loggers::get_instance().warning("sip_codec_bye_request::decode: Wrong SIP Method, expected BYE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_bye_request.hh b/ccsrc/Protocols/Sip/sip_codec_bye_request.hh new file mode 100644 index 0000000..e597172 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_bye_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class BYE__Request; +} + +class sip_codec_bye_request: public codec_gen < +LibSip__SIPTypesAndValues::BYE__Request, +LibSip__SIPTypesAndValues::BYE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_bye_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_bye_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::BYE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::BYE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_bye_request diff --git a/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc b/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc new file mode 100644 index 0000000..3a60002 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_cancel_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_cancel_request.hh" +#include "loggers.hh" + +int sip_codec_cancel_request::encode (const LibSip__SIPTypesAndValues::CANCEL__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_cancel_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_cancel_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_cancel_request::encode: data=", data); + return 0; +} + +int sip_codec_cancel_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::CANCEL__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_cancel_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::CANCEL__E) { + loggers::get_instance().warning("sip_codec_cancel_request::decode: Wrong SIP Method, expected CANCEL"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh b/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh new file mode 100644 index 0000000..22527bc --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_cancel_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class CANCEL__Request; +} + +class sip_codec_cancel_request: public codec_gen < +LibSip__SIPTypesAndValues::CANCEL__Request, +LibSip__SIPTypesAndValues::CANCEL__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_cancel_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_cancel_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::CANCEL__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::CANCEL__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_cancel_request diff --git a/ccsrc/Protocols/Sip/sip_codec_headers.cc b/ccsrc/Protocols/Sip/sip_codec_headers.cc new file mode 100644 index 0000000..4b99116 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_headers.cc @@ -0,0 +1,3305 @@ +#include + +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_headers.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_headers::encode_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_headers: ", p_msg_header); + + // Encode mandatory fields + // From + osip_from_t* from_header = nullptr; + if (encode_from_header(p_msg_header.fromField(), &from_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode From header"); + return -1; + } + char* hvalue; + ::osip_from_to_str(from_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: From:%s", hvalue); + if (::osip_message_set_from(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set From header in sip_message"); + return -1; + } + + ::osip_from_free(from_header); + osip_free(hvalue); + + // To + osip_to_t* to_header = nullptr; + if (encode_to_header(p_msg_header.toField(), &to_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode To header"); + return -1; + } + int r = ::osip_to_to_str(to_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: To:'%s'- result:%d", hvalue, r); + if (::osip_message_set_to(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set To header in sip_message"); + return -1; + } + ::osip_to_free(to_header); + osip_free(hvalue); + + // Via + osip_via_t* via_header = nullptr; + if (encode_via_header(p_msg_header.via(), &via_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Via header"); + return -1; + } + ::osip_via_to_str(via_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Via:%s", hvalue); + std::string str(hvalue); + std::size_t idx = str.find(" ("); // FIXME Horrible work-around for osip_via_to_str issue (' ()' added sometimes + if (idx != std::string::npos) { + str = str.substr(0, idx); + } + loggers::get_instance().log("sip_codec_headers::encode_headers: Via (final):%s", str.c_str()); + if (::osip_message_set_via(p_sip_message, str.c_str()) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set Via header in sip_message"); + return -1; + } + ::osip_via_free(via_header); + osip_free(hvalue); + + // Encode Optional fields + loggers::get_instance().log("sip_codec_headers::encode_headers: Encode Optional fields"); + + // Accept + if (p_msg_header.accept().is_present()) { + if (encode_accept_header(p_msg_header.accept(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Accept header"); + return -1; + } + } + + // AcceptContact + if (p_msg_header.acceptContact().is_present()) { + if (encode_accept_contact_header(p_msg_header.acceptContact(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode AcceptContact header"); + return -1; + } + } + + // Allow + if (p_msg_header.allow().is_present()) { + if (encode_allow_header(p_msg_header.allow(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Allow header"); + return -1; + } + } + + // Authorization + if (p_msg_header.authorization().is_present()) { + osip_authorization_t* authorization_header = nullptr; + if (encode_authorization_header(p_msg_header.authorization(), &authorization_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Authorization header"); + return -1; + } + int result = ::osip_authorization_to_str(authorization_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Authorization: %s - %d", hvalue, result); + result = ::osip_message_set_authorization(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Authorization: %p - %d", p_sip_message->authorizations, result); + ::osip_authorization_free(authorization_header); + osip_free(hvalue); + } + + // CallInfo + if (p_msg_header.callInfo().is_present()) { + if (encode_call_info_header(p_msg_header.callInfo(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode CallInfo header"); + return -1; + } + } + + // CallId + if (p_msg_header.callId().is_present()) { + osip_call_id_t* call_id_header; + if (encode_call_id_header(p_msg_header.callId(), &call_id_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Call_Id header"); + return -1; + } + ::osip_call_id_to_str(call_id_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Call_Id:%s", hvalue); + int result = ::osip_message_set_call_id(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Call_Id: %p - %d", p_sip_message->call_id, result); + ::osip_call_id_free(call_id_header); + osip_free(hvalue); + } + + // Contact + if (p_msg_header.contact().is_present()) { + osip_contact_t* contact_header; + if (encode_contact_header(p_msg_header.contact(), &contact_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Contact header"); + return -1; + } + ::osip_contact_to_str(contact_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Contact: %s", hvalue); + int result = ::osip_message_set_contact(p_sip_message, hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: SIP Contact: %p - %d", p_sip_message->contacts, result); + ::osip_contact_free(contact_header); + osip_free(hvalue); + } + + // ContentLength + osip_content_length_t* content_length_header = nullptr; + if (encode_content_length_header(p_msg_header.contentLength(), &content_length_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode ContentLength header"); + return -1; + } + ::osip_content_length_to_str(content_length_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: ContentLength:%s", hvalue); + ::osip_message_set_content_length(p_sip_message, hvalue); + ::osip_content_length_free(content_length_header); + osip_free(hvalue); + + // ContentType + if (p_msg_header.contentType().is_present()) { + osip_content_type_t* content_type_header = nullptr; + if (encode_content_type_header(p_msg_header.contentType(), &content_type_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode ContentType header"); + return -1; + } + ::osip_content_type_to_str(content_type_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: ContentType:%s", hvalue); + ::osip_message_set_content_type(p_sip_message, hvalue); + ::osip_content_type_free(content_type_header); + osip_free(hvalue); + } + + // CSeq + osip_cseq_t* cseq_header = nullptr; + if (encode_c_seq_header(p_msg_header.cSeq(), &cseq_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode CSeq header"); + return -1; + } + ::osip_cseq_to_str(cseq_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: Cseq:%s", hvalue); + ::osip_message_set_cseq(p_sip_message, hvalue); + ::osip_cseq_free(cseq_header); + osip_free(hvalue); + + // Event + if (p_msg_header.event().is_present()) { + if (encode_event_header(p_msg_header.event(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Event header"); + return -1; + } + } + + // Expires + if (p_msg_header.expires().is_present()) { + if (encode_expires_header(p_msg_header.expires(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Expires header"); + return -1; + } + } + + // Geolocation + if (p_msg_header.geolocation().is_present()) { + if (encode_geolocation_header(p_msg_header.geolocation(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Geolocation header"); + return -1; + } + } + + // GeolocationRouting + if (p_msg_header.geolocationRouting().is_present()) { + if (encode_geolocation_routing_header(p_msg_header.geolocationRouting(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode GeolocationRouting header"); + return -1; + } + } + + // MaxForwards + if (p_msg_header.maxForwards().is_present()) { + if (encode_max_forwards_header(p_msg_header.maxForwards(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode MaxForwards header"); + return -1; + } + } + + // MinSE + if (p_msg_header.minSE().is_present()) { + if (encode_min_se_header(p_msg_header.minSE(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode MinSE header"); + return -1; + } + } + + // PAccessNetworkInfo + if (p_msg_header.pAccessNetworkInfo().is_present()) { + if (encode_p_access_network_info_header(p_msg_header.pAccessNetworkInfo(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode PAccessNetworkInfo header"); + return -1; + } + } + + // Privacy + if (p_msg_header.privacy().is_present()) { + if (encode_privacy_header(p_msg_header.privacy(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Privacy header"); + return -1; + } + } + + // Route + if (p_msg_header.route().is_present()) { + if (encode_route_header(p_msg_header.route(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Route header"); + return -1; + } + } + + // RecordRoute + if (p_msg_header.recordRoute().is_present()) { + if (encode_record_route_header(p_msg_header.recordRoute(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode RecordRoute header"); + return -1; + } + } + + // RSeq + if (p_msg_header.rSeq().is_present()) { + if (encode_r_seq_header(p_msg_header.rSeq(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode RSeq header"); + return -1; + } + } + + // Supported + if (p_msg_header.supported().is_present()) { + if (encode_supported_header(p_msg_header.supported(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode Supported header"); + return -1; + } + } + + if (p_msg_header.userAgent().is_present()) { + if (encode_user_agent_header(p_msg_header.userAgent(), &p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode UserAgent header"); + return -1; + } + } + + // WwwAuthenticate + if (p_msg_header.wwwAuthenticate().is_present()) { + osip_www_authenticate_t* www_authenticate_header = nullptr; + if (encode_www_authenticate_header(p_msg_header.wwwAuthenticate(), &www_authenticate_header) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to encode WwwAuthenticate header"); + return -1; + } + //std::string s("Digest realm=\"testrealm@host.com\", nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""); + ::osip_www_authenticate_to_str(www_authenticate_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_headers: WwwAuthenticate:%s", hvalue); + if (::osip_message_set_www_authenticate(p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_headers: Failed to set WwwAuthenticate header in sip_message"); + return -1; + } + //int result = ::osip_message_set_www_authenticate(p_sip_message, s.c_str());//hvalue); + //loggers::get_instance().log("sip_codec_headers::encode_headers: osip_message_set_www_authenticate return code:%d", result); + osip_free(hvalue); + } + + // TODO continue + const osip_list_t* p = &(p_sip_message->headers); + unsigned int pos = 0; + unsigned int size = ::osip_list_size(p); + loggers::get_instance().log("Unknown headers count: %d\n", size); + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos++); + loggers::get_instance().log("sip_codec_headers::encode_headers: %p: hname='%s' : hvalue='%s'\n", header, header->hname, header->hvalue); + } // End of 'while' statement + + loggers::get_instance().log("<<< sip_codec_headers::encode_headers"); + return 0; +} // End of method encode_headers + +void sip_codec_headers::decode_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MessageHeader& p_headers) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_headers"); + + LibSip__SIPTypesAndValues::MessageHeader headers; + // Decode mandatory fields + // From + loggers::get_instance().log("sip_codec_headers::decode_headers: From"); + LibSip__SIPTypesAndValues::From from_header; + decode_from_header(::osip_message_get_from(p_sip_message), from_header); + if (from_header.is_value()) { + p_headers.fromField() = from_header; + } else { + p_headers.fromField().set_to_omit(); + } + // To + loggers::get_instance().log("sip_codec_headers::decode_headers: To"); + LibSip__SIPTypesAndValues::To to_header; + decode_to_header(::osip_message_get_to(p_sip_message), to_header); + if (to_header.is_value()) { + p_headers.toField() = to_header; + } else { + p_headers.toField().set_to_omit(); + } + // Via + loggers::get_instance().log("sip_codec_headers::decode_headers: Via"); + LibSip__SIPTypesAndValues::Via via_header; + decode_via_header(p_sip_message, via_header); + if (via_header.is_value()) { + p_headers.via() = via_header; + } else { + p_headers.via().set_to_omit(); + } + + // Decode Optional fields + LibSip__SIPTypesAndValues::Accept accept_header; + decode_accept_header(p_sip_message, accept_header); + if (accept_header.is_value()) { + p_headers.accept() = accept_header; + } else { + p_headers.accept().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptContact accept_contact_header; + decode_accept_contact_header(p_sip_message, accept_contact_header); + if (accept_contact_header.is_value()) { + p_headers.acceptContact() = accept_contact_header; + } else { + p_headers.acceptContact().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptEncoding accept_encoding_header; + decode_accept_encoding_header(p_sip_message, accept_encoding_header); + if (accept_encoding_header.is_value()) { + p_headers.acceptEncoding() = accept_encoding_header; + } else { + p_headers.acceptEncoding().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AcceptLanguage accept_language_header; + decode_accept_language_header(p_sip_message, accept_language_header); + if (accept_language_header.is_value()) { + p_headers.acceptLanguage() = accept_language_header; + } else { + p_headers.acceptLanguage().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AlertInfo alert_info_header; + decode_alert_info_header(p_sip_message, alert_info_header); + if (alert_info_header.is_value()) { + p_headers.alertInfo() = alert_info_header; + } else { + p_headers.alertInfo().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Allow allow_header; + decode_allow_header(p_sip_message, allow_header); + if (allow_header.is_value()) { + p_headers.allow() = allow_header; + } else { + p_headers.allow().set_to_omit(); + } + + LibSip__SIPTypesAndValues::AllowEvents allow_events_header; + decode_allow_events_header(p_sip_message, allow_events_header); + if (allow_events_header.is_value()) { + p_headers.allowEvents() = allow_events_header; + } else { + p_headers.allowEvents().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Authorization authorization_header; + decode_authorization_header(p_sip_message, authorization_header); + if (authorization_header.is_value()) { + p_headers.authorization() = authorization_header; + } else { + p_headers.authorization().set_to_omit(); + } + + p_headers.authenticationInfo().set_to_omit(); + + LibSip__SIPTypesAndValues::CallId call_id_header; + decode_call_id_header(p_sip_message, call_id_header); + if (call_id_header.is_value()) { + p_headers.callId() = call_id_header; + } else { + p_headers.callId().set_to_omit(); + } + + LibSip__SIPTypesAndValues::CallInfo call_info_header; + decode_call_info_header(p_sip_message, call_info_header); + if (call_info_header.is_value()) { + p_headers.callInfo() = call_info_header; + } else { + p_headers.callInfo().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Contact contact_header; + decode_contact_header(p_sip_message, contact_header); + if (contact_header.is_value()) { + p_headers.contact() = contact_header; + } else { + p_headers.contact().set_to_omit(); + } + + p_headers.contentDisposition().set_to_omit(); + p_headers.contentEncoding().set_to_omit(); + p_headers.contentLanguage().set_to_omit(); + + LibSip__SIPTypesAndValues::ContentLength content_length_header; + decode_content_length_header(p_sip_message, content_length_header); + if (content_length_header.is_value()) { + p_headers.contentLength() = content_length_header; + } else { + p_headers.contentLength().set_to_omit(); + } + + LibSip__SIPTypesAndValues::ContentType content_type_header; + decode_content_type_header(p_sip_message, content_type_header); + if (content_type_header.is_value()) { + p_headers.contentType() = content_type_header; + } else { + p_headers.contentType().set_to_omit(); + } + + LibSip__SIPTypesAndValues::CSeq c_seq_header; + decode_c_seq_header(p_sip_message, c_seq_header); + if (c_seq_header.is_value()) { + p_headers.cSeq() = c_seq_header; + } else { + p_headers.cSeq().set_to_omit(); + } + + p_headers.date().set_to_omit(); + p_headers.errorInfo().set_to_omit(); + p_headers.event().set_to_omit(); + p_headers.expires().set_to_omit(); + p_headers.featureCaps().set_to_omit(); + + LibSip__SIPTypesAndValues::Geolocation geolocation_header; + decode_geolocation_header(p_sip_message, geolocation_header); + if (geolocation_header.is_value()) { + p_headers.geolocation() = geolocation_header; + } else { + p_headers.geolocation().set_to_omit(); + } + + LibSip__SIPTypesAndValues::GeolocationRouting geolocation_routing_header; + decode_geolocation_routing_header(p_sip_message, geolocation_routing_header); + if (geolocation_routing_header.is_value()) { + p_headers.geolocationRouting() = geolocation_routing_header; + } else { + p_headers.geolocationRouting().set_to_omit(); + } + + p_headers.historyInfo().set_to_omit(); + p_headers.infoPackage().set_to_omit(); + p_headers.inReplyTo().set_to_omit(); + + LibSip__SIPTypesAndValues::Event event_header; + decode_event_header(p_sip_message, event_header); + if (event_header.is_value()) { + p_headers.event() = event_header; + } else { + p_headers.event().set_to_omit(); + } + + LibSip__SIPTypesAndValues::Expires expires_header; + decode_expires_header(p_sip_message, expires_header); + if (expires_header.is_value()) { + p_headers.expires() = expires_header; + } else { + p_headers.expires().set_to_omit(); + } + + LibSip__SIPTypesAndValues::MaxForwards max_forwards_header; + decode_max_forwards_header(p_sip_message, max_forwards_header); + if (max_forwards_header.is_value()) { + p_headers.maxForwards() = max_forwards_header; + } else { + p_headers.maxForwards().set_to_omit(); + } + + p_headers.mimeVersion().set_to_omit(); + p_headers.minExpires().set_to_omit(); + + LibSip__SIPTypesAndValues::MinSE min_se_header; + decode_min_se_header(p_sip_message, min_se_header); + if (min_se_header.is_value()) { + p_headers.minSE() = min_se_header; + } else { + p_headers.minSE().set_to_omit(); + } + + p_headers.organization().set_to_omit(); + + LibSip__SIPTypesAndValues::PAccessNetworkInfo p_access_network_info_header; + decode_p_access_network_info_header(p_sip_message, p_access_network_info_header); + if (p_access_network_info_header.is_value()) { + p_headers.pAccessNetworkInfo() = p_access_network_info_header; + } else { + p_headers.pAccessNetworkInfo().set_to_omit(); + } + + p_headers.pAssertedID().set_to_omit(); + p_headers.pAssertedService().set_to_omit(); + p_headers.pAssociatedURI().set_to_omit(); + p_headers.path().set_to_omit(); + p_headers.pCalledPartyID().set_to_omit(); + p_headers.pChargingFunctionAddresses().set_to_omit(); + p_headers.pChargingVector().set_to_omit(); + p_headers.pEarlyMedia().set_to_omit(); + p_headers.pMediaAuthorization().set_to_omit(); + p_headers.pPreferredID().set_to_omit(); + p_headers.pPreferredService().set_to_omit(); + p_headers.priority().set_to_omit(); + + LibSip__SIPTypesAndValues::Privacy privacy_header; + decode_privacy_header(p_sip_message, privacy_header); + if (privacy_header.is_value()) { + p_headers.privacy() = privacy_header; + } else { + p_headers.privacy().set_to_omit(); + } + + p_headers.proxyAuthenticate().set_to_omit(); + p_headers.proxyAuthorization().set_to_omit(); + p_headers.proxyRequire().set_to_omit(); + p_headers.pVisitedNetworkID().set_to_omit(); + p_headers.rAck().set_to_omit(); + p_headers.reason().set_to_omit(); + p_headers.recvInfo().set_to_omit(); + p_headers.requestDisposition().set_to_omit(); + p_headers.referredBy().set_to_omit(); + p_headers.referTo().set_to_omit(); + p_headers.referSub().set_to_omit(); + p_headers.replaces().set_to_omit(); + p_headers.replyTo().set_to_omit(); + p_headers.require().set_to_omit(); + + LibSip__SIPTypesAndValues::RSeq r_seq_header; + decode_r_seq_header(p_sip_message, r_seq_header); + if (r_seq_header.is_value()) { + p_headers.rSeq() = r_seq_header; + } else { + p_headers.rSeq().set_to_omit(); + } + p_headers.retryAfter().set_to_omit(); + + LibSip__SIPTypesAndValues::Route route_header; + decode_route_header(p_sip_message, route_header); + if (route_header.is_value()) { + p_headers.route() = route_header; + } else { + p_headers.route().set_to_omit(); + } + + LibSip__SIPTypesAndValues::RecordRoute record_route_header; + decode_record_route_header(p_sip_message, record_route_header); + if (record_route_header.is_value()) { + p_headers.recordRoute() = record_route_header; + } else { + p_headers.recordRoute().set_to_omit(); + } + + p_headers.securityClient().set_to_omit(); + p_headers.securityServer().set_to_omit(); + p_headers.securityVerify().set_to_omit(); + p_headers.server().set_to_omit(); + p_headers.serviceRoute().set_to_omit(); + + LibSip__SIPTypesAndValues::SessionExpires session_expires; + decode_session_expires_header(p_sip_message, session_expires); + if (session_expires.is_value()) { + p_headers.sessionExpires() = session_expires; + } else { + p_headers.sessionExpires().set_to_omit(); + } + + p_headers.sessionId().set_to_omit(); + p_headers.sipETag().set_to_omit(); + p_headers.sipIfMatch().set_to_omit(); + p_headers.subject().set_to_omit(); + p_headers.subscriptionState().set_to_omit(); + + LibSip__SIPTypesAndValues::Supported supported_header; + decode_supported_header(p_sip_message, supported_header); + if (supported_header.is_value()) { + p_headers.supported() = supported_header; + } else { + p_headers.supported().set_to_omit(); + } + + p_headers.timestamp__().set_to_omit(); + p_headers.unsupported().set_to_omit(); + p_headers.userToUser().set_to_omit(); + + LibSip__SIPTypesAndValues::UserAgent user_agent_header; + decode_user_agent_header(p_sip_message, user_agent_header); + if (user_agent_header.is_value()) { + p_headers.userAgent() = user_agent_header; + } else { + p_headers.userAgent().set_to_omit(); + } + p_headers.warning().set_to_omit(); + + LibSip__SIPTypesAndValues::WwwAuthenticate www_authenticate_header; + osip_www_authenticate_t* www_authenticate = nullptr; + ::osip_message_get_www_authenticate(p_sip_message, 0, &www_authenticate); + decode_www_authenticate_header(www_authenticate, www_authenticate_header); + if (www_authenticate_header.is_value()) { + p_headers.wwwAuthenticate() = www_authenticate_header; + } else { + p_headers.wwwAuthenticate().set_to_omit(); + } + + p_headers.resourcePriority().set_to_omit(); + p_headers.answerMode().set_to_omit(); + p_headers.privAnswerMode().set_to_omit(); + p_headers.targetDialog().set_to_omit(); + p_headers.pAnswerState().set_to_omit(); + p_headers.undefinedHeader__List().set_to_omit(); + + // List unprocessed headers + const osip_list_t* p = &(p_sip_message->headers); + unsigned int pos = 0; + unsigned int size = ::osip_list_size(p); + loggers::get_instance().log("Unknown headers count: %d\n", size); + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos++); + loggers::get_instance().log("sip_codec_headers::decode_headers: %p: hname='%s' : hvalue='%s'\n", header, header->hname, header->hvalue); + } // End of 'while' statement + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_headers: ", p_headers); +} // End of method decode_headers + +int sip_codec_headers::encode_sip_url(const LibSip__SIPTypesAndValues::SipUrl& p_sip_uri, osip_uri_t** p_uri) +{ // TODO To be renamed into encode_uri + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_sip_uri: ", p_sip_uri); + + std::string host; + std::string port; + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + const LibSip__SIPTypesAndValues::UriComponents& components = p_sip_uri.components(); + if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_sip)) { + ::osip_uri_set_scheme(uri, (char*)static_cast(p_sip_uri.scheme())); + const LibSip__SIPTypesAndValues::SipUriComponents& s = p_sip_uri.components().sip(); + if (s.userInfo().is_present()) { + const LibSip__SIPTypesAndValues::UserInfo& u = static_cast(s.userInfo()); + ::osip_uri_set_username(uri, (char*)static_cast(static_cast(u.userOrTelephoneSubscriber()))); + if (u.password().is_present()) { + const CHARSTRING& c = static_cast(u.password()); + ::osip_uri_set_password(uri, (char*)static_cast(c)); + } + } + encode_host_port(s.hostPort(), host, port); + if (!host.empty()) { + ::osip_uri_set_host(uri, (char*)host.c_str()); + } + if (!port.empty()) { + ::osip_uri_set_port(uri, (char*)port.c_str()); + } + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_tel)) { + const LibSip__SIPTypesAndValues::TelUriComponents& t = p_sip_uri.components().tel(); + loggers::get_instance().error("sip_codec_headers::encode_sip_uri: Unsupported LibSip__SIPTypesAndValues::UriComponents::ALT_tel"); + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_urn)) { + const LibSip__SIPTypesAndValues::UrnUriComponents& u = p_sip_uri.components().urn(); + loggers::get_instance().log("sip_codec_headers::encode_sip_uri: Decode Urn"); + std::string str(static_cast(p_sip_uri.scheme())); + str += ":"; + str += static_cast(u.namespaceId()); + str += ":"; + str += static_cast(u.namespaceSpecificString()); + ::osip_uri_parse(uri, str.c_str()); + } else if (components.ischosen(LibSip__SIPTypesAndValues::UriComponents::ALT_other)) { + std::string str(static_cast(p_sip_uri.scheme())); + str += ":"; + str += static_cast(p_sip_uri.components().other()); + ::osip_uri_parse(uri, str.c_str()); + } // else, noting to do + + if (uri != nullptr) { + ::osip_uri_clone(uri, p_uri); + } else { + *p_uri = nullptr; + } + + char* buffer = nullptr; + std::size_t length = 0; + int result = ::osip_uri_to_str(*p_uri, &buffer); + if (result != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_sip_uri: Failed to encode data structures"); + } else { + loggers::get_instance().log("sip_codec_headers::encode_sip_uri: URI:%s", buffer); + } + + return 0; +} // End of method encode_sip_url + +void sip_codec_headers::encode_host_port(const LibSip__SIPTypesAndValues::HostPort& p_host_port, std::string& p_host, std::string& p_port) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_host_port"); + + if (p_host_port.host().is_present()) { + p_host.assign(static_cast(static_cast(p_host_port.host()))); + } else { + p_host.clear(); + } + loggers::get_instance().log("sip_codec_headers::encode_host_port: host:'%s'", p_host.c_str()); + if (p_host_port.portField().is_present()) { + p_port.assign(std::to_string(static_cast(static_cast(p_host_port.portField())))); + } else { + p_port.clear(); + } + loggers::get_instance().log("sip_codec_headers::encode_port_port: port:'%s'", p_port.c_str()); +} // End of method encode_host_port + +int sip_codec_headers::encode_accept_header(const LibSip__SIPTypesAndValues::Accept& p_accept, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_accept_header"); + + if (!p_accept.acceptArgs().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::AcceptBody__List& al = static_cast(*p_accept.acceptArgs().get_opt_value()); + if (al.lengthof() == 0) { + return 0; + } + std::string accepts; + for (int i = 0; i < al.lengthof(); i++) { + const LibSip__SIPTypesAndValues::AcceptBody& b = al[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_accept_header: b: ", b); + osip_accept_t *accept; + accept_init(&accept); + // Split it using '/' as separator + std::vector output = converter::get_instance().split(static_cast(b.mediaRange()), "/"); + accept->type = ::strdup(output[0].c_str()); + if (output.size() > 1) { + accept->subtype = ::strdup(output[1].c_str()); + } + if (b.acceptParam().is_present()) { + encode_semi_colon_params(static_cast(b.acceptParam()), &(accept->gen_params)); + } + char *buff; + ::osip_accept_to_str(accept, &buff); + accepts += (const char*)buff; + accepts += ","; + osip_free(buff); + ::osip_accept_free(accept); + loggers::get_instance().log("sip_codec_headers::encode_accept_header: accepts: %s", accepts.c_str()); + } // End of 'for' statement + accepts.resize(accepts.length() - 1); // Remove the last ',' + ::osip_message_set_accept(*p_sip_message, ::strdup(accepts.c_str())); + + return 0; +} // End of method encode_accept_header + +int sip_codec_headers::encode_accept_contact_header(const LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_accept_contact_header"); + + const LibSip__SIPTypesAndValues::AcRcValue__List& al = p_accept_contact.acValues(); + if (al.lengthof() == 0) { + return 0; + } + + std::string accepts; + for (int i = 0; i < al.lengthof(); i++) { + const LibSip__SIPTypesAndValues::AcRcValue& a = al[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_accept_contact_header: a: ", a); + accepts += static_cast(a.wildcard()); + if (a.acRcParams().is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*a.acRcParams().get_opt_value()); + for (int j = 0; j < l.lengthof(); j++) { + accepts += ";"; + const LibSip__Common::GenericParam& p = l[j]; + accepts += static_cast(p.id()); + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value());; + accepts += "="; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + accepts += static_cast(g.tokenOrHost()); + } else { + accepts += static_cast(g.quotedString()); + } + } + } // End of 'for' statement + } + accepts += ","; + loggers::get_instance().log("sip_codec_headers::encode_accept_header: accepts: %s", accepts.c_str()); + } // End of 'for' statement + accepts.resize(accepts.length() - 1); // Remove the last ',' + ::osip_message_set_header(*p_sip_message, (const char *)"Accept-Contact", ::strdup(accepts.c_str())); + + loggers::get_instance().log("<<< sip_codec_headers::encode_accept_contact_header"); + return 0; +} // End of method encode_accept_contact_header + +int sip_codec_headers::encode_allow_header(const OPTIONAL& p_allow, osip_message_t** p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_allow_header", p_allow); + + const LibSip__SIPTypesAndValues::Allow& allow = static_cast(*p_allow.get_opt_value()); + + if (!allow.methods().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::Method__List& m = static_cast(*allow.methods().get_opt_value()); + if (m.lengthof() == 0) { + return 0; + } + + std::string str(static_cast(m[0])); + if (m.lengthof() > 1) { + int i = 1; + do { + str += ","; + str += static_cast(m[i++]); + } while (i < m.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Allow", str.c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_allow_header"); + return 0; +} // End of method encode_allow_header + +int sip_codec_headers::encode_authorization_header(const LibSip__SIPTypesAndValues::Authorization& p_authorization, osip_authorization_t** p_authorization_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_authorization_header"); + + ::osip_authorization_init(p_authorization_header); + + const LibSip__SIPTypesAndValues::CredentialsList& l = p_authorization.body(); + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: Processing item #%d", i); + const LibSip__SIPTypesAndValues::Credentials& c = l[i++]; + if (c.ischosen(LibSip__SIPTypesAndValues::Credentials::ALT_digestResponse)) { + bool processed = true; + const LibSip__Common::CommaParam__List& p = c.digestResponse(); + if (p.lengthof() > 0) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: Processing param ", p); + int j = 0; + do { + const LibSip__Common::GenericParam& g = p[j++]; + std::string str(static_cast(g.id())); + if (str.compare("realm") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: realm found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_realm(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_realm(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(4)"); + } + } else if (str.compare("username") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: username found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_username(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_username(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(6)"); + } + } else if (str.compare("uri") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: uri found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_uri(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_uri(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(7)"); + } + } else if (str.compare("nonce") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: nonce found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_nonce(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_nonce(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(10)"); + } + } else if (str.compare("response") == 0) { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: response found"); + if (g.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: GenValue: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: tokenOrHost: ", v.tokenOrHost()); + ::osip_authorization_set_response(*p_authorization_header, (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_authorization_header: quotedString: ", v.quotedString()); + ::osip_authorization_set_response(*p_authorization_header, (char*)::strdup(static_cast(v.quotedString()))); + } + } else { + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented(12)"); + } + } else { + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: Set processed to false for %s", str.c_str()); + processed = false; + } + } while (j < p.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_authorization_header: processed: %x", processed); + if (processed) { + ::osip_authorization_set_auth_type(*p_authorization_header, (char*)::strdup("Digest")); + } + } else { + const LibSip__SIPTypesAndValues::OtherAuth& o = c.otherResponse(); + loggers::get_instance().error("sip_codec_headers::encode_authorization_header: Not implemented"); + } + } while (i < l.lengthof()); + + return 0; +} // End of method encode_authorization_header + +int sip_codec_headers::encode_call_id_header(const LibSip__SIPTypesAndValues::CallId& p_call_id, osip_call_id_t** p_call_id_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_call_id_header", p_call_id.callid()); + + ::osip_call_id_init(p_call_id_header); + ::osip_call_id_parse(*p_call_id_header, static_cast(p_call_id.callid())); + + loggers::get_instance().log("<<< sip_codec_headers::encode_call_id_header"); + return 0; +} // End of method encode_call_id_header + +int sip_codec_headers::encode_call_info_header(const OPTIONAL& p_call_info, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_call_info_header", p_call_info); + + const LibSip__SIPTypesAndValues::CallInfo& call_info = static_cast(*p_call_info.get_opt_value()); + + if (!call_info.callInfoBody().is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::CallInfoBody__List& c = static_cast(*call_info.callInfoBody().get_opt_value()); + if (c.lengthof() == 0) { + return 0; + } + + int pos = 0; + std::string value; + do { + const LibSip__SIPTypesAndValues::CallInfoBody& call_info_body = c[pos++]; + loggers::get_instance().log_msg("sip_codec_headers::encode_call_info_header: Processing ", call_info_body); + osip_call_info_t *header; + ::osip_call_info_init(&header); + ::osip_call_info_set_uri(header, (char*)static_cast(call_info_body.url())); + if (call_info_body.infoParams().is_present()) { + encode_semi_colon_params(static_cast(call_info_body.infoParams()), &(header)->gen_params); + } + char *buffer; + ::osip_call_info_to_str(header, &buffer); + value += buffer; + osip_free(buffer); + osip_free(header); + loggers::get_instance().log("sip_codec_headers::encode_call_info_header: value=%s", value.c_str()); + } while (pos < c.lengthof()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"callInfo", value.c_str()); + loggers::get_instance().log("<<< sip_codec_headers::encode_call_info_header"); + return 0; +} // End of method encode_call_info_header + +int sip_codec_headers::encode_contact_header(const LibSip__SIPTypesAndValues::Contact& p_contact, osip_contact_t** p_contact_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_contact_header"); + + ::osip_contact_init(p_contact_header); + const LibSip__SIPTypesAndValues::ContactBody& body = p_contact.contactBody(); + if (body.ischosen(LibSip__SIPTypesAndValues::ContactBody::ALT_wildcard)) { + const CHARSTRING& wildcard = body.wildcard(); + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: wildcard not implemented yet"); + *p_contact_header = nullptr; + return -1; + } else if (body.ischosen(LibSip__SIPTypesAndValues::ContactBody::ALT_contactAddresses)) { + const LibSip__SIPTypesAndValues::ContactAddress__List& l = body.contactAddresses(); + // Encode AddressField + for (int i = 0; i < l.size_of(); i++) { + osip_uri_t* uri = nullptr; + const LibSip__SIPTypesAndValues::ContactAddress c = l[i]; + if (c.addressField().ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = c.addressField().nameAddr(); + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode SipUrl"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + ::osip_contact_set_url(*p_contact_header, uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_contact_set_displayname(*p_contact_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_contact_set_displayname(*p_contact_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode DisplayName"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + } + } else if (c.addressField().ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + if (encode_sip_url(c.addressField().addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode SipUrl"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + ::osip_contact_set_url(*p_contact_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_contact_header: Failed to encode Addr__Union"); + ::osip_contact_free(*p_contact_header); + *p_contact_header = nullptr; + return -1; + } + // Encode contactParams + if (c.contactParams().is_present()) { + encode_semi_colon_params(static_cast(c.contactParams()), &(*p_contact_header)->gen_params); + } + + } // End of 'for' statement + } else { + return -1; + } + + loggers::get_instance().log("<<< sip_codec_headers::encode_contact_header"); + return 0; +} // End of method encode_contact_header + +int sip_codec_headers::encode_content_length_header(const LibSip__SIPTypesAndValues::ContentLength& p_content_length, osip_content_length_t** p_content_length_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_content_length_header"); + + ::osip_content_length_init(p_content_length_header); + (*p_content_length_header)->value = (char*)::strdup(std::to_string(static_cast(p_content_length.len())).c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_content_length_header"); + return 0; +} // End of method encode_content_length_header + +int sip_codec_headers::encode_content_type_header(const LibSip__SIPTypesAndValues::ContentType& p_content_type, osip_content_type_t** p_content_type_header) +{ + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_content_type_header: ", p_content_type); + + ::osip_content_type_init(p_content_type_header); + + // Split type/subtype using '/' as separator + std::vector output = converter::get_instance().split(static_cast(p_content_type.mTypeSubtype()), "/"); + (*p_content_type_header)->type = ::strdup(output[0].c_str()); + if (output.size() > 1) { + (*p_content_type_header)->subtype = ::strdup(output[1].c_str()); + } + + if (p_content_type.mParams().is_present()) { + encode_semi_colon_params(static_cast(p_content_type.mParams()), &((*p_content_type_header)->gen_params)); + } + + loggers::get_instance().log("<<< sip_codec_headers::encode_content_type_header"); + return 0; +} // End of method encode_content_type_header + +int sip_codec_headers::encode_c_seq_header(const LibSip__SIPTypesAndValues::CSeq& p_c_seq, osip_cseq_t** p_c_seq_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_c_seq_header"); + + ::osip_cseq_init(p_c_seq_header); + ::osip_cseq_set_number(*p_c_seq_header, (char*)::strdup(std::to_string(static_cast(p_c_seq.seqNumber())).c_str())); + ::osip_cseq_set_method(*p_c_seq_header, (char*)::strdup(static_cast(p_c_seq.method()))); + + return 0; +} // End of method encode_c_seq_header + +int sip_codec_headers::encode_event_header(const OPTIONAL& p_event, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_event_header"); + + if (!p_event.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Event& event = static_cast(*p_event.get_opt_value()); + + // eventType + std::string value(static_cast(event.eventType())); + loggers::get_instance().log("sip_codec_headers::encode_event_header: eventType: %s", value.c_str()); + + // eventParam + const OPTIONAL& event_param = event.eventParams(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (event_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*event_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_event_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Event", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_expires_header(const OPTIONAL& p_expires, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_expires_header"); + + if (!p_expires.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Expires& expires = static_cast(*p_expires.get_opt_value()); + + // deltaSec + std::string value(static_cast(expires.deltaSec())); + + loggers::get_instance().log("sip_codec_headers::encode_expires_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Expires", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_from_header(const LibSip__SIPTypesAndValues::From& p_from, osip_from_t** p_from_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_from_header"); + + ::osip_from_init(p_from_header); + // Endode addressField + osip_uri_t* uri = nullptr; + const LibSip__SIPTypesAndValues::Addr__Union& a = p_from.addressField(); + if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = a.nameAddr(); + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode SipUrl"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + ::osip_from_set_url(*p_from_header, uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_from_set_displayname(*p_from_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_from_set_displayname(*p_from_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode DisplayName"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + } + } else if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + if (encode_sip_url(a.addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode SipUrl"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + ::osip_from_set_url(*p_from_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_from_header: Failed to encode Addr__Union"); + ::osip_from_free(*p_from_header); + *p_from_header = nullptr; + return -1; + } + // Encode fromParams + if (p_from.fromParams().is_present()) { + encode_semi_colon_params(static_cast(p_from.fromParams()), &(*p_from_header)->gen_params); + } + + return 0; +} // End of method encode_from_header + +int sip_codec_headers::encode_geolocation_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_geolocation_header"); + + if (!p_geolocation.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::Geolocation& geolocation = static_cast(*p_geolocation.get_opt_value()); + + // addrSpec + const LibSip__SIPTypesAndValues::SipUrl& addr = geolocation.addrSpec(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr, &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_geolocation_header: Failed to encode SipUrl"); + return -1; + } + char *buff = nullptr; + if (::osip_uri_to_str(uri, &buff) != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_geolocation_header: Failed to convert SipUrl"); + return -1; + } + std::string value(buff); + osip_free(buff); + loggers::get_instance().log("sip_codec_headers::encode_geolocation_header: addrSpec: %s", value.c_str()); + // geolocParam + const OPTIONAL& geoloc_param = geolocation.geolocParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (geoloc_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*geoloc_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + loggers::get_instance().log("sip_codec_headers::encode_geolocation_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Geolocation", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_geolocation_routing_header(const OPTIONAL& p_geolocation_routing, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_geolocation_routing_header"); + + if (!p_geolocation_routing.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::GeolocationRouting& geolocation_routing = static_cast(*p_geolocation_routing.get_opt_value()); + std::string value; + if (geolocation_routing.state() == LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E) { + value = "yes"; + } else if (geolocation_routing.state() == LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E) { + value = "no"; + } else { + value = "other"; + } + loggers::get_instance().log("sip_codec_headers::encode_geolocation_routing_header: state: %s", value.c_str()); + // genericValue + const OPTIONAL& generic_value = geolocation_routing.genericValue(); + if (generic_value.is_present()) { + const LibSip__Common::GenericParam& g = static_cast(*geolocation_routing.genericValue().get_opt_value()); + value += ";"; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + } + + loggers::get_instance().log("sip_codec_headers::encode_geolocation_routing_header: %s", value.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Geolocation-Routing", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_max_forwards_header(const OPTIONAL& p_max_forwards, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_max_forwards_header"); + + if (!p_max_forwards.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::MaxForwards& max_forwards = static_cast(*p_max_forwards.get_opt_value()); + osip_message_set_max_forwards(*p_sip_message, std::to_string(static_cast(max_forwards.forwards())).c_str()); + + return 0; +} + +int sip_codec_headers::encode_min_se_header(const OPTIONAL& p_min_se, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_min_se_header", p_min_se); + + const LibSip__SIPTypesAndValues::MinSE& min_se = static_cast(*p_min_se.get_opt_value()); + // deltaSec + std::string value(static_cast(min_se.deltaSec())); + // seParam + const OPTIONAL& se_param = min_se.minSeParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (se_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*se_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message,(const char *)"Min-SE", value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_p_access_network_info_header(const OPTIONAL& p_p_access_network_info_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_p_access_network_info_header", p_p_access_network_info_header); + + const LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_access_network_info_header = static_cast(*p_p_access_network_info_header.get_opt_value()); + // accessType + std::string value(static_cast(p_access_network_info_header.accessType())); + // Generic parameters + const OPTIONAL& p_access_network_info_param = p_access_network_info_header.genericParams(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (p_access_network_info_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*p_access_network_info_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + i += 1; + } while (i < l.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"P-Access-Network-Info", value.c_str()); + + return 0; +} // End of method encode_p_access_network_info_header + +int sip_codec_headers::encode_p_associated_uri_header(const OPTIONAL& p_p_associated_uri_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_p_associated_uri_header", p_p_associated_uri_header); + + if (!p_p_associated_uri_header.is_present()) { + return 0; + } + const LibSip__SIPTypesAndValues::PAssociatedURI& p_associated_uri_header = static_cast(*p_p_associated_uri_header.get_opt_value()); + + const LibSip__SIPTypesAndValues::NameAddrParam__List& l = p_associated_uri_header.nameAddrList(); + std::string value; + for (int i = 0; i < l.lengthof(); i++) { + osip_uri_t* uri = nullptr; + if (encode_sip_url(l[i].nameAddr().addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: Failed to encode SipUrl"); + return -1; + } + char *buff = nullptr; + if (::osip_uri_to_str(uri, &buff) != 0) { + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: Failed to convert SipUrl"); + return -1; + } + value += buff; + osip_free(buff); + if (l[i].genericParams().is_present()) { + // TODO To be implemented + loggers::get_instance().warning("sip_codec_headers::encode_p_associated_uri_header: To be implemented"); + } + value += ","; + } // End of 'for' statement + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"P-Associated-URI", value.c_str()); + return 0; +} + +int sip_codec_headers::encode_privacy_header(const OPTIONAL& p_privacy_header, osip_message_t** p_sip_message) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_privacy_header", p_privacy_header); + + const LibSip__SIPTypesAndValues::Privacy& privacy_header = static_cast(*p_privacy_header.get_opt_value()); + + const LibSip__SIPTypesAndValues::PrivacyValue__List& m = privacy_header.privValueList(); + if (m.lengthof() == 0) { + return 0; + } + + std::string str(static_cast(m[0])); + if (m.lengthof() > 1) { + int i = 1; + do { + str += ","; + str += static_cast(m[i++]); + } while (i < m.lengthof()); + } + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"Privacy", str.c_str()); + + loggers::get_instance().log("<<< sip_codec_headers::encode_privacy_header"); + return 0; +} // End of method encode_privacy_header + +int sip_codec_headers::encode_route_header(const OPTIONAL& p_route_header, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_route_header", p_route_header); + + osip_route_t* route_header; + ::osip_route_init(&route_header); + const LibSip__SIPTypesAndValues::Route& r = static_cast(*p_route_header.get_opt_value()); + const LibSip__SIPTypesAndValues::RouteBody__List& l = r.routeBody(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__SIPTypesAndValues::NameAddr& addr = l[i].nameAddr(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_route_header: Failed to encode SipUrl"); + ::osip_route_free(route_header); + return -1; + } + ::osip_route_set_url(route_header, uri); + // Encode rrParam + if (l[i].rrParam().is_present()) { + encode_semi_colon_params(static_cast(l[i].rrParam()), &(route_header)->gen_params); + } + } // End of 'for' statement + + char* hvalue; + int result = ::osip_route_to_str(route_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_route_header: '%s'- result:%d", hvalue, result); + if (::osip_message_set_route(*p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_route_header: Failed to set Route header in sip_message"); + return -1; + } + ::osip_route_free(route_header); + osip_free(hvalue); + + return 0; +} + +int sip_codec_headers::encode_record_route_header(const OPTIONAL& p_record_route_header, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_record_route_header", p_record_route_header); + + osip_record_route_t* record_route_header; + ::osip_record_route_init(&record_route_header); + const LibSip__SIPTypesAndValues::RecordRoute& r = static_cast(*p_record_route_header.get_opt_value()); + const LibSip__SIPTypesAndValues::RouteBody__List& l = r.routeBody(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__SIPTypesAndValues::NameAddr& addr = l[i].nameAddr(); + osip_uri_t* uri = nullptr; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_record_route_header: Failed to encode SipUrl"); + ::osip_record_route_free(record_route_header); + return -1; + } + ::osip_record_route_set_url(record_route_header, uri); + // Encode rrParam + if (l[i].rrParam().is_present()) { + encode_semi_colon_params(static_cast(l[i].rrParam()), &(record_route_header)->gen_params); + } + } // End of 'for' statement + + char* hvalue; + int result = ::osip_record_route_to_str(record_route_header, &hvalue); + loggers::get_instance().log("sip_codec_headers::encode_record_route_header: '%s'- result:%d", hvalue, result); + if (::osip_message_set_record_route(*p_sip_message, hvalue) != OSIP_SUCCESS) { + loggers::get_instance().warning("sip_codec_headers::encode_record_route_header: Failed to set RecordRoute header in sip_message"); + return -1; + } + ::osip_record_route_free(record_route_header); + osip_free(hvalue); + + return 0; +} + +int sip_codec_headers::encode_r_seq_header(const OPTIONAL& p_r_seq, osip_message_t** p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_headers::encode_r_seq_header", p_r_seq); + + const LibSip__SIPTypesAndValues::RSeq& r_seq = static_cast(*p_r_seq.get_opt_value()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, (const char *)"RSeq", static_cast(std::to_string(r_seq.responseNum()).c_str())); + + return 0; +} // End of method encode_r_seq_header + +int sip_codec_headers::encode_session_expires_header(const OPTIONAL& p_session_expires, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_session_expires_header"); + + if (!p_session_expires.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::SessionExpires& session_expires = static_cast(*p_session_expires.get_opt_value()); + // deltaSec + std::string value(static_cast(session_expires.deltaSec())); + // seParam + const OPTIONAL& se_param = session_expires.seParam(); // TODO Create a method to fill an std::string with SemicolonParam__List + if (se_param.is_present()) { + const LibSip__Common::SemicolonParam__List& l = static_cast(*se_param.get_opt_value()); + int i = 0; + do { + value += ";"; + const LibSip__Common::GenericParam& g = l[i]; + value += static_cast(g.id()); + if (g.paramValue().is_present()) { + value += "="; + const LibSip__Common::GenValue& v = static_cast(*g.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + value += static_cast(v.tokenOrHost()); + } else { + value += static_cast(v.quotedString()); + } + } + } while (i < l.lengthof()); + } + osip_message_set_expires(*p_sip_message, value.c_str()); + + return 0; +} + +int sip_codec_headers::encode_supported_header(const OPTIONAL& p_supported, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_supported_header"); + + if (!p_supported.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::Supported& supported = static_cast(*p_supported.get_opt_value()); + const OPTIONAL& tags = supported.optionsTags(); + if (!tags.is_present()) { + return 0; + } + if (encode_option_tag_list(static_cast(*tags.get_opt_value()), "Supported", p_sip_message) == -1) { + return -1; + } + + return 0; +} + +int sip_codec_headers::encode_user_agent_header(const OPTIONAL& p_user_agent, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_user_agent_header"); + + if (!p_user_agent.is_present()) { + return 0; + } + + const LibSip__SIPTypesAndValues::UserAgent& user_agent = static_cast(*p_user_agent.get_opt_value()); + const LibSip__SIPTypesAndValues::ServerVal__List& s = user_agent.userAgentBody(); + if (encode_server_val_list(s, "User-Agent", p_sip_message) == -1) { + return -1; + } + + return 0; +} + +int sip_codec_headers::encode_to_header(const LibSip__SIPTypesAndValues::To& p_to, osip_to_t** p_to_header) { + loggers::get_instance().log(">>> sip_codec_headers::encode_to_header"); + + ::osip_to_init(p_to_header); + const LibSip__SIPTypesAndValues::Addr__Union& a = p_to.addressField(); + if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_nameAddr)) { + const LibSip__SIPTypesAndValues::NameAddr& addr = a.nameAddr(); + osip_uri_t *uri; + if (encode_sip_url(addr.addrSpec(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode SipUrl"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + ::osip_to_set_url(*p_to_header, uri); + //::osip_uri_free(uri); + if (addr.displayName().is_present()) { + const LibSip__SIPTypesAndValues::DisplayName& n = static_cast(addr.displayName()); + if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_token)) { + ::osip_to_set_displayname(*p_to_header, (char*)::strdup(static_cast(static_cast(n.token())))); + } else if (n.ischosen(LibSip__SIPTypesAndValues::DisplayName::ALT_quotedString)) { + ::osip_to_set_displayname(*p_to_header, (char*)::strdup(static_cast(static_cast(n.quotedString())))); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode DisplayName"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + } + } else if (a.ischosen(LibSip__SIPTypesAndValues::Addr__Union::ALT_addrSpecUnion)) { + osip_uri_t *uri; + if (encode_sip_url(a.addrSpecUnion(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode SipUrl"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + ::osip_to_set_url(*p_to_header, uri); + } else { + loggers::get_instance().warning("sip_codec_headers::encode_to_header: Failed to encode Addr__Union"); + ::osip_to_free(*p_to_header); + *p_to_header = nullptr; + return -1; + } + if (p_to.toParams().is_present()) { + encode_semi_colon_params(static_cast(p_to.toParams()), &(*p_to_header)->gen_params); + } + + return 0; +} // End of method encode_to_header + +int sip_codec_headers::encode_via_header(const LibSip__SIPTypesAndValues::Via& p_via, osip_via_t** p_via_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_via_header: ", p_via); + + ::osip_via_init(p_via_header); + const LibSip__SIPTypesAndValues::ViaBody__List& l = p_via.viaBody(); + for (int i = 0; i < l.size_of(); i++) { + const LibSip__SIPTypesAndValues::ViaBody v = l[i]; + loggers::get_instance().log_msg("sip_codec_headers::encode_via_header: Processing ", v); + + ::via_set_protocol(*p_via_header, (char*)::strdup(static_cast(v.sentProtocol().transport()))); + ::via_set_version(*p_via_header, (char*)::strdup(static_cast(v.sentProtocol().protocolVersion()))); + std::string host; + std::string port; + encode_host_port(v.sentBy(), host, port); + if (!host.empty()) { + ::via_set_host(*p_via_header, (char*)::strdup(host.c_str())); + } + if (!port.empty()) { + ::via_set_port (*p_via_header, (char*)::strdup(port.c_str())); + } + + if (v.viaParams().is_present()) { + encode_semi_colon_params(static_cast(v.viaParams()), &(*p_via_header)->via_params); + } + } // End of 'for' statement + + return 0; +} // End of method encode_via_header + +int sip_codec_headers::encode_www_authenticate_header(const LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate, osip_www_authenticate_t** p_www_authenticate_header) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_www_authenticate_header: ", p_www_authenticate); + + ::osip_www_authenticate_init(p_www_authenticate_header); + const LibSip__SIPTypesAndValues::Challenge& c = p_www_authenticate.challenge(); + if (c.ischosen(LibSip__SIPTypesAndValues::Challenge::ALT_digestCln)) { + osip_www_authenticate_set_auth_type(*p_www_authenticate_header, (char*)::strdup("Digest")); + const LibSip__Common::CommaParam__List& l = c.digestCln(); + for (int i = 0; i < l.lengthof(); i++) { + const LibSip__Common::GenericParam& p = l[i]; + if (std::string(static_cast(p.id())).compare("realm") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_realm(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_realm(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("nonce") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_nonce(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_nonce(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("stale") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_www_authenticate_set_stale(*p_www_authenticate_header, (char*)::strdup(static_cast(g.tokenOrHost()))); + } else { + std::stringstream ss; + ss << std::quoted(static_cast(g.quotedString())); + ::osip_www_authenticate_set_stale(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } + } else if (std::string(static_cast(p.id())).compare("algorithm") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + std::stringstream ss; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ss << std::quoted(static_cast(g.tokenOrHost())); + } else { + ss << std::quoted(static_cast(g.quotedString())); + } + ::osip_www_authenticate_set_algorithm(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } else if (std::string(static_cast(p.id())).compare("qop") == 0) { + if (p.paramValue().is_present()) { + const LibSip__Common::GenValue& g = static_cast(*p.paramValue().get_opt_value()); + std::stringstream ss; + if (g.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ss << std::quoted(static_cast(g.tokenOrHost())); + } else { + ss << std::quoted(static_cast(g.quotedString())); + } + ::osip_www_authenticate_set_qop_options(*p_www_authenticate_header, (char*)::strdup(ss.str().c_str())); + } + } else { + loggers::get_instance().warning("sip_codec_headers::encode_www_authenticate_header: Unimplemented param '%s'", static_cast(p.id())); + } + } // End of 'for'statement + } else { + const LibSip__SIPTypesAndValues::OtherAuth& l = c.otherChallenge(); + loggers::get_instance().warning("sip_codec_headers::encode_www_authenticate_header: Unsupported variant"); + return -1; + } + + return 0; +} // End of method encode_www_authenticate_header + +int sip_codec_headers::encode_semi_colon_params(const LibSip__Common::SemicolonParam__List& p_list, osip_list_t* p_sip_list) { + loggers::get_instance().log_msg(">>> sip_codec_headers::encode_semi_colon_params: ", p_list); + + if (p_list.size_of() != 0) { + for (int i = 0; i < p_list.size_of(); i++) { + const LibSip__Common::GenericParam& param = static_cast(*p_list.get_at(i)); + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: param: ", param); + if (param.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*param.paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: v: ", v); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: tokenOrHost: ", v.tokenOrHost()); + ::osip_generic_param_add(p_sip_list, (char*)::strdup(static_cast(param.id())), (char*)::strdup(static_cast(v.tokenOrHost()))); + } else { + loggers::get_instance().log_msg("sip_codec_headers::encode_semi_colon_params: quotedString: ", v.quotedString()); + ::osip_generic_param_add(p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.quotedString())); + } + } else { + ::osip_generic_param_add(p_sip_list, (char*)::strdup(static_cast(param.id())), (char*)::strdup("")); + } + } // End of 'for' statement + } else { + // Nothing to do + } + + return 0; +} + +void sip_codec_headers::decode_semi_colon_params(const osip_list_t& p_sip_list, OPTIONAL& p_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params"); + + if (::osip_list_size(&p_sip_list) != 0) { + LibSip__Common::SemicolonParam__List l; + for (int i = 0; i < ::osip_list_size(&p_sip_list); i++) { + osip_generic_param_t* p = (osip_generic_param_t*)::osip_list_get(&p_sip_list, i); + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: After cast: %p", p); + CHARSTRING name(p->gname); + if (p->gvalue == nullptr) { + l[i] = LibSip__Common::GenericParam(name, OPTIONAL(OMIT_VALUE)); + } else { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(p->gvalue); + l[i] = LibSip__Common::GenericParam(name, g); + } + } // End of 'for' statement + p_list = OPTIONAL(l); + } else { + p_list.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_list); +} // End of method decode_semi_colon_params + +void sip_codec_headers::decode_semi_colon_params(const std::string& p_params, std::string& p_first_param, LibSip__Common::SemicolonParam__List& p_others_params) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params: %s", p_params.c_str()); + + std::size_t idx = p_params.find(";"); + if (idx == std::string::npos) { + p_first_param = p_params; + } else { + std::vector output = converter::get_instance().split(p_params, ";"); + p_first_param = output[0]; + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + std::vector o = converter::get_instance().split(output[i], "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_others_params[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_others_params[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } // End of 'for' statement + } + loggers::get_instance().log("<<< sip_codec_headers::decode_semi_colon_params: %s", p_first_param.c_str()); + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_others_params); +} + +void sip_codec_headers::decode_semi_colon_params(const std::string& p_params, LibSip__Common::SemicolonParam__List& p_params_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_semi_colon_params: %s", p_params.c_str()); + + std::size_t idx = p_params.find(";"); + if (idx == std::string::npos) { + std::vector o = converter::get_instance().split(p_params, "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_params_list[0] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_params_list[0] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } else { + std::vector output = converter::get_instance().split(p_params, ";"); + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 0; i < output.size(); i++) { + std::vector o = converter::get_instance().split(output[i], "="); + if (o.size() == 2) { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p_params_list[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + } else { + p_params_list[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), OPTIONAL(OMIT_VALUE)); + } + } // End of 'for' statement + } + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_semi_colon_params: ", p_params_list); +} + +int sip_codec_headers::encode_ampersand_params(const LibSip__Common::AmpersandParam__List& p_list, osip_list_t** p_sip_list) { + loggers::get_instance().log(">>> sip_codec_headers::encode_ampersand_params"); + + if (p_list.size_of() != 0) { + ::osip_list_init(*p_sip_list); + for (int i = 0; i < p_list.size_of(); i++) { + const LibSip__Common::GenericParam& param = static_cast(*p_list.get_at(i)); + if (param.paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*param.paramValue().get_opt_value()); + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + ::osip_generic_param_add(*p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.tokenOrHost())); + } else { + ::osip_generic_param_add(*p_sip_list, (char*)static_cast(param.id()), (char*)static_cast(v.quotedString())); + } + } + } // End of 'for' statement + } else { + *p_sip_list = nullptr; + } + + return 0; +} + +void sip_codec_headers::decode_ampersand_params(const osip_list_t& p_sip_list, OPTIONAL& p_list) { + loggers::get_instance().log(">>> sip_codec_headers::decode_ampersand_params"); + + if (::osip_list_size(&p_sip_list) != 0) { + LibSip__Common::AmpersandParam__List l; + for (int i = 0; i < ::osip_list_size(&p_sip_list); i++) { + osip_generic_param_t* p = (osip_generic_param_t*)::osip_list_get(&p_sip_list, i); + loggers::get_instance().log("sip_codec_headers::decode_ampersand_params: After cast: %p", p); + CHARSTRING name(p->gname); + if (p->gvalue == nullptr) { + l[i] = LibSip__Common::GenericParam(name, OPTIONAL(OMIT_VALUE)); + } else { + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(p->gvalue); + l[i] = LibSip__Common::GenericParam(name, g); + } + } // End of 'for' statement + p_list = OPTIONAL(l); + } else { + p_list.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_ampersand_params: ", p_list); +} // End of method decode_ampersand_params + +int sip_codec_headers::encode_option_tag_list(const LibSip__SIPTypesAndValues::OptionTag__List& p_options_tags, const std::string& p_field_name, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_option_tag_list"); + + if (p_options_tags.size_of() != 0) { + std::string str(static_cast(*static_cast(p_options_tags.get_at(0)))); + loggers::get_instance().log("sip_codec_headers::encode_option_tag_list: str=%s", str.c_str()); + for (int i = 1; i < p_options_tags.size_of() - 1; i++) { + str += "," + std::string(static_cast(*static_cast(p_options_tags.get_at(i)))); + } // End of 'for' statement + loggers::get_instance().log("sip_codec_headers::encode_option_tag_list: Final str=%s", str.c_str()); + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), str.c_str()); + } else { + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), ""); + } + return 0; +} + +void sip_codec_headers::decode_option_tag_list(const char* p_list, OPTIONAL& p_options_tags) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_option_tag_list: %s", p_list); + + if (p_list != nullptr) { + LibSip__SIPTypesAndValues::OptionTag__List l; + std::string str(p_list); + std::size_t i = str.find(","); // See RFC 3261 - Page 231 / LibSip__SIPTypesAndValues::OptionTag__List + if (i == std::string::npos) { // Only on item + l[0] = CHARSTRING(p_list); + } else { + int idx = 0; + while(i != std::string::npos) { + l[idx++] = CHARSTRING(str.substr(0, i).c_str()); + str = str.substr(i + 1); + loggers::get_instance().log("sip_codec_headers::decode_option_tag_list: New str: %s", str.c_str()); + i = str.find(","); + loggers::get_instance().log("sip_codec_headers::decode_option_tag_list: New i: %d", i); + } // End of 'while' statement + l[idx] = CHARSTRING(str.c_str()); + } + p_options_tags = OPTIONAL(l); + } else { + p_options_tags.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_option_tag_list: ", p_options_tags); +} // End of method decode_option_tag_list + +int sip_codec_headers::encode_server_val_list(const LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals, const std::string& p_field_name, osip_message_t** p_sip_message) { + loggers::get_instance().log(">>> sip_codec_headers::encode_server_val_list"); + + if (p_server_vals.size_of() != 0) { + std::string str(static_cast(*static_cast(p_server_vals.get_at(0)))); + for (int i = 1; i < p_server_vals.size_of() - 1; i++) { + str += "," + std::string(static_cast(*static_cast(p_server_vals.get_at(i)))); + } // End of 'for' statement + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), str.c_str()); + } else { + ::osip_message_set_header((osip_message_t *)*p_sip_message, p_field_name.c_str(), ""); + } + return 0; +} + +void sip_codec_headers::decode_server_val_list(const char* p_list, LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_server_val_list: %s", p_list); + + if (p_list != nullptr) { + std::string str(p_list); + std::size_t i = str.find(","); // See RFC 3261 - Page 231 / LibSip__SIPTypesAndValues::ServerVal__List + if (i == std::string::npos) { // Only on item + p_server_vals[0] = CHARSTRING(p_list); + } else { + int idx = 0; + while(i != std::string::npos) { + p_server_vals[idx++] = CHARSTRING(str.substr(0, i).c_str()); + str = str.substr(i + 1); + loggers::get_instance().log("sip_codec_headers::decode_server_val_list: New str: %s", str.c_str()); + i = str.find(" "); + loggers::get_instance().log("sip_codec_headers::decode_server_val_list: New i: %d", i); + } // End of 'while' statement + p_server_vals[idx] = CHARSTRING(str.c_str()); + } + } else { + p_server_vals[0] = CHARSTRING(""); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_server_val_list: ", p_server_vals); +} // End of method decode_server_val_list + +void sip_codec_headers::decode_host_port(const char* p_host, const char* p_port, LibSip__SIPTypesAndValues::HostPort& p_host_port) { + loggers::get_instance().log(">>> sip_codec_headers::decode_host_port"); + + if (p_host == nullptr) { + p_host_port.host().set_to_omit(); + } else { + p_host_port.host() = OPTIONAL(CHARSTRING(p_host)); + } + OPTIONAL port; + if (p_port == nullptr) { + p_host_port.portField().set_to_omit(); + } else { + p_host_port.portField() = OPTIONAL(INTEGER(std::stoi(p_port))); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_host_port: ", p_host_port); +} // End of method decode_host_port" + +void sip_codec_headers::decode_uri(LibSip__SIPTypesAndValues::SipUrl& p_sip_url, const osip_uri_t* p_uri) { + loggers::get_instance().log(">>> sip_codec_headers::decode_uri"); + + // Scheme + LibSip__SIPTypesAndValues::UriComponents uri_components; + if (::osip_uri_get_scheme((osip_uri_t*)p_uri) != nullptr) { + p_sip_url.scheme() = CHARSTRING(::osip_uri_get_scheme((osip_uri_t*)p_uri)); + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: scheme: ", p_sip_url.scheme()); + // SipUriComponents + if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "sip") == 0) { + // User Info + OPTIONAL user_info; + if (::osip_uri_get_username((osip_uri_t*)p_uri) == nullptr) { + user_info.set_to_omit(); + } else { + OPTIONAL password; + if (::osip_uri_get_password((osip_uri_t*)p_uri) == nullptr) { + password.set_to_omit(); + } else { + password = CHARSTRING(::osip_uri_get_password((osip_uri_t*)p_uri)); + } + LibSip__SIPTypesAndValues::UserInfo u(CHARSTRING(::osip_uri_get_username((osip_uri_t*)p_uri)), password); + user_info = OPTIONAL(u); + } + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: user_info: ", user_info); + // HostPort + LibSip__SIPTypesAndValues::HostPort host_port; + decode_host_port(::osip_uri_get_host((osip_uri_t*)p_uri), ::osip_uri_get_port((osip_uri_t*)p_uri), host_port); + loggers::get_instance().log_msg("sip_codec_headers::decode_uri: host_port: ", host_port); + uri_components.sip() = LibSip__SIPTypesAndValues::SipUriComponents(user_info, host_port); + } else if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "tel") == 0) { + const LibSip__SIPTypesAndValues::TelUriComponents t; + uri_components.tel() = t; // TODO To be done + loggers::get_instance().error("sip_codec_headers::decode_uri: Unsupported LibSip__SIPTypesAndValues::UriComponents::ALT_tel"); + } else if (strcmp(::osip_uri_get_scheme((osip_uri_t*)p_uri), "urn") == 0) { + char *buf = nullptr; + if (::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buf) == 0) { + std::string str(buf); + loggers::get_instance().log("sip_codec_headers::decode_uri: str: %s", str.c_str()); + std::vector output = converter::get_instance().split(str, ":"); + loggers::get_instance().log("sip_codec_headers::decode_uri: split size: %d", output.size()); + LibSip__SIPTypesAndValues::UrnUriComponents urn; + urn.namespaceId() = output[1].c_str(); + std::string s(output[2]); + for (std::size_t i = 3; i < output.size(); i++) { + s += ":" + output[i]; + } + urn.namespaceSpecificString() = s.c_str(); + uri_components.urn() = urn; + osip_free(buf); // Macro + } // TODO Check what to do in this case + } else { + char *buffer = nullptr; + ::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buffer); + std::string str(buffer); + const char* p = static_cast(p_sip_url.scheme()); + size_t i = str.find(p); + if (i == std::string::npos) { + uri_components.other() = CHARSTRING(buffer); + } else { + uri_components.other() = CHARSTRING(str.substr(i + strlen(p) + 1).c_str()); + } + osip_free(buffer); // Macro + } + } else { + char *buffer = nullptr; + ::osip_uri_to_str_canonical((osip_uri_t*)p_uri, &buffer); + uri_components.other() = CHARSTRING(buffer); + osip_free(buffer); // Macro + } + p_sip_url.components() = uri_components; + // UrlParameters + OPTIONAL params; + decode_semi_colon_params(p_uri->url_params, params); + p_sip_url.urlParameters() = params; + // Headers + OPTIONAL headers; + decode_ampersand_params(p_uri->url_headers, headers); + p_sip_url.headers() = headers; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_uri: ", p_sip_url); +} // End of method decode_uri + +void sip_codec_headers::decode_accept_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Accept& p_accept_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_accept_header"); + + // Sanity checks + osip_accept_t *sip_accept = nullptr; + ::osip_message_get_accept(p_sip_message, 0, &sip_accept); + if (sip_accept == nullptr) { + return; + } + + // FieldName + p_accept_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_E")); + // AcceptArgs + if (::osip_list_size(&p_sip_message->accepts) == 0) { + p_accept_header.acceptArgs().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::AcceptBody__List bl; + int x = 0; + for (int i = 0; i < ::osip_list_size(&p_sip_message->accepts); i++) { + const osip_accept_t* l = (const osip_accept_t*)::osip_list_get(&p_sip_message->accepts, i); + if (l != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_accept_header: %s=%s", l->type, l->subtype); // application=sdp,application/3gpp-ims+xml + std::string str(l->subtype); + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + LibSip__SIPTypesAndValues::AcceptBody b; + b.mediaRange() = CHARSTRING(l->type) + CHARSTRING("/") + CHARSTRING(l->subtype); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + } else { + std::vector output = converter::get_instance().split(str, ","); + LibSip__SIPTypesAndValues::AcceptBody b; + loggers::get_instance().log("sip_codec_headers::decode_accept_header: Processing %s=%s", l->type, output[0].c_str()); + b.mediaRange() = CHARSTRING(l->type) + CHARSTRING("/") + CHARSTRING(output[0].c_str()); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + for (unsigned int k = 1; k < output.size(); k++) { + loggers::get_instance().log("sip_codec_headers::decode_accept_header: In loop, processing %s=%s", output[k].c_str()); + LibSip__SIPTypesAndValues::AcceptBody b; + b.mediaRange() = CHARSTRING(output[k].c_str()); // FIXME CHARSTRING(l->type || "=" || l->subtype)??? + if (osip_list_size(&(l->gen_params)) != 0) { + // TODO + } else { + b.acceptParam().set_to_omit(); + } + bl[x++] = b; + } + } + } + } // End of 'for' statement + p_accept_header.acceptArgs() = OPTIONAL(bl); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_header: ", p_accept_header); +} // End of method decode_accept_header + +void sip_codec_headers::decode_accept_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_contact_header: %p", p_sip_message->contacts); + + // Sanity checks + osip_header_t *sip_accept_contact = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"accept-contact", 0, &sip_accept_contact); + if (sip_accept_contact == nullptr) { + return; + } + + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header: got it: %s:%s", sip_accept_contact->hname, sip_accept_contact->hvalue); + if ((sip_accept_contact->hvalue == nullptr) || (strlen(sip_accept_contact->hvalue) == 0)) { + loggers::get_instance().warning("sip_codec_headers::decode_accept_contact_header: Failed to decode Accept-Contact header"); + return; + } + // FieldName + p_accept_contact_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_CONTACT_E")); + // AcRcValue list + std::string str(sip_accept_contact->hvalue); + LibSip__SIPTypesAndValues::AcRcValue__List la; + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + // Split using ; as separator + std::vector output = converter::get_instance().split(str, ";"); + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (1): Split size: %d", output.size()); + // The first parameter is the wild card + LibSip__SIPTypesAndValues::AcRcValue acRcValue; + acRcValue.wildcard() = CHARSTRING(output[0].c_str()); + if (output.size() > 1) { + // Extract the other parameters + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + LibSip__Common::GenericParam p; + std::vector o = converter::get_instance().split(output[i], "="); + p.id() = CHARSTRING(o[0].c_str()); + if (o.size() == 1) { // No value + p.paramValue().set_to_omit(); + } else { + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (1): o: %s:%s", o[0].c_str(), o[1].c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p.paramValue() = OPTIONAL(g); + } + l[i - 1] = p; + } // End of 'for' statement + loggers::get_instance().log_msg("sip_codec_headers::decode_accept_contact_header: l: ", l); + acRcValue.acRcParams() = OPTIONAL(l); + } else { + acRcValue.acRcParams().set_to_omit(); + } + la[0] = acRcValue; + } else { + // Split the list of values using , as separator + std::vector lop = converter::get_instance().split(str, ","); + for (std::size_t s = 0; s < lop.size(); s++) { + str = lop[s]; + // Extract parameters separated by ; into SemiColumn__List + std::vector output = converter::get_instance().split(str, ";"); + // The first parameter is the wild card + LibSip__SIPTypesAndValues::AcRcValue acRcValue; + acRcValue.wildcard() = CHARSTRING(output[0].c_str()); + if (output.size() > 1) { + // Extract the other parameters + LibSip__Common::SemicolonParam__List l; + for (unsigned int i = 1; i < output.size(); i++) { + LibSip__Common::GenericParam p; + std::vector o = converter::get_instance().split(output[i], "="); + p.id() = CHARSTRING(o[0].c_str()); + if (o.size() == 1) { // No value + p.paramValue().set_to_omit(); + } else { + loggers::get_instance().log("sip_codec_headers::decode_accept_contact_header (2): o: %s:%s", o[0].c_str(), o[1].c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[1].c_str()); + p.paramValue() = OPTIONAL(g); + } + l[i - 1] = p; + } // End of 'for' statement + loggers::get_instance().log_msg("sip_codec_headers::decode_accept_contact_header: l: ", l); + acRcValue.acRcParams() = OPTIONAL(l); + } else { + acRcValue.acRcParams().set_to_omit(); + } + la[s] = acRcValue; + } // End of 'for'statement + } + p_accept_contact_header.acValues() = la; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_contact_header: ", p_accept_contact_header); +} // End of method decode_accept_contact_header + +void sip_codec_headers::decode_accept_encoding_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptEncoding& p_accept_encoding_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_encoding_header: %p", p_sip_message->accept_encodings); + + // Sanity checks + osip_accept_encoding_t *sip_accept_encoding = nullptr; + ::osip_message_get_accept_encoding(p_sip_message, 0, &sip_accept_encoding); + if (sip_accept_encoding == nullptr) { + return; + } + // FieldName + p_accept_encoding_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_ENCODING_E")); + // ContentCoding + p_accept_encoding_header.contentCoding().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_encoding_header: ", p_accept_encoding_header); +} // End of method decode_accept_encoding_header + +void sip_codec_headers::decode_accept_language_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptLanguage& p_accept_language_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_accept_language_header: %p", p_sip_message->accept_languages); + + // Sanity checks + osip_accept_language_t *sip_accept_language = nullptr; + ::osip_message_get_accept_language(p_sip_message, 0, &sip_accept_language); + if (sip_accept_language == nullptr) { + return; + } + + // FieldName + p_accept_language_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ACCEPT_LANGUAGE_E")); + // LanguageBody + p_accept_language_header.languageBody().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_accept_language_header: ", p_accept_language_header); +} // End of method decode_accept_language_header + +void sip_codec_headers::decode_alert_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AlertInfo& p_alert_info_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_alert_info_header: %p", p_sip_message->alert_infos); + + // Sanity checks + osip_alert_info_t *sip_alert_info = nullptr; + ::osip_message_get_alert_info(p_sip_message, 0, &sip_alert_info); + if (sip_alert_info == nullptr) { + return; + } + + // FieldName + p_alert_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALERT_INFO_E")); + // AlertInfoBody + p_alert_info_header.alertInfoBody().set_to_omit(); + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_alert_info_header: ", p_alert_info_header); +} // End of method decode_alert_info_header + +void sip_codec_headers::decode_allow_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Allow& p_allow_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_allow_header: %p", p_sip_message->allows); + + // Sanity checks + osip_allow_t *sip_allow = nullptr; + ::osip_message_get_allow(p_sip_message, 0, &sip_allow); + if (sip_allow == nullptr) { + return; + } + + // FieldName + p_allow_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALLOW_E")); + // Methods + loggers::get_instance().log("sip_codec_headers::decode_allow_header: value: %s", sip_allow->value); + if ((sip_allow->value == nullptr) || (strlen(sip_allow->value) == 0)) { + p_allow_header.methods().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::Method__List m; + std::string str(sip_allow->value); + std::vector output = converter::get_instance().split(str, ","); + unsigned int i = 0; + while (i < output.size()) { + m[i] = CHARSTRING(output[i].c_str()); + i += 1; + } // End of 'while' statement + p_allow_header.methods() = OPTIONAL(m); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_allow_header: ", p_allow_header); +} // End of method decode_allow_header + +void sip_codec_headers::decode_allow_events_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AllowEvents& p_allow_events_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_allow_events_header: %p", p_sip_message->headers); + + // Sanity checks + osip_header_t *sip_allow_events = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"allow_events", 0, &sip_allow_events); + if (sip_allow_events == nullptr) { + return; + } + + // FieldName + p_allow_events_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ALLOW_EVENTS_E")); + // EventTypes + LibSip__SIPTypesAndValues::EventType__List l; + // TODO To be done + l[0] = CHARSTRING("*"); + p_allow_events_header.eventTypes() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_allow_events_header: ", p_allow_events_header); +} // End of method decode_allow_events_header + +void sip_codec_headers::decode_authorization_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Authorization& p_authorization_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_authorization_header"); + + // Sanity checks + osip_authorization_t *sip_authorization = nullptr; + ::osip_message_get_authorization(p_sip_message, 0, &sip_authorization); + if (sip_authorization == nullptr) { + return; + } + + // FieldName + p_authorization_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("AUTHORIZATION_E")); + // CredentialsList + LibSip__SIPTypesAndValues::CredentialsList l; + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Processing item #%d", i); + LibSip__SIPTypesAndValues::Credentials v; + LibSip__Common::CommaParam__List cl; + int j = 0; + if (::osip_authorization_get_digest(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_digest(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("digest"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_username(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_username(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("username"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_uri(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_uri(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("uri"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_realm(sip_authorization) != nullptr) { + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_realm(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("realm"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_nonce(sip_authorization) != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Decode nonce"); + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_nonce(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("nonce"), + OPTIONAL(v) + ); + } + if (::osip_authorization_get_response(sip_authorization) != nullptr) { + loggers::get_instance().log("sip_codec_headers::decode_authorization_header: Decode response"); + LibSip__Common::GenValue v; + v.tokenOrHost() = CHARSTRING(::osip_authorization_get_response(sip_authorization)); + cl[j++] = LibSip__Common::GenericParam( + CHARSTRING("response"), + OPTIONAL(v) + ); + } + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New GenValue:", cl); + v.digestResponse() = cl; + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New GenValue list:", cl); + l[i++] = v; + loggers::get_instance().log_msg("sip_codec_headers::decode_authorization_header: New CredentialsList:", l); + } while(::osip_message_get_authorization(p_sip_message, i, &sip_authorization) == 0); // End of 'do-while' statement + p_authorization_header.body() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_authorization_header: ", p_authorization_header); +} // End of method decode_authorization_header + +void sip_codec_headers::decode_call_id_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallId& p_call_id_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_call_id_header: %p", p_sip_message->call_id); + + // Sanity check + if (p_sip_message->call_id == nullptr) { + return; + } + + // FieldName + p_call_id_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CALL_ID_E")); + // CallId + char *buffer; + ::osip_call_id_to_str(p_sip_message->call_id, &buffer); + if (buffer != nullptr) { + p_call_id_header.callid() = CHARSTRING(buffer); + osip_free(buffer); + } +} // End of method decode_call_id_header + +void sip_codec_headers::decode_call_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallInfo& p_call_info_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_call_info_header: %p", p_sip_message->call_infos); + + osip_call_info_t *call_info = nullptr; + ::osip_message_get_call_info(p_sip_message, 0, &call_info); + if (call_info == nullptr) { + return; + } + + // FieldName + p_call_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CALL_INFO_E")); + // CallInfoBody_List + loggers::get_instance().log("sip_codec_headers::decode_call_info_header: value: %s", call_info->element); + if ((call_info->element == nullptr) || (strlen(call_info->element) == 0)) { + p_call_info_header.callInfoBody().set_to_omit(); + } else if (osip_list_size(&(p_sip_message->call_infos)) == 0) { + p_call_info_header.callInfoBody().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::CallInfoBody__List l; + int pos = 0; + while (pos < osip_list_size(&(p_sip_message->call_infos))) { + ::osip_message_get_call_info(p_sip_message, pos, &call_info); + loggers::get_instance().log("sip_codec_headers::decode_call_info_header: call_info.element=%s", call_info->element); + OPTIONAL params; + decode_semi_colon_params(call_info->gen_params, params); + l[pos++] = LibSip__SIPTypesAndValues::CallInfoBody(call_info->element, params); + } // End of 'while' statement + p_call_info_header.callInfoBody() = OPTIONAL(l); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_call_info_header: ", p_call_info_header); +} // End of method decode_call_info_header + +void sip_codec_headers::decode_c_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CSeq& p_c_seq_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_c_seq_header"); + + // Sanity check + if (p_sip_message->cseq == nullptr) { + return; + } + + // FieldName + p_c_seq_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CSEQ_E")); + // Sequence number + p_c_seq_header.seqNumber() = INTEGER(std::stoi(osip_cseq_get_number(p_sip_message->cseq))); + // Method + p_c_seq_header.method() = CHARSTRING(::osip_cseq_get_method(p_sip_message->cseq)); +} // End of method decode_c_seq_header + +void sip_codec_headers::decode_content_length_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentLength& p_content_length_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_content_length_header"); + + // Sanity check + if (p_sip_message->content_length == nullptr) { + return; + } + + // FieldName + p_content_length_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTENT_LENGTH_E")); + // Length + char *buffer; + ::osip_content_length_to_str(p_sip_message->content_length, &buffer); + if (buffer != nullptr) { + p_content_length_header.len() = INTEGER(std::stoi(buffer)); + osip_free(buffer); + } +} // End of method decode_content_length_header + +void sip_codec_headers::decode_content_type_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentType& p_content_type_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_content_type_header"); + + // Sanity check + if (p_sip_message->content_type == nullptr) { + return; + } + + // FieldName + p_content_type_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTENT_TYPE_E")); + // Type/SubType + std::string str(p_sip_message->content_type->type); + if (p_sip_message->content_type->subtype != nullptr) { + str += "/"; + str += p_sip_message->content_type->subtype; + p_content_type_header.mTypeSubtype() = CHARSTRING(str.c_str()); + } + // Parameters + OPTIONAL params; + decode_semi_colon_params(p_sip_message->content_type->gen_params, params); + p_content_type_header.mParams() = params; +} // End of method decode_content_type_header + +void sip_codec_headers::decode_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Contact& p_contact_header) { + loggers::get_instance().log("sip_codec_headers::decode_contact_header"); + + // Sanity check + if (::osip_list_size(&p_sip_message->contacts) == 0) { + return; + } + + // FieldName + p_contact_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("CONTACT_E")); + // ContactBody + LibSip__SIPTypesAndValues::ContactAddress__List c; + int i = 0; + osip_contact_t* contact = nullptr; + while (::osip_message_get_contact(p_sip_message, i, &contact) == 0) { + LibSip__SIPTypesAndValues::ContactAddress contact_addr; + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_contact_get_url((osip_contact_t*)contact)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_contact_get_displayname((osip_contact_t*)contact) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_contact_get_displayname((osip_contact_t*)contact)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + contact_addr.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(contact->gen_params, params); + contact_addr.contactParams() = params; + + c[i++] = contact_addr; + } // End of 'while' statement + p_contact_header.contactBody().contactAddresses() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_contact_header: ", p_contact_header); +} // End of method decode_contact_header + +void sip_codec_headers::decode_event_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Event& p_event_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_event_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"Event", 0, &dest); // TODO Create osip_message_[g|s]et_event + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_event_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_event_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_event_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("EVENT_E")); + // EventType + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + size_t p3 = str.find(";"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_event_header: u='%s'\n", u.c_str()); + p_event_header.eventType() = CHARSTRING(u.c_str()); + // eventParam + if (p3 != std::string::npos) { + std::string p = str.substr(p3 + 1); + loggers::get_instance().log("sip_codec_headers::decode_event_header: p='%s'\n", p.c_str()); + LibSip__Common::SemicolonParam__List params; + decode_semi_colon_params(p.c_str(), params); + if (params.is_bound()) { + p_event_header.eventParams() = OPTIONAL(params); + } else { + p_event_header.eventParams().set_to_omit(); + } + } else { + p_event_header.eventParams().set_to_omit(); + } +} // End of method decode_event_header + +void sip_codec_headers::decode_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Expires& p_expires_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_expires_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"Expires", 0, &dest); // TODO Create osip_message_[g|s]et_expires + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_expires_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_expires_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_expires_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("EXPIRES_E")); + // DeltaSec + std::string str(dest->hvalue); + p_expires_header.deltaSec() = CHARSTRING(str.c_str()); +} // End of method decode_expires_header + +void sip_codec_headers::decode_from_header(const osip_from_t* p_sip_from, LibSip__SIPTypesAndValues::From& p_from_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_from_header"); + + // Sanity check + if (p_sip_from == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_from_header: Invalid SIP message"); + return; + } + + // FieldName + p_from_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("FROM_E")); + // Addr_Union + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)p_sip_from)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_from_t*)p_sip_from) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_from_t*)p_sip_from)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + p_from_header.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(p_sip_from->gen_params, params); + p_from_header.fromParams() = params; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_from_header: ", p_from_header); +} // End of method decode_from_header + +void sip_codec_headers::decode_geolocation_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Geolocation& p_geolocation_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"geolocation", 0, &dest); // TODO Create osip_message_[g|s]et_geolocation + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_geolocation_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_geolocation_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("GEOLOCATION_E")); + // addrSpec + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + size_t p3 = str.find(";"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(p_geolocation_header.addrSpec(), uri); + // geolocParam + if (p3 != std::string::npos) { + std::string p = str.substr(p3 + 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_header: p='%s'\n", p.c_str()); + LibSip__Common::SemicolonParam__List params; + decode_semi_colon_params(p.c_str(), params); + if (params.is_bound()) { + p_geolocation_header.geolocParam() = OPTIONAL(params); + } else { + p_geolocation_header.geolocParam().set_to_omit(); + } + } else { + p_geolocation_header.geolocParam().set_to_omit(); + } +} // End of method decode_geolocation_header + +void sip_codec_headers::decode_geolocation_routing_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::GeolocationRouting& p_geolocation_routing_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname(p_sip_message, (const char *)"geolocation-routing", 0, &dest); // TODO Create osip_message_[g|s]et_geolocation_routing + if (dest == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_geolocation_routing_header: Not found"); + return; + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_geolocation_routing_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("GEOLOCATION_ROUTING_E")); + std::string str(dest->hvalue); + size_t pos = str.find(";"); + if (pos == std::string::npos) { + if (str.compare("yes") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E); + } else if (str.compare("no") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E); + } else { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__OTHER__E); + } + p_geolocation_routing_header.genericValue().set_to_omit(); + } else { + std::string s = str.substr(0, pos - 1); + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: s='%s'\n", s.c_str()); + if (s.compare("yes") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__YES__E); + } else if (s.compare("no") == 0) { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__NO__E); + } else { + p_geolocation_routing_header.state() = LibSip__SIPTypesAndValues::GeolocationRoutingState(LibSip__SIPTypesAndValues::GeolocationRoutingState::GEOLOCATION__ROUTING__OTHER__E); + } + str = str.substr(pos + 1); + LibSip__Common::GenericParam p; + pos = str.find("="); + if (pos != std::string::npos) { + p.id() = CHARSTRING(str.substr(0, pos - 1).c_str()); + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(str.substr(pos + 1).c_str()); + p.paramValue() = OPTIONAL(v); + } else { + p.id() = CHARSTRING(str.c_str()); + p.paramValue().set_to_omit(); + } + loggers::get_instance().log("sip_codec_headers::decode_geolocation_routing_header: genericValue='%s'\n", str.c_str()); + p_geolocation_routing_header.genericValue() = OPTIONAL(p); + } +} + +void sip_codec_headers::decode_max_forwards_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MaxForwards& p_max_forwards_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_max_forwards_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_max_forwards(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_max_forwards_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("MAX_FORWARDS_E")); + // Forwards + loggers::get_instance().log("sip_codec_headers::decode_max_forwards_header: got it: %s:%s", dest->hname, dest->hvalue); + p_max_forwards_header.forwards() = INTEGER(std::stoi(dest->hvalue)); +} // End of method decode_max_forwards_header + +void sip_codec_headers::decode_min_se_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MinSE& p_min_se_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_min_se_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"min-se", 0, &dest); // TODO Create osip_message_[g|s]et_min_se + if (dest == nullptr) { + return; + } + + // FieldName + p_min_se_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("MIN_SE_E")); + + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_min_se_header.deltaSec() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_min_se_header.minSeParam() = OPTIONAL(others_params); + } else { + p_min_se_header.minSeParam().set_to_omit(); + } +} // End of method decode_min_se_header + +void sip_codec_headers::decode_p_associated_uri_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAssociatedURI& p_p_associated_uri_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"p-associated-uri", 0, &dest); // TODO Create osip_message_[g|s]et_p_associated_uri + if (dest == nullptr) { + return; + } + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: hname='%s' : hvalue='%s'\n", dest->hname, dest->hvalue); + + // FieldName + p_p_associated_uri_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("P_ASSOCIATED_URI_E")); + // nameAddrList + LibSip__SIPTypesAndValues::NameAddrParam__List l; + std::string str(dest->hvalue); + + std::size_t idx = str.find(","); + if (idx == std::string::npos) { + LibSip__SIPTypesAndValues::NameAddrParam n; //, + n.genericParams().set_to_omit(); // TODO To be implemented + n.nameAddr().displayName().set_to_omit(); + std::string str(dest->hvalue); + size_t p1 = str.find("<"); + size_t p2 = str.find(">"); + std::string u = str.substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(n.nameAddr().addrSpec(), uri); + l[0] = n; + } else { + std::vector output = converter::get_instance().split(str, ","); + for (unsigned int i = 0; i < output.size(); i++) { + LibSip__SIPTypesAndValues::NameAddrParam n; //, + n.genericParams().set_to_omit(); // TODO To be implemented + n.nameAddr().displayName().set_to_omit(); + size_t p1 = output[i].find("<"); + size_t p2 = output[i].find(">"); + std::string u = output[i].substr(p1 + 1, p2 - p1 - 1); + loggers::get_instance().log("sip_codec_headers::decode_p_associated_uri_header: u='%s'\n", u.c_str()); + osip_uri_t *uri = nullptr; + ::osip_uri_init(&uri); + ::osip_uri_parse(uri, u.c_str()); + decode_uri(n.nameAddr().addrSpec(), uri); + l[i++] = n; + } // End of 'for' statement + } + p_p_associated_uri_header.nameAddrList() = l; +} // End of method decode_p_associated_uri_header + +void sip_codec_headers::decode_p_access_network_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_p_access_network_info_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_p_access_network_info_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"p-access-network-info", 0, &dest); // TODO Create osip_message_[g|s]et_p_access_network_info + if (dest == nullptr) { + return; + } + + // FieldName + p_p_access_network_info_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("P_ACCESS_NETWORK_INFO_E")); + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_p_access_network_info_header.accessType() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_p_access_network_info_header.genericParams() = OPTIONAL(others_params); + } else { + p_p_access_network_info_header.genericParams().set_to_omit(); + } +} // End of method decode_p_access_network_info_header + +void sip_codec_headers::decode_privacy_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Privacy& p_privacy_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_privacy_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"privacy", 0, &dest); // TODO Create osip_message_[g|s]et_privacy + if (dest == nullptr) { + return; + } + + // FieldName + p_privacy_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("PRIVACY_E")); + // Privacy list + loggers::get_instance().log("sip_codec_headers::decode_allow_header: value: %s", dest->hvalue); + if ((dest->hvalue == nullptr) || (strlen(dest->hvalue) == 0)) { + p_privacy_header.privValueList().set_to_omit(); + } else { + LibSip__SIPTypesAndValues::PrivacyValue__List m; + std::string str(dest->hvalue); + std::vector output = converter::get_instance().split(str, ","); + unsigned int i = 0; + while (i < output.size()) { + m[i] = CHARSTRING(output[i].c_str()); + i += 1; + } // End of 'while' statement + p_privacy_header.privValueList() = OPTIONAL(m); + } + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_privacy_header: ", p_privacy_header); +} + +void sip_codec_headers::decode_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Route& p_route_header) { + loggers::get_instance().log("sip_codec_headers::decode_route_header"); + // Sanity check + if (::osip_list_size(&p_sip_message->routes) == 0) { + return; + } + + // FieldName + p_route_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("ROUTE_E")); + // RouteBody + LibSip__SIPTypesAndValues::RouteBody__List c; + int i = 0; + osip_route_t* route = nullptr; + while (::osip_message_get_route(p_sip_message, i, &route) == 0) { + LibSip__SIPTypesAndValues::RouteBody route_body; + // Decode uri + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)route)); + // Decode display name + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_route_t*)route) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_route_t*)route)); + display_name = OPTIONAL(n); + } else { + display_name.set_to_omit(); + } + route_body.nameAddr() = LibSip__SIPTypesAndValues::NameAddr(display_name, uri); + // Params + OPTIONAL params; + decode_semi_colon_params(route->gen_params, params); + route_body.rrParam() = params; + + c[i++] = route_body; + } // End of 'while' statement + p_route_header.routeBody() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_route_header: ", p_route_header); +} // End of method decode_route_header + +void sip_codec_headers::decode_record_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RecordRoute& p_record_route_header) { + loggers::get_instance().log("sip_codec_headers::decode_record_route_header"); + // Sanity check + if (::osip_list_size(&p_sip_message->record_routes) == 0) { + return; + } + + // FieldName + p_record_route_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("RECORD_ROUTE_E")); + // RecordRouteBody + LibSip__SIPTypesAndValues::RouteBody__List c; + int i = 0; + osip_record_route_t* record_route = nullptr; + while (::osip_message_get_record_route(p_sip_message, i, &record_route) == 0) { + LibSip__SIPTypesAndValues::RouteBody record_route_body; + // Decode uri + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_from_get_url((osip_from_t*)record_route)); + // Decode display name + OPTIONAL display_name; + if (::osip_from_get_displayname((osip_record_route_t*)record_route) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_from_get_displayname((osip_record_route_t*)record_route)); + display_name = OPTIONAL(n); + } else { + display_name.set_to_omit(); + } + record_route_body.nameAddr() = LibSip__SIPTypesAndValues::NameAddr(display_name, uri); + // Params + OPTIONAL params; + decode_semi_colon_params(record_route->gen_params, params); + record_route_body.rrParam() = params; + + c[i++] = record_route_body; + } // End of 'while' statement + p_record_route_header.routeBody() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_record_route_header: ", p_record_route_header); +} // End of method decode_record_route_header + +void sip_codec_headers::decode_r_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RSeq& p_r_seq_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_r_seq_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message, (const char *)"rseq", 0, &dest); // TODO Create osip_message_[g|s]et_rseq + if (dest == nullptr) { + return; + } + + // FieldName + p_r_seq_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("RSEQ_E")); + p_r_seq_header.responseNum() = INTEGER(std::stoi(dest->hvalue)); +} + +void sip_codec_headers::decode_session_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::SessionExpires& p_session_expires_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_session_expires_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + ::osip_message_header_get_byname((osip_message_t*)p_sip_message,(const char *)"session-expires", 0, &dest); // TODO Create osip_message_[g|s]et_session_expires + if (dest == nullptr) { + return; + } + + // FieldName + p_session_expires_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("SESSION_EXPIRES_E")); + + std::string fisrt_parameter; + LibSip__Common::SemicolonParam__List others_params; + decode_semi_colon_params(dest->hvalue, fisrt_parameter, others_params); + p_session_expires_header.deltaSec() = CHARSTRING(fisrt_parameter.c_str()); + if (others_params.is_bound()) { + p_session_expires_header.seParam() = OPTIONAL(others_params); + } else { + p_session_expires_header.seParam().set_to_omit(); + } + + // loggers::get_instance().log("sip_codec_headers::decode_session_expires_header: got it: %s:%s", dest->hname, dest->hvalue); + // std::size_t idx = str.find(";"); + // if (idx == std::string::npos) { + // p_session_expires_header.deltaSec() = dest->hvalue; + // p_session_expires_header.seParam().set_to_omit(); + // } else { + // std::vector output = converter::get_instance().split(str, ";"); + // p_session_expires_header.deltaSec() = CHARSTRING(output[0].c_str()); + // LibSip__Common::SemicolonParam__List l; + // for (unsigned int i = 1; i < output.size(); i++) { + // std::vector o = converter::get_instance().split(output[i], "="); + // LibSip__Common::GenValue g; + // g.tokenOrHost() = CHARSTRING(o[1].c_str()); + // l[i - 1] = LibSip__Common::GenericParam(CHARSTRING(o[0].c_str()), g); + // } // End of 'for' statement + // p_session_expires_header.seParam() = OPTIONAL(l); + // } +} // End of method decode_session_expires_header + +void sip_codec_headers::decode_supported_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Supported& p_supported_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_supported_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_supported(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_supported_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("SUPPORTED_E")); + // OptionTags + loggers::get_instance().log("sip_codec_headers::decode_supported_header: got it: %s:%s", dest->hname, dest->hvalue); + OPTIONAL& l = p_supported_header.optionsTags(); + decode_option_tag_list(dest->hvalue, l); +} // End of method decode_supported_header + +void sip_codec_headers::decode_user_agent_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::UserAgent& p_user_agent_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_user_agent_header"); + + // Sanity checks + osip_header_t *dest = nullptr; + osip_message_get_user_agent(p_sip_message, 0, &dest); + if (dest == nullptr) { + return; + } + + // FieldName + p_user_agent_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("USER_AGENT_E")); + // UserAgent body + loggers::get_instance().log("sip_codec_headers::decode_user_agent_header: got it: %s:%s", dest->hname, dest->hvalue); + LibSip__SIPTypesAndValues::ServerVal__List& l = p_user_agent_header.userAgentBody(); + decode_server_val_list(dest->hvalue, l); +} // End of method decode_user_agent_header + +void sip_codec_headers::decode_to_header(const osip_to_t* p_sip_to, LibSip__SIPTypesAndValues::To& p_to_header) +{ + loggers::get_instance().log("sip_codec_headers::decode_to_header"); + + // Sanity check + if (p_sip_to == nullptr) { + return; + } + + // FieldName + p_to_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("TO_E")); + // Addr_Union + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_to_get_url((osip_to_t*)p_sip_to)); + LibSip__SIPTypesAndValues::Addr__Union addr; + OPTIONAL display_name; + if (::osip_to_get_displayname((osip_to_t*)p_sip_to) != nullptr) { + LibSip__SIPTypesAndValues::DisplayName n; + n.token() = CHARSTRING(::osip_to_get_displayname((osip_to_t*)p_sip_to)); + display_name = OPTIONAL(n); + LibSip__SIPTypesAndValues::NameAddr name_addr(display_name, uri); + addr.nameAddr() = name_addr; + } else { + display_name.set_to_omit(); + addr.addrSpecUnion() = uri; + } + p_to_header.addressField() = addr; + // Params + OPTIONAL params; + decode_semi_colon_params(p_sip_to->gen_params, params); + p_to_header.toParams() = params; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_to_header: ", p_to_header); +} // End of method decode_to_header + +void sip_codec_headers::decode_via_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Via& p_via_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_via_header"); + + // Sanity checks + osip_via_t *sip_via = nullptr; + ::osip_message_get_via(p_sip_message, 0, &sip_via); + if (sip_via == nullptr) { + return; + } + + // FieldName + p_via_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("VIA_E")); + // ViaBody + LibSip__SIPTypesAndValues::ViaBody__List l; + int i = 0; + do { + loggers::get_instance().log("sip_codec_headers::decode_via_header: Processing item #%d", i); + LibSip__SIPTypesAndValues::ViaBody v; + v.sentProtocol() = LibSip__SIPTypesAndValues::SentProtocol( + CHARSTRING("SIP"), + CHARSTRING(::via_get_version(sip_via)), + CHARSTRING(::via_get_protocol(sip_via)) + ); + OPTIONAL host_port; + decode_host_port(::via_get_host(sip_via), ::via_get_port(sip_via), host_port); + loggers::get_instance().log_msg("sip_codec_headers::decode_via_uri: host_port: ", host_port); + v.sentBy() = host_port; + OPTIONAL params; + decode_semi_colon_params(sip_via->via_params, params); + v.viaParams() = params; + l[i++] = v; + } while(::osip_message_get_via(p_sip_message, i, &sip_via) == 0); // End of 'while' statement + p_via_header.viaBody() = l; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_via_header: ", p_via_header); +} // End of method decode_via_header + +void sip_codec_headers::decode_www_authenticate_header(const osip_www_authenticate_t* p_www_authenticate, LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header) +{ + loggers::get_instance().log(">>> sip_codec_headers::decode_www_authenticate_header"); + + // Sanity checks + if (p_www_authenticate == nullptr) { + loggers::get_instance().warning("sip_codec_headers::decode_www_authenticate_header: failed to decode WwwAuthenticate header"); + return; + } + + // FieldName + p_www_authenticate_header.fieldName() = LibSip__SIPTypesAndValues::FieldName(LibSip__SIPTypesAndValues::FieldName::str_to_enum("WWW_AUTHENTICATE_E")); + // ViaBody + LibSip__SIPTypesAndValues::Challenge c; + std::string auth(::osip_www_authenticate_get_auth_type((osip_www_authenticate_t*)p_www_authenticate)); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Auth: %s", auth.c_str()); + LibSip__Common::CommaParam__List l; + int i = 0; + if (auth.compare("Digest") == 0) { + l[i++] = LibSip__Common::GenericParam(CHARSTRING(auth.c_str()), OPTIONAL(OMIT_VALUE)); + auth = ::osip_www_authenticate_get_realm((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Realm: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("realm"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_nonce((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Nonce: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("nonce"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_algorithm((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Algorithm: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("algorithm"), OPTIONAL(v)); + } + auth = ::osip_www_authenticate_get_qop_options((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Qop: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("qop"), OPTIONAL(v)); + } + if (::osip_www_authenticate_get_stale((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_stale((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Stale: %s", auth.c_str()); + if (auth.length() != 0) { + LibSip__Common::GenValue v; + v.quotedString() = CHARSTRING(auth.c_str()); + l[i++] = LibSip__Common::GenericParam(CHARSTRING("stale"), OPTIONAL(v)); + } + } + loggers::get_instance().log_msg("sip_codec_headers::decode_www_authenticate_header: LibSip__Common::CommaParam__List= ", l); + if (::osip_www_authenticate_get_domain((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_domain((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Domain: %s", auth.c_str()); + } + if (::osip_www_authenticate_get_opaque((osip_www_authenticate_t*)p_www_authenticate) != NULL) { + auth = ::osip_www_authenticate_get_opaque((osip_www_authenticate_t*)p_www_authenticate); + loggers::get_instance().log("sip_codec_headers::decode_www_authenticate_header: Opaque: %s", auth.c_str()); + } + + c.digestCln() = l; + } else { + loggers::get_instance().error("sip_codec_headers::decode_www_authenticate_header: Not implemented yet"); + //c.otherChallenge() = l; + } + p_www_authenticate_header.challenge() = c; + + loggers::get_instance().log_msg("<<< sip_codec_headers::decode_www_authenticate_header: ", p_www_authenticate_header); +} // End of method decode_www_authenticate_header + diff --git a/ccsrc/Protocols/Sip/sip_codec_headers.hh b/ccsrc/Protocols/Sip/sip_codec_headers.hh new file mode 100644 index 0000000..7c4d03a --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_headers.hh @@ -0,0 +1,132 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +namespace LibSip__SIPTypesAndValues { + class Authorization; + class CallId; + class CallInfo; + class ContentLength; + class ContentType; + class CSeq; + class Event; + class Expires; + class From; + class Geolocation; + class GeolocationRouting; + class HostPort; + class MessageHeader; + class PreGenRecordOf; + class PAccessNetworkInfo; + class PAssociatedURI; + class Privacy; + class Route; + class RecordRoute; + class RSeq; + class UserAgent; + class To; + class Via; +} + +namespace LibSip__Common { + class SemicolonParam__List; + class AmpersandParam__List; +} + +class sip_codec_headers +{ +public: + explicit sip_codec_headers() { }; + virtual ~sip_codec_headers() { }; + +public: + virtual int encode_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + virtual int encode_sip_url(const LibSip__SIPTypesAndValues::SipUrl& p_sip_uri, osip_uri_t** p_uri); + virtual int encode_accept_header(const LibSip__SIPTypesAndValues::Accept& p_accept, osip_message_t** p_sip_message); + virtual int encode_accept_contact_header(const LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact, osip_message_t** p_sip_message); + virtual int encode_allow_header(const OPTIONAL& p_allow, osip_message_t** p_sip_message); + virtual int encode_authorization_header(const LibSip__SIPTypesAndValues::Authorization& p_authorization, osip_authorization_t** p_authorization_header); + virtual int encode_call_id_header(const LibSip__SIPTypesAndValues::CallId& p_call_id, osip_call_id_t** p_call_id_header); + virtual int encode_call_info_header(const OPTIONAL& p_call_info, osip_message_t** p_sip_message); + virtual int encode_contact_header(const LibSip__SIPTypesAndValues::Contact& p_contact, osip_contact_t** p_contact_header); + virtual int encode_content_length_header(const LibSip__SIPTypesAndValues::ContentLength& p_contact, osip_content_length_t** p_content_length_header); + virtual int encode_content_type_header(const LibSip__SIPTypesAndValues::ContentType& p_contact, osip_content_type_t** p_content_type_header); + virtual int encode_c_seq_header(const LibSip__SIPTypesAndValues::CSeq& p_c_seq, osip_cseq_t** p_c_seq_header); + virtual int encode_event_header(const OPTIONAL& p_event, osip_message_t** p_sip_message); + virtual int encode_expires_header(const OPTIONAL& p_expires, osip_message_t** p_sip_message); + virtual int encode_from_header(const LibSip__SIPTypesAndValues::From& p_from, osip_from_t** p_from_header); + virtual int encode_geolocation_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message); + virtual int encode_geolocation_routing_header(const OPTIONAL& p_geolocation, osip_message_t** p_sip_message); + virtual int encode_max_forwards_header(const OPTIONAL& p_max_forwards, osip_message_t** p_sip_message); + virtual int encode_min_se_header(const OPTIONAL& p_min_se, osip_message_t** p_sip_message); + virtual int encode_p_access_network_info_header(const OPTIONAL& p_p_access_network_info_header, osip_message_t** p_sip_message); + virtual int encode_p_associated_uri_header(const OPTIONAL& p_p_associated_uri_header, osip_message_t** p_sip_message); + virtual int encode_privacy_header(const OPTIONAL& p_privacy_header, osip_message_t** p_sip_message); + virtual int encode_route_header(const OPTIONAL& p_route_header, osip_message_t** p_sip_message); + virtual int encode_record_route_header(const OPTIONAL& p_record_route_header, osip_message_t** p_sip_message); + virtual int encode_r_seq_header(const OPTIONAL& p_r_seq, osip_message_t** p_sip_message); + virtual int encode_session_expires_header(const OPTIONAL& p_session_expires, osip_message_t** p_sip_message); + virtual int encode_supported_header(const OPTIONAL& p_supported, osip_message_t** p_sip_message); + virtual int encode_to_header(const LibSip__SIPTypesAndValues::To& p_to, osip_to_t** p_to_header); + virtual int encode_user_agent_header(const OPTIONAL& p_user_agent, osip_message_t** p_sip_message); + virtual int encode_via_header(const LibSip__SIPTypesAndValues::Via& p_via, osip_via_t** p_via_header); + virtual int encode_www_authenticate_header(const LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header, osip_www_authenticate_t** p_www_authenticate); + +public: + // TODO Replace const osip_message_t* p_sip_message by header specific type using osip_parser.h/macros such as osip_message_get_accept/osip_accept_t + virtual void decode_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MessageHeader& p_headers); + virtual void decode_uri(LibSip__SIPTypesAndValues::SipUrl& p_sip_url, const osip_uri_t* p_uri); + virtual void decode_accept_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Accept& p_accept_header); + virtual void decode_accept_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptContact& p_accept_contact_header); + virtual void decode_accept_encoding_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptEncoding& p_accept_encoding_header); + virtual void decode_accept_language_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AcceptLanguage& p_accept_language_header); + virtual void decode_alert_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AlertInfo& p_alert_info_header); + virtual void decode_allow_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Allow& p_allow_header); + virtual void decode_allow_events_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::AllowEvents& p_allow_events_header); + virtual void decode_authorization_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Authorization& p_authorization_header); + virtual void decode_call_id_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallId& p_call_id_header); + virtual void decode_call_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CallInfo& p_call_info_header); + virtual void decode_content_length_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentLength& p_content_length_header); + virtual void decode_content_type_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::ContentType& p_content_type_header); + virtual void decode_c_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::CSeq& p_c_seq_header); + virtual void decode_contact_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Contact& p_contact_header); + virtual void decode_event_header(const osip_message_t* p_sip_event, LibSip__SIPTypesAndValues::Event& p_event_header); + virtual void decode_expires_header(const osip_message_t* p_sip_expires, LibSip__SIPTypesAndValues::Expires& p_expires_header); + virtual void decode_from_header(const osip_from_t* p_sip_from, LibSip__SIPTypesAndValues::From& p_from_header); + virtual void decode_geolocation_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Geolocation& p_geolocation_header); + virtual void decode_geolocation_routing_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::GeolocationRouting& p_geolocation_routing_header); + virtual void decode_max_forwards_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MaxForwards& p_max_forwards_header); + virtual void decode_min_se_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::MinSE& p_min_se_header); + virtual void decode_p_access_network_info_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAccessNetworkInfo& p_p_access_network_info_header); + virtual void decode_p_associated_uri_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::PAssociatedURI& p_p_associated_uri_header); + virtual void decode_privacy_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Privacy& p_privacy_header); + virtual void decode_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Route& p_route_header); + virtual void decode_record_route_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RecordRoute& p_record_route_header); + virtual void decode_r_seq_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::RSeq& p_r_seq_header); + virtual void decode_session_expires_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::SessionExpires& p_session_expires_header); + virtual void decode_supported_header(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Supported& p_supported_header); + virtual void decode_to_header(const osip_to_t* p_sip_to, LibSip__SIPTypesAndValues::To& p_to_header); + virtual void decode_user_agent_header(const osip_message_t* p_user_agent, LibSip__SIPTypesAndValues::UserAgent& p_user_agent_header); + virtual void decode_via_header(const osip_message_t* p_sip_via_list, LibSip__SIPTypesAndValues::Via& p_via_header); + virtual void decode_www_authenticate_header(const osip_www_authenticate_t* p_www_authenticate, LibSip__SIPTypesAndValues::WwwAuthenticate& p_www_authenticate_header); + +private: + void encode_host_port(const LibSip__SIPTypesAndValues::HostPort& p_host_port, std::string& p_host, std::string& p_port); + int encode_semi_colon_params(const LibSip__Common::SemicolonParam__List& p_list, osip_list_t* p_sip_list); + int encode_ampersand_params(const LibSip__Common::AmpersandParam__List& p_list, osip_list_t** p_sip_list); + int encode_option_tag_list(const LibSip__SIPTypesAndValues::OptionTag__List& p_options_tags, const std::string& p_field_name, osip_message_t** p_sip_message); + int encode_server_val_list(const LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals, const std::string& p_field_name, osip_message_t** p_sip_message); + + void decode_host_port(const char* p_host, const char* p_port, LibSip__SIPTypesAndValues::HostPort& p_host_port); + void decode_semi_colon_params(const std::string& p_params, LibSip__Common::SemicolonParam__List& p_params_list); + void decode_semi_colon_params(const std::string& p_params, std::string& p_first_param, LibSip__Common::SemicolonParam__List& p_others_params); + void decode_semi_colon_params(const osip_list_t& p_sip_list, OPTIONAL& p_list); + void decode_ampersand_params(const osip_list_t& p_sip_list, OPTIONAL& p_list); + void decode_option_tag_list(const char* p_list, OPTIONAL& p_options_tags); + void decode_server_val_list(const char* p_list, LibSip__SIPTypesAndValues::ServerVal__List& p_server_vals); + +}; // End of class sip_codec_headers diff --git a/ccsrc/Protocols/Sip/sip_codec_info_request.cc b/ccsrc/Protocols/Sip/sip_codec_info_request.cc new file mode 100644 index 0000000..7beb70c --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_info_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_info_request.hh" +#include "loggers.hh" + +int sip_codec_info_request::encode (const LibSip__SIPTypesAndValues::INFO__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_info_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_info_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_info_request::encode: data=", data); + return 0; +} + +int sip_codec_info_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INFO__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_info_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_info_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_info_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::INFO__E) { + loggers::get_instance().warning("sip_codec_info_request::decode: Wrong SIP Method, expected INFO"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_info_request.hh b/ccsrc/Protocols/Sip/sip_codec_info_request.hh new file mode 100644 index 0000000..e3caf2f --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_info_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class INFO__Request; +} + +class sip_codec_info_request: public codec_gen < +LibSip__SIPTypesAndValues::INFO__Request, +LibSip__SIPTypesAndValues::INFO__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_info_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_info_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::INFO__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INFO__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_info_request diff --git a/ccsrc/Protocols/Sip/sip_codec_invite_request.cc b/ccsrc/Protocols/Sip/sip_codec_invite_request.cc new file mode 100644 index 0000000..a9b2906 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_invite_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_invite_request.hh" +#include "loggers.hh" + +int sip_codec_invite_request::encode (const LibSip__SIPTypesAndValues::INVITE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_invite_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_invite_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_invite_request::encode: data=", data); + return 0; +} + +int sip_codec_invite_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INVITE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_invite_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::INVITE__E) { + loggers::get_instance().warning("sip_codec_invite_request::decode: Wrong SIP Method, expected INVITE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_invite_request.hh b/ccsrc/Protocols/Sip/sip_codec_invite_request.hh new file mode 100644 index 0000000..07f63b0 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_invite_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class INVITE__Request; +} + +class sip_codec_invite_request: public codec_gen < +LibSip__SIPTypesAndValues::INVITE__Request, +LibSip__SIPTypesAndValues::INVITE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_invite_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_invite_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::INVITE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::INVITE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_invite_request diff --git a/ccsrc/Protocols/Sip/sip_codec_message_body.cc b/ccsrc/Protocols/Sip/sip_codec_message_body.cc new file mode 100644 index 0000000..5780e82 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_body.cc @@ -0,0 +1,929 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_message_body.hh" +#include "loggers.hh" + +#include "converter.hh" + +#include "urn_ietf_params_xml_ns_pidf.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_message_body::encode (const LibSip__MessageBodyTypes::MessageBody& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode: ", msg); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::encode\n")); + + if (msg.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = msg.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode: Failed to encode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + data = char2oct(CHARSTRING(buff)); + osip_free(buff); + sdp_message_free(sdp_body); + } + } else if (msg.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_textplain)) { + data = char2oct(msg.textplain()); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode: Unsupported variant"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::encode: ", data); + return 0; +} + +int sip_codec_message_body::decode (const OCTETSTRING& data, LibSip__MessageBodyTypes::MessageBody& msg, params* p_params) +{ + loggers::get_instance().log(">>> sip_codec_message_body::decode"); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::decode\n")); + loggers::get_instance().error("sip_codec_message_body::decode: Not implemented yet"); + return -1; +} + +int sip_codec_message_body::encode_message_body(const LibSip__MessageBodyTypes::MessageBody& p_message_body, osip_message_t* p_sip_message) +{ // TODO Rename into encode_message + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_message_body: ", p_message_body); + + osip_content_length* content_length = ::osip_message_get_content_length(p_sip_message); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content_length= %s", content_length->value); + if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = p_message_body.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to decode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + ::osip_message_set_body(p_sip_message, buff, strlen(buff)); + osip_free(buff); + sdp_message_free(sdp_body); + } + } else if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_textplain)) { + const CHARSTRING& text = p_message_body.textplain(); + ::osip_message_set_body(p_sip_message, static_cast(text), text.lengthof()); + } else if (p_message_body.ischosen(LibSip__MessageBodyTypes::MessageBody::ALT_mimeMessageBody)) { + ::osip_message_set_mime_version(p_sip_message, "2.0"); + const LibSip__MessageBodyTypes::MIME__Message& mime = p_message_body.mimeMessageBody(); + const LibSip__MessageBodyTypes::MimeEncapsulatedList& l = mime.mimeEncapsulatedList(); + int pos = 0; + while (pos < l.lengthof()) { + const LibSip__MessageBodyTypes::MIME__Encapsulated__Part& p = l[pos]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_message_body: p: ", p); + const LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& ps = p.mime__encapsulated__part(); + if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_sdpMessageBody)) { + const LibSip__SDPTypes::SDP__Message& sdp = ps.sdpMessageBody(); + sdp_message_t* sdp_body = nullptr; + if (encode_sdp(sdp, &sdp_body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message"); + return -1; + } + char* buff = nullptr; + ::sdp_message_to_str(sdp_body, &buff); + if (buff != nullptr) { + loggers::get_instance().log("sip_codec_message_body::encode_message_body: sdp encoded value: %s", buff); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + if (::osip_message_set_body(p_sip_message, buff, strlen(buff)) != 0) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode SDP message"); + osip_free(buff); + sdp_message_free(sdp_body); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + osip_free(buff); + sdp_message_free(sdp_body); + // Retrive the new created body and add content type + osip_body_t* body = nullptr; + if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set XML body content-type"); + return -1; + } + const char* ct = static_cast(p.content__type()); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content-type: %s", ct); + if (ct != nullptr) { + ::osip_body_set_contenttype(body, ct); + } else { // Use a default value + ::osip_body_set_contenttype(body, "application/sdp"); + } + } + } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_xmlBody)) { + const LibSip__XMLTypes::XmlBody& xml = ps.xmlBody(); + osip_body_t* body; + if (encode_xml(xml, &body) == -1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode XML message"); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: xml encoded value: %s", body->body); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + if (::osip_message_set_body(p_sip_message, body->body, body->length) != 0) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to encode XML message"); + osip_body_free(body); + return -1; + } + loggers::get_instance().log("sip_codec_message_body::encode_message_body: new body list size: %d", ::osip_list_size(&p_sip_message->bodies)); + osip_body_free(body); + // Retrive the new created body and add content type + body = nullptr; + loggers::get_instance().log("sip_codec_message_body::encode_message_body: get item #%d", ::osip_list_size(&p_sip_message->bodies) - 1); + if (::osip_message_get_body(p_sip_message, ::osip_list_size(&p_sip_message->bodies) - 1, &body) != ::osip_list_size(&p_sip_message->bodies) - 1) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Failed to set content-type"); + return -1; + } + const char* ct = static_cast(p.content__type()); + loggers::get_instance().log("sip_codec_message_body::encode_message_body: content-type: %s", ct); + if (ct != nullptr) { + ::osip_body_set_contenttype(body, ct); + } else { // Use a default value + ::osip_body_set_contenttype(body, "application/resource-lists+xml"); + } + } else if (ps.ischosen(LibSip__MessageBodyTypes::MIME__Encapsulated__Parts::ALT_msdBody)) { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported decoding of ALT_msdBody"); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported decoding of encapulated parts"); + } + pos += 1; + } // End of 'while' statement + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_message_body: Unsupported variant"); + return -1; + } + + return 0; +} // End of method encode_message_body + +int sip_codec_message_body::encode_sdp(const LibSip__SDPTypes::SDP__Message& p_sdp_message, sdp_message_t** p_sdp_body) { + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_sdp: ", p_sdp_message); + + ::sdp_message_init(p_sdp_body); + + // Encode mandatory fields + // Version + INTEGER version = p_sdp_message.protocol__version(); + ::sdp_message_v_version_set(*p_sdp_body, (char*)::strdup(std::to_string(static_cast(version)).c_str())); + LibSip__SDPTypes::SDP__Origin origin = p_sdp_message.origin(); + // Origin + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: origin: ", origin); + ::sdp_message_o_origin_set( + *p_sdp_body, + (char*)::strdup(static_cast(origin.user__name())), + (char*)::strdup(static_cast(origin.session__id())), + (char*)::strdup(static_cast(origin.session__version())), + (char*)::strdup(static_cast(origin.net__type())), + (char*)::strdup(static_cast(origin.addr__type())), + (char*)::strdup(static_cast(origin.addr())) + ); + // Session name + ::sdp_message_s_name_set(*p_sdp_body, (char*)::strdup(static_cast(p_sdp_message.session__name()))); + // Time, t + ::sdp_message_s_name_set(*p_sdp_body, (char*)::strdup(static_cast(p_sdp_message.session__name()))); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: times: ", p_sdp_message.times()); + for (int i = 0; i < p_sdp_message.times().lengthof(); i++) { + const LibSip__SDPTypes::SDP__time& time = p_sdp_message.times()[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: time: ", time); + ::sdp_message_t_time_descr_add(*p_sdp_body, (char*)::strdup(static_cast(time.time__field().start__time())), (char*)::strdup(static_cast(time.time__field().stop__time()))); + if (time.time__repeat().is_present()) { + const LibSip__SDPTypes::SDP__repeat__list& l = static_cast&>(*time.time__repeat().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: l: ", l); + for (int j = 0; j < l.lengthof(); j++) { + const LibSip__SDPTypes::SDP__repeat& r = l[j]; + // TODO r.repeat__interval(); + // TODO r.active(); + for (int k = 0; k < r.offsets().lengthof(); k++) { + const LibSip__SDPTypes::SDP__typed__time& s = r.offsets()[k]; + // TODO ::sdp_message_r_repeat_add(p_sdp_body, k, char *value); + } // End of 'for' statement + // TODO ::sdp_message_r_repeat_add(p_sdp_body, int pos_time_descr, char *value) + } // End of 'for' statement + } + } // End of 'for' statement + // Encode optional fields + // email, e + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: emails: ", p_sdp_message.emails()); + if (p_sdp_message.emails().is_present()) { + const LibSip__SDPTypes::SDP__email__list& l = static_cast(*p_sdp_message.emails().get_opt_value()); + for (int j = 0; j < l.lengthof(); j++) { + const LibSip__SDPTypes::SDP__contact& e = l[j]; + std::string str; + if (e.disp__name().is_present()) { + str = static_cast(static_cast(*e.disp__name().get_opt_value())); + str += " "; + } + str += static_cast(e.addr__or__phone()); + ::sdp_message_e_email_add(*p_sdp_body, ::strdup(str.c_str())); + } // End of 'for' statement + } + // Information, i + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: information: ", p_sdp_message.information()); + if (p_sdp_message.information().is_present()) { + ::sdp_message_i_info_set(*p_sdp_body, 0, ::strdup(static_cast(*p_sdp_message.information().get_opt_value()))); + } + // Media list, m + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: medias: ", p_sdp_message.media__list()); + if (p_sdp_message.media__list().is_present()) { + const LibSip__SDPTypes::SDP__media__desc__list& l = static_cast(*p_sdp_message.media__list().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__media__desc m = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: media: ", m); + // Media field + if (m.media__field().ports().num__of__ports().is_present()) { + int p = static_cast(*m.media__field().ports().num__of__ports().get_opt_value()); + ::sdp_message_m_media_add(*p_sdp_body, (char*)::strdup(static_cast(m.media__field().media())), (char*)::strdup(std::to_string(m.media__field().ports().port__number()).c_str()), (char*)::strdup(std::to_string(p).c_str()), (char*)::strdup(static_cast(m.media__field().transport()))); + } else { + ::sdp_message_m_media_add(*p_sdp_body, (char*)::strdup(static_cast(m.media__field().media())), (char*)::strdup(std::to_string(m.media__field().ports().port__number()).c_str()), NULL, (char*)::strdup(static_cast(m.media__field().transport()))); + } + // Format list + const LibSip__SDPTypes::SDP__fmt__list& fmts = m.media__field().fmts(); + std::string str; + for (int j = 0; j < fmts.lengthof() - 1; j++) { + str += static_cast(fmts[j]); + str += " "; + } // End of 'for' statement + str += static_cast(fmts[fmts.lengthof() - 1]); + // information + if (m.information().is_present()) { + str += " "; + str += static_cast(static_cast(*m.information().get_opt_value())); + } + if (str.length() != 0) { + ::sdp_message_m_payload_add(*p_sdp_body, i, (char*)::strdup(str.c_str())); + } + // Attribute list, a + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attributes: ", m.attributes()); + if (m.attributes().is_present()) { + const LibSip__SDPTypes::SDP__attribute__list& al = static_cast(*m.attributes().get_opt_value()); + for (int k = 0; k < al.lengthof(); k++) { + const LibSip__SDPTypes::SDP__attribute a = al[k]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: ", a); + if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_rtpmap)) { + std::string str(static_cast(a.rtpmap().payload__type())); + str += " "; + str += static_cast(a.rtpmap().codec().encoding()); + str += "/"; + str += a.rtpmap().codec().clockrate(); + if (a.rtpmap().codec().parameters().is_present()) { + str += "/"; + str += static_cast(static_cast(*a.rtpmap().codec().parameters().get_opt_value())); + } + loggers::get_instance().log("sip_codec_message_body::encode_sdp: attribute: media #%d: encode rtpmap:%s", i, str.c_str()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("rtpmap"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_fmtp)) { + std::string str(static_cast(a.fmtp().format())); + str += " "; + if (a.fmtp().params().ischosen(LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params::ALT_paramList)) { + const LibSip__Common::SemicolonParam__List& sl = a.fmtp().params().paramList(); + for (int k = 0; k < sl.lengthof(); k++) { + str += static_cast(sl[k].id()); + if (sl[k].paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*sl[k].paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: fmtp: v: ", v); + str += "="; + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + str += static_cast(v.tokenOrHost()); + } else { + str += static_cast(v.quotedString()); + } + } // else, nothing to do + str += ";"; + } // End of 'for' statement + } else { + str += static_cast(a.fmtp().params().unstructured()); + } + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("fmtp"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_curr)) { + std::string str(static_cast(a.curr().preconditionType())); + str += " "; + str += static_cast(a.curr().statusType()); + str += " "; + str += static_cast(a.curr().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("curr"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_des)) { + std::string str(static_cast(a.des().preconditionType())); + str += " "; + str += static_cast(a.des().strength()); + str += " "; + str += static_cast(a.des().statusType()); + str += " "; + str += static_cast(a.des().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("des"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_maxptime)) { + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("maxptime"), (char*)::strdup(static_cast(a.maxptime().attr__value()))); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_sendrecv)) { + ::sdp_message_a_attribute_add(*p_sdp_body, i, (char*)::strdup("sendrecv"), nullptr); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_sdp: attribute not processed"); + } + } // End of 'for' statement + } + } // End of 'for' statement + ::sdp_message_endof_media(*p_sdp_body, i); + } + // Attribute list, a + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attributes: ", p_sdp_message.attributes()); + if (p_sdp_message.attributes().is_present()) { + const LibSip__SDPTypes::SDP__attribute__list& l = static_cast(*p_sdp_message.attributes().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__attribute a = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: ", a); + if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_rtpmap)) { + std::string str(static_cast(a.rtpmap().payload__type())); + str += " "; + str += static_cast(a.rtpmap().codec().encoding()); + str += " "; + str += a.rtpmap().codec().clockrate(); + if (a.rtpmap().codec().parameters().is_present()) { + str += "/"; + str += static_cast(static_cast(*a.rtpmap().codec().parameters().get_opt_value())); + } + loggers::get_instance().log("sip_codec_message_body::encode_sdp: attribute: media #%d: encode rtpmap:%s", i, str.c_str()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("rtpmap"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_fmtp)) { + std::string str(static_cast(a.fmtp().format())); + str += " "; + if (a.fmtp().params().ischosen(LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params::ALT_paramList)) { + const LibSip__Common::SemicolonParam__List& sl = a.fmtp().params().paramList(); + for (int k = 0; k < sl.lengthof(); k++) { + str += static_cast(sl[k].id()); + if (sl[k].paramValue().is_present()) { + const LibSip__Common::GenValue& v = static_cast(*sl[k].paramValue().get_opt_value()); + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: attribute: fmtp: v: ", v); + str += "="; + if (v.ischosen(LibSip__Common::GenValue::ALT_tokenOrHost)) { + str += static_cast(v.tokenOrHost()); + } else { + str += static_cast(v.quotedString()); + } + } // else, nothing to do + str += ";"; + } // End of 'for' statement + } else { + str += static_cast(a.fmtp().params().unstructured()); + } + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("fmtp"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_curr)) { + std::string str(static_cast(a.curr().preconditionType())); + str += " "; + str += static_cast(a.curr().statusType()); + str += " "; + str += static_cast(a.curr().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("curr"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_des)) { + std::string str(static_cast(a.des().preconditionType())); + str += " "; + str += static_cast(a.des().strength()); + str += " "; + str += static_cast(a.des().statusType()); + str += " "; + str += static_cast(a.des().direction()); + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("des"), (char*)::strdup(str.c_str())); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_maxptime)) { + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("maxptime"), (char*)::strdup(static_cast(a.maxptime().attr__value()))); + } else if (a.ischosen(LibSip__SDPTypes::SDP__attribute::ALT_sendrecv)) { + ::sdp_message_a_attribute_add(*p_sdp_body, 0, (char*)::strdup("sendrecv"), nullptr); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_sdp: attribute not processed"); + } + } // End of 'for' statement + } + // Bandwith, b + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: Bandwidth: ", p_sdp_message.bandwidth()); + if (p_sdp_message.bandwidth().is_present()) { + const LibSip__SDPTypes::SDP__bandwidth__list& l = static_cast(*p_sdp_message.bandwidth().get_opt_value()); + int i = 0; + for ( ; i < l.lengthof(); i++) { + const LibSip__SDPTypes::SDP__bandwidth b = l[i]; + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: bandwidth: ", b); + ::sdp_message_b_bandwidth_add(*p_sdp_body, i, (char*)::strdup(static_cast(b.modifier())), (char*)::strdup(std::to_string(b.bandwidth()).c_str())); + } // End of 'for' statement + } + // Connection, c + loggers::get_instance().log_msg("sip_codec_message_body::encode_sdp: Connection: ", p_sdp_message.connection()); + if (p_sdp_message.connection().is_present()) { + const LibSip__SDPTypes::SDP__connection& c = static_cast(*p_sdp_message.connection().get_opt_value()); + ::sdp_message_c_connection_add(*p_sdp_body, 0, ::strdup(static_cast(c.net__type())), ::strdup(static_cast(c.addr__type())), ::strdup(static_cast(c.conn__addr().addr())), nullptr, nullptr); + } + // TODO To be continued + + loggers::get_instance().log("<<< sip_codec_message_body::encode_sdp"); + return 0; +} + +void sip_codec_message_body::decode_message_body(const osip_message_t* p_sip_message, OPTIONAL& p_message_body) +{ // TODO Rename into decode_message + loggers::get_instance().log(">>> sip_codec_message_body::decode_message_body"); + + osip_content_length* content_length = ::osip_message_get_content_length(p_sip_message); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: content_length= %s", content_length->value); + if (strcmp((const char*)content_length->value, "0") == 0) { + p_message_body.set_to_omit(); + return; + } + // TODO Align the body the content_length + + osip_content_type_t* content_type = ::osip_message_get_content_type(p_sip_message); + osip_body_t* body; + int result = ::osip_message_get_body(p_sip_message, 0, &body); + if (result != 0) { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Failed to retrieve body"); + p_message_body.set_to_omit(); + return; + } + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body size: %d", body->length); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body content: %s", body->body); + if (body->headers != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body headers size: %d", osip_list_size(body->headers)); + } + if (body->content_type != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body content-type: '%s'/'%s'/%p", body->content_type->type, body->content_type->subtype, body->content_type->gen_params.node); + } + if (::osip_list_size(body->headers) != 0) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Body header is present"); + // TODO Process Content-ID and other headers + } + LibSip__MessageBodyTypes::MessageBody msg_body; + if (content_type != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_message_body: content-type.type: '%s'/'%s'/%p", content_type->type, content_type->subtype, content_type->gen_params.node); + if (std::string(content_type->type).compare("multipart") == 0) { + const osip_list_t* p = &(p_sip_message->bodies); + size_t size = osip_list_size(p); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Multipart body size: %d\n", size); + if (size == 0) { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Empty multipart content, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } else { + LibSip__MessageBodyTypes::MIME__Message mime; + if (content_type->gen_params.node != nullptr) { + mime.boundary() = CHARSTRING("boundary1"/*(const char*)content_type->gen_params.node->element*/); // TODO How to get the boundary name? + } else { + mime.boundary() = CHARSTRING("boundary1"); + } + loggers::get_instance().log_msg("sip_codec_message_body::decode_message_body: Boundary: ", mime.boundary()); + LibSip__MessageBodyTypes::MimeEncapsulatedList& l = mime.mimeEncapsulatedList(); + size_t pos = 0; + while (pos < size) { + const osip_header_t* header = (const osip_header_t*)osip_list_get(p, pos); + loggers::get_instance().log("sip_codec_message_body::decode_message_body: body content=%s", header->hname); + if ((*header->hname == 'v') && (*(header->hname + 1) == '=') && (*(header->hname + 2) == '0')) { // SDP + loggers::get_instance().log("sip_codec_message_body::decode_message_body: Decode SDP"); + LibSip__MessageBodyTypes::MIME__Encapsulated__Part p; + p.content__type() = CHARSTRING("application/sdp"); + p.content__disposition().set_to_omit(); + p.content__id().set_to_omit(); + LibSip__SDPTypes::SDP__Message sdp_body; + osip_body_t* body; + ::osip_body_init(&body); + body->body = ::strdup(header->hname); // TODO Check if strdup is needed + body->length = strlen(header->hname); + LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& parts = p.mime__encapsulated__part(); + if (decode_sdp(body, sdp_body) == 0) { + parts.sdpMessageBody() = sdp_body; + } else { + parts.msdBody() = char2oct(CHARSTRING(header->hname)); + } + l[pos] = p; + } else if ((*header->hname == '<') && (*(header->hname + 1) == '?') && (*(header->hname + 2) == 'x')) { // body = header->hname; + body->length = strlen(header->hname); + LibSip__MessageBodyTypes::MIME__Encapsulated__Parts& parts = p.mime__encapsulated__part(); + if (decode_xml(body, xml_body) == 0) { + parts.xmlBody() = xml_body; + } else { + parts.msdBody() = char2oct(CHARSTRING(header->hname)); + } + l[pos] = p; + } else { + // TODO + loggers::get_instance().error("sip_codec_message_body::decode_message_body: Not implemented yet"); + } + pos += 1; + } // End of 'while' statement + msg_body.mimeMessageBody() = mime; + } + } else if ((std::string(content_type->type).compare("application") == 0) && (std::string(content_type->subtype).compare("sdp") == 0)) { + LibSip__SDPTypes::SDP__Message sdp_body; + if (decode_sdp(body, sdp_body) == 0) { + // Set message body + msg_body.sdpMessageBody() = sdp_body; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: sdp_message_parse failed, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_message_body: Unsuported content-type, fallback to textplain"); + msg_body.textplain() = CHARSTRING(body->body); + } + p_message_body = OPTIONAL(msg_body); + } else if ((body != nullptr) && (body->body != nullptr)) { + msg_body.textplain() = CHARSTRING(body->body); + p_message_body = OPTIONAL(msg_body); + } else { + p_message_body.set_to_omit(); + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::decode_message_body: ", p_message_body); +} // End of method decode_message_body + +int sip_codec_message_body::decode_sdp(const osip_body_t* p_body, LibSip__SDPTypes::SDP__Message& p_sdp_header) { + loggers::get_instance().log(">>> sip_codec_message_body::decode_sdp: %s", p_body->body); + + sdp_message_t* sdp = nullptr; + ::sdp_message_init(&sdp); + std::string s(p_body->body); + s += "\r\n\r\n"; + if (::sdp_message_parse(sdp, s.c_str()/*p_body->body*/) == 0) { + // Mandatroy fields + // Version, v + char *hvalue = ::sdp_message_v_version_get(sdp); + if (hvalue != nullptr) { + p_sdp_header.protocol__version() = std::stoi(hvalue); + } + // Origin, o + p_sdp_header.origin() = LibSip__SDPTypes::SDP__Origin( + ::sdp_message_o_username_get(sdp), + ::sdp_message_o_sess_version_get(sdp), + ::sdp_message_o_sess_version_get(sdp), + ::sdp_message_o_nettype_get(sdp), + ::sdp_message_o_addrtype_get(sdp), + ::sdp_message_o_addr_get(sdp) + ); + // Session name, s + if ((hvalue = ::sdp_message_s_name_get(sdp)) != nullptr) { + p_sdp_header.session__name() = CHARSTRING(hvalue); + } + // Time, t + int i = 0; + if ((hvalue = ::sdp_message_t_start_time_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__time__list l; + do { + LibSip__SDPTypes::SDP__time t; + LibSip__SDPTypes::SDP__time__field tf; + tf.start__time() = CHARSTRING(hvalue); + tf.stop__time() = CHARSTRING(sdp_message_t_stop_time_get(sdp, i)); + t.time__field() = tf; + t.time__repeat().set_to_omit(); // TODO + l[i] = t; + i += 1; + } while ((hvalue = ::sdp_message_t_start_time_get(sdp, i)) != nullptr); + p_sdp_header.times() = l; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No start time in sdp"); + } + // Optional fields + // Emails, e + i = 0; + if ((hvalue = ::sdp_message_e_email_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__email__list l; + do { + LibSip__SDPTypes::SDP__contact e; + e.addr__or__phone() = CHARSTRING(hvalue); + e.disp__name().set_to_omit(); // TODO To be refined + l[i] = e; + i += 1; + } while ((hvalue = ::sdp_message_e_email_get(sdp, i)) != nullptr); + p_sdp_header.emails() = OPTIONAL(l); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No emails in sdp"); + p_sdp_header.emails().set_to_omit(); + } + // Information, i + i = 0; + if ((hvalue = ::sdp_message_i_info_get(sdp, i)) != nullptr) { + p_sdp_header.information() = OPTIONAL(CHARSTRING(hvalue)); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No information in sdp"); + p_sdp_header.information().set_to_omit(); + } + // Media, m + i = 0; + if ((hvalue = ::sdp_message_m_media_get(sdp, i)) != nullptr) { + LibSip__SDPTypes::SDP__media__desc__list l; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Media='%s'", hvalue); + // Media description + LibSip__SDPTypes::SDP__media__field f; + f.media() = CHARSTRING(hvalue); + LibSip__SDPTypes::SDP__media__port p; + hvalue = ::sdp_message_m_port_get(sdp, i); + p.port__number() = std::stoi(hvalue); + if ((hvalue = ::sdp_message_m_number_of_port_get(sdp, i)) == nullptr) { + p.num__of__ports().set_to_omit(); + } else { + p.num__of__ports() = OPTIONAL(std::stoi(hvalue)); + } + f.ports() = p; + f.transport() = CHARSTRING(::sdp_message_m_proto_get(sdp, i)); + LibSip__SDPTypes::SDP__fmt__list fl; + int j = 0; + while ((hvalue = ::sdp_message_m_payload_get(sdp, i, j)) != nullptr) { + fl[j++] = CHARSTRING(hvalue); + } // End of 'for' statement + f.fmts() = fl; + LibSip__SDPTypes::SDP__media__desc m; + m.media__field() = f; + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: m=", m); + // TODO + // Media attributes + m.attributes().set_to_omit(); + m.bandwidth().set_to_omit(); + m.information().set_to_omit(); + m.connections().set_to_omit(); + m.key().set_to_omit(); + l[i] = m; + i += 1; + } while ((hvalue = ::sdp_message_m_media_get(sdp, i)) != nullptr); + p_sdp_header.media__list() = OPTIONAL(l); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No media in sdp"); + p_sdp_header.media__list().set_to_omit(); + } + // Attributes, a + i = 0; + sdp_attribute_t* a; + if ((a = ::sdp_message_attribute_get(sdp, 0, i)) != nullptr) { + LibSip__SDPTypes::SDP__attribute__list l; + int j = 0; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Attributes#%d: '%s'='%s'", i, a->a_att_field, (a->a_att_value == nullptr) ? "(null)" : a->a_att_value); + // Attribute description + LibSip__SDPTypes::SDP__attribute f; + if (strcmp(a->a_att_field, "rtpmap") == 0) { + std::vector output = converter::get_instance().split(a->a_att_value, " "); + LibSip__SDPTypes::SDP__attribute__rtpmap__codec c; + std::vector o = converter::get_instance().split(output[1], "/"); + c.encoding() = CHARSTRING(o[0].c_str()); + c.clockrate() = CHARSTRING(o[1].c_str()); + if (o.size() == 3) { + c.parameters() = OPTIONAL(CHARSTRING(o[2].c_str())); + } else { + c.parameters().set_to_omit(); + } + f.rtpmap() = LibSip__SDPTypes::SDP__attribute__rtpmap(CHARSTRING(output[0].c_str()), c); + } else if (strcmp(a->a_att_field, "fmtp") == 0) { + // fmtp'='114 mode-change-capability=2;max-red=0' + std::vector o = converter::get_instance().split(a->a_att_value, " "); + LibSip__SDPTypes::SDP__attribute__fmtp fmtp; + fmtp.format() = CHARSTRING(o[0].c_str()); + LibSip__SDPTypes::SDP__attribute__fmtp__format__specific__params c; + if (o[1].find(";") != std::string::npos) { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Attributes#%d: param list='%s'", i, o[1].c_str()); + o = converter::get_instance().split(o[1], ";"); + LibSip__Common::SemicolonParam__List& sl = c.paramList(); + for (unsigned int k = 0; k < o.size(); k++) { + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: Process param: %s", o[k].c_str()); + size_t eq_pos = o[k].find("="); + if (eq_pos == std::string::npos) { + sl[k] = LibSip__Common::GenericParam(CHARSTRING(o[k].c_str()), OPTIONAL(OMIT_VALUE)); + } else { + loggers::get_instance().log("sip_codec_headers::decode_semi_colon_params: substrs: %s - %s", o[k].substr(0, eq_pos).c_str(), o[k].substr(eq_pos + 1).c_str()); + LibSip__Common::GenValue g; + g.tokenOrHost() = CHARSTRING(o[k].substr(eq_pos + 1).c_str()); + sl[k] = LibSip__Common::GenericParam(CHARSTRING(o[k].substr(0, eq_pos).c_str()), g); + } + } // End of 'for'statement + } else { + c.unstructured() = CHARSTRING(o[1].c_str()); + } + fmtp.params() = c; + f.fmtp() = fmtp; + } else if (strcmp(a->a_att_field, "curr") == 0) { + std::vector o = converter::get_instance().split(a->a_att_value, " "); + if (o.size() == 3) { + LibSip__SDPTypes::SDP__attribute__curr c; + c.preconditionType() = CHARSTRING(o[0].c_str()); + c.statusType() = CHARSTRING(o[1].c_str()); + c.direction() = CHARSTRING(o[2].c_str()); + f.curr() = c; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Wrong formatted curr SDP"); + f.curr().set_to_omit(); + } + } else if (strcmp(a->a_att_field, "des") == 0) { + std::vector o = converter::get_instance().split(a->a_att_value, " "); + if (o.size() == 4) { + LibSip__SDPTypes::SDP__attribute__des c; + c.preconditionType() = CHARSTRING(o[0].c_str()); + c.strength() = CHARSTRING(o[1].c_str()); + c.statusType() = CHARSTRING(o[2].c_str()); + c.direction() = CHARSTRING(o[3].c_str()); + f.des() = c; + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Wrong formatted des SDP"); + f.des().set_to_omit(); + } + } else if (strcmp(a->a_att_field, "sendrecv") == 0) { + f.sendrecv() = LibSip__SDPTypes::SDP__attribute__sendrecv(NULL_VALUE); + } else if (strcmp(a->a_att_field, "maxptime") == 0) { + LibSip__SDPTypes::SDP__attribute__maxptime m; + f.maxptime() = LibSip__SDPTypes::SDP__attribute__maxptime(CHARSTRING((const char*)a->a_att_value)); + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Unprocessed attributes#%d: '%s'='%s'", i, a->a_att_field, a->a_att_value); + } + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: f: ", f); + if (f.is_bound()) { + l[j++] = f; + } + i += 1; + } while ((a = ::sdp_message_attribute_get(sdp, 0, i)) != nullptr); + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp: After Attribute loop: ", l); + if (j == 0) { // Empty list + p_sdp_header.attributes().set_to_omit(); + } else { + p_sdp_header.attributes() = OPTIONAL(l); + } + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: No attributes in sdp"); + p_sdp_header.attributes().set_to_omit(); + } + // Bandwith, b + i = 0; + sdp_bandwidth_t* b; + if ((b = ::sdp_message_bandwidth_get(sdp, 0, i)) != nullptr) { + LibSip__SDPTypes::SDP__bandwidth__list l; + do { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Bandwidths#%d: '%s'='%s'", i, b->b_bwtype, b->b_bandwidth); + LibSip__SDPTypes::SDP__bandwidth a(b->b_bwtype, INTEGER(std::stoi(b->b_bandwidth))); + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp_sdp: Bandwith: ", a); + l[i] = a; + i += 1; + } while((b = ::sdp_message_bandwidth_get(sdp, 0, i)) != nullptr); + p_sdp_header.bandwidth() = OPTIONAL(l); + } else { + p_sdp_header.bandwidth().set_to_omit(); + } + // Connection, c + char* net__type; + if ((net__type = ::sdp_message_c_nettype_get(sdp, 0, 0)) != nullptr) { + loggers::get_instance().log("sip_codec_message_body::decode_sdp: Connections#%d: '%s'", 0, a); + LibSip__SDPTypes::SDP__connection c; + c.net__type() = CHARSTRING(net__type); + c.addr__type() = CHARSTRING(::sdp_message_c_addrtype_get(sdp, 0, 0)); + LibSip__SDPTypes::SDP__conn__addr a; + a.addr() = CHARSTRING(::sdp_message_c_addr_get(sdp, 0, 0)); + if (::sdp_message_c_addr_multicast_ttl_get(sdp, 0, 0) != nullptr) { + a.ttl() = OPTIONAL(::stoi(::sdp_message_c_addr_multicast_ttl_get(sdp, 0, 0))); + } else { + a.ttl().set_to_omit(); + } + if (::sdp_message_c_addr_multicast_int_get(sdp, 0, 0) != nullptr) { + a.num__of__addr() = OPTIONAL(::stoi(::sdp_message_c_addr_multicast_int_get(sdp, 0, 0))); + } else { + a.num__of__addr().set_to_omit(); + } + c.conn__addr() = a; + loggers::get_instance().log_msg("sip_codec_message_body::decode_sdp_sdp: connection: ", c); + p_sdp_header.connection() = OPTIONAL(c); + } else { + p_sdp_header.connection().set_to_omit(); + } + i = 0; + + // TODO + p_sdp_header.uri().set_to_omit(); + p_sdp_header.phone__numbers().set_to_omit(); + p_sdp_header.timezone__adjustments().set_to_omit(); + p_sdp_header.key().set_to_omit(); + + } else { + loggers::get_instance().warning("sip_codec_message_body::decode_sdp: Failed to parse SDP"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_body::decode_sdp: sdp: ", p_sdp_header); + return 0; +} + +int sip_codec_message_body::encode_xml(const LibSip__XMLTypes::XmlBody& p_message_body, osip_body_t** p_body) { + loggers::get_instance().log_msg(">>> sip_codec_message_body::encode_xml: ", p_message_body); + + ::osip_body_init(p_body); + + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_Buffer encoding_buffer; + + CHARSTRING h("\n"); + encoding_buffer.put_s(h.lengthof(), (const unsigned char*)static_cast(h)); + if (p_message_body.ischosen(LibSip__XMLTypes::XmlBody::ALT_presence)) { // Held codec + const urn__ietf__params__xml__ns__pidf::Presence& presence = p_message_body.presence(); + loggers::get_instance().log_msg("sip_codec_message_body::encode_xml: Process Presence", (const Base_Type&)presence); + presence.encode(urn__ietf__params__xml__ns__pidf::Presence_descr_, encoding_buffer, TTCN_EncDec::CT_XER, XER_EXTENDED); + } else { + loggers::get_instance().warning("sip_codec_message_body::encode_xml: Unsupported variant"); + return -1; + } + OCTETSTRING data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); + + if (p_message_body.ischosen(LibSip__XMLTypes::XmlBody::ALT_presence)) { // NG112-2021 Workaround for TITAN/XSD issue + // TODO TITAN work-around, replace tq0003 namespace??? + std::string s(static_cast(data), data.lengthof() + static_cast(data)); + /*size_t idx = 0; + + std::string f("tq0000:"); + std::string t(""); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0000"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0001:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0001"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0002:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0002"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0003:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0003"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign("tq0004:"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + f.assign(":tq0004"); + while ((idx = s.find(f)) != std::string::npos) { + s.replace(idx, f.length(), t); + idx += t.length(); + } // End of 'while' statement + */ + data = OCTETSTRING(s.length(), (const unsigned char*)s.c_str()); + } + (*p_body)->body = ::strdup(static_cast(oct2char(data))); + (*p_body)->length = strlen((*p_body)->body); + + loggers::get_instance().log("<<< sip_codec_message_body::encode_xml: %s", (*p_body)->body); + return 0; +} + +int sip_codec_message_body::decode_xml(const osip_body_t* p_body, LibSip__XMLTypes::XmlBody& p_xml_header) { + loggers::get_instance().log(">>> sip_codec_message_body::decode_xml: %s", p_body->body); + + // TODO Unify held_codec for bothHttp & Sip: instead of LibHttp__XmlMessageBodyTypes::XmlBody, use a generic XmlBody common to LibItsHttp & LibSip + TTCN_EncDec::clear_error(); + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + OCTETSTRING data(p_body->length, (const unsigned char*)p_body->body); + TTCN_Buffer decoding_buffer(data); + loggers::get_instance().log_to_hexa("sip_codec_message_body::decode_xml: decoding_buffer: ", decoding_buffer); + + if (strstr(p_body->body, " +{ +public: + explicit sip_codec_message_body() { }; + virtual ~sip_codec_message_body() { }; + + virtual int encode (const LibSip__MessageBodyTypes::MessageBody& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__MessageBodyTypes::MessageBody& msg, params* p_params = NULL); + + virtual int encode_message_body(const LibSip__MessageBodyTypes::MessageBody& p_message_body, osip_message_t* p_sip_message); + virtual void decode_message_body(const osip_message_t* p_sip_message, OPTIONAL& p_message_body); + +private: + int encode_sdp(const LibSip__SDPTypes::SDP__Message& p_message_body, sdp_message_t** p_sdp_body); + int decode_sdp(const osip_body_t* p_body, LibSip__SDPTypes::SDP__Message& p_sdp_header); + int encode_xml(const LibSip__XMLTypes::XmlBody& p_message_body, osip_body_t** p_body); + int decode_xml(const osip_body_t* p_body, LibSip__XMLTypes::XmlBody& p_xml_header); + +}; // End of class sip_codec_message_body diff --git a/ccsrc/Protocols/Sip/sip_codec_message_request.cc b/ccsrc/Protocols/Sip/sip_codec_message_request.cc new file mode 100644 index 0000000..9314d54 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_message_request.hh" +#include "loggers.hh" + +int sip_codec_message_request::encode (const LibSip__SIPTypesAndValues::MESSAGE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_message_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_message_request::encode: data=", data); + return 0; +} + +int sip_codec_message_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::MESSAGE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_message_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_message_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_message_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::MESSAGE__E) { + loggers::get_instance().warning("sip_codec_message_request::decode: Wrong SIP Method, expected MESSAGE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_message_request.hh b/ccsrc/Protocols/Sip/sip_codec_message_request.hh new file mode 100644 index 0000000..8df7dd1 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_message_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class MESSAGE__Request; +} + +class sip_codec_message_request: public codec_gen < +LibSip__SIPTypesAndValues::MESSAGE__Request, +LibSip__SIPTypesAndValues::MESSAGE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_message_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_message_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::MESSAGE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::MESSAGE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_message_request diff --git a/ccsrc/Protocols/Sip/sip_codec_notify_request.cc b/ccsrc/Protocols/Sip/sip_codec_notify_request.cc new file mode 100644 index 0000000..88429a1 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_notify_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_notify_request.hh" +#include "loggers.hh" + +int sip_codec_notify_request::encode (const LibSip__SIPTypesAndValues::NOTIFY__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_notify_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_notify_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_notify_request::encode: data=", data); + return 0; +} + +int sip_codec_notify_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::NOTIFY__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_notify_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::NOTIFY__E) { + loggers::get_instance().warning("sip_codec_notify_request::decode: Wrong SIP Method, expected NOTIFY"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_notify_request.hh b/ccsrc/Protocols/Sip/sip_codec_notify_request.hh new file mode 100644 index 0000000..8114f68 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_notify_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class NOTIFY__Request; +} + +class sip_codec_notify_request: public codec_gen < +LibSip__SIPTypesAndValues::NOTIFY__Request, +LibSip__SIPTypesAndValues::NOTIFY__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_notify_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_notify_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::NOTIFY__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::NOTIFY__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_notify_request diff --git a/ccsrc/Protocols/Sip/sip_codec_options_request.cc b/ccsrc/Protocols/Sip/sip_codec_options_request.cc new file mode 100644 index 0000000..195a183 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_options_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_options_request.hh" +#include "loggers.hh" + +int sip_codec_options_request::encode (const LibSip__SIPTypesAndValues::OPTIONS__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_options_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_options_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_options_request::encode: data=", data); + return 0; +} + +int sip_codec_options_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::OPTIONS__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_options_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_options_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_options_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::OPTIONS__E) { + loggers::get_instance().warning("sip_codec_options_request::decode: Wrong SIP Method, expected OPTIONS"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_options_request.hh b/ccsrc/Protocols/Sip/sip_codec_options_request.hh new file mode 100644 index 0000000..29b6000 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_options_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class OPTIONS__Request; +} + +class sip_codec_options_request: public codec_gen < +LibSip__SIPTypesAndValues::OPTIONS__Request, +LibSip__SIPTypesAndValues::OPTIONS__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_options_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_options_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::OPTIONS__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::OPTIONS__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_options_request diff --git a/ccsrc/Protocols/Sip/sip_codec_register_request.cc b/ccsrc/Protocols/Sip/sip_codec_register_request.cc new file mode 100644 index 0000000..af45a98 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_register_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_register_request.hh" +#include "loggers.hh" + +int sip_codec_register_request::encode (const LibSip__SIPTypesAndValues::REGISTER__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_register_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_register_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_register_request::encode: data=", data); + return 0; +} + +int sip_codec_register_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::REGISTER__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_register_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_register_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_register_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::REGISTER__E) { + loggers::get_instance().warning("sip_codec_register_request::decode: Wrong SIP Method, expected REGISTER"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_register_request.hh b/ccsrc/Protocols/Sip/sip_codec_register_request.hh new file mode 100644 index 0000000..804fa49 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_register_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +class sip_codec_register_request: public codec_gen < +LibSip__SIPTypesAndValues::REGISTER__Request, +LibSip__SIPTypesAndValues::REGISTER__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_register_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_register_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::REGISTER__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::REGISTER__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_register_request diff --git a/ccsrc/Protocols/Sip/sip_codec_request.cc b/ccsrc/Protocols/Sip/sip_codec_request.cc new file mode 100644 index 0000000..90f1f62 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_request.cc @@ -0,0 +1,210 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_request.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_request::encode (const LibSip__SIPTypesAndValues::Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::encode: ", (const Base_Type&)msg); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::encode\n")); + + osip_message_t* sip_message = nullptr; // TODO Use smart pointer + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to initialise internal data structures"); + return -1; + } + + if (encode_request(msg, sip_message) == -1) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to encode Request"); + ::osip_message_free(sip_message); + sip_message = nullptr; + return -1; + } + + char* buffer = nullptr; + size_t length = 0; + result = ::osip_message_to_str(sip_message, &buffer, &length); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::encode: Failed to encode data structures"); + ::osip_message_free(sip_message); + return -1; + } + loggers::get_instance().log("sip_codec_request::encode: Message:%s", buffer); + data = OCTETSTRING(length, (const unsigned char*)buffer); + osip_free(buffer); + ::osip_message_free(sip_message); + + loggers::get_instance().log_msg("<<< sip_codec_request::encode: data=", data); + return result; +} + +int sip_codec_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::decode: data=", data); + + TRACE_INITIALIZE(TRACE_LEVEL7, NULL); + OSIP_TRACE (osip_trace (__FILE__, __LINE__, OSIP_ERROR, NULL, ">>> sip_codec_request::decode\n")); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_request::decode: Wrong parameters"); + return -1; + } + + osip_message_t* sip_message; + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::decode: Failed to initialise internal data structures"); + return -1; + } + result = ::osip_message_parse(sip_message, (const char*)static_cast(data), data.lengthof()); + if (result != 0) { + loggers::get_instance().warning("sip_codec_request::decode: Failed to parse SIP message"); + ::osip_message_free(sip_message); + return -1; + } + + // Fill RequestLine + decode_request_line(sip_message, msg); + + // Fill Headers + decode_request_headers(sip_message, msg); + + // Fill MessageBody + decode_message_body(sip_message, msg.messageBody()); + + // Fill Payload + decode_payload(sip_message, msg); + + ::osip_message_free(sip_message); + loggers::get_instance().log_msg("sip_codec_request::decode: ", msg); + + return 0; +} + +int sip_codec_request::encode_request(const LibSip__SIPTypesAndValues::Request& p_request, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_request::encode_request"); + + encode_request_line(p_request.requestLine(), p_sip_message); + + encode_request_headers(p_request.msgHeader(), p_sip_message); + + if (p_request.messageBody().is_present()) { + const LibSip__MessageBodyTypes::MessageBody& m = static_cast(*p_request.messageBody().get_opt_value()); + encode_message_body(m, p_sip_message); + } + + if (p_request.payload().is_present()) { + const LibSip__SIPTypesAndValues::Payload& p = static_cast(*p_request.payload().get_opt_value()); + encode_request_payload(p, p_sip_message); + } + + return 0; +} // End of method encode_request + +int sip_codec_request::encode_request_line(const LibSip__SIPTypesAndValues::RequestLine& p_request_line, osip_message_t* p_sip_message) +{ + loggers::get_instance().log_msg(">>> sip_codec_request::encode_request_line", p_request_line); + + // Sip method + std::string str(LibSip__SIPTypesAndValues::Method::enum_to_str(p_request_line.method())); + char *p = (char*)osip_malloc(str.length() - 2 + 1); // Will be freed by osip_message_free + ::strcpy(p, str.substr(0, str.length() - 2).c_str()); // Remove _E + ::osip_message_set_method(p_sip_message, p); + + // Sip uri + osip_uri_t *uri; + if (encode_sip_url(p_request_line.requestUri(), &uri) == -1) { + loggers::get_instance().warning("sip_codec_request::encode_request_line: Faile to encode SipUrl"); + return -1; + } + ::osip_message_set_uri(p_sip_message, uri); + // FIXME: Add parameter to support udp/tcp/tls transport + //::osip_uri_set_transport_tcp(uri); + ::osip_uri_set_transport_tls(uri); + + // SIP version + p = (char*)osip_malloc(p_request_line.sipVersion().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_request_line.sipVersion())); + ::osip_message_set_version(p_sip_message, p); + + return 0; +} // End of method encode_request_line + +int sip_codec_request::encode_request_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ // TODO Rename to encode_headers and call sip_codec_headers::encode_headers + loggers::get_instance().log_msg(">>> sip_codec_request::encode_request_headers: ", p_msg_header); + + if (encode_headers(p_msg_header, p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_request::encode_request_headers: Failed to encode headers"); + return -1; + } + + return 0; +} // End of method encode_request_headers + +int sip_codec_request::encode_request_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_request::encode_request_payload"); + + return 0; +} // End of method encode_request_payload + +void sip_codec_request::decode_request_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ // TODO rename into decode_headers and call sip_code_headers::decode_headers + loggers::get_instance().log(">>> sip_codec_request::decode_request_headers"); + + LibSip__SIPTypesAndValues::MessageHeader& headers = p_request.msgHeader(); + decode_headers(p_sip_message, headers); + if (!headers.is_bound()) { + loggers::get_instance().warning("sip_codec_request::decode_request_headers: Failed to decode headers"); + return; + } + + loggers::get_instance().log_msg("<<< sip_codec_request::decode_request_headers: ", p_request); +} // End of method decode_request_headers + +void sip_codec_request::decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ + loggers::get_instance().log(">>> sip_codec_request::decode_payload"); + + p_request.payload().set_to_omit(); + +} // End of method decode_payload + +void sip_codec_request::decode_request_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request) +{ + loggers::get_instance().log(">>> sip_codec_request::decode_request_line"); + + LibSip__SIPTypesAndValues::RequestLine request_line; + std::string str(::osip_message_get_method(p_sip_message)); + str += "_E"; + request_line.method() = LibSip__SIPTypesAndValues::Method(LibSip__SIPTypesAndValues::Method::str_to_enum(str.c_str())); + loggers::get_instance().log_msg("sip_codec_request::decode_request_line: Method: ", request_line.method()); + LibSip__SIPTypesAndValues::SipUrl uri; + decode_uri(uri, ::osip_message_get_uri(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_request::decode_request_line: SipUrl: ", uri); + request_line.requestUri() = uri; + request_line.sipVersion() = CHARSTRING(::osip_message_get_version(p_sip_message)); + p_request.requestLine() = request_line; + // FIXME To be continued + + loggers::get_instance().log_msg("<<< sip_codec_request::decode_request_line: ", p_request); +} + diff --git a/ccsrc/Protocols/Sip/sip_codec_request.hh b/ccsrc/Protocols/Sip/sip_codec_request.hh new file mode 100644 index 0000000..e339b9d --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_request.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "sip_codec_headers.hh" +#include "sip_codec_message_body.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class Request; + class RequestLine; + class MessageHeader; + class Payload; +} + +class sip_codec_request: public codec_gen < + LibSip__SIPTypesAndValues::Request, + LibSip__SIPTypesAndValues::Request>, + sip_codec_headers, sip_codec_message_body +{ +public: + explicit sip_codec_request() : codec_gen() { }; + virtual ~sip_codec_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Request& msg, params* p_params = NULL); +private: + int encode_request(const LibSip__SIPTypesAndValues::Request& p_request, osip_message_t* p_sip_message); + int encode_request_line(const LibSip__SIPTypesAndValues::RequestLine& p_request_line, osip_message_t* p_sip_message); + int encode_request_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + int encode_request_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message); + +private: + void decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& p_request); + void decode_request_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& msg); + void decode_request_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Request& msg); + +}; // End of class sip_codec_request diff --git a/ccsrc/Protocols/Sip/sip_codec_response.cc b/ccsrc/Protocols/Sip/sip_codec_response.cc new file mode 100644 index 0000000..939353e --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_response.cc @@ -0,0 +1,191 @@ +#include "LibSip_SIPTypesAndValues.hh" +#include "LibSip_Common.hh" + +#include "sip_codec_response.hh" +#include "loggers.hh" + +#include "converter.hh" + +#ifdef WIN32 +#undef osip_malloc +#undef osip_free +#define osip_malloc(S) malloc(S) +#define osip_free(P) { if (P!=NULL) { free(P);} } +#endif + +int sip_codec_response::encode (const LibSip__SIPTypesAndValues::Response& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_response::encode: ", (const Base_Type&)msg); + + osip_message_t* sip_message = nullptr; // TODO Use smart pointer + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to initialise internal data structures"); + return -1; + } + + if (encode_response(msg, sip_message) == -1) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to encode Response"); + ::osip_message_free(sip_message); + sip_message = nullptr; + return -1; + } + + char* buffer = nullptr; + size_t length = 0; + result = ::osip_message_to_str(sip_message, &buffer, &length); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::encode: Failed to encode data structures: return code=%d", result); + ::osip_message_free(sip_message); + return -1; + } + loggers::get_instance().log("sip_codec_response::encode: Message:%s", buffer); + data = OCTETSTRING(length, (const unsigned char*)buffer); + osip_free(buffer); + ::osip_message_free(sip_message); + + loggers::get_instance().log_msg("<<< sip_codec_response::encode: data=", data); + return result; +} + +int sip_codec_response::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Response& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_response::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_response::decode: Wrong parameters"); + return -1; + } + + osip_message_t* sip_message; + ::parser_init(); + int result = ::osip_message_init(&sip_message); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::decode: Failed to initialise internal data structures"); + return -1; + } + result = ::osip_message_parse(sip_message, (const char*)static_cast(data), data.lengthof()); + if (result != 0) { + loggers::get_instance().warning("sip_codec_response::decode: Failed to parse SIP message"); + ::osip_message_free(sip_message); + return -1; + } + + // Fill StatusLine + decode_status_line(sip_message, msg); + + // Fill Headers + decode_response_headers(sip_message, msg); + + // Fill MessageBody + decode_message_body(sip_message, msg.messageBody()); + + // Fill Payload + decode_payload(sip_message, msg); + + ::osip_message_free(sip_message); + loggers::get_instance().log_msg("sip_codec_response::decode: ", msg); + + return 0; +} + +int sip_codec_response::encode_response(const LibSip__SIPTypesAndValues::Response& p_response, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_response"); + + encode_status_line(p_response.statusLine(), p_sip_message); + + encode_response_headers(p_response.msgHeader(), p_sip_message); + + if (p_response.messageBody().is_present()) { + const LibSip__MessageBodyTypes::MessageBody& m = static_cast(*p_response.messageBody().get_opt_value()); + encode_message_body(m, p_sip_message); + } + + if (p_response.payload().is_present()) { + const LibSip__SIPTypesAndValues::Payload& p = static_cast(*p_response.payload().get_opt_value()); + encode_response_payload(p, p_sip_message); + } + + return 0; +} // End of method encode_response + +int sip_codec_response::encode_status_line(const LibSip__SIPTypesAndValues::StatusLine& p_status_line, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_status_line"); + + // Sip version + char* p = (char*)osip_malloc(p_status_line.sipVersion().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_status_line.sipVersion())); + ::osip_message_set_version(p_sip_message, p); + + // Status code + loggers::get_instance().log("sip_codec_response::encode_status_line: status code=%d", static_cast(p_status_line.statusCode())); + ::osip_message_set_status_code(p_sip_message, static_cast(p_status_line.statusCode())); + + // Reason phrase + p = (char*)osip_malloc(p_status_line.reasonPhrase().lengthof() + 1); // Will be freed by osip_message_free + ::strcpy(p, (char*)static_cast(p_status_line.reasonPhrase())); + ::osip_message_set_reason_phrase(p_sip_message, p); + + return 0; +} // End of method encode_status_line + +int sip_codec_response::encode_response_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message) +{ // TODO Rename to encode_headers and call sip_codec_headers::encode_headers + loggers::get_instance().log_msg(">>> sip_codec_response::encode_response_headers: ", p_msg_header); + + if (encode_headers(p_msg_header, p_sip_message) == -1) { + loggers::get_instance().warning("sip_codec_response::encode_response_headers: Failed to encode headers"); + return -1; + } + + return 0; +} // End of method encode_response_headers + +int sip_codec_response::encode_response_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message) +{ + loggers::get_instance().log(">>> sip_codec_response::encode_response_payload"); + + return 0; +} // End of method encode_response_payload + +void sip_codec_response::decode_status_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ + loggers::get_instance().log(">>> sip_codec_response::decode_status_line"); + + LibSip__SIPTypesAndValues::StatusLine status_line; + status_line.sipVersion() = CHARSTRING(::osip_message_get_version(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: sipVersion: ", status_line.sipVersion()); + status_line.statusCode() = INTEGER(osip_message_get_status_code(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: statusCode: ", status_line.statusCode()); + status_line.reasonPhrase() = CHARSTRING(::osip_message_get_reason_phrase(p_sip_message)); + loggers::get_instance().log_msg("sip_codec_response::decode_status_line: reasonPhrase: ", status_line.reasonPhrase()); + p_response.statusLine() = status_line; + + loggers::get_instance().log_msg("<<< sip_codec_response::decode_status_line: ", p_response.statusLine()); +} // End of method decode_status_line + +void sip_codec_response::decode_response_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ // TODO rename into decode_headers and call sip_code_headers::decode_headers + loggers::get_instance().log(">>> sip_codec_response::decode_response_headers"); + + LibSip__SIPTypesAndValues::MessageHeader& headers = p_response.msgHeader(); + decode_headers(p_sip_message, headers); + if (!headers.is_bound()) { + loggers::get_instance().warning("sip_codec_response::decode_response_headers: Failed to decode headers"); + return; + } + + loggers::get_instance().log_msg("<<< sip_codec_response::decode_response_headers: ", p_response); +} // End of method decode_response_headers + +void sip_codec_response::decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response) +{ + loggers::get_instance().log(">>> sip_codec_response::decode_payload"); + + p_response.payload().set_to_omit(); + +} // End of method decode_payload diff --git a/ccsrc/Protocols/Sip/sip_codec_response.hh b/ccsrc/Protocols/Sip/sip_codec_response.hh new file mode 100644 index 0000000..c0f8f83 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_response.hh @@ -0,0 +1,46 @@ +#pragma once + +#include "codec_gen.hh" +#include "params.hh" + +#include "sip_codec_headers.hh" +#include "sip_codec_message_body.hh" + +#include "osipparser2/osip_parser.h" +#include "osipparser2/sdp_message.h" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class Response; + class StatusLine; + class MessageHeader; + class Payload; +} + +class sip_codec_response: public codec_gen < + LibSip__SIPTypesAndValues::Response, + LibSip__SIPTypesAndValues::Response>, + sip_codec_headers, sip_codec_message_body + +{ +public: + explicit sip_codec_response() : codec_gen() { }; + virtual ~sip_codec_response() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::Response& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::Response& msg, params* p_params = NULL); +private: + int encode_response(const LibSip__SIPTypesAndValues::Response& p_response, osip_message_t* p_sip_message); + int encode_status_line(const LibSip__SIPTypesAndValues::StatusLine& p_status_line, osip_message_t* p_sip_message); + int encode_response_headers(const LibSip__SIPTypesAndValues::MessageHeader& p_msg_header, osip_message_t* p_sip_message); + int encode_response_payload(const LibSip__SIPTypesAndValues::Payload& p_payload, osip_message_t* p_sip_message); + +private: + void decode_status_line(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& msg); + void decode_response_headers(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& msg); + void decode_payload(const osip_message_t* p_sip_message, LibSip__SIPTypesAndValues::Response& p_response); + +}; // End of class sip_codec_response diff --git a/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc new file mode 100644 index 0000000..2c52c4f --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.cc @@ -0,0 +1,46 @@ +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_codec_subscribe_request.hh" +#include "loggers.hh" + +int sip_codec_subscribe_request::encode (const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, OCTETSTRING& data) +{ + loggers::get_instance().log_msg(">>> sip_codec_subscribe_request::encode: ", (const Base_Type&)msg); + + if (_codec.encode((LibSip__SIPTypesAndValues::Request&)msg, data) == -1) { + loggers::get_instance().warning("sip_codec_subscribe_request::encode: Failed to encode message"); + return -1; + } + + loggers::get_instance().log_msg("<<< sip_codec_subscribe_request::encode: data=", data); + return 0; +} + +int sip_codec_subscribe_request::decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, params* p_params) +{ + loggers::get_instance().log_msg(">>> sip_codec_subscribe_request::decode: data=", data); + + // Sanity checks + if (data.lengthof() == 0) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Wrong parameters"); + return -1; + } + + // LibSip__SIPTypesAndValues::Request request; + if (_codec.decode(data, (LibSip__SIPTypesAndValues::Request&)msg) == -1) { + // if (_codec.decode(data, request) == -1) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Failed to decode message"); + return -1; + } + // msg.requestLine() = request.requestLine(); + // msg.msgHeader() = request.msgHeader(); + // msg.messageBody() = request.messageBody(); + // msg.payload() = request.payload(); + + if (msg.requestLine().method() != LibSip__SIPTypesAndValues::Method::SUBSCRIBE__E) { + loggers::get_instance().warning("sip_codec_subscribe_request::decode: Wrong SIP Method, expected SUBSCRIBE"); + return -1; + } + + return 0; +} diff --git a/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh new file mode 100644 index 0000000..98d087f --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_codec_subscribe_request.hh @@ -0,0 +1,24 @@ +#pragma once + +#include "sip_codec_request.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibSip__SIPTypesAndValues { + class SUBSCRIBE__Request; +} + +class sip_codec_subscribe_request: public codec_gen < +LibSip__SIPTypesAndValues::SUBSCRIBE__Request, +LibSip__SIPTypesAndValues::SUBSCRIBE__Request> +{ + sip_codec_request _codec; +public: + explicit sip_codec_subscribe_request() : codec_gen(), _codec() { }; + virtual ~sip_codec_subscribe_request() { }; + + virtual int encode (const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, OCTETSTRING& data); + virtual int decode (const OCTETSTRING& data, LibSip__SIPTypesAndValues::SUBSCRIBE__Request& msg, params* p_params = NULL); +}; // End of class sip_codec_subscribe_request diff --git a/ccsrc/Protocols/Sip/sip_layer.cc b/ccsrc/Protocols/Sip/sip_layer.cc new file mode 100644 index 0000000..64be3bd --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer.cc @@ -0,0 +1,146 @@ +#include "LibSip_Interface.hh" +#include "LibSip_SIPTypesAndValues.hh" + +#include "sip_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +sip_layer::sip_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> sip_layer::sip_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::REGISTER__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_register.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::INVITE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_invite.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::ACK__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_ack.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_subscribe.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::MESSAGE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_message.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::OPTIONS__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_options.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::BYE__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_bye.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::CANCEL__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_cancel.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::NOTIFY__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_notify.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::INFO__Request& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_info.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::sendMsg(const LibSip__SIPTypesAndValues::Response& p_sip_message, params& p_param) { + loggers::get_instance().log_msg(">>> sip_layer::sendMsg: ", p_sip_message); + + // Encode SipMessage + OCTETSTRING data; + _codec_response.encode(p_sip_message, data); + send_data(data, _params); +} + +void sip_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> sip_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void sip_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> sip_layer::receive_data: ", data); + + // Decode SIP message + if ((data[0].get_octet() == 'S') && (data[1].get_octet() == 'I') && (data[2].get_octet() == 'P')) { // SIP... Assume it is a responce + LibSip__SIPTypesAndValues::Response sip_response; + if (_codec_response.decode(data, sip_response) == -1) { + loggers::get_instance().warning("sip_layer::receive_data: Failed to decode response data"); + return; + } + // Pass it to the ports + to_all_upper_ports(sip_response, p_params); + } else { // Assume it is a request + LibSip__SIPTypesAndValues::Request sip_request; + if (_codec_request.decode(data, sip_request) == -1) { + loggers::get_instance().warning("sip_layer::receive_data: Failed to decode request data"); + return; + } + // Pass it to the ports + to_all_upper_ports(sip_request, p_params); + } +} + +sip_layer_factory sip_layer_factory::_f; + diff --git a/ccsrc/Protocols/Sip/sip_layer.hh b/ccsrc/Protocols/Sip/sip_layer.hh new file mode 100644 index 0000000..c8a5842 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer.hh @@ -0,0 +1,129 @@ +/*! + * \file sip_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +#include "sip_codec_request.hh" +#include "sip_codec_response.hh" +#include "sip_codec_register_request.hh" +#include "sip_codec_invite_request.hh" +#include "sip_codec_ack_request.hh" +#include "sip_codec_subscribe_request.hh" +#include "sip_codec_message_request.hh" +#include "sip_codec_options_request.hh" +#include "sip_codec_notify_request.hh" +#include "sip_codec_cancel_request.hh" +#include "sip_codec_info_request.hh" +#include "sip_codec_bye_request.hh" + +namespace LibSip__Interface { + class SipPort; //! Forward declaration of TITAN class +} + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; //! Forward declaration of TITAN class + class INVITE__Request; //! Forward declaration of TITAN class + class ACK__Request; //! Forward declaration of TITAN class + class SUSCRIBE__Request; //! Forward declaration of TITAN class + class MESSAGE__Request; //! Forward declaration of TITAN class + class OPTIONS__Request; //! Forward declaration of TITAN class + class CANCEL__Request; //! Forward declaration of TITAN class + class NOTIFY__Request; //! Forward declaration of TITAN class + class INFO__Request; //! Forward declaration of TITAN class + class BYE__Request; //! Forward declaration of TITAN class + class Resquest; //! Forward declaration of TITAN class + class Response; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class sip_layer + * \brief This class provides a factory class to create an sip_layer class instance + */ +class sip_layer : public t_layer { + params _params; + sip_codec_request _codec_request; + sip_codec_response _codec_response; + sip_codec_register_request _codec_register; + sip_codec_invite_request _codec_invite; + sip_codec_ack_request _codec_ack; + sip_codec_subscribe_request _codec_subscribe; + sip_codec_message_request _codec_message; + sip_codec_options_request _codec_options; + sip_codec_cancel_request _codec_cancel; + sip_codec_notify_request _codec_notify; + sip_codec_info_request _codec_info; + sip_codec_bye_request _codec_bye; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the sip_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + sip_layer() : t_layer(), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the sip_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + sip_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~sip_layer() { }; + + void sendMsg(const LibSip__SIPTypesAndValues::REGISTER__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::INVITE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::ACK__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::MESSAGE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::OPTIONS__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::BYE__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::CANCEL__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::NOTIFY__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::INFO__Request& p_sip_message, params& p_param); + + void sendMsg(const LibSip__SIPTypesAndValues::Response& p_sip_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class sip_layer + diff --git a/ccsrc/Protocols/Sip/sip_layer_factory.hh b/ccsrc/Protocols/Sip/sip_layer_factory.hh new file mode 100644 index 0000000..115dbd7 --- /dev/null +++ b/ccsrc/Protocols/Sip/sip_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file sip_layer_factory.hh + * \brief Header file for ITS Sip protocol layer factory. + * \author ETSI STF525 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "sip_layer.hh" + +/*! + * \class sip_layer_factory + * \brief This class provides a factory class to create an sip_layer class instance + */ +class sip_layer_factory : public layer_factory { + static sip_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + sip_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("SIP", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new sip_layer(p_type, p_param); + }; +}; // End of class sip_layer_factory + diff --git a/config.mk b/config.mk new file mode 100644 index 0000000..3c8bdf7 --- /dev/null +++ b/config.mk @@ -0,0 +1,6 @@ +TTCN3_COMPILER_OPTIONS := -b -d -e -f -g -l -L -M -O -R -U none +TTCN3_DIR := $(HOME)/frameworks/titan/titan.core/Install +#WPCAP_DLL_PATH := /cygdrive/c/windows/system32/npcap/wpcap.dll +#NPCAP_INCLUDE := /cygdrive/c/PROGRA~1/Npcap/sdk/include +OSIP_INCLUDE=$(HOME)/frameworks/osip/include +OSIP_LIB=$(HOME)/frameworks/osip/src/osipparser2/.libs diff --git a/docs/o2.cfg b/docs/o2.cfg new file mode 100644 index 0000000..e2b6f9a --- /dev/null +++ b/docs/o2.cfg @@ -0,0 +1,1768 @@ +# Doxyfile 1.8.1.2 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" "). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all +# text before the first occurrence of this tag. Doxygen uses libiconv (or the +# iconv built into libc) for the transcoding. See +# http://www.gnu.org/software/libiconv for the list of possible encodings. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or sequence of words) that should +# identify the project. Note that if you do not use Doxywizard you need +# to put quotes around the project name if it contains spaces. + +PROJECT_NAME = "ETSI TTF T009" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer +# a quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "This project provides the Test System for ETSI NG 112 Conformance testing" + +# With the PROJECT_LOGO tag one can specify an logo or icon that is +# included in the documentation. The maximum height of the logo should not +# exceed 55 pixels and the maximum width should not exceed 200 pixels. +# Doxygen will copy the logo to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./AtsImsIotDocs + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, +# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, +# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English +# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, +# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, +# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = YES + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful if your file system +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like regular Qt-style comments +# (thus requiring an explicit @brief command for a brief description.) + +JAVADOC_AUTOBRIEF = YES + +# If the QT_AUTOBRIEF tag is set to YES then Doxygen will +# interpret the first line (until the first dot) of a Qt-style +# comment as the brief description. If set to NO, the comments +# will behave just like regular Qt-style comments (thus requiring +# an explicit \brief command for a brief description.) + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = "license=@par License:\n" + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding +# "class=itcl::class" will allow you to use the command class in the +# itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for +# Java. For instance, namespaces will be presented as packages, qualified +# scopes will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources only. Doxygen will then generate output that is more tailored for +# Fortran. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for +# VHDL. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given extension. +# Doxygen has a built-in mapping, but you can override or extend it using this +# tag. The format is ext=language, where ext is a file extension, and language +# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, +# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make +# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C +# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions +# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all +# comments according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you +# can mix doxygen, HTML, and XML commands with Markdown formatting. +# Disable only in case of backward compatibilities issues. + +MARKDOWN_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also makes the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. +# Doxygen will parse them like normal C++ but will assume all classes use public +# instead of private inheritance when no explicit protection keyword is present. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate getter +# and setter methods for a property. Setting this option to YES (the default) +# will make doxygen replace the get and set methods by a property in the +# documentation. This will only work if the methods are indeed getting or +# setting a simple type. If this is not the case, or you want to show the +# methods anyway, you should set this option to NO. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and +# unions are shown inside the group in which they are included (e.g. using +# @ingroup) instead of on a separate page (for HTML and Man pages) or +# section (for LaTeX and RTF). + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and +# unions with only public data fields will be shown inline in the documentation +# of the scope in which they are defined (i.e. file, namespace, or group +# documentation), provided this scope is documented. If set to NO (the default), +# structs, classes, and unions are shown on a separate page (for HTML and Man +# pages) or section (for LaTeX and RTF). + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum +# is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically +# be useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. + +TYPEDEF_HIDES_STRUCT = NO + +# Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be +# set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given +# their name and scope. Since this can be an expensive process and often the +# same symbol appear multiple times in the code, doxygen keeps a cache of +# pre-resolved symbols. If the cache is too small doxygen will become slower. +# If the cache is too large, memory is wasted. The cache size is given by this +# formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0, +# corresponding to a cache size of 2^16 = 65536 symbols. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal scope will be included in the documentation. + +EXTRACT_PACKAGE = YES + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = YES + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base +# name of the file that contains the anonymous namespace. By default +# anonymous namespaces are hidden. + +EXTRACT_ANON_NSPACES = YES + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = YES + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen +# will list include files with double quotes in the documentation +# rather than with sharp brackets. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen +# will sort the (brief and detailed) documentation of class members so that +# constructors and destructors are listed first. If set to NO (the default) +# the constructors will appear in the respective orders defined by +# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. +# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO +# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to +# do proper type resolution of all parameters of a function it will reject a +# match between the prototype and the implementation of a member function even +# if there is only one candidate or it is obvious which candidate to choose +# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen +# will still accept a match between prototype and implementation in such cases. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or macro consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and macros in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. +# You can optionally specify a file name after the option, if omitted +# DoxygenLayout.xml will be used as the name of the layout file. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files +# containing the references data. This must be a list of .bib files. The +# .bib extension is automatically appended if omitted. Using this command +# requires the bibtex tool to be installed. See also +# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style +# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this +# feature you need bibtex and perl available in the search path. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# The WARN_NO_PARAMDOC option can be enabled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../ccsrc + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh +# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py +# *.f90 *.f *.for *.vhd *.vhdl + +FILE_PATTERNS = *.h *.hh *.hpp \ + *.c *.cc *.cpp \ + *.inl \ + *.s \ + *.md *.dox + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty or if +# non of the patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) +# and it is also possible to disable source filtering for a specific pattern +# using *.ext= (so without naming a filter). This option only has effect when +# FILTER_SOURCE_FILES is enabled. + +FILTER_SOURCE_PATTERNS = + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C, C++ and Fortran comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = TES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. Note that when using a custom header you are responsible +# for the proper inclusion of any scripts and style sheets that doxygen +# needs, which is dependent on the configuration options used. +# It is advised to generate a default header using "doxygen -w html +# header.html footer.html stylesheet.css YourConfigFile" and then modify +# that header. Note that the header is subject to change so you typically +# have to redo this when upgrading to a newer version of doxygen or when +# changing the value of configuration settings such as GENERATE_TREEVIEW! + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# style sheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that +# the files will be copied as-is; there are no commands or markers available. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. +# Doxygen will adjust the colors in the style sheet and background images +# according to this color. Hue is specified as an angle on a colorwheel, +# see http://en.wikipedia.org/wiki/Hue for more information. +# For instance the value 0 represents red, 60 is yellow, 120 is green, +# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. +# The allowed range is 0 to 359. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of +# the colors in the HTML output. For a value of 0 the output will use +# grayscales only. A value of 255 will produce the most vivid colors. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to +# the luminance component of the colors in the HTML output. Values below +# 100 gradually make the output lighter, whereas values above 100 make +# the output darker. The value divided by 100 is the actual gamma applied, +# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, +# and 100 does not change the gamma. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of +# entries shown in the various tree structured indices initially; the user +# can expand and collapse entries dynamically later on. Doxygen will expand +# the tree to such a level that at most the specified number of entries are +# visible (unless a fully collapsed tree already exceeds this amount). +# So setting the number of entries 1 will produce a full collapsed tree by +# default. 0 is a special value representing an infinite number of entries +# and will result in a full expanded tree by default. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated +# that can be used as input for Qt's qhelpgenerator to generate a +# Qt Compressed Help (.qch) of the generated HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to +# add. For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see +# +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's +# filter section matches. +# +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before +# the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) +# at top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. Since the tabs have the same information as the +# navigation tree you can set this option to NO if you already set +# GENERATE_TREEVIEW to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. +# Since the tree basically has the same information as the tab index you +# could consider to set DISABLE_INDEX to NO when enabling this option. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values +# (range [0,1..20]) that doxygen will group on one line in the generated HTML +# documentation. Note that a value of 0 will completely suppress the enum +# values from appearing in the overview section. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open +# links to external symbols imported via tag files in a separate window. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are +# not supported properly for IE 6.0, but are supported on all modern browsers. +# Note that when changing this option you need to delete any form_*.png files +# in the HTML output before the changes have effect. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax +# (see http://www.mathjax.org) which uses client side Javascript for the +# rendering instead of using prerendered bitmaps. Use this if you do not +# have LaTeX installed or if you want to formulas look prettier in the HTML +# output. When enabled you may also need to install MathJax separately and +# configure the path to it using the MATHJAX_RELPATH option. + +USE_MATHJAX = NO + +# When MathJax is enabled you need to specify the location relative to the +# HTML output directory using the MATHJAX_RELPATH option. The destination +# directory should contain the MathJax.js script. For instance, if the mathjax +# directory is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to +# the MathJax Content Delivery Network so you can quickly see the result without +# installing MathJax. +# However, it is strongly recommended to install a local +# copy of MathJax from http://www.mathjax.org before deployment. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension +# names that should be enabled during MathJax rendering. + +MATHJAX_EXTENSIONS = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box +# for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using +# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets +# (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a PHP enabled web server instead of at the web client +# using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server +# based approach is that it scales better to large projects and allows +# full text search. The disadvantages are that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = YES + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. +# Note that when enabling USE_PDFLATEX this option is only used for +# generating bitmaps for formulas in the HTML output, but not in the +# Makefile that is written to the output directory. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for +# the generated latex document. The footer should contain everything after +# the last chapter. If it is left blank doxygen will generate a +# standard footer. Notice: only use this tag if you know what you are doing! + +LATEX_FOOTER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +# If LATEX_SOURCE_CODE is set to YES then doxygen will include +# source code with syntax highlighting in the LaTeX output. +# Note that which sources are shown also depends on other settings +# such as SOURCE_BROWSER. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See +# http://en.wikipedia.org/wiki/BibTeX for more info. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load style sheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = YES + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. +# This is useful +# if you want to understand what is going on. +# On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# pointed to by INCLUDE_PATH will be searched when a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = __cplusplus + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition that +# overrules the definition found in the source code. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all references to function-like macros +# that are alone on a line, have an all uppercase name, and do not end with a +# semicolon, because these will confuse the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. For each +# tag file the location of the external documentation should be added. The +# format of a tag file without this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths +# or URLs. Note that each tag file must have a unique name (where the name does +# NOT include the path). If a tag file is not located in the directory in which +# doxygen is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option also works with HAVE_DOT disabled, but it is recommended to +# install and use dot, since it yields more powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is +# allowed to run in parallel. When set to 0 (the default) doxygen will +# base this on the number of processors available in the system. You can set it +# explicitly to a value larger than 0 to get control over the balance +# between CPU load and processing speed. + +DOT_NUM_THREADS = 0 + +# By default doxygen will use the Helvetica font for all dot files that +# doxygen generates. When you want a differently looking font you can specify +# the font name using DOT_FONTNAME. You need to make sure dot is able to find +# the font, which can be done by putting it in a standard location or by setting +# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the Helvetica font. +# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to +# set the path where dot can find it. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside +# the class node. If there are many fields or methods and many nodes the +# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS +# threshold limits the number of items for each type to make the size more +# managable. Set this to 0 for no limit. Note that the threshold may be +# exceeded by 50% before the limit is enforced. + +UML_LIMIT_NUM_FIELDS = 50 + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will generate a graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are svg, png, jpg, or gif. +# If left blank png will be used. If you choose svg you need to set +# HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible in IE 9+ (other browsers do not have this requirement). + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# Note that this requires a modern browser other than Internet Explorer. +# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you +# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files +# visible. Older versions of IE do not have SVG support. + +INTERACTIVE_SVG = NO + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the +# \mscfile command). + +MSCFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = YES + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace new file mode 100644 index 0000000..362d7c2 --- /dev/null +++ b/emergency-iop.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": "." + } + ] +} \ No newline at end of file diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..419a8ac --- /dev/null +++ b/install.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +#set -e +set -vx + +BASE_PATH=`pwd` + +git checkout devel +git submodule update --init --recursive --remote + +if [ ! -f ./titan-test-system-framework ] +then + git clone --recurse-submodules --single-branch --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + cd ./titan-test-system-framework +else + cd ./titan-test-system-framework + git checkout devel +fi +cd ./ttcn/LibHttp +ln -sf module_emtel.mk module.mk + +cd $BASE_PATH +ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ +ln -f ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn/ +ln -f ./ttcn/patch_lib_ims_titan/*.ttcn ./ttcn/LibIms/ttcn/ +ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ +ln -f ./ttcn/patch_lib_sip_titan/*.ttcn ./ttcn/LibSip/ttcn/ +ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/ +ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter +ln -f ./ttcn/patch_lib_msrp_titan/module.mk ./ttcn/LibMsrp +ln -f ./ttcn/patch_lib_iot_titan/module.mk ./ttcn/LibIot +ln -f ./ttcn/patch_lib_config_and_trigger_titan/module.mk ./ttcn/LibIms_ConfigAndTrigger +ln -f ./ttcn/patch_lib_upper_tester_titan/module.mk ./ttcn/LibUpperTester + +exit 0 diff --git a/plantuml/README.md b/plantuml/README.md new file mode 100644 index 0000000..e69de29 diff --git a/plantuml/__main__.py b/plantuml/__main__.py new file mode 100644 index 0000000..a3f73cf --- /dev/null +++ b/plantuml/__main__.py @@ -0,0 +1,180 @@ +# -*- Coding: utf-8 -*- + +from __future__ import division # Import floating-point division (1/4=0.25) instead of Euclidian division (1/4=0) + +import os +import glob +import sys +import logging + +from regex_list import * + +MSG_PATH = "" +IN_FILE_PATH = "" +OUT_FILE_PATH = "" +out_streams = object() +logger = object() +parser = object() +data_ctx = dict() + +def process_command_line_args(): + global IN_FILE_PATH + + print(f"Arguments count: {len(sys.argv)}") + for i, arg in enumerate(sys.argv): + print(f"Argument {i:>6}: {arg}") + IN_FILE_PATH = sys.argv[1] + # End of function process_command_line_args + +def process_line(line): + global MSG_PATH, out_streams, logger, parser, data_ctx + + match = parser.parse_line(line) + if match != None: + logger.info(f"Matching: {match}") + if 'testcase' in match: + logger.info('Got testcase') + out_streams.write('@startuml\n') + out_streams.write(f"title {match['testcase']}\n") + out_streams.write("/'Editor: https://plantuml-editor.kkeisuke.com/ '/\n") + out_streams.write("/'Syntax: http://plantuml.com/fr/sequence-diagram '/\n") + out_streams.write('!include etsi-style.iuml\n') + out_streams.write('!pragma teoz true\n') + out_streams.write('autonumber\n') + out_streams.write('participant system\n') + out_streams.write('box "TTCN-3 Environment" #LightBlue\n') + elif 'operation' in match: + logger.info('Got operation') + if match['operation'] == 'mapped': + out_streams.write(f"participant \"{match['comp']}:{match['protocol_port']}\"\n") + data_ctx['protocol_port'].append(f"{match['comp']}:{match['protocol_port']}") + else: + if match['protocol_port'] != 'syncPort': + out_streams.write(f"\"{match['comp']}:{match['protocol_port']}\" --> system: unmap\n") + elif 'request' in match: + logger.info('Got request') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + for p in data_ctx['protocol_port']: + out_streams.write(f"\"{p}\" --> system: map\n") + out_streams.write(f"\"{match['comp']}:{match['port']}\" -[#green]> system: @{match['module']}.{match['message']}\n") + s = match['request'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} request := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'response' in match: + logger.info('Got response') + if data_ctx['box_ended'] == False: + out_streams.write('endbox\n') + data_ctx['box_ended'] = True + out_streams.write(f"system -[#green]> \"{match['comp']}:{match['port']}\": @{match['module']}.{match['message']}\n") + s = match['response'].replace(",", ",\\n").replace("\"", "").strip() + if len(s) > 128: + n = match['hours'] + "_" + match['minutes'] + "_" + match['seconds'] + "_" + match['milliseconds'] + ".txt" + n = os.path.join(MSG_PATH, n) + with open(n, "w") as msg: + msg.write(s) + s = f'[[file://{n} response := ...]]' #{Click to read the message} + out_streams.write(f"note right: {s}\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'timer_name' in match: + logger.info('Got timer') + if match['timer_name'] == 'tc_sync': + pass + else: + for p in data_ctx['protocol_port']: + if p.startswith(match['comp']): + out_streams.write(f"\"{p}\" -> \"{p}\": {match['start_stop']}, duration: {match['duration']}\n") + break + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + elif 'verdict' in match: + logger.info('Got verdict') + if 'ptcid' in match and match['ptcid'] != None: + s = match['ptcid'].split('(') + s = s[1].split(')') + for p in data_ctx['protocol_port']: + if p.startswith(s[0]): + if match['verdict'] == 'fail': + out_streams.write(f"hnote over \"{p}\" #red: fail\n") + elif match['verdict'] == 'pass': + out_streams.write(f"hnote over \"{p}\" #green: pass\n") + elif match['verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote over \"{p}\" #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + break + elif 'final_verdict' in match: + logger.info('Got verdict') + if match['final_verdict'] == 'fail': + out_streams.write(f"hnote across #red: fail\n") + elif match['final_verdict'] == 'pass': + out_streams.write(f"hnote across #green: pass\n") + elif match['final_verdict'] == 'inconc': + out_streams.write(f"hnote across #yellow: inconc\n") + else: + out_streams.write(f"hnote across #gray: error\n") + out_streams.write(f"note left: {match['hours']}:{match['minutes']}:{match['seconds']}.{match['milliseconds']}\n") + out_streams.write('@enduml\n') + else: + logger.info('Got unsupported item') + # End of 'if' statement + out_streams.flush() + # End of function process_line + +def main(): + global MSG_PATH, OUT_FILE_PATH, out_streams, logger, parser, data_ctx + + process_command_line_args() + + # Initialize the logger + logger = logging.getLogger(__name__) + logger.setLevel(logging.DEBUG) + l = logging.StreamHandler() + l.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) + logger.addHandler(l) + + # Prepare outputs + OUT_FILE_PATH = sys.argv[2] + CURRENT_PATH = os.getcwd() + MSG_PATH = os.path.join(CURRENT_PATH, "msgs") + logger.info(f'CURRENT_PATH:{CURRENT_PATH} - MSG_PATH{MSG_PATH}') + if os.path.exists(MSG_PATH): + files = glob.glob(os.path.join(MSG_PATH, '*')) + for f in files: + os.remove(f) + else: + os.mkdir(MSG_PATH) + + # Setup the regex + parser = regex_list(logger) + parser.reset_state() + + data_ctx = dict() + data_ctx['protocol_port'] = [] + data_ctx['box_ended'] = False + + print(f"IN_FILE_PATH= {IN_FILE_PATH}") + with open(IN_FILE_PATH, "r") as in_stream: + with open(OUT_FILE_PATH, "w") as out_streams: + line = in_stream.readline() + while line != '': + process_line(line) + line = in_stream.readline() + # End of 'for' statement + # End of 'with' statement + # End of 'with' statement + + os.system('java -DPLANTUML_LIMIT_SIZE=8192 -jar ./plantuml.jar -svg {}'.format(OUT_FILE_PATH)) +# End of main function + +if __name__ == "__main__": + main() + +# End of file diff --git a/plantuml/etsi-style.iuml b/plantuml/etsi-style.iuml new file mode 100644 index 0000000..e26d257 --- /dev/null +++ b/plantuml/etsi-style.iuml @@ -0,0 +1,46 @@ +hide footbox +autonumber +skinparam { + dpi 300 + shadowing false + 'handwritten true + defaultFontSize 8 +} + +skinparam note { + FontSize 8 + FontStyle bold + FontColor White + borderColor Black + backgroundColor DimGray +} + +skinparam participant { + FontSize 8 + FontStyle bold + FontColor White + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam actor { + FontSize 8 + FontStyle bold + FontColor Navy + borderColor Navy + backgroundColor RoyalBlue +} + +skinparam sequence { + ArrowFontColor Black + ArrowColor SlateGray + LifeLineBorderColor Navy + LifeLineBackgroundColor DimGray +} + +skinparam ParticipantPadding 5 +skinparam BoxPadding 5 + +!define sendrcvRTP(a,b,c) a <-[#LimeGreen]> b : c +!define sendRTP(a,b,c) a -[#LimeGreen]> b : c +!define setParticipant(a,b) participant a as b diff --git a/plantuml/plantuml.jar b/plantuml/plantuml.jar new file mode 100644 index 0000000000000000000000000000000000000000..506b8c4b818bcb6f8ac254e898da44470cbad888 GIT binary patch literal 8383820 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 QQ^V=@33t&{M`kt1%fBKAM>k~Eo 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%0A{w~B^Rh(q)w2H)S&xfV%H9`*=IQ%uf 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%0A^mseySrci?N`B#eE-nb@QS>!a&D7F$5 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
-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


u`vy082)9McS>fv{&B256^^J*L!@wNh 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%0A`wKbEFsdA8@;_vplZkJ7(p5B@Vs64v^<|D|D; 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%0DnFJ-p5s`G$pI8&zgEF+94MF9 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%0D^}R-=uEneRVa`j zzMnjU@rCeMy?=`nAp|isBQE2h$m|H-wL8=`BQ{%9?qR0ojW+EneDk{7fmPa=qq1_F zbhOowEY7^=#hf|Xf9^UpPa$LS_|k7s*`0H!2oP<;ojSybFg(GWs%7Qq9)3YI6&Czb zCDdUNCDt?YO&WB-h4LD)iIiDC{@v#v5>E%@x|_f?O!zs5P)kXRG3tyr&k?YqeGxX? z?I!9Y!NC`V>3trBe?I39YHTQhXbp`5`lpCe$lt(4F+Z^Q#Hp)mmhq`tTBQWu>jSE3 zZ<7cr8d6JtOuX=ie1i$WUPl}ayq8oyu+>^{@y)4g&6+=Lamw1_5IeCkj~s;QNB{l^ zIj)#AQM?V*sRU1*E2-M#79Io&@o3|9l7n?S=2dP0el^^{EDsqZ{I;<(^ebyoCx4Rh zCAO8mG#%ok_pF~ZVgLba^v#L9)d5fHIFV)E+uY)xYOBX=<$%@W&vrubf|k{;kJINT zC4w)bj^uR;AEB#xx@trW%S0^S$9d$P-3U3#Y@~V9M_YwPIM-;s*WnV5-00agpg!w> z)x(^hv=4^(Ao>_W*ooe4S#C}>F^`d5byF`1i2bt%p4~ELupM`JOb(^2Si$zSC5ZLa z%oUEyiLi=u zTo=Dju-rYD$wCDeJrIv2Y`OR&k5G65=YFObX=wmWc1reL-d)OwPx zUV#RJB;6+uE3Lx?1mrY_Cm1|toDuS=_E>a;&IrYaa@WA>-t-P2Uw3JQAVChIXz^*B zVCoc776s>1E>SmVa9)keozxxL#%V(eE(fcV09@PrU;F7egu90bajbic$XtLm&;5D^ z-Z3c&NdCc;WOfS^o6`}?s?8^=6&FsFXiJZbAP!!yKk-(|?`NW*&vt$oU=D`czCV7|ElFajd`q zd#pL{UV_u*Q{faS5E@G8ei!EyAy%ZEQ%~})!o}(wjvR-pdTpd+$P<_wotucVPFH+`ia54yq^#DV80l5Pq7tIt@3R~C% z&b3m+rU7v5_Tg;K@lv;y;{}5YOrSkazn`bsLT-<&85MSwBsT|*7>tTIMCDubxY%9e z-ljraP>p*61N<6~^8qQsE*$>`S({)gBG)Y!{nNzMVX~ufxnA(^I}T^60yY}cFh;B) z`-xC6rTJ%capZaVNCQzzohH9~8z^$`Q|Ua{l1t~dtLWa|5vx4Dr_8+$e?n`7UkubD zY=2o(`0T$R^335*xW&NN@ec)4D`ANF#isInvlRCo~t^9w=oyHdR*J+h!}-#GP=PelozuTBI`M1`-wz@$d7_X0+6n=yeb5Z}ESKGD%yP=> zv{RJw@mj-guBPJ`{Ve^o6ac4gWqk(H-@rv>MY_?V8u$Dg2~S-2lEml)2#ECnQ-)5) z`LNh4o^iBs<*;C5*B#c|eMBRGRU2!POM&ZaGBLZzz2K7o80j?tpR`AK=b!_Fn=5&$ zEjdk;=s+0$vh_#n2dzH?C@|kTwQqbUxWoVO>2K(FioLO}W(IclXwW#g@49N81Ll{B zj2V!+9qC{3!xVK9ToXUkQ%Gd9j4IB1>;)rnU!AB}PFj0&d2W#YBA6RF>@2^HYb)(H z`j{J?O(JB9EG2Fcl0|cQ<(9?J;p%(mG1yhG=-um8_E;`qzQzyTO`)COcu2bC__9SAN>+glm(mD!v0x=Kw_C6EaUcvls* z0HTi)R1`_E$V$*lNQlRpf~fR#9ebY*q3)>@@=j(zD&$U7{m98fiqDINPr2YW!ZKDf zwNaE;>1dqSe_%iD&6h)=EKD_bhR(I3B}ZdX_4p){BB4wt_NqtNELh?GCL$NSFin9B zR@5QyM1|<}RkRmmeun}A?N=Z_Q@J2qt4X6C{5VT=p$!}-16sHjm89yj4k75$I=Yn$TD+_PwL z={QK(JbhNF+YJdh%S!VDt{bB>T<%^WdUqG8PQpn8Jq24$*~zPu1FqLjx%fa8shV zTG^V3CKZrr;Eo-k<0mQ)n?^p`N)j5d>dVM&h6*;d+@}W>ZseioTpNv#6VB=2J{A!N zYZP%jT*{XRt1B8Cb=(I9T#vKLW@daO;kBnTz*S}9QLx_edUN{jKOrd)sOTRHq&7b5 zxsAb5{T2AuyC|Jt&Fw%v1P$4go4wmD*#2It!_sJt(g(gUBYslLSlAr@Dh5nZ2Qy4y zh)NuBRWfIn3^;hYVsMyp!DHcy}^X7WcfX z>$6KaRaAD!7Ii2mwM%2yF0oOVu`O_uEw{T-xOK z>2vzEb4I!KB)e<(2x<=X`9}P#kBIqZi`It*U-8c$aNxb;#QjD{UlX&nt(e1pM=aQO z*7x7%50iNf+#gG^gp^HD=CT)gja>9KnRDc_yxj(IMaLXb>a$k8 zb^Nxa|HI}&RhNb9HOM=$aRj~1#Bf{dmG(4U=4<#lFnT1x&!qFbso+$mT-)NhLcg9; zj&DSGS-M5%P5^0*I89`1(VSAEH;|T0ORuD@@PQl44bBt!K{QsCCccC->ACss8B5ZAXk36?=t#y`bg;tR%di zh1iTJby@WhBs_-+{D;+f%3BcstS>LZXD1b&^?DQuxD>3*#@||KDG4Bwlr3GhlXG8H z={jODaB8}G)tquVWQ~}8UEXsU@keWm(Yl2<{Z0B2n7f1X;k$!9V1tV@et*y`36mrAz z(yG`wYGHMbT2eQ(Sb;XAO!=v|btA^O4@Rhy98S8~(>rC{Q)>x-@x3WL3o~dQ#1H~X zc&0#56l82~N>PST88JR#kD6A!eGgQzntSIAnawv4X5zZKIZff@Kyr5H$M-q;3gOU> ztYGDmy+lrm(GD#Pw?Elw`|q^&q?l9JecknA-Q}Phvks`3$C^zl6I6}XXQ!LBiYj($ z%n7DsP8D_r5)@H-M>>r&UB6p9BWRe77}jf>(dRx@SE>C{Tm%=Uo!nw=nC1CCblR6y ze$N2Locv;OZBe7PEI)9zLjXiH4djiv!nxc!v|BOvkE-^S6bTVtri&Cw4Q0QBTwKVP zSC%79S+Qk~J4$jJfx6jH9S&MeH!-Fm;PP(SY7F!2`0s5%ZLr{|+f*q?&ISzC7?t!g z3hk%VJggUkL6?%2q@62YU0NX=YapDfAR5$z*Yb&Z3kqx(81(^;+e?)E%8_wu(-t_B z2CT7lY=MNPB8sSJ3!-9dQf8TjA*I&w%+fZQDHkUagP^X5l)~K0tzV5!wtg9W>_ri>($A5jE)GMPYh(66d{rMg(>5zx zRcJlls#FI*3m$`tV;UPbdmRm-p2nBW8qtB|M8RWW} zNszC8@Ng?@p4HS+Sd`g0|B&sOm-ym~vB6N9Hvf6VDCd$<@G{kMPeMmqatmDS*078O zkqQa;)tE1Wa~%f|=NND&@yF>E4N@Pmf}JrR7;>wiAAC;Yfec4t?3cH0R_s_3>!eOTqL$HDoHai42u# zf|Nyy;NBzjd^%SR)DBrc0hw;ni@%dL5_EhsMy?Yq+}G{04| z5YJH$a3|_>SBkij1)tQX2h^h)bymrvwnoKfMQ%xRivIke{l|bT_x^mfrNtdhgnM(P zwyHv&H)Y@I`cJ}s#@SF)s%E_Ou~)4%DPI+BU2df8DoU*c*`NZOA)~ArV*RWvB7}ar zD8-xuBX=w_{;Xh5pJa|?i~K;TV(A&H`@-pk(XKA6jVpPSoBQb|bNp4Nm77R(u`Y+s z)UAbL_FJOiRhU@ku(X^bxr=tjiSwm!mS7t)C@cpgENX+J!=;FB8%Ej)9Kwu6)}=PD z!6*@|zT?#+escr8CsTbzY3cd z=JnURL*BaQf-KJ^h|19MdXGt;X+!s20D&lgqQdXF!SDw=238{dy}I`# z#2}Y}hI{ZF1w_3*AiXg~y&*zTN|GQPtZIse@ByIR`~$5y|98?M2*yZ>CydvTX<83XaecI)T{t-!b6 zu3LCYSjOnK|Gd+4X1zN=FT^VX`LlZ*m_1F{*aZn?$zAVi8BSKQB`Ui`C_b8;-o*=dBk|DO0BHq60dFXQ8Ww{`QA08SpyC3t{>t`EyFGz_eX#)J@j(LE>G~@O!o7?bY{>igCCl%#$ItnbFZNSV zHQ>UK(!8vFk)v53@e@+ytA19XjpH6BR{uxk3O5dQOu0}@=ug;g(PYY#jXl{fHK_JF znLFBpDq3uY4qp{XX7ybiSZ7}iGZtmoot07)0oL0u=XXt$mnHS8@~!xpTL8IygJBb9 zIj&Z^YxT#_EZ4H>+B5~T(U+V7=fPooRgQ?WE@0?4o({7-Z11Y#)O@Bi_wtDP8|%jL zHhJsPB1?W~>lZDCI&Zlc%+NODr(XY}YMBcR+a!~!Ku!G*60Qym(I(jka`mn1^i}`3 z2bwFU;SW*U(Q0Of(^kJdId_v()46tCPm0)Tjg7@|)T{Oc`O~xC+&(z)>LpPY>oBon z&sM&veasvls=-!{idT{!#M8o9nO7v77*X_3D-*V&;YZQa~N(b44KvHm!&nC1$LQM zb0DO2?BXrt#UIf{!Lq85S?%f>%r)$X+%v8Vx1~|?9O&FDu1h841#YETII<-;athsM z-lsB2i+OT{ekQN4LIGSk86u$sx7W574Z#6Euy>Tie3he6PFNB&$H(s+k-T!HvXJEw z_0|zIbtRnMQS|(?;C|;6AkV`t1-GFu8h;I)Wsp!K7s z%I+8z?ad5y&D-W7M+XLAnKa^p4MbkGnp3E=T3Z=I)L$)ORc*~EdjIgwOLs8fC{@$= z{-J25cu;jDmolb=WPd9gaz*08xA`brDyer`aOYU{tGMD)^LFD)R*91>MoZzd<6PG+ z)GxtPYKdTuORAJr^$?Q?;1S}qxUd9lyqzU(6rYm?!Gma zZK}ob@U-*g`tZFLz~K_8oUp|2j$Gj8)_O42k_TlmOPSY!od}Mcu#;Lzg0FSx+Kl=j zez5ykms!-m2V(hIk3Gi7@@w9l5p@cwG^3!JaZuAN%%vH-KgFC(izRYHHgZ%p^LNFO z7)$2Lv?f2t{_}+F0iii$4|~#czw8kO%Wz!h;IAaJ3WLgt_C&w?=3L?#u-y43?^s5_ z&31jBXoy<%JnZ_f$$8yk6*q9Du-i!X3adAlUxXSYQ&0U3zTovdOxJV$y1lJ*&gdQw zg_A8Tx*ztqdY5I@Lx@Q|>NFXvveocu@q`9(IvB3JJ3e1>)i(ptgwVSnunR)U&NvGj z6a!2pqMVCSiRSRANhB%AF1UJCG^7>g@QAw>J+G~4?;((!mzdN|q)aS1?Q5Y4<{Bdz zTj{p$7MM+tKIzy~j7{lw<}5qkIS=mK$RqPx%OfM~dIWqV5O z7P_vA2^N$l!Y$P;e>pd`oyX*WSw5Gpl@4?MSS>*Xl|j~~Iq^pl1jeY2xxF;)&n0uO z(?oBe!4J!rhM)#-JqM%`3W^iC?$F>tbZ?#OpS{}H+3XJEy4~kze9-G-NOXy{+a3=> zf!#h5HPaz9g|GFV7lshT!auX5H4d4+UKm!Roa$Nib(=sC^P z%NMHw#4<)Aii{Fynl&s`7AV!%h8Z;zB*-;nR+>fgL`rSoaxx!@!b;kNb!e~>$+Cg> z12`s<8BY8wVuXUjJL=K0$g5Nz3JeU6UxE_^V-qqEa=Y^8Kg6(8(DJI{z(7EZ-;`YH z|3*jr=ch}WSy@=R{(rQ@m{>844M8};USs!f?@B8TbMtlF(%VI;?BhQb6S9yeIWYTF z_AsEvey97#9E3kXtA9CZq3zal8cOvo{4^6@lq)?>vBwkZtZPJ1ftse05KBPiFjbPWh43B~^p_dkDVe^ZE`r-Jhg;d1<_hL;ehS!-$K{)UsYiO>dvm{~o8+m=5^@RH zzv#(}PRa)2pj0mem1N2A}Qi*}sdG@N1UwC$)FBr;D1G;JyP&=j*4&ZIK95rRuE%j};$;QmL8 z=2kVt01!X0RTCi_I^Jh!m~@LCO`Dz6=3*%qY?Ox#(zx@`zIQ5 zMxOr)NVGhtGLRA4r+(`t#2S2)T}*>#4b#_O>sz2Lstq>JcULzTZ)iibY49;&JAP)R zw5V5I)`P-?_-n~i7~D((6wAPP7Nd4?PO-5w?Gye^hr8T~kOla`! z8?9|fKuqY+IKG10dVK`?YcpqGbv44mfufz8~6qT#x#sePdRs-&}nF&%S;s`)X(PYHN zL{yNS<7H0XE!qVVcm`m#ptXK9zsHi9y1Nk;eAJG1aQ|Y10Ach_eAn`*18Rd+U=`%@ zWcaNFLO)EL_AvH5#gQl+56%ZLLjp%v6N0x`xL4kIL33x{8MY90YbN^+!mL~e^ht`! zxn!DIPnSUm=~!^xsWVZ)yKfI&Mge%oFS~p?J~+qYB+pK$9Lx74Hw5%3aAXLA*^Kge zC>ZCmw57yE0<6tIlS3S~$goIoK7jun$BmmG@BhHj?;A(j|7TTwT3Ca>q=g& z6CjB8sqo(EQ`fZtdqs~KempiOc_~xYC+}$j-M#^`isH=;wh}Rwu(R#!`H9m<9)@d_ zUkA+nY6rK9)yyR77oqVXDozRODWx~YJ8uv|KwM-9cfMZ317r(IkA&bUR{QKnIywp!mXkuyi@imdrK zRJCdU2h~EN4pF*GIKnjH-rMW3raEPzFJ*_MSd03f!owifkAr5Naa&vl$|}+Xn8)B@ z=?i_AtX-lNI9PV0qpw0_^DhM6tkja55-2Fr011@)j+aTSa0E~=)a-^_@Sh_s!4RJu zAex!5+s_ z)l%6~-4dD8B=6ghb8T0DmI4D3ZtRh8Z`$cFT09Sn@SNM>hV zq}S3=#VBry^sW8oaYU{U3UN2Pm<}^mCofj5zTT0AMg<)3$oHg{(o{c! zUITK`G`Rw*Y*lg{Wcg^(XY%&bwzZ^x-uyo3GsqE~fB&izNx zTmP?q-rovES2Gh=Gt>V$O;tMags{SPGIK{7>^3+W>~=V)O?dqve8xcbOraZEe%ex1 z*REEGe>~s6el%(H;RLs6-Y*(2*j!qQ6K3&e`DXzKw){v@NNI(RKFx3mdcG1S0+*9e z_VTLEzBBb4d1$m=@Gkz-wdP`<9{D;u=t-5KjX8xkKDn^qU4Zxc*Oyp!ti*VEI&Grk zV!=u*kzznt>h%Y?UQ0Dl^*M zi~|GlB_E4uVoY2Q3`(M-%KxoG0-9PI{naHH%{^zBUQDo92FyAKq(ju zLVT{Y)4Bw{pvqkhJ914Vyi%4MIBQi$JNlavh*b1O`tLaQt45Vded9>|ziNq8tn3{B zr>BdS19b*dLh}2L!n{N?*`PL=%Xqbs z>|tnU=XmKwA&e*|oI5_iC?Y(6YO@{YNmcor%Hm!!Bn=HSry9h2fa?7TkU#m-b0_PL zZ;5vk-nf<)e(d`L&YkC-ZF3%0NC{K;mXJZ^Zi@0iM6F?Jt&qnc&w4J|m=8suDuqPD z??T_+r(KyDRTr>({-Lo++Bp;x!mu{h(LnS2SG(gS1UlQY;zLc>Oa~Hravh-)&xt(P z6wY*22(xA6o4ClWqEh8E@;m_f-vJp;tCp4c288w-kpHTC`)615uSe+&V0}{&?dPt; zu$0}#vX))eX#drey?G)pw*Har3s!$8niMAJa0pX7vq|)@kE}S<56& zzfIT&1-I1-cn2jXgK@kF@MqT;|pmKPp7L3jzl z#b~&CSFO%KY*vOfq4i-7v%11vV<`f945N)lW{e18rGhoqbx3`C>H1)>jh0S|)+*A) z7AC`0hvsy*kvykciOoYR5-*l>nwv@dOf=Us?M2w#ttJm4q{iwaVMC~1K!97@)CRSE zmFVj8Q(91m&#XzSp)v6)lni795JXUT91>6(6I0+fU*Gh)whfCR+~EiqHk`w!VKsc# z{|JE}=IB|1Sy)o;z0?j`%-`axUAP)L zZbI_VJqWWE?dlHDhayfmZLv@@ohoI^JIEJFT58ZDX?v=ARvaWLJ1|9}7UB$MDU2Pc zM^4DIWS8oE_Aom1C6z5L87+5_-tmWQEe}d4r8VxPYu+k|RGSYy>p}U#Z851wf zC4X6E&B3x4T5Xb*YiFfxF=93>a`1&60r4|Kp&?$qM7Ca7?gRd>n)7ktI|@Iq8yoY~ zqM@@sC93NmXD?U&R+muIsiCL7cc|1aqigVLmTy$bwA7>xs_T{EI!!p^O+eBA5QkmL zw==YbE{O9F0sg~}fxy_j3*TsTNh6KB+&kcHjsrQJ4sW}7Ozz8mzKId`(@ZnJ+ekeB z22LDi_9tzK(ug@DS8L$x#!ceFx@~V!O$-0V^^D6=heJc&)GfsH_T~3DoX!{4GAWtO zF`7C03}-`t8g|GuRs4u&$5+~XOftoybNuxmZIDD+i>oXQ5YPkq|7$9-vamODb#pfR zmnbH*=wTsIU^r32%=ozT2=cj9OQ7RtCl3#gr!6`|ngVEB`f<jbVW&gCIXh~Wl5kpBFB_id#hYZyQ&AW$GVT9F4*^uKb-OJor_$m`f{3mav+cA zy_CP!yqxr7+VXQ2JrVhz-%XmSllR4gPR@U>IH4Wkg|!fej=PRbs>`Z{1?!br)5e$$ zcO^>WfLC4R)&5EUo_Vh!uRv=hx<)KjY#yhwR`{;v6cCLj{gFqRmG%FOcI(rYPAm}5 zC54o-&pxR_8kJ<^5mlc-<4LVD{&{hxtdJeIlnsW?f&|e?rVu?i{jv$JT8zd-{R`To zs*XpNKvxz#mZGkS(IZW5X0zzxSCA+fOH+r}hT_~nNi*vK%`+Wnv)5UVb*5cJz1P2N z?9sD2{hPRKlIa@aCYzk7dafNqVO+Afi$pQ7-duefC%&i3+*9QCf_1kbdB4<5qD>fG zvuGi1bvWyc&ld zaZSC3OD{ZwBCiK+blp^rsuy%BcVbVbPv|XwI{~i&1VlXJvv{N*DN+m`=-g3u3|IRtx);Ydb3k}M_mc_ zxk&b9=i)bMhc7DpU1zaX+NW{6ZPpu%ZSu{4I&an+gzY8TYiv(K!h@TFz_^=+K$~_y9_Y;b#AGQ0!YQgIX6A+u%2Ztx{KuDPulaEBp~Ip zjpsS&^TWz&rF0H&LIW9YQv&O5V*(v+bJTZzKrx*n>Ro`h*;XK53n>lN1EoOu&7o;J ze4FnD>f82BK1S)Wo|U3rQ2p5%3tAqKk(@6UnE3A@{QK)5gg4o5aM$5B`>%1{!vo70 z?G54fLuAa$(imF2(A&@mBS^da>ejp}Jl(Dj5(?F*<&Jo!_tZX%4)F4L6B)R|rx$J) zVn|=Q)hmMQrRsb*^;*6TK2>~b5I_U=7zU)K&(zwraSutcsCq_*mIRLT_=`jW&k#{| zv`jY(Ab7M90&t%pzZ#ch;&iB(|hAed6>Cbim&BDC=Ngv|}Sm1E?o$Q5MO6Cc2rH`Bz54Wyp3 z{191F&oN1o)i@ts%EtV;)rJ;#y!t7MpwNU!&H*R^bdELw&DPhzNxg z+~W^4*ixL`s}88MBwd^OWp++CW|S=YL~`Yjxqk0kggvI9b748V&&IdB!A3=7R1n9lN=v#YGjIkLDM9{fQ64s!P3dp11c|j5z}mswqTN}Z{g1@Ipg9M z$Tn-da?!6eae-*Q_UVQ2}iHm zu}|*(Qog<=KMhefL8H`FDXN$7>ekk|jJst(tqWg>9A1KhD9S@hTEon*bm@wX@k86m zaw%4YbLk=zHEB|^6~Ku<36>AhmF4dVYyox;2$&3Vz>>~nK}GNVrIu~3`kp>g7V(#- zaSaoyZK3#?^*XtkE`Y&~g)XENKS7cwg!Nb4DE8u{C9K8##2VZl-X(WhLiVWU3`0^I ze`*_Bf`@6wZ@|Ps&EQL*x7Sik6gt$J^y1NlzcDdaWUn zhV_cto_=5#SpOlz_EGbrgG}4 zT7#TH-?0>I)x`i!vTl4jPTevHwYOa|*6XfAX?-l96C-cl2=Z+usXZ)R*E}l+DKbk-}^1CBCmGdQYB7^VhJRo{CB9tQD*7@@6 zHZc6wQ}r%RrGmYxHIiZiYSA&m6f#b7!GOS^9jYpe*1azPq&8k(*Xoy)K&>&SH}7b3 z&mdFt(LML|6jJv<81^Hq>E9ScbnIL4Ck?*-6Rg{~i8CSy)J%8X#4M9>pxM1UJgQuZ zJ#ZY)2zAwH&rssu(y=R8qvz4b@Z@);PL8EiW^_)vDy&X1FMF0TGIfLTWFDhwhgW!L zzc@W`9RtYF9c$3tl17wS6EEnZBs0$weYmk{m*Ink@Eq}j4TPqt1jO?Nk`%|0eDakNV)eA?^aV|Ord#65z zY?kLvJF1ULg|R`58rEEQ2lG`d>vNWa41%GjNAO%`gc5jJ;CN*jd$FZlCwNxs9DkxF zOb3&(UM`3pbeIO#Jlm3*b{%;r4$_~kP76LN8WI+*&59zN+zU1E4dEfc?m|s+N>hwR z_eMeAWMD-RFpvDQQW+H_?JZ*48M|gCO$gA+ct79AC4M=Ldm?2^H0b>LSwe=ybo!Mi zARUCp@q?k})*AR#JSkGvKeNvdbmb*vWT(3`8Xu8|Wn*B^yvcWR_TR_CXLG5Jg72-| z_V@eW$HH$9L0hx$SnL05hw@DmLKtAg3eHj1HVljbt?v_t7^y8+`4N^&q$;3P$*Y)2 z;=~4l&{u#&C8Kp?sMYu|UiY*Q{pY7wEbnNv5gpay6MZ~YH%m*SvPuap6WT^4I!Av? zed0?0XyvL}D#*3&HEt&-Lxh0|zITz=KJRT2$^xtkBkkFBxhi*IDyfG6BQ|>gS1+de zejuQugxnMk4jQ5%*(k_WGF@CD-tS-9?|nBQB-|9(YdV`cx(w2=St zO-V^u3i@6phxJyJnr&@u9U^#mq*blCo|yCG*xK&Kv=8GG{PYk`+(Sr;#uGUH+WGDC ziKA&&DanHm{?`>_PeX&m{rFTWWSiH|3j&PB1k;|Ypxa;CJ{B827To?|NZE3YM zl{~uA+cwXAqO?-hQ~kA(T5^k%yxx6%ok_l3Cq6f`hjt9lQAT>sbAjp1RaH;rQ>>#j zCI7J4M#fL;Rh}e3dD#G}L@#2}KQRi^It7s@V$QK(FI~GK6u#rfesOqo%~l`Np$fIG zhm04*9o!Prlq5cQq+2wz`Y0!AP%fFNl8lNz@1_2)i-*D3g%XjT>sL2fW^ze#y?674 z;n^g5{|cT~+HxNA=)Z`T*kII1tbWrz=5``$1%?OL5nxHZZm-BIo2iRR%GUPQuOs6D za2v!YFv*xyCRHlbP^MabPDrv}5}Cix)9^^$V&+VOdI%TvRoey`gycjH8i4)}W9JYg zTGVXm;w{^@ZQHhO+qP}{mTlg$ZQHil^>_D+=$^cIC-Mx=c<(`;%(cEXx0pf?5U##0 ziWBImAH)ol?iuO+)$r=S_;o19N1DXp6gC-=nI1J{Ez>0y31s7(SRAE5y3Zv8952LQ zAxLxw$_(gYTyr?)NXa3-pxxL!3u$Z){2o9U$So26^#80C{&N#V)^J^JxPG}I*#H3K z|Lr{bziz_+87?AEEeVJ+K!@&SKYWL^P+b2$HA0LaE2jX|z0lVF6K)U85=1k6ZgQqA zsybc{LKp;V2+jOQszu6*WP*f=$nB$r+ZOo>3QC0;s3O&}SXYspig$vgr-)mHVvmu$ zb98?exy$Mae&RxbiEM$RDKQ@QQ|@|$H^7rBq$x6|C+V{?jJ7rO74W3iXw|1ls=}9g zGaIKvJ6MUdY#*$}TpzFhJZ~KM~%z-oUfh{Hx1 z4#^|S++Z5-IIrTJnJxbEPyTOhb+^>6CZ!yr*DFAn01Hd#NpU!yiDU4MbEXiNGi*Eh09H;3%jqB0Y%!&*U2vBE%5MD3%GOHW)IqWQt^#&iYF? z-L5G%Ay)g?9OQ0bUU7##Pj3>y;hmli<~VXL49(PZyGZ@aZE0N_*vJ*7@pxkSZ1U?B zGOkxo>_<(FG^ug&`2MLE ztZK4PQKwmc?N~-9UXFO`whgyN&Kfig+cdOhX%T5DtqZ_0EZylO>`YmTzLYS)%2?H6 zwi4H>m%Bs*8x(L5$3_(!RB({SMk5=PaFEPKH5=4$kj+Lz8x(Pn&_-1oRB@2eMq?Y4 zagf?XbsN-iklRFq8x*<|=SGzqRJxPqMxz^)x|8fewL`S?Fhh15x)}nyQ}9O2BhsV( zpzIduF1=l2dPSfR-@^*}sEbKNVR@O-*yK9bAq1Xs(%}p=xnqJ*! zpYEQaH^x5WDKCsIaG2_x8s=S6c4%B)pCL5nu5$6$I-9N<@#D$ui1WQq=tN&b0t*`I z>%#{P!80r-4h-5e^d}Mxkuz}q6OOK*iA6b}j!o;NAq|g6kdSUEq?qF|wG`Lzf=ahV zc}AvRpfts3Eb^MdW>A}KJoGjSsGn6QMvWrL4NOO=Q>I3m7=o-Z>f2eS3&)&RwbgCyJbshgg=^V7pTEtZ#kL30m;;q-ih6fuW zP@tCNE@r6Amrjm?lq)Vv{4nFGBnsmojEywfZ(}Er6_s_+%tkO<_?hN#(A9=V8!GNK zsTmwpImmR_YBShGZXLYp#kr33LcPI)o0mB(z}Y7Hn0xoaJu#DW-}kV*%g{+W*$;8Y za38X|8{XGC(2?$vyJ5y7#Ctn@yL_9;Qn_u7F?OhQIdJTpl%7sZ%fL3jxTkYm*rAd8 z8^L2`AJmd0HnsC*o@Vj)7kHdY)dP`B`+D=Hk7z)Q2h*9gbvv`yK zSRcA3Q&UU*I!akOl3V{?I{N*ly0SfqRO@`(H?t0ECM5Nu*|8+>vh!?4iju^f_^V^0 zF#b<-3pyCY!l;#~J3f;9aJ`bpNx^Z0k#Y%8PpxA_O9CXDIaU(`|1_pg;0g7&MLnl% zeC=_b?6ulotmNroTjC#LNHUOmz}>MtLZ|b;*Y0PID!8I3m9Z3A>=;D!=G>3UHD+Cs zKR6nzwYyUFc^TufOWel#H^jTp{fe5=RFHuk420_L8d+u0E7<25U)j9BD^PCRiUiKs z!?xYbuIXs5;}3LXZ~0pBy6i#!y!~QX3XJ;rW;mF^UGxareYG^5sx$$pjXaFX-<3qM zP9K4q>fBYwH^rl3FRbbN%xBiy9aAKNLUHAEv820+#TIfbp$Ag!pRaWiDvs~C`0O!B zQKH{B@=Q916QD53Bk7S}&CgEOYH(P^~moimo3IE>z) zgzbS4q(ZI1h9fz=OVFxdQfXXIWbdsa0FZYUMGBEdJ(6r(utX9A0@hN&ER;?IwG z{^6e$Rg1-guP**)!mEb+ZIyx7a=6!LD0~bEiA>&qek1DP%JvEQ<+0)1=$xj6WX6e_ z;4_WZ+~BCY@feK?KQ=|*ouXeab+-ODsFvF0^6cYBKMducyiiM|RbmK@js1L@$S-Wj zF7fRDK2D#<`awMI_aDt8asfV9BH7b~c$$Sk`4qFnLD4_?vDHrR($Znzf9Sf_%6>)k*_?hoiErIn9l9YKeLr>_mi zQ0H)#IKz105#Cn^gRx$$_dC0cM{NM~;hvR-=S)zSG+^!ShDN`gcf=G~3Ay?>d+%87k5!Q$Hf0NK z4e&!^es+w_V#+{{0fwU8KGWhI>CxK?y-93j=BEg}YLRU*+ z04jE2$y>k4PM<}PM1Z?znYxg3p^a%3I+0aq!->d^ew$@ZQX{pU^EKZ8>)vIx$X9yR zuD&V=ozA2mQAa(VTsu+KGCfC`4z4Din*4;swzyECNQ)_GqGcqE=}{g*MblkOoF4P| zWcg#2$~v*_?~Jr;X;sad7Ci0q@ck`Q!jB((ByB!Qz}koRBENJPvJj%Nhoy}b`-SN` z5YaD3BbZCKse6^OHfXi@vsv~tRJp~Vd*A6jaeW(P?K|~c7>Q%{_3Vpbv%u(AAa zU!g@wy#Nklki2dCzVEs=23YI%!XCe4aFhGpG9<M!KG<`8yt3Tz`sHD*0k zFsR=*%Fs--+Jc5DT1OjpLa(H|h6XHwm{_{iz`60u)0TVRaqsvbyMZgN0bix$;L?>V za{Gr2CISrfVE-(Rdvj}6<4)>)GMkyB;8cUUZ7S})U!{EtmCU*O{=3umMXrtPz}9Zi z@)8609-j_qm%ZRcJ^;_z{W5Z?0R`V;);sIvhPk9XZhZDNqE4t zOf%Nb3&rh7nV7-B1m$5U*S^$sxb2I>;eOz4iZQxa^P%TE^^v}*j&<+XonsRjo=2*3 zM=HkmP0emq8`d8nH_A4?I6LVcE$nH%2*u7L=LHKi4|abfXqgBS)BN$OiK*~eU6?kl ziq?k$7?Qu(OyF$jf4=ziKhkY<0!5P{_q7&~rYu_WIet4?%wEl=i!}yaJYQWmd!$Gp`nD1?;8we`d-!W0%;$YJG8k>5GGo8YijY~SHj;lun)O6l$^`NYff4@dKOuc#xAcICG#q-Kecsp%vm6ZQ^Gu>_jXiga8? z#@n5jAKve@_dl;B(oFO(Ewb_Jz<4s%Mq-ETWaUN8q|1kI%eQLHuUk!rO*`4gZ!RwL zbh+vAoWE5QMI!SESwe~qm6NeO&?^U@wS10uYoV->Q3EP^&3i-p5?vQ)OV5TPwdsr8JhLC^*7=w zU)@*H8&+0NW)JAIob`{iT*F&)LW$qpVQuE8Oj3{4J)F#U`B)G0TPyML$1#}ok5Fra z$NVOhrk6h$xb=?|USs>n=EO1J2cLpmb=a}V+w+e#F2gUwabp`v{p`TyK~(?7$g9T( zzYea!XOwqxQ9{QWuU_$rAtTynlb7JQ&y@ty^CYnYK2?B~p4a$g_PhYC+H;-coJ;sEr5iQp#GdrMAvzseAa@ zg-Xy}Df^#HSgwiWab5{bWn)MM^h>Ho)|J+?4Tt5Ef^Nwk<)E86m;yJ|j7G~2$AoZH zbG=WRYjRFZvj)j;*x!k}p0ts96(*M&gCaj;%?D1V3$JubNynaV=LFBi&}C7YU0QX=jI;I&4{@dOG;QRjk!sjf++-Z^2kyqp6WRzx9o?j7ZB~ahVNtATiy~>!#E5$dN9{S-34okY^g#c) z09jEqoWUl%E4=)yz9y6fsKlUx``Rza^+X2fR0}VTf+nP^N%Wd2F@0hqWYLLb@j%vS zgG})xbfc>%X^)38Yqi5WV@7Gdw9Xg@^ciPn6LhUv0m8l66^9mLM3V=%2d+DS1r*r` zJ%uUwyC()4p$$tht;lY~3#{Ydci1`>U-IR)d!o;zEOKEewHb^lQBOyZsuxp=Ds?lD~^MTt|jH-l{<5mU=M zW9u+V)pv4MIsy%#Fi%0-0z}~ezKT7G*6}z1{@}Sv14HAc==Xz=k1ONQ&SI(a61|}x z#iSX#lA6m4Q}CMf4ftwto|V$mZJpqYctB<5cUep+Y^O?P356QKno8FOz>dkIvuNEZ zd#lElhgl7vS)uXHW0i9-ozLl}9S_lga>?DMXBlPEvuRCR!_tXP>a}*L4dE;Z0K%GL z2MT4lssV4E>G;PgTjQLOoIc9_Ow(}N>5p5C*vq)CGlP*Cxi@WH(}ZrLhwa%9Bd{kj zM7qZNSz2v8c;azEj=7wdB}18=oB0=^ixDA-aP&8u41*Y>Be7%zk3~~h5|_?HmiThY zd}05B5lZI%3_DXYn8sg=^Tx(9m|D(J%a~ftg?DTIovdU4bHaFNno%l`W6=9H01PQ) z$aaMlF)~()Vc;|=`={-Myl|#Y4j3db=&m?bj=n3=j%b@%60^l;rV@)QeB*S_I1n!1 z@MfLo-(nGTYW&^7VkNZo#Zhd|OW7(?a#bead=!{s8H38?6JwiVrH(k21rnc5n-3LY zzuBb^YZUQrDCH3S>`i^Z4!*ly-7GKRkAzM(-`r7^gif{q11M`iJ>a;*;$pfX`2dVT z)g=EDC3CfSK-`^@d7F~SXL-ObI!F~_&_1e8;vRWDo8mU;jj&L2z6|m!_E zDR&t+zRhOR!Q&H6=_7^gR5Mp*VKI7Idb6ay1Fn~SUEl318mMr%s>1Ax;SvAuEw=&0 zF32$^HpNF9OKZqkHI`B5M5%;G=|!`M#_Ewfw?y~$j9my&Y6^RpPVs8IPFvwdZ%%c{ zp>Qo6DJD7#J=)tTXzf$_4BgE(zQeRw{xtU6dGMr^_CSK@Wn4PeGF zt?JjQwfV`DdPR1Yo5U=>yo=COX_j*zD@(|8F3fJfhQJBS(903+^eZsopBw=(WFdjK zigh8VoKk|CIc|mQ9p=!ZaaBg_v8dA99kZk2>rr^$U_qt?&rG=w0h~6|_J_hi+cO*{ z$<&UVKu@!B1f`AD5Mukl_wuw;xs>y#!cg0@oWro107U>gz|@{dRCGEJMWd!oOg7=u4QOekn%Xo2)e_SY!@-jAl7$)# zh4?96>s|e0N_5!Iq2M9Glqw3aIb8QE26KqlXe`GA8Sy&-UAAzWP{0)U;)3lGP z2Lx{R^I09eri-D;Kz6vIV$`Kml3}I4(0_cYh0^UFl(kswQYE*E(__Az%p+I0Oh;1< zwE(9xQM==xqSg%QOdd>-D3jlPL|iPNr-;iu8K%G#%2*I^lD$B;oYqGY~f4u*&MOH?fWOMlzk**h=SN zdR?gH3kEU)O3kQUP0g|C+x`P7H`8ceHY*vho3u3YVmgyvo5GSMj%2d)mV=%Hc!qP* zmv`IaYd_17Ss|{Tn2L#pO#`EAoyK5zU;0e4-zdGd@*9;|Wom7VuSU-S=wHwzVsrcU z(j(NXi}ZY4929B;L7v`8f)m`!7qB87yQG8-AtKGm1J^|yB7J|NmaD!Nsm+ZqMEv1A zsOyAK?&tnT9>$>}%geJG&jc;y;nETmMxLl^jB!#4!1W!qA{}wslm5St#?NcNm!U~iTYE0DT+oW6r19y3+qp2XpzQnyI)Tt!uH0Gq-e*+G)T+s&hF zep;afp|BGhAHc09yikxbsgyT$F^Bt30f0B3ZBDQQV&myCs zj>8a)w8v<-Y2qS{GndEtGvZtMt;z}lH8{MLN=d`-R)9Bc=JUS z@t1w84#4}yW+6U9YOyViFRc-UV-n6jQ?v-&XZQ~6lbd(;;JtM6_GSqV4}1am&W~A2 zMG#_#`oNK$;s4y6tbiEQD8D(yRo+H7FWoD9i+GU0H$b*Wa--NfB7xaXFo=$z(|7<@ zetYj)I9Uj{BD*Ogn5XDE7JmciVJk*}t$`H^j@J$vBCzLrAWClEuQU4gh3^NV zWG!f#Uzj(~b*RQMeJy^Z9eFTzFQjE&tB!I`Yay77Tgw{|e>s=?s@XBHcIGfZ?Q?~= zVUo}`xx~c<5ZI9HF9_L5f5%GlGi45vJ-3TP@y#lkfeBg?g~|SLc)zVsIeO* ztHkY$rR*xWQOUEj`xmcG0r5kawJC@mIbpP*v#t2sww~v_BDwUtkK&A5wH49z9a6GLr=DNMD5j0}{&n@Z<`MtufwaxSJczx(pvN4tkr%kqM_xtUGTCfSnF6{FqYyPtKo_lUIP)rxX)&GpDa@XofIxz zbqe@qV>CvgL=YBGG=J;Hw#XR7cs z%4%5MUa(QK25m4V7V9HN^tEhh68}uq{65J9jed)K$t@u>6M&LQI(MPlBGc)uUiz4x zZx#y?rAAF}c}L+hDxucj?qIc>_vIRL$|~FhlA|ece$^n1!vdSESpHX3w82~p4JRp^ zarwM-v*d!b<`LkS$oTue*(&?Bg)t@Bkono&1I)?A)Zui~PTxpWJ%^`siVL3;1SDJ* zbdA)7319@8zC7BjFDXyv4|zU*x+7O}G|>ov{eT48N4#Ql zFHze4D<-jR)V3RI^M#Imm+Tn6w{gy|%g$ZC;R34a?u9Nq0a!;vMeo(IB^z~dhoN@E zxirbStq$OW0k#DTw1Ssx4PKxhxe~m_JRD2^WFfEXkUte&$tPb2ECmJBssTkUHITqe zEiur*e3lrvXO3>_?LhMvnE_^pOaXumrZEn6pp%>n@NI(=x`jBeMwD*w9hT+_cw+~L za-eq|B3Q)wagC1vgfqz%V

    ?((jU`Q9DYrlJav<1V11gETCA+*uFXRLqPSC^_uej#hP?^8JK}D+e_T~s zcK&c|rsjt)%!rQ#lC1Hb(LhxuIiOM-^KLlrbV>Gjv*;*MV5IV$_$?TFWdoQkrP6dr zcknM^_EgxLq${mZYt^3pz7h(i{qW=VYE`cl<9QoB{u=#%eyhSsBtM~{A zg>xoaf-gO&^XZ+Dq&trH6NSdL98hBcGg(~$G6Dc_O0u~40C9d2-yupE9hg0G)J5UF} zW$v2oA*R?>_>*q|3}IR_NexFj@NEWYs3TUVVIiW;MGKVBr1E{EYZuAZYK5HdIis~n zgH-Ze4V8oF_NDZjQnz;FUSl2|1tji_FoA4|<9k<^bK$hSR5=d{3F|PtI1Y?3FH4GP zo!_}&Af(L|4Y4lST?`5laq2tiEoex8^n!`9l}nCw;n(j7cqNLjbWedtU%TDq9rp;L zM+VYE#ptoJX2Yjefwk;WaR(&1W1(*U62B<5;mS!(@&x%EXe2yybKU`M_eQzH(M4RU ziM&s|Lf7tEbrozmU^Jf^dtD zAJvw<;cN!|0Z~>Fmi{u)Y9Q$4Jp=O6|+$w=#s1v=)6 z(NV|GAJa$&iOSAN)Zy~dM}xaO57^?aTLqTlu3OY7;Rj2Fg6O1E592ZRsxwPET-TjK zM{7h{)ta}$c}_U?DVp}xOaOUygN^?oY!L(-_k+N0LIq<=ZF;s&Ewl$WKylokGuG;Y z3M+xoiB<&Q!w<((2+mUo(4&X%AtZHR!R#?&{O-keHbQ7I#P}ZcJ?+~A!IleNh^P;w z))r<}O@hlg905k|MTN8oiw=ZCBNz|ivO<<5hqzx!JQiQZC8Si;KHt7avoy35{E;&QCR(QP%DNlpB*jwOxD)yxy1>Bm%!tzKCZlFw&6a7YDuUJYL?}<4{?n0(cCMM(=p$X6A z;wwI>RhYR5iNYp93#B@^{a3Z>c{w+YLTiqote_x#fqpS5Y7TjTJ<>`mu?IJFGVWKB9*C8isnvxMXJE_r$Z1~4MQ1C3k9p01H*j*3ss$9 zz)WgPX@rRq$yYfc5}6Tz%m4yrs3ddN67dh}%(M!;l(M4&Zs-OY3e*oq%lcQ1D?iqPo?G`4Vj+RS zyk3ng`Na#(`#sc^7*)4@>nGR@8z%2X+!XH~U;_`1QqYu!b}qF*Q#JSc$7IAwm8>; z`#K8QoMBZyNt=J_KA~ppg}K|NjMpyiIuyh@R@`j2dkpOCc2*PsssVl+yxiNKVQx(w z?@)CFzkv406Ml^7J$apI(NG+!>Mp%$%EfvSLNgy_g7r7B*HODg#MJCdbB74`I{W;Cjd0C((feogF~0WiBJa(cB9HCHfg(vP9W zIqMKxfj17VUP(5Znr`x(n)Ck66(VygNQ~M<$8FrRO{^3K8#;l1Y>3PVf$)eCdyc;+ zCxX){@}+dCAwy2+k+UczL>N(FOhfYgu(80fM_}}Wt0;?81^BVQ$xZxYvfITljQ$gL zokJS*lJulXD4PTYMI6_U^sb&G9Zhe$BI-?vs_@?;=443QD5Fsjgp%Vg0Du&4EnX*%-7>2-ThCt^}2JiH~q-X|Hz$yeO$-Z+9GoxN}0B9Aq z2FmLr43sp*#`uUtl=BF6B?s#=zFvko8T1=broz5<(IHz?bnz#3XDE? zv>Gd?9ILL}P2(BLV4V|BB$o1)>~s}6KnI~LU$w|ehEd>Cyt=bI@VOp&0kuL^-LQET z#2dAufJ}xQRRaPYvH}O-=U;;s`&Kq&T!Fpfop<~QtC1ACVgcI(UxURI>PZ)R(d%^aN8}bc= z;QyzF+@U9S385=%utNGpIHr#@xHstUG7JpuED>o#ACLE2Y@F&bIBJ}-!bqTP(FRx+ zS$7EJX{fdt;nko-RLQG=7d&4rfE~?=v_0Vm&IqCl#Afl!8DdzCP;CT=cw$8!gJ*A* zMJ2CnqEU_iQ>K?|TmT(=ky9Ldb#PRR2iL=wPj&Dh^gPSRJM6G zzHxxfmM!Fn^Apzii1J<&{2!8emwdUC+q#jDjO~dsIh0%G@fYQflH(pv;P>2fbpDKs z_p#h~zQrQrg=d@O|NbVlh;JmoUC0Fkb@`hQ*2mxO$fvr;Gn+akDqIf@wAK zprh52pnYqvSjgx_h}|GRNULc#v{43ht_P#L3^ILiz-AJVvy=C|!!?8BzEI0G~;Xz1BKF`UEwe za>=Y7{xt~27Rc=crI|-jjxQMt3~5ZX;z%___n}Pm&g>9;?R-iQ)wR`SlN?KMyBy^5 zstj6-ih(~4lsGQzAM-mLrP3tX?J@H1*vn=3b}>&gqKQECBfFk*eV3~{GYdXdL!PrM z%im$}{}#Ve5bmxQi2p6KpnRPs7?IP7PD?CG`Qc6qEP8;qF7^1GPBG{JcL+L`KiGhL z>N|}bIGYh4q^kE*W%gs+{!0_o6w;mH_uoX2Ums2VHP#ayU#9}`3A&<+FXjS^^b>!# zw+P*eQcDoS)9&Uk7w}dzl+aVl8?V7vr@6oGru98IZeUe`F0T*At)KM5f(I>6yjRXN zqne{hY99FDsvdeh;jC|aMd3DY0>Hk3a36bxaNSpd~b-Isx9Ja#?cx^@H5cy1HHbf0^vaNU=HYdv;d;JWq#*m!PJ!M2}! zxp3WAfNwl@ec-%z1K@aW=k)&gT?WW;-&!EDS9acN0OhfXPWeo6C^%^~dJ0HeTA_8D zJ2JIu=#fq&BP6XoEV+7hZ`;nWW$;w zBRJEq%rR)omEMbM_7$BX;>xJqqjv<1C_=>*dAW1DH~{mEBAq(qiqqW^dnT36)^exx zEwlxeK9J}3$#5sZ?P++k&m2R!!|L@pz0u~5*mM!u?Y(_cv)!L``S)K@0@{2UY(DedXRDwM;mbcJ!*vQqX1nW0UK^Dlb zKLZh&i<~NLW8KEW%S`YdBXt>o+ZM+Gb=mn>@7%T8g0P@}pwW+F(_M$r-{f&(WPo9T zUNg9j)p392#=yxemW`k8#ZP6SZK;O=+f8YSZ(;nd1Gw7YFC z^b^gpS-;;jZz$+flMV=%(_+G37U)AoR<;@tG*oZXG4e>UV&EEyu1ZO0rx{ZiV>=T7 zdSISRs|WSNz>BDdC*;+Wav!TK+KzZF*L^KwuC8goCp}GYUjqp?uuV2FjG0r~T0bUs zR*Vf2hvIovJ(}kD-;I9c;l6@tWfNAURa8_bLLz#kI$$L;c4`k#83Ufv7xr!uMem4s z>nB{|Fz##%mj>q15+!WFBApn6heImI5sgb!xia2M_|4;#ToX_369UUlEdEXax2*s| zYhn7$cv}(0lQrsNiaI|yp`6yxsF1vtNikm)?X&ao!5c`?goM62zcvi(emYo2No--UzcV;=>!oW&eym1z!};D+hKjopGJL@i+Zy{vV-DZ+jo)-i7!fwgHpIjgyZ{D(#5B4y=>EKv_?6G0ftgpYda^C z;3oEkBAKQhHq4&H!$g4Jcbaze(P@%llfWbBuphz z7R)5leDbvm(5KPEH`4H#gA~#-Ed2qn-NbZGH&O!LidehhV(W+JybWjb`-l4MaGS|7 z+&o;83)y*fGtWU;FYQ}b9b4O|uK*pxV^Dj;oRlw#YT5kk2}1K?M`Y8~Kg;<5Q3F;Q2!8Ccg6D^wn*XPE0{ z_Ntgho6EK3^%k3(&c0t!`i82pi*2{((%Y*~R885tjhLvhaEOy@^hPCvYb`XhGRNNSDmuF)GJ)q#!SOuxKTNJU)wROyekB zgDJ03{6_ho^^NrMWb{u|;7X$ygKgZQF5vktqD+S-oUC7h{bk?~IXn>`>AISEs+d>M zqB~39fr+Lj-NLwM#xjR)sGC^i3qQh5gkp^_Qq8xUuIT<{M7ypjqPUEz5;aVv4f8t7 zB2S|umQl?HrX!H$N#NYGVI5anC#&Pi+}2g2Lhj&t=q8ZICL-u2CSYq{%O)z9BbTy+ z*X0z>Yyy{|Uu+9UrzR{=rGxR=GH6doFj~f}OGPH?*#x3LfA|(#{@33KPAm^kQ05J{ zk#fz_@Cwibh&~Wy3-!>98dLSEu=OqSRD1g$6Y)9^5-y1TQ*IzPq-EppFfY+jI#*2j z%Rj_AAr>V>ANXbQv5o|tPB< zxQkwy)^4^Z63DmZDfnGzp4Q-%N{JG7i{vN8h<1(Q_YUfi@Zz@KKo)N$%m>JdaPrO} z2O7GP#LSiyr@$~qTmB)sUi&LVr{1U1`nxhwjRw<=_4lT?i0Ib5f6r(?MLD^Y*pu)` z@oKeU5^LvBY3Gn>=g?{EkZbD@YwO(qOr$XK-O$WWGnsQqWSL;C%nz2cD4??mwZ1l>l<~M&ZzM}q^zda4%2$WXg)OWSJuSQ&y6w6jloDbL#`?Ofm}1V z47?9N84Fuy-IxI`FSg8((N}5Fmh*7-7e*e~|F?D%4R^hJHpNM?w9pG|s0V%uu)}7& zdIxx!Edk=J-v&4}uuOyF%pW7c_^~qI*X%qhN>?+Q87SaIf7)XdAC|(4T4;PYktocTPT?kvD^S-ZfusvA53>r+mki-U=#7AlRc!|I64o&?vo)9T|o$4RLK|kzq5#9 z6-Nfa4wSAiMlm3~0s^np1|TLTbn)V!?(qRtKva^mGnSy}6ZVqA&l`j{ZkK7Ls-Xd5 zWN)7sAw2~#03j(c0+uP7HYo4dTxyNg>9qrbag=Alyz27dY-oTQTSq{gtH6eG5RgG(hyFCrA$?+- z1?3&s+&T%`-a6INyW>T^`X=84oA<+gf%VOlZ0?#diQ6dnJoR3zTNeH+7Q3u{5XW%M#BXxUeVTjkGsymA&SZ}X&9y$ zKi7jiFw6Zhg*GTO)#oqm^94a+TZwWG|Q6M zIx^neu$0hjIi7TG^+UM&#_db~9x-nvhDN(_Extsma z)fD-=wuz|eU+5mxND*SSRdhYY(Sb0_ajdc-eIiNiqB|LXMy$v=flFVfM;-T{M zslBuUin~PS!uRj0-UtoE*?>j|IVsxqve^iZ9eM8MW&cqhF0}XKoA;DtKhdA|A>aI% zWS_t#IV^laO0iuBLT8U;-#|`_D4!}BtnXPj?KT{(FXd98t`V)T=$s*n-x@R#02Tp6 z4Fe|OVyOTH-br+mC`6>Vx!3CQA6IKgv$ zO58Z#Pwe4xEbf~z0LQhQ5*kEtrmV>DWd9jHvv$UGgH72)CRLLvw6hyB9mD>n%&5q`#=8_$26`h7!)w3b+U;) z4$K-n6WPB4mpt%q!6-c<6DXEH2T`a8{8(_v;U<`zbq(u5_5g^U`41o0Hq7ys<+?x^ zG_VR(#l+x;{Imj4q46hPjRVFaRT{qB2GSCP9Zgr2KZ?`DPg5g z$cd`9m*fHuRhznM3;QQO?6!omvF4eMna`nYm)N+o;hS|zdDqR!cAh-L;&CJF8y5`Q zip%Onr7E0CEf^+3!*dQ~uDFWtpW(|W9M!VyWY4iHt#NN^-8y=oH{Ktey1XNvuU(rH zCtl}Y*=;rZrkH3^7mrKgr&ga1I_|0)v-bf-B!)WX+S&0J|CW!0o)T!L@qlB10Fr_e z?(PMj6D~m7pOY>I>4{MF69E%D(Pq+POuaH^=A{My+%S&OC+Br3TnoA>?1!Eq4eK46 zB;K7!JaC(wvk*UJ#=hNO{d%v)ubY`!k}8TV9KRDv*k)>rG3p7VdC)0%KuA2v89mWm z=LhBl;(C2Okzp5#9J+9WoSxLRYeo$I;>JaIW=my;aFpT~EsmTg%^qz2%|#7Q=u0^t zqxac{Kr532mE5Plti@G38Xag~Rq-K}hfFIH^r77ug;Oy!BmOJqAN;79(KszW3kUwC zK=j58FYZ&&{rFmxq2b3oq2g|42W=kPnML)q?cq?$sj-?D*pwSt;>qbc%TyPY`;_-q zRN_j%N9C1_%D%1o1)Ly}+hy=jd1P1hY*)R=eR%Oko@}K_7p^`ws$uigtU(vtjUXPd z*lH_n9CKyv$|%J$3nU0k^N1Z)C<3Ou#5`*VOpBmz0lqlj0O&|vF)o9mQGpr-L@glp zPZ?Q1qsWqsS!t&nueY93J)&SnrqB3iDXvD$29s|uJBp!*uRM=tZ=tGpJ+e2|478;` z!n_#VI;B(V9|OZ{CamlZO?tW`5Y^YE!Bq(P@(zK#f5hoc2ZHSSP=+T>*neZ9q>qm4(dXgf_M}RO!>q@5$)n` zx#J(u|KBEGHK%Kq1OfoC3=IIl^gl8U3mO<%8QEFeIsO-%a8d=-bCVt22NK3(d~&lc ziBTy%L&1m&mjrhskJ`=6uFmW4KA>l5;356O{O-)nPhRhiulFb9F0VVL*&S^_D0Ad& zx+qd+^J1c~m88dd(|k=aEDgmDhcoGH3cnlXAJ3*zwVy`|IX_GdXmbntAOdJI`obSE zBy=hL>|OO(O(>Y|izw1GlyowPb50)8soA*Tp=0kodM5jFvZ6pM(b#-}U-)k^)8sPy z-P<}P&7@Ia2Z%^eEaFQp1QDCjelk|bkJq`x!x}$;<-|y@i_62!oO)PF=phesv7nO+Eb$ha5*R%i^q!!3Xx`{>2yEf zs}DiZ3dT!F$$zB0yySck{tlqX2fq8fNW?chE;WnGn%-?|?vvtJNsXU=N336T(=?~v z{@L#`tS$eBo@>=hONe3}wyS{NlaI+z8@*?~N1+kQ|(1%z6IZpL@XwR-k2SjOh z1ZV^vRKD0Hp`k3&61264F}QHD*n_IUX!n}{yOgoT2bt^w;*#oP>8BHwZQ)`4!9Ikr ze0Cv2RKCL98Pz_PFV~=@UCGANGN~nFo1vDF7Y*|FXz8ch@pe;owiSALVD~j@#yOaH zafLc#m8+)N+MTD5p85l)RvYX7*CFt-BdolEQyOt|t+<^e2@;MF<=Z&wmItNRC3}eD zvmzV2?h?G8{F5cuX6WD??bm3`#WjX#igFO)z#KKI+Mnq~`FwCy^Zj$P4HTSQ?*&7? z;PB%bce-PX&W#Gd3nj5%ACAlI84xrG?w=gdp?eE%Cmr_$XyL6-BB445N6in%*o!X? zV{lt1X|5MTwDQW#AgF!N-ecaCN_?@n3jbYPuOf*AKKBJ`cvstHM?6;Y!|!YkWe`^< zl&wffKXW_7M@SzBUK){d@H`@&m`-}eOi@`X5$AgcuXeD-4k9+{D1FFTfrwF#GC5>a zT+v01Td979Z>RkXJompSJFB3`q9tA96z=Zs?$)@wJ2dX@jWtlvxVyW%ySux)J2c)% zb2(>bBF>qIxib~}q4vwJsMr~~a^=7B``M3-U@_y7BL+)9Xb@GKWbwY`*OS-=vkmIz zbt#hk5Lr6mXsT(sa&ftGF`UAg@3p$i%Xg~gfx&IJr zieM+Q3ldJ;lM7LY685Quo0h?m;ziycT0Gq`26a>gL*Gz7Db4^c!W}rARzqz*Bqx}W^U$eW^eMJ zbdaosA!9UQ?4Lbr?O$NRgX?R=mNWBoMtM#nNH6f#-{^WyDR{36t8(Yt)8p^gpEZI+ z-5@3pNAdD5h}w;(hBk}ez?jqk}cyVx`~Re zhxixkwNg&OgZjCi#ba_#>Y{uLyOZH&+~@9Wj4Ec+$9Z%rUvpKRcxtHxXCj-199&^JXm!nE~V z4BeO1>xG@qzfV{{PpFF=;XWv@zxVd$hPlJ1VGoD;;Vz}rjf?k0n~2EDr>FM2!rm|! zST&?`S{M_;y;>>j>ay0_?n8yZSEgzWr3bi)q#SklA)^w`c!~%heo)sA<`Hr4JFOjM zhs#`>Q0*QCHWH5H$NVx0{?|f&|75den@Tm!h058|vNIIsGoM8NDAn z**1p+LYV5rTfOl?MB`lTP%NLk!8hP{_W42xF3%^j1AIfk9Yfezq3+-@ZJ`2M;D0${ z6XvZ51qknl?m-%`ZjONWcNJ&!y-MIAfNk}-R`3l8#q|ZtkLp*llIra_77;v9+K}x@ z&nqC$S6y*$<=9NAOrFF5ivaqadYIYro{8VuVp-WN8cUgy1?{hV{)q84!!{iqb9R2L z_2b|9YC6`$IDSCH_1-O&a3DN-a<%{n=nC-YfY+}h5#LJ^W{!xc(tt{SfEJ*RE z^l}7NOj*Ns@WaD+*rJRJtwzlmYUqiRboVlBg3gBE;l}qidE+vEdPpPjHfMoihvWoD zt(lnH+T(9rDqn?kMTc}nwf$@tFd@4HcIEvbDL8$8>oUA6C|rm&3P90A2Pl3$rdqKd2G6TfIlLwULoL0s-Y3ohfK)lTT(sp2V}4rgQc4!26#@_EL3 zGOp~1vc7TW>}8RA&4X9MuzJJuh|`C*9&g8Kyi$WkiattN0sV`t;h1`WP4x+(e<;T9 z*5(mAS;sY|Si;TpgVMBYB|@gFBN8fq?X;^|LnHQQ_&?x}aQS z?SbEw?6%J?84A|qkO1|3rh&$CC88we^?B$G)S^7JN@28W1yD_;q5`E z8LR!A?zIsDmj@ufxcgZY9K+c%55T<8mBe6DTKhTd9Wx?5#yoQ(kyr{pJ?mf@Tbzh( zQ_|Xe9UJ9k&R9fqJ0H>$qnn;83nY?#;yWL1U#?@eZrX7s0^A!6sGyNNj`nUACaH@@ zjz|~ipSrlrDOS^!%Mib7p8>4HzRwrem2Q2}puatJ3FJ7AU0HN%mL<-Ye%-Q-D#X#}Xk=&M81dP?$mBPC zdW@PIf{6&{m0{A6lbEpzHeaW3;hn5jTSReY+`Sw~6m!z)y+dL}lzqG+5n)HLzM$-m zx{ueO)G22gA`nNl<>gbwde0!&G{XUe z6Z>I7ruBxPSTNC!Dp0l;?zdl&PBnL4eN!IkA5!wfV>|#Inp+X$>`8!TY!`CH%~mQsm+j#uKM-RUN~boG zV;C*?)0%J|R2DM%smn^0C-A!&d8UapSh^$A%q@y|e$83EQWfc*&rQ}Cp4g+TttU8| z!yg0gwy3KLW^D7HI%zWl<`1LK_6pVz-irI_wj0%OLcjTRZuU@f+%etj?%3vw-vd~aie5e!Q!cu-}dO^SG(SzeHJ?%hPC_$2`>Yc0{7ssr@ z5lgvhNvp=sg#xWce7US|!yTL470DVRI^TVd)d5g?@C+Ugv111AuE4)e7eUFuy%b0i zo-~>b!M1D~i;XL(#L#%TRwjEnw^&gD`Yaj)HcS5u#z|*csCe1O($1QcFwhG8h9;iK z^w0^eaIb52JX|fLEoQhm-rqhLzJhysSNR+!97y!WS!@sL?8riRep13vhl_VVsVuMJ z;2Sv5L^S7%VuUv^Ez#lG_rs=XyGIZ&0e~C)Nh$DKOR-K5fCM=Qo@U6Jc z)=Xw6*44r-EF87STBP%KMHc}_beq*3Lzmm%PprVF13ah<`jip$Gexn2cncExtZ%$6 z=48KF@Yb439=BD#&$v7*o$ilfk(FPN!VTE&;}<}SIV-vgyG+CiFKVbVLJX>xXU7p~SbX7?qmD@mX4JhKToBGUsaM+M@!HohOoRvIdb{WM~s= zLHal7kBzg8Cr%hS19m<$^qa)8Bu`rNB)n}Hega?Yo?draVGsD`^q)clmGN8i>h^-~UY7H;*+2U_M;lDT8k2OHUYo;yAYf((;J)*}u-zz8fgBc{*v# zW@eby;-8gcoUb%z2;xZuQW4RVoYSvzIgJEA!q~<>s^+eRtHD*QXgqS%S%~k zD(F@mzi-&3rd^DKc2%*GOILm*R`=X}A@Z0WbQ?vB=Hq3%Y*xWK(S7xg4*u3{rF+-1 zCRI~pW47g>D<>&E{`GCzw%`8HI}i_`MmMe@(W-JyE>IGc@LYu@Cwf52WA=z-ni6WT zEw%R$aH=qlO0Wj#KkBB971=PT=?Jc@$@s+aQl3wcyV*q=N8s z!6LhTWAU`q-`HQEIsoNk#g81s;Adtc$Ruo;FcE>KsN6m#g@fUl0;_P%-e|ImD?=(Q zGs>|2)&}M471{BnUn!?cqVM?yr4u}k=DtE!q_Ll}y2q~`ja}wI+-{&`((?fmmwHP^;XWV{akV%b@l$Av6yFuDIy;wN&C^<_%i#9zYv2y$C9x?JdT zU2x5@r~tZFR!1@}Nc-dD-m6WN)`Si)q}%ViMuaf@(`W%Dk3=(;_w+N6*(brh7o8}c z2`yj__X@kd-vBdBZkH%yLkh?!5P+=XZ6qK?{37JLAEucf`Dn z-G*Q9x`w-q#e(+ls9x@5=SQaPNw|h&-5-pb1I*YU2>1O^#gHI1U;pwomaNM3Fpz$b z5Q>jSj>`H+Zj2KDIP{EYGW3?YG~Oc6uB7sU753z9*5c{VLTatMmy1-ghKczBA;9h{ zQv3TYQF0cIi(*p*6tY*MY^7za*&+xm$P07`Kbt7sxbYd8iPZ9j!hllPyC&CfWxJwN z0&}im3#&5^TkfUN(?xCk%m*0 zo(=)pZGt!Kpu#~iOPxcsCk}-q1bvZ_RMqDOT+Vwydh8$IM^#9bzDNr89*FE}ABAfa z3SuKrUm)-}j{I+#kJ2#nQ+W1xj0SI#H;6Vc8_;E3;amIo@V9z++wAT4D!UKd^HvSQ zFSU=?SlBpSt>WrhTe_z(8lFX3o_Y0oE(z{Q)ab9@$$kS4T!m*{qCyR_;~Q~g?x8d? z@1jLF;=Wh9IMO=^jH5E%0d(R+@uelHjzctty?!JBBN0hY9Y8N7Il=qOf}`;_vifEUWbRa)v2^oUe@+r zQiZ8>gR-9iI#V(*CF*4{nenro@Ns0IUcs52xGdHxI%H}139jWy55-i{6V}n>kH4)n z=DiOOKSB$w#Y? zY6>1J3>JI&Z#*mgRZM3-bY)po(iPn_d;R4Op>V7csunU7$y*=!>5U^b{NjPPx{app zM#hJap{cLl*5^cl4(H;_i{05}I&;yUpT-v-!iT1{Owz3J>M%M4&lLK`6bK#^7@%S3 zpD_R4@;To3^WXjA@%}?p`JW9?{)@sY;oxjy_Rqf0f9#x!RLt7Zgpn(wsb;peFuuGn zPIfw{V!2GOHsl-;d&OTOI`Dt;kq9L0B96)Es=Ga3W_ZjPeu3NT@KsJ{NW(zyvDvSc za0jd+k)0KGq2`oPU}BivXH$Mi(@;xBcOr{HwvoFA*Gy!0n2waxBLE8_QIh|5cI$7d^Ij@=c(cr2rImprG zPS9gFkswYpzgJyW!4hXo$PnQuF}MlJALvR{PdCcb4Gl)%zEWbTJ>QplOs;GlHG9$x~LFvAZjKO-Pw`{M~^|Jl~8Ybfm< z^;mcO#mutTxjWztHu_WkXH)tdSbef`r1pg6u&_Cox;PO`gl&dj=*y&?=?g&zp8(s& zGelSi$i7B%_D-)grOrU@qoGu@Z@jH2-^rK`!Kv7!j{d2+ZH!qyFY=EodS9Y{;Wz(d zqg@l-F_-xjFMzLj`QHg}U-4r0ZvtFWJf!nBGdi&6*(9~@%g#2BmCc2(l)JoOnEmh3 z^aDUZK5Y-AOLYtu9tdsPckS)q@o_P;lG97hheusklufEzVOvqJU+RxrvK|q{jWJv; zz8<~2PyhJvX=4~e84zxZ3007mQ*OHKS%Ap<jQ!8LLA}v#2!=tmQD9J|MPQ1T^)U6Pp!GxbQd#s>gcy;pv*-O- zVgdyX9=5b)DZ?Y$Fqc5S(hcNrh6@R?A~2*Q+OO{r>w_-s+nt<%ro7tPoLE{ob7$Ek zuvylyR{OP*#J37R1rh0dN>KYac-cO>Owvkrl;mmTq?MsWVGx+Yhss1e-U2E zR4+UlBjB#YCf$6)N>sLbtp>t~Cg@Q`3MQ+ru>qD3{Y6ahUz&F^%gy*m`sl#Q9y z;dfdT+mW1_JllCQv^-!`sM~dtPN*Yt;%98RCtG#mTh_zj0={wqSK>eO8Q@wjNrqhXy)1m^u|Bm|6r@%2;T!a-~tWH}PU7@pOzg%7>F;rTzsdg@K zvR6&)K2wVK1TO4pnM1E<_*8D_@%$Pa(Z*1~<#shYE2BW$WRF!D zXyxyy*XkYQv@k}Pf*{azc1LhvdN3%?j3>2LMw8tNV;&eOglr=vAY6Pj2T*g+$lU6p<=sDb=mBd zVn9G?>ttqPJ?^Qy_zpV;uGrqNlA9)paGn;Yp4P6EmS-699`pu04c;{#lAv05{7-Y@ zkGI{@+>O995Lv1h$GoGZjSZxFbzPoCg6#mWp=$N6s%Pa3gMdbz9kn~|H*>joF;EE6 z>vS+>UC?YYXpk6VWQXFXeDOCK!>;*=Td?xd3TO(@pyMiTG zXXjtGJ%FJ;ND+l47|z#hb8HP1w%DkqC_EbJ7@&agoxzxOr>=3oAq>b=cW<#u@U3IO z!o%}22FGO6q(?;TILRS1fT`wP=#upDj7@E*gf^byumXk>Chq%q&V-c+NaKf$&$A@z z4(bOkvPEqLpxCS;&HrBz@BdgVR+>}S(Z0O4#Be}BnEuE7;o$aFR7hCanyHu>nVS7q zPd0`_1Zec-w)JWj^k6BkDBG3^(F1aQ`z2#uUw5l*!emfp$JONg!ph|y%Ob_aNYCV+ zQs7}wptB2j!X|L#J#)2Mxk^MG3SB6ettjah>Pe74gl9g5XQ{Ln>rf76X*$r6E6rLw zNt`VPXPc&XQDD5sWrD!W5+OB__R=;Q(l(Pvx)=^o9V_nF_^#{8H(Wja6zTg2J#4f) z%B|sHoQZ2O+~#DYhpRcw!8Kfkd=u&2=Iway$)5diZ`&y~RT1KV`j_wpKn|88U6``? zK4*X-XOA!2y3uIiJvnJ(P%s{BPFWN^ZVRnh5y!r4Ey=;>eJdI$Nb*TGX$lA$$b8N= zfXEPX1ZdX!Edl60+k1;NPH>NYx5YjiOy!xgeuGuA}A@*j(c_>;-o0c z5&qqaLNi!T6#`8idD+#~SZ;esIp6p2__a_CLlbFGcxd<-6SX9y^MMkX(0M&V6QhRq z%q;pI%#3MsC97KsPH=%vWGisG2RkjP#!GxPosa~hfGQ}E8kJ32%(Y}cp2frM(j(mR z_lq-r)v~O!X#e!zus8zp4{eL4i=?+r>q_&!1WbOjz6HR-Ot|sxxs(%d_Xl(zV8%5ZzQpF)W+pS9MqlOQW}B0XrHNgtm$W{n zTRJcsM(v@HN0%PR(%^+>tj4a`L069Jx z>7w^Ve0ayY6e+#s91LJVftn&|Y8NRXJ8eX2TW_^q4i~HKstpv!t~p^W`VXLGqfKgq z)O`bg&%irXEFwUSBPz*)7x=T5A8`S}S|jWvgaR0R%zD-<@;%fsVx2P=su@m3(u z8PZfh+6}-v0dCLGYYdCS_#35fjyGi_vJr2M+M{Ju$R8-JyEMZb;~%7QgqMQBwJcKw zQk(=-Nx5EJRD8!SI#uciHJa^4ynHg3n#ks;WoyKX_Pb8NDRe#9CSUS34f;caLLlK( zW>rzyNTco5jzC#LLalKi z5S(Ep=ApL4lNCFEQ*GQUPmU(;=tqpbrJ47BcIuf<-*AdmP=j(Fv4pj>UE^Ro`9&3} z-=uV%LWzBmDRLQ%%}2uM_!7}+RhJc!UxQD_5-rl*SNj4ri{G01$x@rhiEiWdBFR-i z90D?|cGL>Nho%kbVDiOY3s*@Jj6vky0WXOTV*Nx|Ic1-5dYI0L5r3e5bwB4&&n@!8r^7tu)CS=chl55Hoj7!W%kATtbKL>yOGLt&ziYCeCkfWNtNeL zPE>MG3cWPikpG&x07tVOdbZtL)K%I@(?^xvM#s*2`E^6H-6w{3?RM&AwZ$W`y~K8C z1`f(n$rJY@$&t4Asl(N4S&RVdaIwizrOf#aJK^hs0tTH{m@&rpF#Rc9kxIzlxPin| z?)XGUXyM=a!T0r`$s>Ys3Rx2#h5RBXp*RC2rW$iCA?51qc)h&&|6s;52as-r8S~mF z);^=c_|6!MOGU;umdxVArj-O=YJDdrmx8leB%v-;rqaju4)qurf|lxE)z>3X^2rNj zTHa5>hDO=Zucu<<2@QrZy(T@osv2}=)oPpIU<0QRcA^m0kuETJeQGxs46)2tAPp1S zh2;~ezv>nW*H63!E2~yqw=3)v`(X%-T*)_Wulp-8b~pC4O(t+{=@%+8Lv_Mg52T=8 zp_-xUSzDk%9YTLt-G)P77dOhu_e%ai9r6`7S6-#5cmJC6PZp#04XC#ONpS0>t^di9 zT1g?zk5fsNgOIo|Nv@MBK?i4L0(o_}AWftXzc4^4EIB(<2Jgrdgc^K#;SJS<%1+ED zQ(&%7C){owA|VQIVoh!$qD59l4uda@K^AGu0#%s5|L!Em396p@sS<5g*Kgb)UhsFz zxNa%la@XFLd@JpE-TFJjYZz>g<$Xf; zkAL!tmu}lH>W-nZJ!-@^l*qScPiHe8=cPV#{+^C4`myf&imb?UucX+P@lcuiU|SWu zuTs6QLupcr2(bb}cE~2fV^WWs(j`A>#5QG{7g6=lAn(`gLix)DRML?~QhKvaZ(>ew zgyqXH;01q1HnW#5bC54{awM}KD|1{kbD9hF3yAj{&*GlygqmBk$SJ#g4~!!TZi${z z#idn@;ZS86oDJYY@F(Au9Ll9t_2GfNe5kJymN%U-@sJ?m#vUwO`Za=$0hf=S^5jIv z%0Kt7aRIk84AdpIT=Y@v>i4n?X=3>I%a_Tu()2BlHa_Z$O)c#p92c_53=7P(8y2$Z z)YZvsB4+moiO}p-wH!!^#Na6;7CNamsZnwBSy}>RQ&_Gci{FIG!lUt9$K&2eRI_Vz z)7ReFMIXnfaP(QD#L5#s$=-^hof}(+pqgmMxb)Q&!55|bKXBVXWAL=6zDJ1~`;rhSS zm%_#_uFgg#uK%h1M{|gfE5V2KRNiiz>RA^S6%EL=_B#S}7z6dd%N#9?Aila<9+>lD z{u6#~&){Y%HH&i?#PTgkgheUc#C8wRR^NNab4{dv!}Ce-7mQTDahR}j;Eb$GGb{kR_W2KY*M#uYOg(R>Xt)K+?{%=(4MNy z^Ya-bS{ul}O>N)E@DV+|u@^CUzk39tDO(?b|f9@;SG4O2=@We_OL zOKzH48=o91ugt_kLGjzcpt7RJ4nJ(hlYkBKtm_%5u+VJlBCXn4BG97S@&J)f91bIX z4lQKmu<|Bg=--ay=yr3l1yaa+G`nH|z{3XlO#5RJE=90;uxkMQ%+pF_)QAfNGa9*c z`5TWF*vc&W`BhCuX0*>O4hg|3j@%*iFPjcml5roIBWnP~TG{bn^p%`cf8^uJ8lvNp z#JDyPV%qThu>pPSaX$Gq5}*jz(rg+7Vo!l7qH=w(j?4p<=IboI<$; z4MZCf8P_81JmFvmOGX~145FT0U_XkkiBI;}4<{}%50aYXx-cV2@mf2rv*3L4Y#lfI z{#TJo(v3k0K!hOKY)XaDT?0wAWS^9jytyDDPVtas5L<8!4sPrcRnY-eDlXnz7wP!4 zbZ|H6{0u$x|LBUVASH!oId1g&Tkbpfk#bO0-x2*`7-_pzb0 zbkKlqy*IWRQ-SHMYW5=HSas^Q%})k$zdX7%BFqOmF*E@TnRe#5`NPSgoN$A zCElj9&N{%#KB-&8n!4}^;DU01&UAtp@jnv)GQbLE+r7Kd<6`wn+846pv`FwRRjv9Y za9J~VA7P-8_&f*u3J?iJUk*NZaqymrQLP*i=bQw|Kbc)4RpT_rP29PySh8OXQ#0mC{r)^N4 zkiEP)Gy#05U8*$cs~n@vbKy#aVXp!iVXRB!O5F!AI%lNP>8*w7-?n5eDm(1TD3an` z=na4kJpTr7xEF=m3A$n1 zRg&lp3?gEA$My^S88ZstSyL|O5`hKdyw8-8cP1g~K?u2k7wl8S@e3j1e&HElatz!f zS76Bu>FvXVci3luc3|ra5)bi+;<5mI^RxQ4(~mk(bGrd3SOFFmX=jpM?D7vl>bc(X z!S@VPK&RkTV;f#Fhj2l$h#z1r<5$3!?~+|!bw=x|+;JU;F~9J=2PLz9v0FF**xO|M z#GziEL`2LlIPaNzqCSJSEbo|m<4SzD5=xdEMl{5Dus~VSp$K7pG1|}qq==zbtLk64 z-&k@=j_)H$M(TqIg9J&8P_#sPe?`L#lf_8O6WIV~SC6@FbwdKQcT&`eaBi6&T6-gjriX+1ps7;2zKANL?CB$O7Q+29>}8EXxzM?j^z45IxpT6C$~ zV03eyQ-r7E3nIef5tZWP6aB8oiX80;RE*F-JwLjmX<3Lhla?dbOK0&74>Jc?{4$W` zY7VPgu-zA4O*BqheIV&Sv3F0}s?pR~sVgbbkh`C)*}Qxed`o}tTGtGUWi@|g#uatA z>(_$GceJ=tzz^wf=%VX)PpA^jI~cWPx%%DvHm>q_Q|T1u`(0EGa`RfYmKC8FSRX~t z@tTFqrVs_eh`r$|Cs3)G&hOW8JfbT-dR&doQ%h)kRmlXc*#l^c+PDwxhSf7^3aN}g zWc#IkAxq}CPy3%|BB@Y^zZVoAb&T`RHS^sf(RA~I8l#Hg^eLN*OT5avI3hE@NwSu= zBdzw;2Hqu05RPQrvA-U)W*Cr6!4=7kQA#n-F~66=S4Sh=2-rz{r%vvF)zP*niEiId z<}^N=QpZ_I$jW&hI*Y_>98pxZ?Ae^SwB>;FrW5~ z(WC{uHBA2f-j$fuj6}oYcXlin(}r6XHB<+UQ)j9M=>Q3K;U0HYN;G2U4>|KojgDe~NjqIBJ!7v`76re7yGY-Dzbw<8fUVXrwhM-(bZRLsI} zX<C2k2d}W#nNR)j+huzr0=g4SbKC^S>$97Bj0~U#9}<(ArCsMs#0sz&JV2r z5&_qFg`2~Fpbjy1Bn~fY6+&R4AHqWofgnKLiFXAR_4m0Mxmh<6av3l;0tqS`Kz@g( z7Z{$V71uW`UL=kcp>d+;`e*ab83rDdnYb4m?qd*YFDbsR^UXA*Yl2uz6xC2S`XuKDyNv zN*8qx{u{vTZr}DwmCF_Lz&vEd$5$HODe{>f zXnjPJs!amf0cnBcO;eL3gt9bYW5x(|PdghviW5Bj?a5o~K%nwcNC)9pI+ip{;S%Zr zSh63|R)UySG~5KSMGCQnOD+%$jY0mRdQf!ReJ+-|95+m>H}zyOJ2pXsN=f|#r`SMB zlZ0#}&u_FgDz{ceAP93AZ9hjm7coj{-<7SUN_ zF`v{0&6I4KM&ZvwtzfhLIWE!OE0>^kX-udx%H>l%?Oo$wB369&qw$LI<9NS0GVcz z=i&<|-RvRMuvy*GB1IpYQ5VZ2GjzDy%yzUzmsbT(g&vqB+Tb%obpj+d;>lj>AfLz% z$q>8MAD8%2_u|<28<=LHB0ciO{vsrK`+qLa#D9n70koSjYT~?%haxKRWT=m=EnzeV zjLWeZv+Trh@bw(KCff z(VE6+Zs%&lB-`_xvw_}6prf)n~{dG&R0UO@XvS$CZ2gO*0pA%fd%XQ?7fSC+At!Axg{D=5v5 zrCpp&-4pa9GyU+0#dTEti2?b}s0h>!k_yWNkJh2+YY+Ti84NFj13DPSMbt)A#g`=t zwcHDI6(Fq(A)BM$hewg*pPbxhY@fmnb z#f`Y&3H&B0eTzL6?ULzuxnCHh%6+v9Kh4_;c_Ovj83flVrILc*89veIG1RA^S2V*h zkBqO5m{TxZYo8#KxYmE$*|@T-!tFb6nFPe6I*1JrD2oo}NykZ|#G|voUcQvGiQiim z#e9`Q(JcB#Q69I|cA#_~aT+-rzI-*sQC#gD(l$m+m5~AACK8^$$hTnYRlbQX{3vs;?JYAIM9i?Q>5lCW> zolU1m?v)0kYSC&D+jvwdx~VG4Xove~9KqpoFHQD7Y!t__#C>Vli{h-cF?~&8$obnD zafsPXB{+;ZI2m5>UGYqPc;YkDxg~f$lfGZ+SmMhuXYW?SEjdAZXhqK__O)G4d)?C9HoC>rdZxbe&onPsadW_AP?%N41} zW4D9D2m;R5z54%E7=XH@Hy!K0#u8jv#D~&=vkwPIfC|sM(1m^i1;!O79=J& zrarw<+JQWl!=7FJpXdmW--IJ?jNf_@u!!bQ$b2sM(R|ML*?bfjeT6*{Lel&L zD{O0yCE#|>ZBt7d{I$aR=yb8+Tj0$F2kZvQrj=;2F5o@fNgF>cxdP#55+`UvmI&1+ zc-u^U$1*11;JJRytR)E-}=w-6l@uaJQdA}CcGF@b7X_j1~*sQb+%^Rh=umVlcUuH}93XGeXzl;Z&` z81p+vndHFaBpEYXgNgZZmM?{2uWW&i$s{ZE7)xN5M(W3{znprFPQK&k4C|Y}IsYRL zWkLJvXVF9^OahoH0J3;0bP^R`V>yH>sW?}~20&+06jGWTmUHgO)V8Gd%F0xn)+}Ik z)OA<&sC+?EbASTHrYm{Mg!<%rZ)@k;9IP*;{`Jy`2|ivZvX zW5c4Sm%dvA^+1_}&6APa@NGOK=eqVz!h&#MQpqocM?7tByoyW0egp|mVmT_?-~244 zy2<}iZ6?xe_<{*JZ2*ekMPxs5(TZR?)n$2@e`l`~jj=WTgiHUa7vsLPk#ntmF%XfP zI=1y9wq5DGc_2E}R=nhvk1srfo0rNFKJP#f?B5e;7#bv(-fK=*QPIU&szxx|Z^|-8g(SIO7+~zTq;Gps5%Goze6+>eGz#msy|yL!{|1 zXr{QCFhe=eQ$9qHD0JpP8=PmZ-OT}rnUQZ@DWGMLSD_|4YJ7aBk5 z?6xKCcbDCZfhuTp)uZW^L)tgh*Srj($OXYA!4pc`7(!mx> zo=vXNfVEdnW%CmW97p2Kt^r?I7<9rBGuqSxW*>@1!j|!5SF^*OW#gV-_?))&O~)cG54K_hhE>+Bxp7&uz9$T{gcNjhmdDLNU}Ds+xsv`QKN7Lw9; ziNK%&2r#_A`2S`R&ihO&a0%ya#l(zQM{<>;-0Nq5Bw|p%S9C~}eJl3DGU>lUTX#W- ztz{H8B{@P8N1h+M*CN~bRcl-xQzV$4DvyO^r_nHMj%Jn76!#Q5(!U-TmQ9o7I!8nB zJKSh3*6}5YPVOhZR|aUKJZKg5I{f}R|6W;acHKllo-V8SS|T+aEvLG*va;ct=L;uj z-hSGYivd8l+mp-(=2&VPiJyuHkVeB|F&qSRRf&dsvebcV7{1dBE@i4}OyZ_an z)5iWD4m@@hyW#xkFT6GR8pyO?uU#>~(pNVdLCbypL&SlXg*)AH zd{J;P;PEW%&7yGcl_r6Ok4!!Pv}N=At&SFTE7Q3H@twZwxQ-TI_r_RtI?=rJ&CQ{= zS7F#7S$ZlvZurd}AWbwHX0KY(a^b3lknX;$@9`*f0*4q*-(uo2X@cn+q*P*-E?b zWL0&|VeEGJtSIecxu>AEg-+cmn6JHqN&b;#=y2#C;kNHB+I8Y-Ka6xYf2F2-47zMu zRq7X88^Jh66}JYqrR`X;d`{J*K8O6l`r#jqBzdLlR417_HP_m-YWR4pq_4t`nCkyGruWa{PSw@f%HHDNj)crM35yBi5AG4oT~AGn zN;$#g1r%TwLY{((80!&UUr+B{aMZ&PyQ?i<-!OKAwi<4NH4)fR?Pj+g3XQ?F**Lqr}%TH3*v@zFb zZy?cGb#jk-RXcF-GEy2qZE#pYtqNSgBP&$w*$l>Dy7 zVjQKbBUYQoHwZ#9#r-raqI=ry(Fl)klO>-=bhjfB>VllrWP528SZc?NNf-1-spCFv z6a5Fz$pn(pO&6;?+6KJl=EFVLscF*n1JSxAUE562Mh{byT)E1ArC+WA3TE^pKBuG) z#YEUKk%d&LNpftO^u&!ly?4zd{0b=Bo3~ypcB*l%1Th)xC%63am<$7$27NNsbb~3d z%l&tOgNCM@XcGX@A3uqU?#8enEZqG_ezW$6AyCPp{Ft9CUg;DGxxnVPH6+A6g2hh_Q0d_D@M^DjfV@V1%^Zkr8*evxR`Lbtn4yk09GC?(ZVw^ z+e|3AtQ2^UIQy&**GHzI_5oP?qOvP;Bhz*K{f+{LiV-cH#DMC;s`3+Q+9u5SRC7 za_-!YK}u)XB$q;WaCt{8%GdUg(Op?p!hK~bdgQ{L!@7&pf=WWc`KTSvET6?5MBNRKFQML$nqdIG-!+m&CCJeFmJaya z84KP!z|m09IeWX1$Z}2KqZGlr!LL^BdQ!EH|r%})4WZm@ygR3 zvyXQ^8)bYvA<^a6|6}Z(qAQEGt>LiZWXDFuwq0>jv2Ckj+qP}nPAax-+jhR3bMF1y zz31WFzqS3cTH7ycwl&8bz0W>+A2Yp}Il-R^9zj1r-YH&g!-19@iepz(f_25}a6){2 z5PFuqSAMzG70r#>HqGl0#DL0Hs3KPd>Gs_+zvcqz4!%NK_B|^6P1o7t`C@gt6V_(X$O8Mtu*(^^>EJy;;lkz*+bgPA0I2hIg$xTS%lB%X96EQzJ43*TC`-+ve$k!t?(sX^$=m z7rkcBB5*z^cnlR=!Xk)kjqTlUQa>jK^)7OM%@WqSmi5AX(zc)k!X zM}vYvkbuDN)YRSmhU`1&H1TUi?zJUlq~@zF2f|ZL+DUV%l{(1ZDyE!*fm$Ij*WE3V2EBQDCg6hoZUNRI#DiC`}eh z)S$c7r&5hqMHS$^Ur1H%tvCnF8ai^w@}8-4#z^KvEHp!fj7$2=dYBK`OHPIq11ldS zO?VbA(4S%sD@>;*N)kxJluBIGJl{lm|DqGz6P738I}00$PbD78&W`R+2lCZX)T|IL z=%k_w3(W3gtpM8Bg5zsS`5m$1&ubS45t)lbm(C&s82=S(N7{_=#4~fN!~>Se$YQU* zEx+*77XAc^TQO=qFg}qa^UBoE{;kxF`7OdphDm+N$kdAb{v)WwlSJ&8vR|TPXkGH0 z39qQh@@KohOlHHGL_vc}Q!jcYEWf9`&&tCUZ)Ne*!$F~xHCUtDGgt_-4C;l!B$%*j z_;9zfUD;ASjC9gLN*!0olVZq?Y>gh$qAo5F;B_Ge3Q_~e=Da&F3Dm)G3@xa8PSk1w zj0~AfC9>Q$+7rolgl^l?4LM2`k*5~77NFB@sV#hj)kwhM4F<`4{Nk9|k zD$2ZJJkeO7N|yF9Y?_}c!hB#UkSQ$W85dHL9T^VV4>KUYNnv5cRnQTOkuKEg6Tv)c zTaB#|B3{-&s*av!k8a(e&Ym*DCvV$@;({M|FD(ngBc4$5&Ia{YtiYKR2LNs$y27rU?!qUcDj|vmavl5IG zC4@x`ExBjI%oBE>l`+f^w1g=u{Inv zObJc#WK%z_7dd!Nu$;-5GRhY3$iNnOTQ_!30El)ryB(vZCE&MXctsByc(-gr`8{)b z1}@`GWayS9VWQ4r+3hA;qRw=i9jyxNQPn%N){B#+W{ytleWYrB;H;(3jC|r}vzT(m zN_@|Yq$>=f$7}>5rKR>xA zNYy^2W$G3G1e+B*uXeY|T-{n`({I*XUw9y;7xDmU9jRxb=IXY0SsZsdTd3g+{Y&eUvwpx^n9- zZCY3{z?ec&Y}>|h|K-jqh%8pi^H8~=PIry!bM?)4O^kQVWcs$}bdAS$9kc8fMLvMP zBp#)FJfyuGG+^>v&xd@W*5kW8;MLqV7QFqhpVX~`E=KXiR=?-v7oCMi7%ze<)3Y0k zw$%&lFBdo0nBbZKn{;X;b~d49xLjNsi<+jjg zb#cRx3`sI~kjit-ky;gXH7|QQ)*n_x3+jaTC9Z*vMv6@}1P$xXD(`M$4EM_U;;P(( zdv1^qN8PFre*WAbuFPo+dJ(_(Tga#{NY&Y-hTx3Oje|#PW?T1DzV+$=(ct4$UAUr zaPDDLHW?8!Y#fT05p5{p;VXNS-#PG8?|d zND|+JGtB={lw@OMU}kJ)@c%g!>goSC`I0Cl=mw^TQqh#>NDC;27}FkLef;xTZMA8Y z2f8m^8)>4frJbz_blfYOLov-^TBSu(Ag7*y6E(z!+|D@GK$~(=5NMIECM2#j6x-?q zcpafdMbSXs(rE=Z%9@gNiZ!nEnzqbr>3m zP&^-gzT$(mOaDgmoUDT*a``phPPDXs0?t})2#@2k4nt=LAOLYz^Mm#Ax8njvD5XpaDh3|18(|>VJ+|$AWIKME!x1U7X%s*SmkYz|OTNKcBhoC^t zV`0WAT41`4fY@OtxBZc2x*@-I-@bX7c8hzHFM1!lN31#wMl#@u(iRv}hzWUE~YPHVH= zcc15{{rpU5Cp}2B+`FzlPF^H7EG|6vUX;1EFt_gfpD_Y)a%7*x5fWXKh9axry!&c< zrw2#L9Rj|l@=yX}_}0`4GZzN27Eg^&9g+hv7Q=tcl+an(SvtW+bz@eR{SdVy(rjd| z;WR$v`ZMfX41;j_yjV})0BhI0o}cbCCRYwOG>$&_w9oLZX<6FllSou=e{^x*5tdJs zkpHVvm?p@+Y>C5TcXM3ZxX?=4doh7-B(rF=wSX>Ze!eukrmcIhyf};1D_K=ftTbr| zDZ|WkaN0^?S+F`tTDB==bQmVBu2ZbkB^CViz>8P{@Rf zyKwYAKb#?fqESc3nwm$J*f@A7)GT!fu*U9el7vOdz@skUT$N*>3Dz4KJ()bQ<2)#~ z3@(bA$L#HFtUsXH_buqUq;5U22yQa<{@Wk6HJ!?-?w~$uJ*+H|!Ie%LcaqeQcG4px zMOGjs*4j=L_Z&5lXPm z!{~U!m~1@&3<8fRG=%aEm>9*Ew?!?8Y!?iMs%}4#=sIoRc+hup&xT{8J{Ohd_PG8~ zwbeS5iBH}E5eZtvr|gv%GcK6?WL&}5Q7Db$*Z?GOTPyL3XhR`U2DlG$qrdM>a32dN z|5%NLr$ywXj&DArUe#4(Nr`7@dtAV(7|p5>cAI-7{A=RzBzXcVf((+C>!@P>IMiuC zirZAzUYXy~P$sB87SN}IswFv$iz*5gq-H^p<5X5-){~_)V|_(7>Tqh&pO{goqy4^$ zGAXkI(py=Z__4Q0eE-?e0Qsa+x_td8eHN34!kKO2yPQ3mBw^M~axubKX=2*Ci=5IR zUV#;-Se?L2Z<@5*BGyk2Pzbe4=e535f>zw0c8m}N#3}_8)vd=E{|tJU4ME=_TXbF8 zC(5lBH5-m!an$KZVkw^eE58l%p5^n^LkISb?nSljeH~1piP91<2I3VJ4Bi1-4e5fb z{fpgU?jShoHu6s&7s%$p4v$N)!P0Ry(J$nOiQZWPz54mml zcYSCDU)*s(0J>o$+fo{&^B=CIiEj1oygPKlIXzJfU#<5j{%}nUsyK}tqAPu09$!!8 zv#D!z-wHH%waVn>_2g6!@aCdxC8s1}mFsJ)F4}E;kK;er&c1)>ucVHN*4dy2Uj&M4 z>mUifM?cab!gj{@YLh|}Gc#%&T_bJY_5vWu9FzF8KiNRG2A;sWqNxl)HQW+&zx=#q zb|66b_8~p{`-ZqZ{IUskGvi#GGYzLal0kYIxB9MRcE0g9z?)bXk`C$_&fw_@XBNNS z!VBc%rYB=w%`)W9Mrp_TbiFhJ&a=+keW7MdRKQs?ameta;L53%wW%_Wq4$$pscfw9 zK2T7j-P_N|F7KA*j(1mD6AfDFBTe;+VoXQl5DjVV^EtXo;v?v8hT&{+$D->@)DHBkgxc-dyhT zY;~8I4UveNomnOo+n+G%!#}x;rU}-mB$r8(jeh{vB>J=$V|rfHYxMgTzaor~QCsid zo+9H(C`$%x!YYz%xq*Yp%qPxv27=GDIhCQ}kIE3D!vm@CT8!Cz35MSlhU#W>H_0O7 zT;2NDhYUF~3AsdaDaR0jt+>HR?kxI^Y-E>}G)yRIS8x_Y66xE$h#7wZ)G^8h_~=2V z^G2OS**47Hi62}Wpv2HAyN$4ae2N}sZ^SVfH(x@$c|=On))jP&z+Reh&;MRH6~86 zCJ{YS&O0X`8<_r&EsA2xFgi3ahGb&u z%QHIa9nZk|zM=Y{Izw4Of2UVq!c%cpiCkkfo7}amoC4-yD$=o`!jM)8OyOwTFl&j5 zdhCZIu1v2Thc*UP4(u<6-8;O*#|4s{1aA`qnQKh@6_(0Ao)^DzkBT?0ISHE9Z#@@( z=bzSd0745!3sR^0)ysOj7wH{yq~Fu4%gk_(DJS-VDH_)ULTew%DBi5wkRaAN`Hp1v zgm;c=#7I)dl2ZP+W7}OB1$S&Di6Vi#4dO&D?^hvfl4;rW`5fcgotagR=Z4zNgh2oo z_Ho&6t+i;eAIF`iTWgZcAGmv4sq8MS$Kg!sDlu|y?`>QycJE(MP>s0y?qSZvP zpVh7qY_SSshLDZ(hgh`2`?Fu@{a}@n`>`a7c@Fz$>Dv?<#eNvB0TS=0%f92j;jo-h zR2Qa3NwBO-bDm^VxMOhMg+76M-WzcjJ#sF6d^k|JYBd;x_4XkB=Rk@&a=-Ppb%KHR z1BjvuvWOhJKB) zVwpz%xB*Bu>41sNvn8(M&pcY8`DT&%W<5O+LBSboAuau59#{=I9Bt!(DY0z1S(`~f zHUq>a&Q?#6e^vy%5-va1GYG5B?B|NxzNDKi+6PKycO9qS9fvPWz;sus_iv7MX;=&_ zBhH4&N0dVfaS;t&8_|TPXW2N#3-dsU<-eZ;#H|I=fr|Z^VTvtx8$4~hxIAIG)%ZUL z#_4lA0>+!(BDByno7pfNSj>3Xh8`R{UP9QWym(Qr@wRn`+gViw%U$ew_mUcQBt+PC z2EM%W(?dYnVt0+})&=|>tmG0KWh>=Ml;LgJ6_@)>0n|IeS}z=NzzaHB)#EN#1jrtw zZbg_*3F51%@2}GJOj9OdCTigMGpP!J5>?`4hU&qZ+Qk2w%9FvJfX z4CYz&SH*61{n_sm`5GP>kl1_TGn4gjWAsrxrM>d!2Nb|K!3(a$#varw%TjEI@X~DD z5TwvrtW3*TF73@hi!*H(ryYE=VH-Q$*$o1xzdlDRl2AEUYP;<3rX$Fr-Pnw=<{HnC zEl+$NQwTw^REeY)E0Ir{m_!V*RjXOBmspDUu)$#Php94?&edpM%Furb&P)M7|`gLU~g^vd&J9J(@Y+6X%0EJ24CHPZ6SDY zhI7wSI*5`xh>Bf~W&-h08t&Q_W>o1??1KBs*beZJxqwQMzb3axkeA}{j_nCh9FjjG z3z!|$CzAzQ8a4P82QZEr0m{ zxE>l#JsukTT~mLbnF6bWtp12BlKCUW%N0@btX}_t4)rM&^)>BpofcV=%NoC%81lHh zP0x&Lc=XdvQHOj|RO%?-NEv^ZJXU|c(>W65gdA2Iyi(_l?tjD9R3t8d)wjU{`M38r z#s2|Y%^YO)?DVYu1zi(k0`1O3Fao<#Q!eP4?Cnx1k}-Qna?VSl9IAh; zGus+2s%zR_?u$sxRvkk-4|ow+luko#O^6*qpDhg)m}Rx2Qr0K@87;l;h>8v_SD(Rl z5fOU}sC{@L>XTN-^lc%#)~aJv{tV;C#YsapWvd%2%Gu3LWWYzCwVlgi*riaA{h&{$ zm$whH8fk4VIZ&x!`L(sVS!7Q^^)+7;*R$+1+Jjp%D# zDV6TZwjY;6X?FO>sxolBl`MpVYl$tn)6M31r%aBSG(z4>zq2MW{eH7`y20YMDKT#0 zjqjlaMYJSGn>7(pAb?275SfIO-Lb)EPMI^Aktkx8_LxIx0k^)&(}axUhPca|^w#et zUyBlw%XeevWiB>$@gUJjAz(5oDz`CKxk%bG$z?0rS zB4*(Sd%|g)_Z=&F!l28~0lw(d$&Yv!skvZrxEQ@2PA=)o*U5ux_6+?jJ%V1n0WF?k z7YwNHXP1FPH{B<+(zF|-kNACW9Z!@h(n6FfYAebZD*?)mbwkI%%m>UDIY|ce3wa`I zED`G^$Ik zmUWfq23bb)EM#G8W`NA@8m6oI+PiK?+}NM%x%GF~2hZRZrlTb-*`K+XmIJ>P`XJhabRf=YlFkLInm95%}tmrCi0+c$< z)ODfA7`R`>Hg|C7C`uq73N$T{T{YyswO`PDKEI6Qgks=$sIjB8D%#+i9fJ2QF^GL{ z_)5EWkW0LU_$;yKcf8BrPRkbK1iA|FI-W8z_NUS zRNVf}hoZbW2?6L^5=HSXiTcl`MgMz+gsp5GT>rJdGZUOOh}h5vqSr49oy9h!udGgR zJMOcxAT==lHkgQPJ|@a<-DiE>Wy%-m0rBnmrX)u>cpt5|a^~}WeZDvYfj-j*LQ59W z2c8fc(_;^5g4|J1>oSCrP!H9{34p}g7AT16F@_eaMjFsWJ+QOxE)$1H+4zT3_}N&j z0sk`G9B1?!WwEY_?C|P8=W#0-Nlas55^MxDw}0qv#y})n|9Py&lyYo4-jS&{RFrAJ zlOzHcyVRJaHFoGXksg#IKchWQb7Pl5kZQ2&5w4r(c#*)H&x17ba1Nc0-Fnk>hKh@R z7f`6!pVM|)tr|e^(+a*MDfunhPtz~u8q-}oCT<^X!uTMKD-C?XKFb1YE>+f?&7s9Z zj%>laaI(!TB}$lyx?RYzO8lX1k>A3IlB|79hhd3XN|q#fmP%mhP->#VIq_*)YV##S zsuDTtWTfOZD-lMrY^Y$~ZvZN8%4p)}R2Z_~WqQ9N)&CTRSKZO`OFBj&WwcylC^oLRrTs*@vAIbgXFWM!9gX7{33R_&1eZhNc|~AXdJ)O z@R1|%B{xGV%7}Ju6WQ42R1d7LPobM%sMV6>7TP1mlZuk~`BVXnVKNW3e3Z5?gw+ zPEw=hyr?4AFMV(~9JYQQ-?l>~=;;Rd*HUE_hF=*~@I<~s5+Yb-p#*@NoJ0i-w{Sz= zEc4LNaitd4Z51%iS|Va|)%~p>Tne1{Xl)#bK4M#HHg-0CVs$pOFVy1kZ0;h4L|V52 zV_}TQ>Abh_C8(=ytreSgZExTAg0dwGsVYoXF|@`{x_8>99hLJ1P|AT1|H<0~0nCFO z0|NsCtiFKvy?v<5K>?t)Y-hj;ndmvdkwB1X)8~I>_yO|nxO{~7i3pb}H30(PHLvC1 z)va08dvG$w%kfZ%-Ges1BFFMX0c<>x&DTxEGodlR11P)h%_2~_`vZT(GPNGXZft@P z>JXhjWmD=BC7*k8UoX=}!z~GY9BTq&bqV3`#^P5>cpM5QgUk$>J~+P<>3gje`{Fi( zFMI7aZ$LI!iHhFj?0T(b@~=rdxLS5QbBF50xI94+f4u(!&TiRnpV_-XuH$r=EGG6o zLcssh{w2%3`B9GUS!Qv<=Mz&MulpVI%Zce=5yVfgDX<*{0?H*}gR)YRS zhC#&}&e%O_wyhS?u7v#cZyHPMff?KB?~=>@U2^|3yX|0TXY*g0bVq4nw*Yz!&z2?H zX`@bq_O|vlJSY$Lfa!K6glVn?5ohG7FTS@|*AK91-@+bQUAt*$EaP+LJA3%GJM`EO zOSaw)+que3CW&*04?>~}xdRr*(Cj%M=CJ-r)l5=2w&DU?z$)-ZFb%gY{Re%0{BLc~rupw_w2|E|-1dkV#%Xg32Lu2sr7zLU0Va?fx^ z>o*|JV!z7=Mp6dYOb!#{{qC=i54vska9+4Wk3%(b`{g4@(MtP@aocEQUOamv>D4QR z$32HsCSDT`lgv9jbZ%NVO(Y3)KXUri*zB}VS#r&24fPVbAFf&Q$x}^h0 zq?%ADF9_s!;-nQ8W_s`E&tlo)iKRE0M(^c|3rno{QfIqt@L7K2BcIEwutGE$>=1cc4`QOP_Y( zc;-*(bV~}ql@< zR1Q@Sel>;2defnJb+^Hk>-$L`Ei})9znBe!+1d7Oi+i;$m0G5F^c;|7;-_6kTk0P9 z*&=O@Y54UlnT`-g&nO*%pX#3#m%r54_16)dBx$0N6B*w+O(|LSiZ_u z2bLz~j&qFBpED`3`&wS$ZvjF6wKf=cK3mqAbfZ>BMSefl6lP)xjj zb%ENQ14+=bk4fju(&?hN1M4BU|gyK&NUoI8oHoh;PQ87eL|+>|vlv*F?r+4w#9y)o&HZoL1q!Azs3u` z|2>qdi)6cqGG{%D8JzWj|G&Y7d`23S#CIF=2?+#5`5(c>KevdinT-+szxD`9SR*P3 zFl-PXvnz*$x)c9v-^PX!>YxCGE*bUb+L^s42>7H(kSsYRNxtMjh&)`0ob#&9Dy-=Y z{P4`p9IBg0SQo^P!I)S^R#M5#@r2eI`q_Zd*{{(l^%V>aC+WxDU+mDukR$jcN-G#6 z&|v8;HkWwLGF=%R_TlYb1}4jDNNA)zLYpTt-9as6=@md)G)gQTh!QQ$U=nMq=#UAX zvkYW529o5wv8eXzr$s`eZ`#Nu(vh;(ss}8-&Q=EHmi`aW8(as@CYd`G&#&i-v8)|W^}3;d>9;JP z*ub!+et0m5q`&0#_ZF_}T0X7Rt`9v*PgrXVg#(9_Kxeix+k;(Zu2L2?t|jrGk+_rE zSS{9?T4faac1!4jnQD`h4z)H??|`kY(WXE!wTuV7j0w((eH{>pc>}qa$xSuweB^dP zj|dK$hnfHj`oQLQx$YQsc`?WFPgs&4s(@MJ&9)3d$h!bLf^k;!v%=pQ85`RbA=#l2 zhEUiHs|X0>0`*>1$g6^?K?y@cGY6t9Qef18ozl%``}s%o{+L(lB@LueC7Wg~5AUGe zlq;e=WMw3D6ew>KqZ$gRbIkp%0kwt_;hCXD#YZjL-Db z;A&!Z`d21dV^lA~^9i5VPftgI1y^$&J<)E8_nV84zzF_1BRt~s-JE?x>qOD0o^Y6$ z5*HvN>ETViAvpW2N3LRwbbg~#75Ut|wZW)p^b9+qok{GGE$A%PtM$ivPZxHSk2#N0 zequnmq#4ya<+|)I%rHM=Aswvi{3PfXtM!B$*cmS1upZ z5Ts%a^TB5FMzJ`XQ;?dDL1@#?UDU}A7f|WVEWJw4s`M9?Th&ZqNH0C)Qmt+4xA&X< z#sk%3e_hrLcjj;AjXm3&ar30|A>-kA`^&BvXuP(P?M1@L`T22q46m_Uqs;6>GPA^OOdi`ZC z75n1|8xuQs*U?q)a$%UI)dkap&JQ3#05rKFAm>l4F3=usHzwwPpXqsmV?e_)ZV z*<130#!{M`&NW{6W7E@w45;HcsN*W&28eybofJgrcTtGAWMce>#>pR}OGW&R_pHO0 z@BbF3_|bLqUi^JvpML|RZ%Hf|lIdHYZxdekSZ$Io_UNYxFVfjced%PVywDS5An&k7Nj0y}4E1;T-1eMHt zvUxBkCe0M>$t)eusQjZCxetyCrBX5x4RF`!o-9$;7$cL{KGY&Vj{Y6Cb+{6LmQzO6 zj9TM=PS598GUnwi-rw}UWjO3CWc1%9SJN^YBO4h~J*4XEz8D_sNZ;_;Pem{utTQA0 zlka1d-@iht`Ti&s@T2UYTrp%-jXvR?O z%{APQ;3iYBnhR}tGq#a9tgecPS1X>~Q-{Y57S3I>L>;9BTlp;2U?5)SnGu;N!D<2)RiM{ryV{pX>^z)<7Mo?ZI$Rcu% zU`ezd=ibg>)=MwgUA@XfUa*~|s2W>ujTi8sk5R|u2)Y;>z4YZ~%Y9WbrcR*loWQl9 zy1+p|A}mTB)clO*d~$SYm@UG0chJCX;(;G=@(pi6;iIiTy=Ys;6Fo@0fYU^539|rM zvaR&R1}V0Qw{bqPtVw0LB0p-Rfj|GV4dY8^tFVm`br$r)?vGj>}h_M-gbYV?uiEB+cELgvH88N@-DJmd&rI0gt?*+1neCh z_7(ErX`7f%HDxrDO|cT2g&=LbL)=~2K8z>RkGQs}!fW3KdtT?u2maZ+1@}&LO=pc5 z$JR=<_NL%`{62k=O5-;lxTXCx0P~K%cZF47KLe_P`mx|K5dl*?(P-1*EMnw)y^m!U z;C@;_X&Ue3Zx^R!8)&FjCiZ5@Sm#2keGySXPsu$JO|r2-8~#EDoy(x8ClDmw>p3#Z z9QEf1*F$=&iUXtm%k9S)lxMKb6{86%atSGB7ta~= zK1Y;D<&v!uUrrm?U-t*eS2uEe{nb`woch5M%d~^8gU42Ow^^Rw9;{8r@ zy%@Pc*$7a0XpRqANnj>9@}8{Gd_2$}+S_1E)BF|t{34cMQ-;a_4|s*o>EbN|!`cO> zkH8QNz@tA3r2g{V4rXXtYN~?FW_sIyDS^ zv4F7edF%BRtF zAp_+2G>G_upLPWh!e6?2pi3P^LQ(q(lkrFs+6w9w=^2k{X<#l!5)&kNG{Wkryezpy z@QjPf1zNR43I&3(!Z62*9r+faN>Eox*V0s?GU7uHq25~^IGu@$jKW~5zI_r%6?vH~ z_jSr5i?$ID83v%}EB#8W`JUdt2ip(cB!1ac627Y!-YgMMo#xyyj6ZIT+o|2fuVBQv zYE6foVW{?iTv0VSPEq|{tpXMIY@;?4Rq!5EVTcjd{PX!{y;)9v+y~yISBo2*30ohY zdY)wNo-(vKN(>jzuL|P_j=BirQ8jvmHDu?7j8+B8#~@4SEof9r4x6K33U3U>0ymNe z;O34L1!JRK^l!l-97IgxkboGP;n$!LFLWcrUO`c8rq`GIn-1(x^Yw2e*cPSb%kp>k z+4XJ6`v0faGybdACng-|?`>9J099*t)(**kvSW@o>Hm~Ik|A* z`70lUq5Lh65mBNq^1ES|S$Gtph?h*99c*|_nMskd32gV~QjDqW5amdcb zU4oLGb;yQegYEolkd0Kh&l+@O-d?Z=@!2E6LO}7onNG!zqj=S@1 zfD%2%p*)B^YH1i4RkwRtpq_byGbh%~uBpIymcr7R6l>>^Qie5l*r~aRT!oV&4%v?H z6lg*wNs)1bOSTn(+1ktBtCrY#)ga(+y&yU1vHURZ@Es~_J?s#LW9^gidrhJxTcCtj z3F>EF5yAR%wOK#6f?{cJVWuEba2$)G!c0dTm=*V1cFM=>Kes+ z^&_|@5p^;_WwId+TnH5xn{!16Zpp}wNr>m1$>4;wBqDfaPAkL3W>|;H)+__!POq;_ zM_y{pV+FyMZtFJjp;1?5*8Cg2%;@Wx{02)$P4@1Mz|h7e<5}cOTtQ^o9|avID=dOp zCm3BQJDQ{S^YN9m#D#)dBnQFS5t-BIz46Gvf%RUAn^yI`M%}}k;#~lJ5n2=D#lX|L zkF|qfJj>j9I{H*cnna!!&)|SHBSBF)hioLtrH3IZO_i`PxYLoV_B7x@h-e+u8~_%g{0{j757^}e2>KlHB07KoA-IA; zMu+c@5*YKBn|$My$V_20%PQK1;;?W5QV046z}XEWWwNy z;5#xe_4xh-+m%YZX0F(Hwu?e&X8|wRqf|!^cE(Ji#9YE)GWyb7=xtTPwY^ zP`m~T7fl}`j}clca&%s=wkXTJhZ9Hf?Ht!Es7!qEcJJ*%z3}MyG5tHje{y0JWg`w^ zkn~~T>t{qWjufZt+Dk%wm=a3_fzj|1m7Sw<-M#3W@J_XxkqBi(-}xm6_~U62ywlN| z34IAyi>&c^=!ZCQLJPiu{3PVJKfn(a>C$dBa;PZNy|Z3O8oLQ!DhG{cV@19H{qaHP4tqAXE`y>fX=yJqt)v=D`U zt0fwETsMa3-%&B+SP<}F%49I1Wd7lHO_s0nYLi5J2##2PL-DTI$Rq>TbZ}NuZ*A4| z!UA~Y+bD_Hn4ueV&xhNb6FlZ0Rm z-bJ451eatw4IO$M{Gd|E!oo|Z{wxE3SW~CA1WtF-Oj;7!hhe~sKp96gZlaSVuX3=A z3gVl$OWTcG?f#B)MV(xh$N~-Jqg3pY_=Zsa__>MXdjdBHs#LFw`Dhv~%uDF&nXegGOy#t}NUe#KB1~zM4 ziwkE7Yc14F3wju~7~Wwe%;6aXFKUXb>$F}Go;%Q;GGC55VzwM$g&V8U?1NrM8@R*L z?gi_x+x1w|ESAxO~Z zNQvO>7bT8QLB<#>L;fwT&7EjXp0i`%fizHzCB4H0XHiQVHpSxMOD9^m#OE?e?Xu3P z-9%yqm$Vz>*0k+?zZ3Ia>wTdb3>%3WhNO~b4f#s;KoHj)BsOct$?50=mDijb$i%cV zffV6b^#8K_sn)1kQL%kJZQ^m0OTb*3E8DevmlL3d6w->Pq)N${io)$mvUM#TrX1O{ z3p*_Q{Q1S$TD9ybVagB+psU6KP$}X})!G zJNJj_oa^~sV)s!TYStTSk49=cZnd?A+&n&N=@M??Sr?9{b?l{987yCXk==I+*1-Ov z1_$^~K7j#cqHFM~3_k%~;qbZYyo`hc>vDrF8i1060%<}1gd|9sG#pS0xhgmy1+sPX z^T^-t#O%ok!fhHZp=PLxK_Y@6c=nRBwFlg`+q{Z`b#)>#6DDFC@>lBRfIwRg!5?@; zG{AOUH$&pR(FhDxvF=6?#N~D)3Z2l1c;hD6T3pjGJ|~C(p=K0jGHUp0Em!Jh2`Q>y z>?|(?#;&2f07-ajI&6-Ba?mv@N>Q)=hD7F;j*o#F^uZmw8g(9LusEx6OoWm7yc2AQkyiO+H`qPAeXQf%nZq z54f|rDGoD1{`M;xiy=zMct)L(=tX%=U&T>pa0PI}>tVsO!tFYM|COhEB`BDek>~e= zBd@_r{A$3~B}zFAE*xcFR2*au{1w*=SPuT6yyY1+AYx$rpi_Uef=*B-rm~C?Or@x#nRqvIu#-Pbl`!6P4(q{Sc$QeXsgw|L^Sz~y zBx2l)n~pCfSB|bYWF8p?m6I~BoZ0unm!^(hi%Tyk(o{!%kg;IIE^Q}iZa0prdxOx1 zSbbIA3j(v@$Nj%k{8Z8e$V6lwQ6Mw^ss+~S&@$5}<{5qU-W*s-HR~j?R7$yk%5^~D z{$U%)=H%>x2NqQ3eEuJY=|5s0AmQh6)i8j7LfQXMp8Fq%>Hml*L5U%mPXGo8AL(zc zsbyq|$&R$NzwOqwv~yAaBl986R?Lv{V|qJS<+8==`R&$9sG)p`Ghd?EZxZw2IH5Lz zR%GcFk&oy^#2La3gC|lOKH(ICuZy_yIP)fw7u=I6ZDvG-FW;M^i-{nAkl(_;Uzedj zGB`|6zhwbYzd$33Q6!vUMD+(|qMhRL!L6-+hdmhva-{g6p@BqbsboE?mSQGP-=L&L zeZ-1>6p#Jyn{d}bk6M1}hPGi<>Lhl9(z#?c4eJVW)zleZC06BdmL!V-&RT6t0QLZB zt(qmGhE}_jB|4Xo)HzCfzjgbQ;k$A5@)7bA83eoO)6cycIv)8VUeQPc@F7p9v0FBr77|RnKNj9iZ{D?HwZ-3K^Nyqb)c(dw4v>E37HJk&J5u#53l*81*)!(Po z_2pD(^-3dTqu;U-oxW{rXsbiHQo*viR4dK*osrji0pX4YaRaMI{ac{5w>M8fEyRbn zx23z=*`uz>Ij;I5!}{(8xW84eV#8`2+| zTbp4Ce?dent=+5zX=Zwtt+ybC8_qLvexEMDb?4QH4PK?qj&}h);8fzH$df>l8KhiK zqGiT8pw#%GsQV{1^O&=7=jku257MrZB1Pd=Y8wUGYz8X0p75dq^m za~khQ%5^%b4xqqq3|2U>k`m{TJf(QVX; z8>h-`8b#eOWZsEuvk`Lj9SB(B;LZF>%}3A{k4t$X-uC)T=CG33;>Y9M7V6Y>tSgQ) z$}t_RfAn)%0}rk@5#gT`wC119wd4PAC@iNmMM{+SH#0jjcP?<{c*8Z zaj#P^(GVG-1bR=uKwlZP4Q8Byn&TIK7lnyWD{>9x>hg8wNNd)!Ms9770g*~yE877qk zMWc~~#A!+cgWpp``*bepo7Hr<;;P7;p>il^a9azyO+~pF5M&&^(?#Hs5eIiEn53D@ z{o_+#|4(LST3-hjhfYR)r(Nx&MRIWdR#5&{?Yc#V=?)Bxs24m$60K_1HxP` zUIhSpngNj+`zz@AylW~`)9j|3EKInn7+NT*nne)qe(*y%J2e$eoEJAUtZ?F~l*I&Z z+-Xt(mVRtKdRX)|V^#`WMPeozExnYzn|>S0Wco+dbz?pMT*wc+cuNMI&iFLF-?b+B z3_9L;{uL;S(+tDq-`R?f%k1Xwiflm9NJV~Bpc#H|QIC*G0;PRQqvLqKi4_pXQZy!w z{e2M>tI(mCG7mHOu`IzcYNXsD(HoeO%#CTfY@S!VmsUo*8#~96yj6J9_Mb94zB%@_*B-maSo_g{6cf2W4;HGJcACh zt@GzgL|QqP>4wch~y# zq*Sa1x;uPvSV|s!Z>pl!;!Nz9cMsP0eo?Pq>`-Q(0ew-Lowcf!`4j50M6o09A!b2O zd8O1ar-p^YL^$0mQUwixtYui@CQ|~UgrLz2JLux}q?p1KtVyt6!5Mc}!CA~wv03^; zR^JJ?U~_+EbB`|_4qt5i0vj(l-c0qElM1Sc#cGGL2m}-2OSs;8Y`x3k5$p670S8aE zv<9jUTEPk@7%gEtyyb}GT(zeB84zxJJNr=&USMT0U1?gZnK5fc@ou427aj;rrGQF* zrXL$0(EE1?aRe{j9syM2f{$N86L3#8J8V?BpUm-@ePgcL01B-?!mU~OJ!sGByrDUN zS^pt(arxO>{{4J3Z;k%{2z#d>QKDvBw{6?DZQHh2+qP|YueNR5cCWT=+dlor+4mki z>=RKHQO|SEtg6f$*E}Vm&lJceV)Fc zejFtDhj5N~@nIt#xu%a}!QRm2B{10tav|_vLn_ZS^FD>~aHBOD$5tv!U7lgaYVHZd zKbSLGLZ2LT2<%n*XeY)rX^^dr)M4r_sx0B<3pss#Hs+>oGCg?a_WsQMYWaF)#BH>j zTidaAae=l#>oRxwwqwT4e%(?EU0#*0IPiU7_lvML$<^>bAmZV1Ldys8nmOM4OZM>F zN6N1mxqB3IFW3&!P*7|(n(7Rt*3u^V`ian%Y}Qne>-LdvI^O-MdrKV_jZXKGwGmwn z@+Y;bDenCv`<8BK&^RWsQlnzx`g@3Y$T*i6`x2Z?vE|z(H@k}}dk2?0x7F0U2f7@@ z2+wo_FH9IA>h82%4o0S&4LW$KN1A+dcQ5mC8X{AT6mvGN9<$B4dv|=K_%k=#Cb{sp z+YK0a;xu&93L-20<$$D<>NS|@n9K24b)-pJSEd@_un}p-v{fc)7Ho#q#?{p^GroPN zcRd5k{P=$wT9)P9&9AaKE(k8nvmr_#r900Ob9$(Ft?exz!znMstaF$R|CIQC-a^I* z&oi53S4VNocD&E~`Wd_$S7*k(Iay$ocUFNnG~_HxFK@gfNWoveIOI*$5$;u4zKeuC zd{Po!U=Oi{B8}D;axl72%G7d=Xcm8Jv&J9iLO99it`=I9N0XAZ@GblugTV{d1ys!A+KsX_t*wKl-r(%}( zpy37nd}1hhrbr!+V26XIarjkWt*e+Xc7lH9ybZlZI&1wTG2uh zdI78OsNKK^?wBG-dbj^{VsX(e-8gR|86v(O=(XxwEEjPfqveT9LrY{F6u@BEuB0_E z!}TSjJIVaCOFSA}O&6~`z@&t8faMu8oh7ZNP`wNXaaCDRnX3PsF;*O}>*!i&%=(s? zKZOu-4~36Ca^O@|JFP^P^_kFUEG9@pqi9Lj?c;1fCYaA|N6u zVIqd?USGqh@5{E42mi?OEcpe*80ez1swAl>Y05SyD`J~0_3Jvpzf1%3u*BW2^7Jb| zz|2fTcd^vou6OloKfv8ggL|{&-mZD~t3SZ*Ov8V&^xkfK_Uk{ugC84eWN7xaI+$2} z`hk(e$lR|wT8}ePpUsQr7PHSN(MD*T#~Cmbe5#$&M8;F zdqDHqMVM;mTX&kI2bs3_s9WR@Ea`wi2fi>xD6^~Zt~uua-a;J~Hp@ekk=_RznJ<~a zxj80_0Z3wdj7BglxA{B&x)m5!16z`u(HK}%Gp_o3bPw)&G5X)g5CGZnRz3pxBZOBl80eGJB!$+Hz|e5djLyBCM#8IW!sH75;P{<}dw> zPvZ*C5H>j@AhXY?q*iFS+MUTQ$<7I(9xT^vh}RIYz!IOq&H(CIZfUphGZ7lUNtR&B;; z3}IgF@Iq(4wt^C~lfXRT{Ty5#;bDv(MP0;Csp5>ne00ZP=ZQRMbTLXqdJ$sy7bhgull4(os+PJ07pEa+#NY|}{ zm@@B{6Hxcns?(O_hpX5qD&d3nQGV`m=6IgCqe||0;OIqIo@3_9=2%i}!$wY8goy)w z|Iv8#qTwEM($;G>4r3oIwr8BQH+3kgqUpl4WOk)FyfIU2hpsM^Pi~crA8OM`0v1|z zkaFaG+dfhRnO7AK%Q~)Q?ncCo&b|I?U`XtB<0QLw*+RguKJw4c%+T+FNYzI5a_A6$q2jkl(M}8@`8HhfbW;dmVf3 zvRB!JzA~X_0oTKT^n1md>C<>N|O(1qC-KjG>KMmhkN+mo+CPNBBE z4&D{UV9#02(88A7byU&`sJxWlr7Ce`ZCw0_)j?M}haet~rck<^vg*P^N=GJE3MwZK zQIAEm6T$Wrz)#eoXXalxV4gEm`gAW6ZmcXfmAy1y6cay~9-Bu%19G+icP}|&UNei_ zKcRF0H_?p9FyvvXjnTZ0r0GS~ydD7qS}MFjSMj>0Y2|;dn$>=0ayaH5IL zoQ@%jRhrE!DvNtoqG#T1Y^;yQqG!gCC{z)D@Z1YDNP zn>?!Atu)|O8yyYIuIJ4*fdx&+M<|S^@MG$pNBtPe0dUm;-KOA z@d&0I`ALu-x}-K8vPLo2@NEB!=31aLx6J~10VHllulXX$fZl?}&eonOOCUcF%VBsL zhxn0ze|1IR(j|%UXZ25I5!GQ4Bog4g9dl}N^J=AsOuB_lC+FN+;udOg0~Al~o;7&C z0nbi{&8?d3-pww$lgg!fNmUx@7k#W19RP^pND7Cy?nsWmuT1fdgS9;#7J`hyDCSgW zLg$f={-7l&Z@e&-`-&Zi{K+OMpCk;xpcFtG5r8}NN4O|;#nY5bvAm5M4m*OUHqJeX zYo8P?l-<;{Zm2*(OB2vte!c-cronBBSys`0oh4M&gqay(U5Sl3$Vdy9h<0$|Jdm-f zWR1qWk{ClnAeVLbjRx;pZxrcIaD)_xPFoBy+T*6MQI8p}IMk$MYDmB&JAZ22ataP) zd=SH-fukdY@}WY>xR9rbVlu+fm}4UZ*(^C&EihO&&yeh0Fa@O~BYEv;A0l<2=0G2q zscK&qN{|PA#3Xy~j`Dt)FLiEnO467X)JY?vTz2XNB8DRgCubxZXNDYS%DCe%je}?5 zNW^qPQc;f!Q~a{db!rYJKNmGW7gIQQc>a`qHt{h0X)#5UgrwZ6Z3_WJBITlWqVadc ze08GX&;{Gq5hn$@RU#B@qioc0X(5qlLZhLn4eS(S~l>oO}U`mhIw zBcJMh_Nyr2*{i5x2(hYCbv0ieHoI4F{uHn0m{Z(ydN0aG8(DnSTXj%~BYEi@b+Gyq zBQZxVyXwT3pw%DEypv|M0SO=L;LviFfKLEzUkNE+k?zklFiokb&)}}l7cQorr_5PSo5CP+q=fV&f=5sEZVi{LMjysz_3~MP8U}MS|YGl*#f0Y82=t z_oT|x_{y`tRz_oH7f#wi=&lsOU}WKwJ{V22XwUQoH6hEMD04c|vi+{!Jd}}hM$?`j zEc+5_8IM}HVnD=tB(Er&NmZGg9`)(;4io*Pa=48W@v8OOEz%>P48rA{JZP~^5^^6` zjU7l>P{1aE$IGHKd?T zDT%)q%yc)b_3gUu=uE7m-fp*!rf5uNAyD|RsA$1Z(i2eRAW-K| zNvXs0BO09#ql#--(%iPBq^)}sS1gmbGO66@)NT%Wo6|_`VMd2~a(_QKwa;`Y;78VT zp$nf+&J-0t=E}JE>6gE)2O`#UX_fv~R7fp-$Lw03MiZ^&Iv4H}yi_5X!K3o#I)&OD z>Kqk5pgDhJ@eefFPM!pMs73u9Pj0K*=}Cw}GrK|>Z`R?VpW9kUq;QCs5npWgtm+&+ zDTH3)$Jf?$kmr#S!YkCmD^<)PpqHN~l~+tIMZGaw)y*-X_lW)D!FSlfF4>VRhTdwR zSR^_^UBl*7o(OraP1IMVNsh6vmmaP#ox>zaW;8oS06&g0b$U3LmW-RYPs-VfE*_Zx zy**5o>BRp%qnk(9ck{fl#d}x5VwE~Mf7J;P$1*laa)?@Sq>6RKdVkNQdk>b=ResuA zeA-)m+KW7oPl8x@lduqz_LJ!BCgNH1&!B?m1^JrX$FtSKVho(){?BEw>RCGOSwi`` zOfHL!1buN$b5%V}7Wa-NE;0(Awpn;+VTnBRzp?^@MFkeiGe)L*>K=Vz$fBNj z`$P*SX-P2%`jGa3BI64QX+ITmn)%I6$Mjf5Ek{hVa)!DPsLqPJ6Y*G~AW3 z)OGo%hLpIk5FmK@Vh+dmIi-#*7lwU^1XXazqJq`l-Cc1HE`@8?cf_<6OlS;i`m9u07}nF zFu40_Fn8NVuvgp6Z5vaZECtdLA|A62XLj~K2@X&^wtgaMQV6gXkto<^4T}M0F5dup z7Vni{cJ~bsY&m2d3SmB=(2gqSrA1c~-jto)5@UCzKg*bSD)FeQ)^|gfdeaMMDk?OQ zSIGE$?o@`G)X68oG>qQJ{Mrc-qF^@O4QAesRnm9mVTb#dLG4l#>drY!{a>U)|Y9wdA7WfgGMx&n-dntJ2n&X zhhiyJFB{`2#Vy3m%&}{GhIU^zJ{G!T=~7{MP_yjcFHqTusasnZmq9!IW&PTB3m#eY?^$$e+z#F^q@Tn&ET8P|?)+T}er6aXue+fv z^jqa(gt?R%G%@$sV6Q2>Z9wYmnYl+iaX4q3vXI*{+LM-dO^`hKOS_rQ>CY0tomMxS zU^p{*nUl7gR+Z7brVXPab@MxuKaFE`vX+ZENYQE6_8yyrQg0uvF@hhh)hC+lv>Xwd z^NYxB&xUoj!xp-7=d{iKcX{T26iDYt5Z7YAc0#3J4;{mQt3Yx!6E^?jsBGbBBJsz_ zisZjE`O)&ih9H6{KKw1+5ixUgE!94S^EFb`9h&a`o0J&CIzD_`{CZn}5_#ny?Pb&= zK7?3Ma}pF7>}`lLNRA)x@Q@x(LMFizE~^y99M%8hg=<9x|H#H?ni9s#zm z!40VY(%H?Vdu9?3X1UA+htTs&>xlO(XdJDjc_47P8{7(}&k|eBbm~kb>pKjMf>ZjE z+H$>}pMhp}*9+Xckv-p+WzR$+Ng$gfj`@~9$sq{3c7f|Q&u$a zlrvKL)s~_D%9d5*TC$Qwzrp`+---Y1NyEKw0ow1LZ2sQ=y|e!R+>`$@HpT%XsRE*e z_C8p9WljHSxe}Xh#;+NuXs`mjqTFERd3`&dUP$dz3l&{Q4VFvC*&^yD^2v8~=3*WA z>Om3}BSDeR?r}A~`92uPKvpK+#+Xi2V4l)6$HYGAVTwuW+i~Y>e%_FB-)=X-QDm{} zWQY(p!RihJJvo?7*9tS$?;VI#CD$QUW$P)`#^(QOt^Ix?Np>~wVRqTq6>?oVmlm@9 zkzo%$hBULxk^)+Spr@#?gZTS^?}Y2fN7J2qZ~aO@TlKc{Imxzyp-`zP@47;CKl5=Ti`E>@b)KHBaO(mJqIn6qx@x^Wix$)63X4U@(}1fWNA- zIS{56ia%5!Kp*%2vc&yog-h=B8-RXK{15Q|gSVk#ZenAi{A>07ukj=?2}`cn+$f>^ zYfO!UQxW-7Q=2)7`Od5ksAh&x(T!@k=gH|cA9A2p130kZzKPGZ{JFirVVt|dOqXWC zitvo^M!tb0kMw7xhvJEg;mN7t*9&;h5Ql%G;O(Hru2udv`_-uB(w0T6TPt4W(qXGs z>QUaz$W=s6XwXlbH}$!k96w=e2AFa9-N{{BiZQ%fr>eYkDb`eS3KAu3(u(WV@Tv!n z;Wk!WFH;{_vROr^{_Qi0+R8-8lG#jWI*$2*^>y$Y$zZJ7l-iX!g}q4^@<{OZMt!kt z*5hofY&(&I{=~#~o?a9rrq29mGKepu^P(Bkdxi{kCB!QF`z6?M3Wr35Ln5Sspojfi zc1pHVB{i2LQ5WrH=PQOus&;n@fW{-?hTSvPSwT=x9(tW0#xQGT^nN=pzhfA$EdlWCBghxwm4$!X({CpK zIiCZfvxCKaV&$Dqe$N^(g*{YxH2CHK0Lg_pTz|^Ym$wD~1^j;=BsqijZ?oS+v<(IT z!1&+2K2tznFYG-A=5KPw{S1W#Z^Mh7tZC+eC| z%6}jhrR$OgRwfpNB!vVkz~^7CAT_Ln?ev4EXBNpN+8{! zqQuzOz||1Bil|$P^F?`%%BOgofaOl9cx)A&$D`lyTa322C^chiA>&$E1JJHxP1S51 zDEXXb(!9%<@-pmQ#C|F47?WbebqsQK3py|ND9}2xWfWc3HX}aPZo=&$qTPQI6`Jgj zGp0o5-a|0ozYY{9WUt_I{tWaR@i_d}sD%a#yIsKtWF6xGz?0IL3^D|0;kNg)gQ$YP zczIl4$iAb4G^aSzM!ALhCoCJhtB3l5&>)wkG>4F+=;nGuNWmvH82fXPZ7)-K>U+kK z*TZ9-5n(NI6#5!8>5_sQkp1G5GTA4+l~%n{-oGICVx?t3SJ>0|OL(?V?qO2b#7cYio?tPabryMMm|yK3CXy^F~oc0danK!I5Dt zI}g@ds*9VW%CPD3w9oL)-Fi7Zy58~eS+x-=QzXTgo^NM{O*lkd_hLjs>yMMmJZ>}F zJYF*ol?B|uX+*^GRE zFr5th_KVwTjC5paP3$Hz;HDzHjc~_9JkZZ*SF{mqDOc6us>_$v*w}Q|zZn2<n=S8}Mtqw-&h^mb=F+jMLEl_Jg1owd+&+TamIsXfdo;#{t z7dRggWvaf+m7SUCAhVjaR{>bJsUJ)*NYbi{G84 zlrJza7#J)H3`QQYGPLy3_zjz7()8Us2L!#~V76J(lE-YGa}l*bu8I$#v?4-SiUy>R zcJeyii^*j>>2D`$a?f?FTWL6A@!@Hhz_AGVwa0u5923p%f?J^u3S!@;nF;zFa(vUXm~CwXwBF`h1Ukc67_Ek-lDO$k9?ovi=9* zqgv&9t4j%%0a#o>7@mebTj+hdDApOPflXtr&Bz#YfwJ$Ev)jOUuPnd_X4GMzPcl@Q z!)6y|P&3PjMcN5Qzu!Xa;XJZ}#ca3o9QP|&G3GoPtqiWiehj1}c-9YtR&lUz1*0d{ zj=^#sS&Xgv+>JKWZoex48V21VBB3a4j>~79qUd+o+_)u;X6!N51%iw`JxzWcwqP~P zoBkGgW4~--4BLepjO$r?*l5P&MOfPT(rCSTmO}OSUd*o@6j|)H|Dc9IV~)7H*ZujK zyTV>zz4Kx|;^&k-M^5b?-GK2Ky`$w}HjUckdx3R%X&BEpkzwF(6sJ zq{SU^SLAK1jhg!e?(oOE1N)LeWYYudJGyPUSnnYBfS^t!Jslq+oeo;k1H1^{;7z=! z1kcyIhF{sy(NJYqwtF-W#d+eiKhFMgHy_m-*^RsuUu?jJ28M(h+ZBMjR|X%KuXt=W zq@c3dV6+$-?b6qlzZI#?YvVevRWRK13esI7E*wkd3%*6TY>Plv1zFu`2bkiViMQNR zSIuy#Ze6+4b#9FJS2OTJjb}YTxNNSWeMkob!MU((;40rKPovv^b--g%i>p;fx4&Oi_25bUg!Hk36L!CjT}hGf)CHG1Ta9D zCJ`#lPwr9MdnQ6_m&V{~pExVn4e}|p z%hhwzJbKbilHGr9HI3>ICX77U)3?`An1;+4U2L|d1k#5k<=e5X`iS4H#w%{;KhM5V zt)mofEF+y<#XM~dg@q+%!9CDvr%S$4L^b343m5hInV2cpf|z)%BX5olR?TCX4t*Do ze=56h{7EDW0N$B8D_J|Po2$?DHd<_QY@8fg?4GBduFI@E|FsC2ZM0M}F>z5b-Lt&& zckcIoR`B1&DbZ_>$RBe!`Cab#to^u>uLn3pi!%j8BqzZ<6B3N0kebwiQE}={VoI3? zqAHB9Nlh5EDxG*tsn6@*17KbXpLYcppLfYPrBbhf^+Tx?Z=D?J>l{Ae)bhILZ|8Ct;3Q|1_mp(EP!Z{@Zz_NN3>& zY@`1y43aUCOoD4Yz!mJv^&O1ww@z$SVjxNZ8leCMxA=@5jsS|)zNW()UeOf9kp>Y4AdBD!R>yI$kArnm#}Nj6 zW?<92*f;=V>L<;+(7$ZQD3>_`uARAu5xX?f=)#-~Ixd^CWkM1H0ynx-FKj}! zkSD+$dw?j#-M>N-h|DQDXlCv%)$ilToaD_S84H=9Eb17U#L78LnN=}X>cFLxkcuD( zbfp`2>^5g;!AskSSIt!Y#gAu$Wll{wTQkvi)-l0B2$)OA{I-kNw2E~B2=S^r_*XL_j*0S8DV!9v1` z%uLe~i`h!c#3sCvQye>P{@)1D3RgO1?I0n(BV`FBf^wr|{IL$(ng(Q&YF~c;KP4vy zgKRTcsy|>Zt*m7a?R|zihFCjxtUa@qI+j@c)~r2a=dSZCzMJp9y4ExL^HVzu96Uk1 ze$39_bbCrs#Mv_9Ijvldn5jlw^HlO?3km2B?&H_t@8To~I)BVu7&UA6Z?RmL9j7}I zD_N`}xr8-gb*UW+xW9HgE@^t?jzs*~Bks^3x8XoFOX|Y_5JiCcm)I=XWs4gneR47I z<97%BO7w(_OP)oE{C}ls==Re{-e~(nQ87*FR!_5BDsh8kZV9>>)#U68(;kmBv()l8 zmV@oJlJ~GNZ-gwkndatsx}#4JiOG(@>_qL5F3rBK%z@ef(N! z{b(e64W&9eZ+tc4`boFo9hV~%I}>aJg{pPgxa-C0;Yfhbl(V&oqV-;jZ-yi3W}2I+bK}=-Dv5OJnrFwW8H&Jd!&3 zGNXxv-bM~N)vWVeM3S<6wb3!bn`!fcXh8*ViF?2Q%cY(gsn}NW zo5#aI0sv6|cX_<3jrD(}1OHzIH2d$9@5UI~Xs?mdLD|$)b$<246s(!{nig_i^7R+;$P!L^8qdNcdk!HZsv@e{qQ@rr| zg?$b&&a_kXf#+3lzhscIZq~6(j_tqWaVI)AU%>JF@&~Q!z<$vnX)xYElZBSfLbUam z4(0T4q0w4a(6BHcOwDNmIBG{K2&;L^wif*194pq+BjSt5tQfiu!J|3R&igW?HbIKY zQV>p?$vcqDQ2h0U7Lyr~l!G;?FGC(y(!aBLB~6DGqizL_ft4X{YvpSlf_9gon1~cAGAnhH_mQNA{o*-`#BGoev&7JZN zR||wn)ZM8Y2zF> z*g9nSOAMD{jY$DmBCS=z5Q8^^FtvX?gc)ip&r5b4Bu zg{}-%wl@VeBEhrf3i;dTvd?CzKVIM;5GmtpzeFyZ4tAIzh1*`CO1kVmtf)dUoO0j9 z7B|aR$|C9~1_?HY;=KtwA|vsYq(w*_ogR zI|jk>he#Bf^6@gz14D!lRm=)m=;6KA&@awx>idTpEB4x-)QAK-Mc zx@b7qzT`orAnZ_fIlDLJ8tNbUazGqN;vJB=-*gSKs-8-9t%HlrETEXYugzNIQphgc zfa7Q>jX~Dfwg1BuQ*0^IycGdkkTfSc(#U@U5yekcTtCGTKRt%7r={nUI*q9Y5l%6OxEhc~B3d0tNmE zAr2P|Rr3^EuJOzY4buWwZ&J-`H6hvnUu8WzD>#VHNjjtHim1cR$~vnzge@fLMfl{k zE`;?^zR&5yNL(TV0|#xMC!t|h*@t6Lg>nvJ?nN6XGiNYTjxhbhoC)p|X_X=4OiCvz ziL@~6U=B*RRehVef^KBFyd3Ib5}$&dikga}v8Oi4x1>ReVx1wi<=3pZOA$@srq;mJ zEQV79Ulv)eFxNHqF%ByDpMJ9lYgp?jYqyKZSVs>|(_aJV7Fa!X-G&W>#nC<3HZ!l( z738H0wq(XC`fBa1{{{veR~ScCiulmnSpAs82?#lHDNre}*=C8;vJKV=&`I+Sx^oYD zbDFg6&Dx31apby=OO1mra%cX0=093ntD}!(H}TD-luhIp7i7G$$3KUPhxHG^r3vR9 z;xj}us%Ie^{9Vyq^NQWET@hWdei1H_wHv{C?hE@l*FYU{a4hn3$P)Ov_SGz^$z=-_8upQC%GV!tN;SWJ70BCt75@#4vz)b|Dm5uQ(SVs2~ysYr`=Q zFB5@{XHH@HCRzE=%}w@HngJWBtnn?jm~ScKuSaDzU~&MMieuM_X1&QDofRFs8fJB( zHUu@AS+?$i*;JdM<_5(xfr+O4$0zY>(N1*l%%5rE|M`w02(U$Gv|zwjE(}oLTR_XR z#c^@9{&Sp3-bot#muI-|6W1~zB!wRYFy2Dbbr{e94lR-Jnmj5qCgZwm=FJ}fln9k#XwL>QY?oi@)x_1>d zh)yo%!F8Zt`nQB`nsxuhQm!ouyY477(nU14lR$+f4qHj#(O@5JkkBsVVUjfBNYhaK zfvQKmTOsx4KT0Q6Jv1etWZ&lYTTlsZcLIN&d7N$dW7_-}ZqT=F?nzl`Dzn=Xx=oQu zpK49B2{EfzB#+etTa)Fk=H#&!4b5e!$ z4nFU;jy&L)-#5LaS4oa$V-f=ct6w!Fr z1@s?)0Okgz2!HH^LN`$i0TllIi$dxuW7wj>s%>E7A4AkABGC(IY0^DNVKCuCOHj&Ud+zNyG7WKu=B|(|49SfckCcuCGc!|D)7L{7p z#_^S#6391^`T*mD;6u2a_*+*ZW(bV*bI!m7hpm4^0P%w|t%2pH*bN)QCSPNnoK{=5 z;3);<{_&R;HfULms{~@;lo=7lVDY(i?{l*SwB;+?SvoMA1votD8{$K zX4mc5n#`g#E5u*j#OmCOWQy07#SvUjnlSb@5VhOXrb=(2@Z5Z6G_GKBIE$qK3;_J( zn8w9-uw?l-2A;d{@b(qe1xAKQR=Q}Te?-W3)uV<t121Ho9fkc+qiGu=ktiDTt^)&Y zEI!`?r?zF_EAZN3M%F#NEH!w*ddGsa<2AT{I7eJ;cu0I$NHJXyJkMaV$9NBTFZlL& z5Z#r!tMUa6)=Q#qd`tbx8niPe-y5P2%-IC8&>)ho-L1!21;t&)YA6BfJ396;{(mL41k=)|2G%*g;-6)1np-S<;g2jQP0cg23wmz> zM!yfu)fID2I54I+Vo14v)zF5yWl^ zUx?|pMoxhf`+^<`#qh=c&WrmKJq9ORT3WLdQavh);U}diHezOPv>+Q7v5J!Y(@IY~ zQDF{6Hczmb$!PV&@W~=Vr|nLU9;jo`u4xB~U+@t+$)`_A5ats+UGojyz$A2Fa`=g| z&MD#!5C9wdhjnYsLv9=&ncx9(^@y@HZeHtsmPG%BWa7i7yyq+SGTSh43h3B1JP&MK z{T+@5!GF5fSkg4lmfTU@K%4;Pe<@8{91S-h4Uw$Hjfoq$1GuIQp4^z)2eW`U&QvXH~(7z z1Lsl?hel0ATuSEsR4Cxb9xpS(Y6nG)jGB=Xov~OPZK5_UFaQ`p6F*2R!mid=q9Dp# z7pw@(lcCpZWgnI?@HF9m6u>ZV%xwntH;}qCkmO6M^Y~sG$jPcu58}YwV90X&r(XVFz&rd94b0lICO3DM($F0$4F$b$n59!FMzB9AuEI(Jen z7Bk!N&U}rsNeyT%tXxl!cE&VeGaHfff_1cFYi;UA7mA<#`bBx^*YbBwsahjL1Bk(H z(Tq`T>x+OYq4p#_&X#t~8iGzb7Xtw;pCD>pzI70zvpLb|S$b)PXEDo`@f=5HAlTZ? z$!tq16t`*7^!;Y;NP_*)@1pf(fnw7c66}w4t*XXW_nvS&<++U@%ApEXTWqaf@6`J6 zzq%Q2Oqe}IF{u^%?t^QcbIIG&u!SoPhalar2yYr{NS^nlfnFQG3}YQ}@$5LWyuX;g zurDuh?ct~9!{`FZEw`tb=VyM}mGH^jF_VY(1RVziUXmQ1FtjqDbZds5>b}~K99eyF zDcFvhI@rr%EiAYsy01CZ+qX09vRjo`)quuX#2cH6K}B$UJ7w(J3i*8{9R-HCM5FKnSc0zv(dj1de=Ip=T+Py2y zK- zAr4>eL$b+E-Kjk^LP`$p%V^W5RIbtA_CRakmVLfPEs-!G5IgKai9C>jYRYx+Q{_K& zEmPCub>9e*)bx$8U%%o%=$KM%ZSqlG^3DhStoEO&f87(!U!DWaMO3eTZ{&ZTqeONT zaa#wjiEddqSafk#uOa8BV%Pn0moKKS+{)2CE0DkMQ7#@29BT-s{^|@b{Zjfbz!f}v z2%ZcF4rMoCoP}q(VS+dOi-RG7Rm+`A!iy63mN;UTzg+Xyv090Qa->?0;qvI&{JGnq zVYa4u!}Gl?2#leyfI&BQcLA0v2(*WOn{Te}hvkM|3-JSDX<#tvV8SK+3dlbMGJ&d9 zaL%xz2nwW?_ScrGh=Tsv*5^`H!VE5fK*I*N#zMjV5)~zz0{d#6*mRv6FuL`6)gz+O z`hS6GhtFRf-0#>&FagC;-Eu#BV7ka)ZO1~oo`?e8U-x3+{CR0uW- zILtC#d%jfnqEz@`10}`OboK~%;L79q&if1jN-|KScRqH=At-Vpq`tEcC~WLFJU8Wn0Og_^Lz7@h=n8SC z+G><21w++Z;XEn2E|uPP%Q&OTsz|h@igMPEx#5Og&w0+SLMd8?aD*EYsnH=ED&um^A}KH>-%QG&)Rk zOoi(KN!^xA+aAr^+y$T7h_CL*p^i-|9nKWK%`>jdv50tJk<&lNsEfi|Y0h8iC5MP( zv-s!KLr(yvdn_gxrhAAVGBb>O|9Ne=aMU|4$0M%C;Tx0#;)g6)4*+Y+p2R^XPo1kU zctJlG@conafSa~ps1GT#*@GnlcvFB}^{n#pm+c>|xJqJ*7dpiw{G)sz9ID6mfN}>_ zyPuqnB3ugusSWZOE=+3gHR7%3#jF~N;S7y>PFg#(E4Cw@D#4lrSFhx#$bXNbEM@G- z$bT%JF~-JNl%5aQep>xFHGE^H(KB{?7!E}Ikb$93 zlp6I>U)oGrlkdQfeBYB2B{QY^ikgm;Migzz_VhT+n6c=USJs%Q zTv+sYhzB+&kRcX2H)O8Hn2GdMWl9I?nwPHI9@p(2|K%QD=#d8@Dr zFM%zJ4E`OX16=`h?ky#%H<$`h|JckO&H2cl%QIU%;qhIFSoUZ_>?qF1 zOYx{Wo<6bGjt^|T%VS-J9ox%m3k^ySu#mSrPB$D}!K2ZDi2u7vga!2c8qmU1`rN&7 zMmlAa_v-W%5}lbpk!jRAGx^E8Z3CUAzQIFQrfMnU%Q9^3MVUtoLK~GRj!N~UAIev% zWiefO5$pjf83pHpdrZ2N1Fl_@*gFH#CyIi`j+Cbl_1Tk{DTKQC_Y{5b$ zE1}Vzdfd+P{~+xhgKX=zZq3wA+uCW{wr$(CZQHhO+qP|+J98&1-}+9~J@<>KbL+-k z5%b4fKUTzw7-P&nd+Y6KbZlyGx8NSaI7chi2m*Wr%6ea2Pm4kc&oJjeP?&yp>!N>I zYCITA7F8d7)H|d>aEm30TNpDh$Qn{4Vw;END_`;c#t=jSXJsys>9*m$pPDv`@n#}M zK4)tc)B+V|s$&`$U&yCu%NVn?f5bYp3`IOCTBS(WKvR5W?cZ`xY4a#`o;@T47KbuXH$=RFjfT$IAv_rucBAkB9K|=c?f73cIRuME~%l-8u1)u2)r270K6NeXB=V0 zEf6Hmue9M2fEhWg2dM9jZ67GN7D}evSN_r{&C_lje|?z=g%Ch zXUowdkmvU7j{C1GMWbEB_hX9BFkN-M??kS4=RxkDH*LV^Y9gr;;4ncgtqNiR(tC6& zdJ*v~afN=aa-(*o`e-L3QE|ICB6fw%*wmRU0`2Ic&oVv4L}CIQ`4f7jf(^nEmZyZa z8To#Gx0Fwc@iVLBtuU}GOfSiZ02rE?c?II-pt2LY^SsXiCxz_a#36%v%>?-31gH$m zK}@U%?pikI_E->}76euL>VN-GWiKf`22h0W0X~ldCxRujx%p2BDxEBWg`V7=)_Jvz z?F+|@wUh5&yYq^kWU^I^&HsuS7iK!NugYK67*4P?VanY)@pWe~I;dP9pc6oF zEORS(TPh{{lSnwZ=$r<_!U!DLh$+wrS{-8o9-~GoMlU^zsP=i&?30G#MaA7O>QE0u zcjO8murZ=2^^LD;Cat-Hhf6q(!X>rG#q6Ty@j3BF`&(ORL5rmEIH)1D)VyZtD7GsT z-ECGn^Mt_%DiQA9c`!xqKVe9q0~%5oZ%jNrV_BE;c>qgSb9snO2gGBjb9U8;4TQRi z*9iV*s$pvK13FzWAkC#zr?Q_%FKvl*yeM9kdpC{g zQbRJV)^HSmP!QJ6LUmfl9dF>@XwZ+bh% zjiNFtpfV_-GGSHMXaT#LfAb`v%@l{$$7?K7QN{cbaU9@T577I?x7IW`f>smcQVuOK zXu_avK2ex3!2uWAAi^mpT@1~iTf`=OK7xo~-e&Az;6>8_0I>c|Q~PJgnxIA^M&pO_ zfB!>%rvCq@sVTYJ{cF%VDbd(>Qw)A27smaXP0qx`CiXUeBQ{(gbcDDB?$I>;hEC5LW#|9u1h%9I> z0w40-tOQ*M0!KdGjCUTeAW$eY3>N7(K8J);)EV161SBarx3E*j8T7n*fuqoAI1Riu zQHPLI`Wd9CrWnyX8v(X_47z9*VgG#pytuI{dxu!9Jz3EzdxyBK-ILwV#!cEjk`uSJ zH^VlM(TRbE**cjMzqLaL>>BBN7P=h?!jz<|66-DJX~T zPfL-o>=3A|;7HgosUMS5h}amH!;mf&s<4TnM2H6+GUGxKj|`ud*G{rkVQ8wLj7K(H z&PG_K6RHqRAll|wS9PHvD37s-m(qf^i7rYQFuN}ib1)Q8tJ?ZP&a7Ow^rTBAq#W+m*!Txcx3QT?Ne}X@wZh!(AkU^uQyOl! z^2g~m&akrQ^WiwwtVziE(n(%id*wXGygP#-)F`lP-N6V;+OR{c?bz!P$+kxsJ=CeU zj!?8FaRjZ3_>hie;j)W7YV{s;uz{2b&X98l+K@GfA8P~HjWVkBUIrbZDfFI3KIx3R z0Db;l=qD#B3{eOd(HZ_(?lo+IXns@(bDmVlyg)V_x?ncUBbt&{dz!HLL1M?i02d{=){*Vb2-tC>;JJjGGy(8~6F!JF62 z@3BllLg0Mh&%%`bsx!l;wiY7}!v;Z<9gJyE$zQ4_*I07FDgcU`rgO}IK_W#W#Un){ z#Uw>8V%JF<#LDp-)Xkz63KkL-6v~MiDI1i`gvzNFaV#@MFMxc^0c%mzdTWq+`EqYT zJ)rM6D82;`k^s<~086iqlL$jDPvdW=a)2VwNR=vIVHdpe!p|s&7p?%{@7O=^sRDP8 zTp^-Rm@;HvKE30Lb>6&_N>M7fyj+dY<5g(C{t=vBggR9tLRS@^=ss0StOeo%w801%ga zVAKve@Lx0@aw3SKc?U#HS;Dk6c!5}SBiP%&-JR3{V9F|gW*z(tX+e+JzoIGl&R%-+ zEG~!sCiCw3#vB5M>jU@|=vjYkw4fX=vFj!D{JtTXNE&b9t1wa}a&DlFCt*(#&%~xI z5|p8+$KkA;qPePo?5yvsxa!ZTs7LdxoO!z{1jTBo&A1wcZcZDgYF6)=I z#TaCgQ%wJe?Vf&0KH0^mbONJey~hfWLr6A~0U(&kpFWo-U?dma9HddjyfhAjSp+J* z5uj29++>)YC+L|%7UpAE-7U&ICpefVs#bn$K_f)i#r@w7>AH#p3)UYejLVNN^=BIT z|2v9B*}>}nnRrM}I5t?8Ko0I@-&xw;Msam@ZTnty^2kUaiQa!eW$OZfU7g?MLSiwk zt4u!I@wC=`ygAIR^+$=qFgm9bn>U{mc1^(vgzi>k#hcF1nR>7Z6PJB=t4%ee%isXwx6a?mb_s^ z7YQsW-E- zKso4ROJ$@e;TxR7DdQKD5-f6fk7a#wXn*(hn?FXi3l)#kvNP~dSDOv?Qgs9uAi3-? z7q-#O?R-N;5N@hB2+mrI=+xQY_^{f-qmwdqY|=O-Dz4NE5b*z{S#{`|b9oFkVmg*i zk_(a_z!Ovt`N@+|nqyG?gGf=1*fc$zn0Js{2yXFZiR!PfkpexKQ!JSZ2|GP_zV|)2 zIX&0n(jI~QH}UsIL?}$azHl24S56K?cFVr4{^Ki(WI}oM;*TRC(ij2F!5HKAjdu4 zUjVU-BWsQ`Z1x$&@n4v2Vo0fHM-1Cq%fhM&pdQZhO-j-*0+P)V5^;se92epWBT|; z?(_-6r2;|k6~s;g*6dYu_ME`t(nojT6NOt9(g#~8y=0_yY&pXxl{vbGliQ-(JUUJ_cN-OL|Gw$qSQh`VOfN$Xdi)e=+&kcr#KUXcZw+L6J(>f zQ`MNd6BM)|SMLkVPjmh2eK| zQz|j&vU8qwP_406L3L!Fbv(aJ z#M&TN?O1@mNb6jY8$M{JGsK!?gx9fKepRsb2pPV{G9Vn380H^a5w--W9d{1Kk^y(a zhN|8rOO^<#uXAk`#j&G(SD`NVK>3A z)K=zYyy}w)p^sveVoyl*cz%!OhDMMGLi5N6kKIbhDWi>8gWuU;IH>92c5popVr_}K z#yg2p%BWMMg1S7BsFsdYX`!;}Zm)kaT@Z2pgeW%(UQVN6AOsJ+y=1@cc&U9}3vx3T zvEL?wZgrbLqNh>WdLMSd>yrJ0PrNY1wA%W}Es&>;;la; z#ZF_e6UQ~~PHAC8Qek8gMH}vQ`__5-Nst_}H>z&YCdIt}cQbiXI%hTvD_G31{)^$Q zH@bl@MKOHfZgos=bz6J%CsOO-=jut#{57PlcThZz*pLMx7(7hm2ns&ABR=LL0!sEPuo=GV`RsV)WNTr|f z<5v77sXnfu(iq;1=!pK(bqQFtW(y7jhlH*DAiG+AwmSfR}UBtZ;tOAKW@iCX>I^5V=d)CM$I;C#J() z827decQMFTBzGNJYvTjo$9)mc?RMIzJGoG{Vn4(!vb?w8l0m@fVL#N|m6Vn{+6kg! z3#S>n*WUURn%o-<%-%W2wzEa7xfjBWOz6`c zBF`%RIV2~$1O%DLN?4}6pf<$jbZW8`h++{rD`U+oZ{iFpT4Yb&gQ~LHe1`V+& z)T29!jP;p|EQ1%*m$Bn5gIhgQXxq^t5G`?s4O2Xm#8PEDfh6&{E&6J9U_H)I%qTPVR$;E-L$2UIz7B)B;? za5HQJAUkWcqpjQpu91f0#SjEo(Kq-~9ie{TQlwExL$ zci5Bw2q~oSz zi^<{F(#6hJOy2uCp)%JfKV$Wkr{*TkWHO_RVqBwz+M5Rl>H<<{e_T0KSIpT+zFvj% zGnpIqRlRcoH)nZ}zOd*9j(K7)CLGxGr`~|v1u5zR1}HPEoy4z*#H`yBYQ}O$gJ3 zS{hk?lI|z>b2KL|0p3IfP=@jXjzlU4#&JT`IB)j)zTYf|DKunO)}3`3(R1-QGV6d? zID2I19c_^_&cEBwIxxNBDby0Qj?p!L|7m zbOV79`;Dew4#|=mlfLq6fd|i~Ugz3<3sH1kBKBa94e`tK7iXw?hD^$z2?_#tUH?wT zz3=J?yeSqDE?wzg+AqxMNW_~I1L)`__?~>Rz`gGtzI6gxI5%qhZuQ*2`r!N?XEnO& z67J&B)B-@86K2mgBZY-w;&4V{hZVpxC-iK%`ftwpzTLUq#h;=g8uouR)A#?by8l{j zO)9}In_^hqNC^dn#wI(>lKl*B$QS^Fu1rt1Hlj zWw71xVsxCP3LA!%@Py6s4bP*{GYpsE_bc2{L@@j$5BgCL#_vnqA$LU=n0d`>B_WW3 z_Zu-8YbDsLkDx%P5^E90E$C#U0%!6`x6{CoSaCy}i{YJG>LND=mx~9WH7kE6@EBdz zuqT=NA7_k0a%I*UGj4cQ$4y%VE5+t zOB$PSXr^0P8n!jd%b?7xHna;+WU^N}$8dLSKw_9RV$W+$gb37PpgRpiNpT!Gj#Qnm z35J}qb!g&3mWkIwA3Keh?ZrGumc=UgICBrsjxKW7nKw*5W**ePV}D(Nysw^4Svu61 zuRCLUZBZbca+)cyP}1x>%7hzfX}^&W9Gx;v7N?gqN(Bb=SSjYb2OVo%A@{crCE8~m z#8W{?yM@@KKJ_7;>=?8=4T7g6>{@!a1FJi?UB>Srbk0UJrbYN9*W1fuxgBb;R zf0AyaC3fi}q&48&b0oB>&yv=%#nJC(u-G>K3+T9E81vU`?9H?JRJTFo3RbuPkN#RU z<}=9)zGvHaNvH1xDWBdEWx(?HOq{a+2t%K_wBPJeiDvesL z)5=v_l@}sP*2GfH$^$*McAfU|!OG=f;`w`|@kLAgWr=4Iury$7`2PE!q<1rX{JeuW z!+_!SJEX_Ajq&c%#B3|i!$yb&t~_tAOf)5XNOqLadevbBY-RcYc?edets!cZT*HvP z>(XStVe2jVe0=J-n+o(nGC-v$L#1KjeoyV>BCE`dj%nh_ zvn7%H;`H)g?d<5rV&Wi1_CQPJl!;DX=IKg!Ts0) ztK-J>zYl-Q*U1BVlE<2JeX;%cAkuN_>ZZKY7bElW<3OEuOM&#hL#R66VG`3&;o;1s`<{kNd1f5k=;g3k|h5vvSs2tU2B5tuuqsk2S-r4`qYB zJ4;FqQUlk!FBdTt!}DOn6oVp#_5eXqCR$%-RLOTAICZPNDsR1_AF6vFn3}2Ch0=r*)}KHr=8T{6X#vQm3H_2t7~r1@dvOBMg9{&bclzVu zz@zQDLxW}&|0IneuQuYqdy7pqCVRxN+-tgudF5toXJsTWwF``jd*jZ2)6`&{V=wHU zB7bts*e3r~rLc#hI|qCshM6Lr0$TV8HKM;(6JSkYh(d`nBwkc2Zn0b+<8W!nVYE7c z%rrNEs$Kuu&iBH?o@j;UBLII)@`oPKqk|v)3WBCD>gt#o=Icg%?hkfGN9W7-gnNfo zmkv4xZm2bvjA=R2@s!v}3O(wDetoR-=N4L*jPOQo$Yp?C&>VFd^(&W21eZ3@FG@g% zHVu-kTO>WBXoSR(bMtRus1&2cG*+qCQ6j^<1P+!Zmq#w1z5z5=_=%|YkpvY@E>d6< zK_NYxD!(=B0AEd>RW!+;EKs0nudHyQIVj^Xaiytw zyoJFqvnKX5nc0CSv*F5H;A3M*ZNve}ofx`?r`cEjuNjLaC1vAnUMuE0Z+yBP9Ay7a zPo}_`nu`zw@hK_8g#muH(%(y!1r>qzSck<4*|YC;gR$Sac0n#>f~Ak{KrWwq*)q= zjVL#RDwG>hHdvtf$h6nGld_b^Rl#G(Z`Ic~U47hTPm{9{>=zrLB*J7aUy9}PHypby zH26gam7i;bE<44sKq2_bR&x*{`~irA;D7%TV6TJV_p|%9JSyi^02KN#U`_U8XXHa! z=F7sgFipLkqEY20yo=aF6F7bAMS$fw^A&ytgn#OvfB*zWhgO(^FSg16TcNlt1H<$~ zfB4Zi@ei05m?RrR0f30OGTvB)bP%-VEZl6@Li+y*TOctl9ssw@XkOou;@{`2Wv>q9 zBF)h?jM>o&WWsI#caodbVOCV}&no)}@D) z8peGQKw)-ZG#_KVP0iJ}V{WLd=*=aggR28@7RPpn4FXF5*zc6pSpbQZ+PDAaZsbyu zm6lGs%dDLC_x&_|bIf^1rRDNC`F3I$Y@^AXU{#mmuVz;-Jpta1_r1*E5HTGuY~~); z)~6G3-IC?AEOFhP?*2rCRwsVl0%g=9^LzpqNGpUkPB_3sTG zK^Q$4%3bthBn)+=?FDaRdT2*n#qmP2qr4&5delRHB+D6UydS9iw&mIRR;z{l9LXl+ zLQ>F+z5SXp`xaLPEk$>l>+YkkI*#sg1#)#oA>-nEr}NJ25lBzp#8?MZJX_roo}YpB zc{6Ex*dxXHa67g!74^`-z9GiSaWIitkv^-=3F_Bhlm#YHNB@vXSI<@-ru#xOIWLAWbl7)+E*pqYEp5%9%umNP z(VB)9)9i@bqe?`Sxg`;@91h=s7VgmQ5g#004qnL8qlNEyO6W)9=1sBa%oPSE1|4x% z_yYmP5Sh>ADP{)I`s66d-Yqq`pZX4xeC z9C&bDwsjK?r6htt7D7)9;)UEyie4GIg+2w>D2Nb_`5L z>?qIYTQyY(7R1*B;n=SsXr?kN=le`1tM_%H0R9C2`2DzL`lx%V`aAqK?ZEaE8>el9 z2Fy9ra`$q7ef;{8NVCASQ_73+>3GJ(n2sA$=co2GZ1Lsug0p}1rA z`n_NHWybQf4{gJOi`Cm&XC+mBeEy`|~|DZle&_*L}Tq zc_%IR+X35mT?1|x@s*`#Fn>qb?RiaZ2_~C{%S(3eT@7As2oA(&47_*FRse5{>k_lSUtc8f8x%`x)@D1SP zRID4zr{Vr$p+@c(cwq1Wx5YJ)t`_MhjTf0Qg_rzwyk*C_RgM$QVpeKAb*Q+-Qc@F9 z$9y54i%jUb6}T#kO7QL07f&Q(OrE_CWHhY30pL|z z+|=){G=x!!x3(<2$sU}&qBEYFiC$IiKY0|DU&B164l7tRNsg$V^-lcS>n$-;yh_Le zeIuB;MVzb>;I}W}yTzjZ8=z2$=Qt`W!YVr>4{}#5~gf`M91U%6MtDjOw$2-6X#gw}4}L#J}PHVbTdRnwPvkNIf8?9YPH# zrc!ic4}(}^>l>9X@e8Y(r8iK_aGq9^tt)KN+1OtiPI0<4(DZPwC;aSKOXkaDR#?$8jm&R$v;>D;hT<-AVVP%h9eE^nZE(^abpM$u49XV71|hqx}3kv)SC zrno^5{)5E94IrfgfB;B`lo_5xFP=|+Wq_%gHY{zjIE1~UPlHPzo7|V?lv-uLOk@UQ zi2$+imld%{wofXK2bhwda##UflgB5U0t(1LAa9W-Il&hg&7*TwiEnAsWe|3mGWM%ET86ni z2n>$=TvIvpBaAG=W&+J#u@HVn!3XGRdhK}Q+JwOb{l*CB+=OCs^3clTBaHaM<rZdNn|*Qbe=9 z{CLEjB5vFH=rkXyy!hY<-60dy##CZ#WAatCk@t!he+S=ji5^oF-ujGO^}*XJ6u?Vi zaxCFrnL?y2l|L3H6bS?}Urv_#bkvD&xo6v9)%j5?MY6nj+O-)PE{P;ZR?j+f+KKf^ z9&GPF=FP-rykPJU9BC?<0-*BGU(OgZ!TpARs)|gI1A+pIPRlWQ{(d%iJ4^V2~Uts zho20GOIOl+xWe9MaF}o$S}GNi^iIL>PEt>|HqppAS9i`~yqR^Ez)Kr)GNEJau6G&* zb2(^?jN4vn2nD<{Bmzr%h*Q8(*&vj)wPYtjYYXGwEj1(INo}h#D3fi>%%ijtrc0n( zCdROeMp5}HW@OWksmuzf)RJ_a!IJ`k_nN3uo1vjQ<OHY&+Ho&4s_J*7m zq8Y5|YEY$MWK>KeoP3B%h(EGm@((-1C0ItxKnl_yU@j%3;>QYj|A>1HSkKZFCm zJPfn+_A;!;-6|O#^oxNX$ZS#Z8xDI=y3kK$gufN-`c5gVd@g$8bCO#e1X`*mk5W;3 ztDfDAx}OweUAi;1+%8uJC7RhjIu6ngGx%10;fSgdt)$Qhw~uIZ)?a6d2cGhEnE4NL zPeB(XaW@8i4-|cL2=CC@9JGQOo0y6lLiAiePX}JD7x390O4l_U7Y$@g9HO~Tb|g(> zLJ)+$MR$R3glV*|E*o(zsZV*?8)%|@WtlA!w(1Q@r+>OWrHg}gqV)8i(WX$dh(uD@Eay zRjFl}m(R`VqV$U7ylg%A4Gk}nM7w_kMP{LJjDsO98LXK&Cw9uCTO3XoS7j>1*4u4_ zRL77 zGb@_kgDP4C$bN+AGs{Sm#g?~|4$><{=M^sA;A*w|x!E;AUWt|tPzLIXo zsoH(MID*&%co9I@Lh=WQi1}8TJUPvPm6Li}dI}=>F464-Naz$Z}>U?p*J-c7}S(5~*!vStY*OoM@_SHwT zhrWoi$SBPU9}t8E;Vcq9B~GGJpDBg0&P6;nSjLtIt4{V}HN+7U&VNhOgye&_(IRvy zE0n;dpjAMTE&|f?C*nBz9sO)-q1|Q5pxsYg=Xm>CUYmtDflWdv2Yuzv@>N4P(a+qF zbPc-hRX``1+e7TKSlv_k)m^WPpw%R4F3AkI=~?3RkdW4q`Yu3uUwXcj> zr?2FbKC_62iDB2>pTdXA3 zRwz^s*H$o1;N{vct;7N-ywhRC$3P2`vV_XyzDUl&3Jvln^RfbdNtsmRBB0>TL2a2) z?M%dZo@0ve74LF_*VIPZ=niyT{UHZ=4)E#tbd_L+7R&{mr?repXQ6_e(pG#yO=w<8~qnFl986*@V~zJ7dD2GNYT~Y+DhN%r_Jb~ z?__NHucuLU;_;8(i5`;MjI5ZJp5BgZ!jMJoSjiSq8Aau4#Gb9SoX_xm!;L~Eoi?7* z^t8~b@%j3EPdPX12bWI5JKf|q_A+-u8tC#qzfZgvD-{}j_LN}Rs*Tg}%f0o68Uz?A zKi#x(KQj?(agh<9f2LYhLrN9;ImMVF1#=tThzdQ#Lgrk8AfE)J-!ETdJKSv{s;ttU zvBITSYQNe@>Q;pyrKLt4i!uX|Ia$s3W$0w+=|pJI=lSQST%yAH@VsnIH1^EfI1$0xRilT!LJ8fu(M z)8=oGl^F{Jt5dNFY2jnZ-n568tX`(U8}f$~q<8o|{XNwfnJks$oWweUS2}^#J@Sb` zdNehb`kMLtX>r+F@Gbz+OiuoW@yXp`^cnP=kn)xe?2mu z<*y3n>YXDh8p#Rxf+i~&$BD~;wjY5v{8^zEi#)RzL_uz9y4gs)d&t174*_AF$rYn( zdq-j4J(|-ewXiM9zsE6R05I=bl7TH}LBVmDxcUuj+etL93x}m^|G(``_ZYl)rwU5 zpnQGf9|FmsL=-&XpamnvWaGR+6ndt5u)TqofxsFoNrh!X!}vr=Sh+!lib zi5is2Ia_Csa(ZEYyMAR_>4sN*pE~+Vgz(Hk9SfCxN=UP!7V3)s@k~UW43+AmgsHNc zDvD~TvuSiAOBLzmkcX+D8m_jDlojOV=!qVb<}=AALrWv!+Bl7IXEwL~;96z%d%!0) zJXp4%ej$6+1G4cCiDZa=IDm|!xNba2nAl$HUMR*!CS>|3i7lHgk*)GcD~4wFa*{TP zdas}@sjbRQSPR8{wz&>P%hjgrr3AKBh~8fFK88ohPW1;$BD{0Q*ZZn}5dX+#1tu$` zr=TO-elrYeHhK@cE14M{AjGSDw8$77va|P=vyhfAYqFb(29J7i$e$Xb z@K8%h{@ZgjtoLvbunY~ACo?^8>WWYn2jr>H zo-;)YB!YP!WKOz);emIx2)C)VtLzFGeQbl#gdN1t+jx;YH43^FS&Xqt+rFGZ3dP;Y zXAR6R93X?^;?1s5D>G)dm3~Kb*0i5@<<^-scYJzeoSET5IM+f#HF`0el$QfTIkd7I zuzO?%J|~Q|2DSoIN3e4J$J!qzO*9V1K%*iFIe)yQ~x^t`B~v)KNn z1YEh&Y|(7qS~dJ9fX;UiKo_%#c6Cz5Apau|>-+^OIAo;ELYU&O|0@R*?WFTD=vP|Q zMGl4EhF9r?cZ-UNTxUFlleolv`jR6_5!gnC43eBG(J~)5ba5@;>ajwb8f~M? z2(P9#FOar%IKV^_+Hf1os$sN41np@u4gsU#LhYDbNS**i8}UYwVn?=wvAq$%>B#~H zo3q_H+=-+`ey@b8#U0cNojrE^#poYFTiG)x#wE7i z?b;e%9#Yf@0$J_?8y9#A6PR|!hFTuy=HE+&C(BhC63RTw>gk;ROFj%3#fo2$OiNyJ zQKZ>peJDSZPeZ|KRhPghelAsnDczOolfwh(qSZwmC7}XlKT04Q4B`k1@9m4D(Afzl=w|peBv~H4B1@ zEu4}&=24MOh`N-wgo7D}b9+Qc_otKXSaiaPOohRv>)aBpQ!tQUs3hSutC#PCUIa|AWS-UAt$kTiPr#26rN2Gjl0P;1jQ zJ1&WD16m3S2DNK9M*s_#y;vVJe=paWEuvJ2KCnci&=+2kwm#K-cC_Z8>G#y~4Z{+{TDh zv?;6*T{WR~v#Vm$m`gY!;yV1dAf8V=?>O(TBhjsDs*gI20^OH1|B-`l5fPSdS#fSqCI^F_rkp4>0-95E zaZcVOwbHL}wrnRshn3{=p%a!+#&6v|+_bmRchrgkpW%y%@L?JwwxJBj$&k=xb4|s1&MEz>8a$O3olHg4$pT&$xjampu zwRKe*VkRog)0yWPv7|CWgU(g_U*bZ1P%IdU02E~qZ}8sePSMsl$?lsaEWdcfX$_vM9n*kv4P0NDxMxvIau;*+Bo|It z`LiSIQXNUXNCIaeyAarN;D1mf`S3!DWXai|>-9&7qQi^K@)b;Od z!M%`nC-ydhcKcm_^@QFwZd)(9LH`Bz$2|}Y=!wJ)l)xNOPIQ zBH5+7BmHnsMi@ZBmEwr1LvR5uO&F>+FEM3$XxuxOXb07`{_{ywFKG6?HEc1Xia@IuSqb-EX$D= zATXKubm9_h!^C085_&~qYrEqOC%W4RBkK6)$uikwXq^N;Q=-YJge@GAd@lUBPc`OJ zbete-@+!dsdM>^F`S@o2&YkPbN^zX-+{~1$nk&tg=}59s5qMEX&Ed9|_3_QBoAeXk zr}fX2hPL>_Blxto@Bs0abCi-8U4z@(Pb0J@(u+Fxp6G)eSmdjV!?> z5p{z~(L!$nPuxI~rxgKbAqC=6{#Y)xX7*`uBb8~HEFPt-EFTj7Emv~IquVnbCB_lz3~9nyR^f8M%Z4--)$mL13YZlmZ-=0_yjme zhy8L|zm!{BWE2UJF6v_8poC+;JgTIKmfNC`?XLG}lR2gcM}4~cf5Ci8qR5(RsxJh* z%qvqiL$$rwGeKz7nfuT$*Q;@ZUO-+@?1OPl`T+V0soJZ%&FYKsvyfqPE?;e2Xsmsl z4NW&x5zL9_)A-p7vLn6{I?n=YH&IEaGEqKNdH>?@&OWGSYt2<+_GdZuP(X38pp}SN z6{4dQOw?MVB+R>3D-UaMrO@HAmN5k3NW~F?BPmd^*r&iJ;E28q2`dYh3=K1b^2d>k zC7e49A1id(PC4t^k+vnW^1*6;>WS2N`O}lU@nrkHc^1?vSJL`Sy>t&6cn=b|CL%<* zB+j~UeXls}nDiAJ);ZCf%EE3bNs zRenjmG;XBGC{bnA+VN-PYY$noxGKw5{iQ>;Ff z1Viw+h?B~Z~ zq?b-xHs{pow;(xj-^vs;RE$F7Bpjc0o0>LDs>|XI^z-5UUT3+}2e^6Yy%0xyseXnV z$GzSO9h9lr)GMP_%DWKXAWWAE-Z;St;B5bKyV5;ZhC7eCP9GkvQ4m^VKx$n|YD0V~ zeLp4B?lnH?plUuRu((iRXB(Dip=Voan#hYiZ;c4t9Uji~lOy4KSYmPDCpKRGG1VaZ zs8~P-2$&^2Y&@&88{_>Prl|SGu_>YOPvT(X1W##V?*>uTgmF@9izoGQSB!>^ER=0t zChNf?NyMg&NzAoHIUG7JNr+ugEV|0<$TEh@?_%TBeI%t0X9a`_RCosF*p^q#a_An7 zu}x>iP1MrKhckvhwM8^xKFDDEYV~K<@n_d?)Nh_;N8MCM-c9#kq41w=F+KyZX`%=C ze6bYG5pGE_>ZlSq7#vV!Q@`zSM~ov-OU_R+#L%ABXxPjRyHQ!KKI@=5AP=2n$vj`A z_HPuqKIpD`*ac5Lv~1=mSR9e4w*qFX*Vy%zYfD+&X32#(8$j44B?D-J7QZ89ZSixb z1P>g+Xj~O$wV51Qskb6$y}uJ@)7iZ|?3dt(F?n(a`+-N4yB1#;-ReD2c!GJ;rxUlc zIHhHLSzRNx+A>`psWKFFOSO4rb3Jdf-0$$j|HzL3TCj;_2sXu)Mh`yO1r2)z5n~%B z9cJ9?p>NZvoE>^3tjrBhdjW+qReL35hRq8y=N>G!apYPU7@w9&?~%SvsZ$^x!Sh&B zb`Q2yEq6o>2QS~W9uJ3GS(Vze3qs*Wt5q&*TsnH~fS@l?!;BYFtt)fW4eo6re1?xf ziZ=#KqP-Ht=rxV7j94DoyBVOE^8&L&=!v}J*8IDQF#3Oy_D#XLM%lKpZQHi9W81cEJ3H91 zZQHi(WXHB`-*k0X-P2ul>()8vfBK)lwbsO#V~hzXDi~9e@85IaybY?XmgjOWGom_ zlR2AVNHc>q(98aDSE-Uv-MGet%`(Y${84#W|Et8j{aZ{atedb@1u@zt5x|dN48QD1j^*CW z^99=HBMI?qSnfkovk9 zQi!$OQCOFI>Pv|9yC}PX#UWaEy5SErqQ(0Ki`1=@Z!p2fn&i8)llmnrbgKgujC*)g zxJ-7aNORp;C^||x9Q+_5C8OfrJPqDu{GSJFyFBMhh@QH*ZT&UB;HVA!FzccY?`D{z zAs%GW76@D|*fcT4ar5L?X9>>VihZTZA{12=g)HGWTE1o!G75pvk-<^yn3!&qHV>6& zy_jt1+)oE|HoRp+NnDmi*{Tw8Ni4wg2n?F$xFAL$ae_VUW^Ig4PZp#@_%8+3e{)_M z@;GH8F&I!(Z5_k2YdI3qjk9SduuCYbw#v_t7wy)IrYK}ciqgO=@+34*V_m&ZbLHAE z`w9azzxp%mmBpo8|MXbam&X=yn4QLc#|pn>sJtW%YY``#4d1|6*wQDuGR?pd+a#7H zEs;}dD8?6PpvC<-NEdBOYB|e)WcgvxiHReDFNMzQDiGN46K5Pt4oO~)=oEsPV??N%rYO_ok_03A{014mHiL*3AGz`llh zZV|o){A94m|C}!-hmdv|hKm^7R^K#u4wrRZpBdCFQCs?FiNMqb7FHH&sLl~qjE!o( zncxc5_r=>4%VPH`1;}7QWgX(=$4QRPo#bQ^7ytYj`myrAaL9%pvhfaXx>G{9`+9>U^=zV;H%;}scI zAYBzzLq^FhF-Dhe!p^xW)Wfs)-Bibc#H@{%`}d^Arjy;$Xo$={fa#j}C{?XvX*Sbp zYh-8Ks4Q+|jw*(nTuz@qd$g5j^~_GCr9E79*-#lhr6cNW_uiBmc25EaJ}xK`-f9&qP}ZPKInD^&EgGYgNA7R?Urr%8&_aq=`a(`u*EB7_p< znXKvPxv8QifR3!`^oQ=6oba#oT8L$_k_lh<($`mX;yo^GKJ=HbaqGc6F-m2@*AuJH zhjc#M`w@u*LP!TDt#^*&hp2xis88e6;*ypbXlhJ~I-{%ZJgZ~b&zP)<1bCZ78C@<125yBgh}tv%$iHoL4%vR#>6b45!XA&ledX!9N2 zFs!Oe!e>f?@AwQmqUM`PfWqcWIUZ|>`c5PwKJy_t{46{G20Vw4kAr8V!Z%Hm7K5|0 zqPb^X(+|W1o+yp?3W35+v@=Fi*Op+* zUq0bKwtWltJWi@rW*SWwq+uI!ig*O1@beV!#KBh7G}^?`&f+DIEpw?Qf_edXN2?|7 z#@WY{Z4gPAo4W5*Bs!klj)m)Vo)BVYJp#1uE~%qVm%pc-Vs3a0m@29?lVG!6 zKX~X{f1g!uRUMfuCZ`_yXPaBvj(7J zF)E7B*3IAL9mn>n$p29BFt$u2qHRq{3kR-pP$%R)hD9aEToR4-ozVLJH+dhNd)k;Jp65%V{J5K2EHr>e~yB$SjJbf<%6bP6NeD}R#y3U|;N-K2Jif2RUB^*maD{g5wm ze&z^b|C<@YzjzqT{~9HX2^r!600hm|*p~cE5t=VomS2p1<_ShQ+@vyQk6`x^2@Sn2 zN5VJ(tb-AUYyy=ewb{b)!Zc%6;)qtCg;1+3b$!JVGHgQDb!mnfQ%Ky_%_}BOgLoO# zPpdo*y+;v3&HOld_OK#*sa|y)22z8RT2#|3Ob*k@5zx(o+Vx3$;Z;b>)=jMjR)e%! z)K@E94l_#;;LQR&^-+6aHb^tp4ekb7gVgI(TPtk0)6Eg^%|hPwS$h$eNZZyeF9u$N z^y}1LE58tp-$nl5A{e;J3$G9&4%PlKF@`OW>P!ueCgwy4nHZUL3pBzrJ=$SNXcR2j zcjj?er)?2hGiyC=)ADX^`aOW`5@kz<^X~KsYOA&t>Id1`GDyl!4YGB0&PRMBD|v_+ zFyq#0>~%;m@&Gvn`97w`JzlUEX?eBP^2>V!#Y32&i8u{2N?F6JGPiL?R7jwR65KG+ zGeoVm?3nYB6_!j4xe9)M3clXefBtby1SrQNU130x3ZisU>q5=vlN-HJP;4S3Vh$G% zllu&p-hSK1;XdQKT2mc#72SI=aXYaO(rgl z;G)&Pm(S-}fCZZucF3=gQ(*R@CT%* zU}uKp`NU5mcZ{1;{pxezWumFA@cS!l);1B3e>FOZh<+{C8%h*V(@`g9E^|%?2r>DP z4yaKiExX9(V^MUt9s2z%!0hG&*&UD`lEf2!mG#0Q3EY*2I98aM45H9b$oc`6U3*Ld zXmurVQf1cCdbVBla26?^Bd`hFBxDLjr6~v{y0)Ouj?$`*QjEsugNTZT|XeyQY7)*_bc7@6xD&hNVDk@I}H_43;`_`zvOn-yG=u_DZfs9uL3%JiaYA#yf@{FNTR{6a*-MV7j_yi}Pc{h~tolc=mnX{Vgks~r}ujUHe63uR?87TbU zy}3SF0T?^uDqC!wWyKbpmO|YS|y8|OV1_XL{O!wR91!FQl2$DU3n@WO{Jn#W|8hp z-X*+Uc{3kRrKVJFkseDPHatXmARlqD)LfdCE?r(GyjXc5A9JzN{E9yGkY|z)f9cad z^d8>*Hu2yz9cKCIKcBl7vmjA!y{@1ymBt^}R|^Gtp4^Xj-6 z%`NSEB>B1w5VtfQw+w8D46@fGfY%hx`xF^m>L(7%1P;^k&)V<_g?osR$p##DJEwW? ze#(2+k|{ZDfPlji6N8+f%9%Ie1R*72(&EU$R0%SCOw>jSWN0QR+% z)-)IX#&bKD@3HPDOtuEl0o7%_E7@cQYhapn#!=!+Un018VmAc zaM01w5evJNf_0reEJp-P<8dF&iyz~&%g=!l9cd(+m<46_%PJEaS{vhB8*4$k%*|%Q z{=8Mm;o4o^8zno^OgEBMx9IWcemb;nprlS>6apDBACPgcU7RDnUc5{k+<3Hn64L`} zJX}zM0$jP2s=}hC+7D}(MrN~Fx!GhBv0d}DY?<8^vlQp7nK&}2Zhzu-BwWS3CCYjC zx>+`nO=%c-;viAbq-4_Ogryb+*<(+dSV~u*zB4q%OPYi-p%ZRV#ZIG0 z;%a5GL3Iy@U=a3sxIq9xAZ8!Qg*2*{pi-=Gf<1#5St}Wsphe8{sHAovnr_QYNH9BX zr-=FlsY`=n_=QnV$tDAV^&ws>3AwS=V4xIKL*&lTl7N&nu*Ys0UDTh1J?3-mEq7Sizz-^tIrRYD-vaxtW{}l@WRGmz1Gq1 zW#H1-&0XjvuHoL2X)KM$k2!0D2km-)R-QJB{}w=^U7xpSODEzv)^z8tYXa*K{)k1m zGpd8aL&DWM0`m;74eKFcbtl-4$F!}27;ajpe}&#H4nD}lE=5EuA4i7fPNig(ZgjRU z*M_`4?pWy~i0m5WnP)%GopHIs-@!B4LHA7h<(In`jC1Dyo)==}LG(~>o2mlW1 zIY&MlBM16xfEq~5ex?5yNN-2#=RAHv;0zhqHnU_=%k!u75*B<@2h>Dq@Ny8}z;-v? zWc5D32<(V`klZl)*4l*Np$Y8B5&?!G zMkGUO%5nmlRAPxp$OE%#8beyW-5dhl5;K;+N_FsszrcrPlFV zQs_9699`!AhTz=37X+R-KZRl@NGup1H%Vq?eU??-BxV^sBWh({L=#s(ioz22_VQsX z)MLu9Os;<&GG1k#*tCbKk|tV`$r_SC1PNOF1x$F!tnc7OJhF>%*m1lBg?-Og1F<}5 zwIiP!j}k^9KcYgBFtW(==83X^mVhpFnmqLusHol<_$Cv{**4;F&bjXurzI_EHwSep zM^$Jb$Q4KQaCE+>zVTo{TmzO@3_pa8&P8CF9kxs-E22Ks4?d#IIX2TTcEw@<)Ha<3 zJ0Xix3W$pIRQSs?ZHlBMTRat%Qat|7xSNic86yFZ8)ux}U<&i7)Fe`gfZL|}DeZ4z*12}+l@i0J&wht+_scX$|>;>=u;2>XorS-N#u50f;{W! z;j+6q$@j^Nb><(P3v08@3_CjJ`qSh#(^tGsS#`DY74@Y{?eeh3Ze7&fL7F755GI)L zXe)gj|FDl2GIzX!|FC%-=CJ#I-IhDfz6no27(ZyZgtRClXlh6_(AlJ$f|L-h`F+Y6 zZqN}uE7$BXJ*=Dlq~GtG?;ryzgyc_V9651u3 zz>1qF>WA$+&g_^KE$lM8*eIJb_7lY%R!U6$jpI=>W%TUa6it*)N8>hBgYvIrDumfX z6zuI~zR9Jey`CBAMP0fj%^4?F{NnL=Vt}6&BY)cKHGMV}fC_FI`1?FxS-qJgTiP5>BG{TUYgN7{VVfKP_NR+2^NOc%= zNSMJIK$F7XF)qT=A?Y-%8m93~5*aiW_u!OAnTcY0w1?V&fxvN{Bc~TlqgfXcI?`ywRl>GK87GFsMOy4_uB2N_rfWx?|O&jz&Hf)}=;j8@-dDD!Ml68R5Xz zaZS?HsOh1Nmg$zT`eS?caZp0JD~;ztDM)t$03Q4i`-dQR#>N*i^ZA*RJYb-ZvtNNk zLP8ZdT|~N(+SHhjIH9R-i{Kpq5&d&UgT~qB>TV(zI3>&>n5kNED$1jb-3!o2*-`qf zUU**KPst{pXzErQ$frvXhFo-5Z>Y*c1q06_9XazMQ^bcqYk%XMd9S+e^zta<14jtb zp4>4kMIXS;&=H;Tsw4=UVn5Gc>mG?;OiDyPbFUHo7MR6ZKi_2G*mpkq^quSzMI+-& zH^*}w#yzN&{UxVEgp0c&rNbh*;{!nS$02>}#u;J_i=BOWZfe-9JvmWJ3px{hbY zT{n@1mIRPQM!<|C!Vtk?nh`1raS(GvLr_sTUfyAjFLBJ~kS81(2ewrc+M34iTMxEV zlm4ikalXSmzq-e{S8O(|B%DH!;3VF-vK2>M1w;7pjkRq4swVlB_^R5%cJIjlX3_UJ26$k5e&N$8_Ivo*V<&85+@|mA_vdX7+(S=S$&1j( zZ4dlI53w6I?jf$x%DC&ogkQ`%=5M{bX~swfi1q{p$7nYPH-2KTSLj#X+PLS@YOinj zf3IS_sGRPZeptiNKQ2f=Yv%sn?utLUlz(Rpi`qF_DLH#s|4TQX73bo#E{!qhXVyIM zGlZlJN}H1h8&c3N3W=sMBg;7(>Q;a2*e=Um2;xM%>}zp=&X`ITJ50y69W;8iX^OP3*HN3bJw7ZEPt^^{Q~1&o zU1d*{3hh#{Kcu+?^L;%XX)Z}!Z`oSV@0|Uq;4HTHR8LPABDIyNfs>usemRsZ`8Ts~ z-%bO!WcyR1xugu#6?@Bu$^c{1iYlnagr>HR%uus3Z?3h7O29gj-Z~-;3;i{fmt;yA z`sp2ZJ6a4((?*@nl_OE5uuypQ7#(;OjsvNw;MFS|&~h!>a-@R5E+`$ErXW!0t*8`K zr!Os%T4Z81)WwwJ05eWBUhJ`~z1d#b%1zcqOuDbPZv;z)#D1EXSC%4Q7SG-0LCJzp zP3|=u?>uE5eU@bT{1_2;7S8J!>AJNmS70w@G}&G`K~LMEaA#AM4y$#lEVwM*in6i< zSt#9GOo>Y9u$O%-B*(B+Aut2uF@O`PY07wNJrF%83K0d6r3}c;XY>p7I{HNqP@rM2 z$tCMvQPBMFH(zTAjhu7yPw-=Oocb--@@^RMkss|bR2zK^SVqz8@6FD>%{A38_Ui5G z+>Wy3rLsCp%UgM|%YZm^4uI4b{E-ChmQOn#znvzsU!klL4P>XXR`I)U=F=BF`;UAM zAF}D+VfSuKAASVB+~em1U@U2F#Ld5pA6e8_UXcI&BId(9`0D@y00jToU;KY$Q~z-h zC2XCX9bJB|r=9ITd#Wr&mHZ6?l&;8*>%1)ok87XB&G$vVkPV5jUX;<%`Eux!Y^vCH zDHvX~tMir_UBF%pPZ4wUJf$GI04gPMSY0+AL7?@0cF^?hED)v*r@6n6hCBtwtW`&pXaGz=;T-)sBVkhILcgP^hl|c}7tY-;Xd|`X>{}QRb{P;Rq?qK~TAwv&DB(BWFy!{0sDX zQS94$626(IS?gx>bDt}rU!Ly4BbbFm-XoStM^>u#aj`BN_9O%;^-E1goeKPVz03D| znu*^Og63<4Lq}AdfSI5yUYTyw(OV+(IkRaZNQhy_vPN#AaYhOB=a&PwV=> zn6v&v>=yNE$$$D2K3*aIyPWO+a%zH(CI(jjJh~#~MZt+EU(6UdEeIi0+4G*T#`JD0txr zBR7{E%{c<;HxJ8a4d7VIH;>6D4wvo6rDLHRuaHJb>k|o^Wu{MEG(Kz2tLNRMs4Ffn zhM1@}mkGDLE!pr?IFKBZr?Qc`C(rW<66ZtTz#`$1=>eI@9%5Z;e2P>vhCIKo%31yK zzkVP}Xf_U^T}uLDUP=liBYr-1QJG^y{muQY%V2!zlrZ~^6wln>2%{zH!f44*M58kz zUE?BHM5*YWyzEiRFWk$8bUYlJ_>VtogTwNpY2iB3Gr>`y_$$>tC{xz(tr1AdS4LVI)_1?Q64-@2z$CGJoy4q{iTdKKrc z$Rc`BpBUl>2tu-I13{uC17s2kmTL&bI#p*OL*Y^?rWDZ;VaHSzT==rDf0Up7P9U<_ z!Rb!~-DEW`N8Mf&Nn!pv6mX(1@Vap{OS90T!lhcK1+9a<4<3PO{T<4`v~CJ{_?Uy~ zs_&kBMab*Pc9Qs$VM3RTnnuo|+Z1ZH1P7hm<|WqlSzK)&>6DK8z&KD4AS~d-Ot^YgGgxX$NwNU*v+Nrum;qw z^EA?QM*Q^d4r~|5?+$I}mH7$Ls#2$ixc!P4#y7+8n4=$#%Q$oseUW7^7k%UtLwU_4 z<$Tk?j59zdR-XLG0fE0G1iyMfIIwz+z-49f0m9)8@^#W_eNuVx5L^#?rMLh6@4>Hh zu*#<3C;Kw|1VEAhRu=v*&q&D5+S=s5hC!JD15iMe%%*%Nte@SlvQ+BpbeG2k{tqbc zoimvpo*ox~>i&ZP#{~8WkoLvdI^!0i`ZmrNOtTGXER)D8?EQm(&4}dS>NlQEjaeI@ zxhq(;*pOHCQaPdLX~woo3~B}Vy;zDK$5Wn>Oml4uVn!V%z;=^W1whmejRTC{NJzek6=QTaIXRJ6aE=~P_SpN>Nu-MFSqK%EK==FNHE}0@kMg z#L#UpYhUZ@KiR=Ht&jxEw9A9&v;)qKDhyBOpx zF*-P1}?pHL5i2QE3D#StiBYYr#LfI>g?lk1^?34|=V2(F^SZu=Y@r7&%}iJh_G ze1F&`;c$o7=idFYoMI0rMC|GofNd;m5&f55^XhIK&iN8D#%1CBSU71L^{mHdR9X}} zGRwnjp{naa_Jt^4@jAmol*XikX?AtTTtv6+q){Gh#HM<`BerULT{vriQd$nxx`nFU z8Hr6(qzj6!ZCsKa5hp}xl8-k8RH`L@YKod*`*j6H$ ziRk0q5gaHT;z^S;pGqOGYgoq2{lnIW1}y_SPdvEq(cJ~t z42KD=#GUdeHt}#5N*jKo7!7&Bi9II_J?2Q`F{i^abJ({+^Kw+;Z$}YE6aaRQ=F7MI z=1W&?*mu9CC_d^t+bMHjKzuV5DN$7mnTtZH4%~^+3W4DatwGqpScqG8yrfj zes^+hDwhf%#-3G^1>+&V| zu7dj=&%L30QYYkff9OpazU_kp$)Mo46Tc=nCSiqF8-I2nTzCLdU5T_viHeQfUrRy5 zQflmMoAdy*xJH{3jP~zAHId0qMQ(7TSF1r(ik04OVE@2&?2AQSoY#LwQTLxDf@@+BRw}zPzN&QB4v(wK39Fw>( zYTDFgVEG^dPXbiJt?nH@UpgR`z7*70EQ~dQdl}}^Vn}OW2|PN{7!^~i0lzw8sW<|Z zft4Z3ws?cM4C8#5C=r>pgbH}u*t2dASYCwrH=<(t(#6>t$w@N107?!qD1&_t+rNuEx+azxZYrwWbwksOYp6*-bp8hV zwRR}MYNxu18uek(@b0iS70)r4SMEA6&NW@azg@klV>6;GIp1vZ!D=aKtLhm#Q#O~^nS<-*Ure~3K0-ehw*a*7?A?Dz9xS>B>)ANv|v^pCQ8A&Q%UskRT6(xB%yb zZL=rYx?6{fzot&p+LcchV^ES)pfT5(Doi+gBP1>ce8ZM+Lk2TAsBh7>&^QjOwvfy) zOc1UitZnBGwUf)VK6raOkgj(d2PwNB^7Qry;6UB=_JF;`i_Y5kkU|}V_b8$za7G}* z61*`7#E|g!k;CL}(*_|#J*>42fnvlTa@l*2k$xcNu$mhee>)&=>Ra6Il+*(bmSPg$ zUT9^JjM=Wj4644w)D=+^UN_pMHVYH6vh){!dRr}X(}-`Qgk@)CXXB34F)^O;uvq#S z8JMO^9pEL!%AcLJWCi!Em{S_#_-m|gj~=*dT-(A+lvcLq{o8=;s!jW4!1sa=t_wqP z*HKT2UN0O=jBZd3-?`t{BQZTiejSsW>Sdel=J}Pq(QH8Ry~FL+5G|AJvhAy@$yE1g%{oA6r;Ut=)oJq@q(oFnxHh ztjuc#kX`|UH0u}AHlvAyh(9+^dY4 zr2P1)v$Oy5>#AixnF7$P`=P;th&;Eeb}*QJw5!!vz3 zMzIKJn9#%{A|c1~eJX{CS7!w1DrhM{W{na_gRhWIn9H4|l(u8Kx?zAg#)oahIq0ex zS-1w+JyM&6z-YJ*t=9eeiKuj^Fetz$EZ1 z=Yn-{N6w|j-MLN@3^GA}Paoj~i5xrP&F9~@0hr7MYX>!-7^))GLeGvq;en*s zQ_hd~ETu7jk|K{_*-=R+r>*^HMXSc0tz!c&;e0QOn)3pavP&!uFw@9Si0Mdiz)yP}IABC5@Rk$wPa;?@A{EPv)$ z^IX!%$#Pwac{|lxS9U({F+HLklQZ{VQ{5)SfuLjJ=9QAn+EJe4LJ`v~3J`FBF`54~ z=F#Zmju`yGDhz(gpZ{^`BWCAp_s`O&D)BIVT@)jDd#3ho98Rch3@oL6GK7hFpeKy? ze3apiI0krG+0^#?IU5QOv%l~!g+=#$HuK9eU(W|%;CT9`XYZMHR`3wqB()!f>84ER-Hs~D& z^yO!p4CUuTvORyF)~ZBQn)-r!b*n+k@yedg_NrkuJ#RN71UmHcBiIAYejzZ;gs{?H zc+oPvMd`k0MsFz{YdXZ%mTTgdQrJHagkpOAI)NJU62GlKT`OJo!%9aN!bS_$cEgZZ zk=Vi|)Qf7Ye*=BiZgsyFLZ;R`VGo%*+>>VVP`GgghsbmELkwyxUkozmT7B87hF`4R zR4s0Px!C!Bm1Ei!u4({nS%bbX>gvUNf?5wN9?s)o zgR-ty(a*pQrGYZ5u`Yg=X<0rEid$@A=jKwR>$^`WZ{MfW_82SB&h3{#Cpzs$WV_OR z_cRx5Q2@(u<&7(om-Ss46q7pjW&6#rY6EseyJ&|#y=A-G`EgY`OB>(bT!2E4op+Ep zHiNxxB7Z5 z;R9R90dWzPkvvu(I71cczyI42&Ix3%qJYQ0wPJ-J_=W%;_O>RL6cpz(>0!i)F9Ffi zkAV9fw+uh+#q#1nuut^D-Z>Y88|TmfPXGb$u#T`rn5ugGGyM5B=HRO{y3q-hlAY|( zJ=2JBmqSTtzLS{S<*nfyBPmq@qY)0XA5s=B30lbHh@7nEdW>1kg4yV@ti#@Cx461w zzk~TdABf-cV=?Lvd2#~ve*xx+Ioi3{|EoC|Zvq68M-iHf@U1vG(FbSi-`sQoP8I;y zC#RY6i0}NhOdh*`F&g_!Lg8MI;*tzw;zPw%o=vhHb5!(F=DI2Hf#&rw>nRpv|eKZ@y^IBl$ww~ ztxD%+mZZEw6mfxg;FWz>|MVuOlW#!@{# zFFq`5XTB`cXr02ej;zD9l!RJyWSZG01|f%1uN-0l7c|E()SMj2ZFa{(5BW2?RAg*c zUv@xw7b}Qh4cz6{^hhhM7pvX0NGadqlPg|xHci^Ku~`cef_22{!5lZhbJ`R{47rk- zo3S&f&S<)89H#K=H+mi(RH5-AENED}^IVpqx*sPoyPKy_6);O1JCH?$V@F`f(z=vW zCryYnSt8%x;3$jY)uCD?+lG6dRy>2Rf(np2PX^-`f}NfdNsKX+XA7SB}cDBQTsgRTgntb{>u??G*>v~j?03~iU9_xHGhA_p@vt51Ht{63ZI70*;ycEi5pa*%z1E{bk#yx7#LTwa zR7mZstwWD#cT>u_YI9E?Yp0zZt!J7eC5R-+1*H7glg>nKP-&iF;K_S<$-ZBk{9AeI zwFX^Wg`Uq>r;{8HjrY-hqxgsK&?KU5lZ^(!b`3A~YJRy$B*S5Z^+@>(Q3THo> zE=I}{V)M*m;;|LF=k1f)UMf224c8XJO6Vt$*lk%a-o>FU4Bj-)gc(o)1~SI*pWY02 zDT034009_?&PzX-SNx7ztsN3s$jm;C{@`M<+CE+Fo2}vj8jF@IyJg$He{eV^XkR3E zti1P;-&A+Fz3CZtRlfW`gMQ~BN0q!Q=wmShO{gQfqhCXIUi*3bJM{0~AO_z^>zKlr ziz!uAP`L*A2zUn}3vgVeDnDX8fpYrr?$9Dd!v-xkj`X+}?AwxtAVv~<3B|5U;Y@z0QU+ciq`Q;+xuxr_We5sn|W?J+#c%D%qsNtrJB`dt*Oy+mx~(**}A4QGwwybDgH z*wG?qdi_K$bYp5jMi9=3j>!$iV!sPQM&u+cV#A#s z=)|1F7hi7ez6#_NUT*v%jUQ8c+P+ar>#iX(%_f}Dcyo#l(3bCSdz29pj38sgD=;U{ zutx#4Cd)I2){>xFE1qf*#GK@h^by}3#9XBJT%u+az5JW0gYk|Q!QScToP%8#a(!9l z%is7VYu(ieuzwCNdX7K1biG^&-18rhZ}=J~wlFjRKrs;j0Pp`4j*>9_SH6jE(g1fr z5XNuczN9YzQ`F|lgQ6lFgm>e}?CIbJjWbB-d`$cNpj-|>?Iu!Pg|n_lUeQ-uVSdV@ zgk#}$UiuS7OirYFyppynyjo^YmI;kMO{zBB6pp>iWpScR_gH6>EE+)}iKGPK+Ope)nPI)Q@WA>Ph!rUL$beE}%dg>Xn5c0Q>-Wf+S zB-$hf+ta5ki{g)vnk>j}p|fQ6jf?gJ&aNeE!GpIz*qA)ZGp9}7&1TsfSzu*?F3H3< z^My=IU#-*|DC-;@j~p7tN>-sMOVx*fz&b{?9ySx7@}?+-*8Z$ftKsD)ah}+^YoaiP z&y+nyaJdKHyn%E@fE+?HcBo0Dle7Hzd-h$4Tr4b;@)yZK97=DOlnA7!8N&HfFSOtr zbGnKMQX-6)5`nBdM-j7f9O>x7X794#tAZBA5XbX;gl6F8{guLP9XPX`C>kO9Mu z1Y*$h*dMoW^k8!1Q-iX^NEhQ%OsHt2?sKtA>}5YL}O8kpq_@>o&!wt zFfB#*h(%X4h_ehnN`YmEhjqLPDF$wu6BI5YdA$g0m_k`vBhk6)D879b^xs#R3AWb8 zvZEAFjUG)*k?j*jSo8H0#&`qPZ`Lv-9VZ3|(+R)Q24R6^5(zQV*-C&Gbmfb4;W-c{+r`P#VT(ACP10r!Bs3*JaI>V<0otdOcsSx`gEgK1riB^4Qtk(v0! zd~>#uER2>pUu;Rdn`LvH9J>?ym&D;HJZZm)8g{kIlH*PzzL zT`(5M$UTz~C-lultPsPk2kK}t7N^cY&}be{je`)ePZ>wREod`IsfZW`~&TgYFBFEAxE-qW|B z-HkV>Bg-!#`&yZMFL2w;&c>Fvxbv`rc_u}#SXsV1FNh5|d};VG1*42+8_x}|w*+|k zJbKQ0F@K6F_Brqv$3OdTsePpm3(|9$FE(2bFkJ2(G4VzpxI&Jk9fiTND+w|iPQp5q z4@L+`T$n%up^9An^93u*EJL!+V%)T2|9;%LWi&IB=KEq%!)%lFOjlfykdkEu+$PM+ znCfy{`1$Tkr28kc3m3|W!;}jea`o`B@!o-XkxrM-F5B)T3ZfxEH>S+233+ZM*wo#X zDq>_lo{%wVWfcKEM&dRpK^l`c^!SlT`O!#o17`JTs$Um^HHCfnk@MObuK_@S;Jph<^P`|6nV0`UX9F|;20X(Ewpw7pDuM{!> zHUquRy;Jw3O&U?H99ZsE@CI|!P9>~^Tjp#%{>^t1wUt7_^gEl^93RA*3;@=>m*Wgm zE+hL?A8Av%IEON`kA)0q#7IF-u_iMDG;_$f7(giiDbtPeAyxHVu2K+Oj>)v-b{m9-@rp(=K!YPw3=>^`3iU5jhUw94 zpSIwU1K2%h%8ykgA@d_gj>yKCA)_~4KOd7Cahwn)Nxw#*DHF8TtaWuSB8wQY+N}0b z9D{h_GYrx#w0v<%Gzn{TlYb%Gu$)OLCl+=bKj89+BtH{bqA_7gzC4Yg!@<)`JPF_j zZFIDQ0SfL&Fuush3!aa}Wj6emq2S&`Blz$TR!T$yYv~f5Zv>ai1wsBv zP8!Wz57j62l+raL-RNv=i9%gk_^fv-Uy~C{R0NQ|xAZy9h#Qe1ESAXRw4;|dyO2{h z8tqj!yzinBT{yYtU1K^Q{VRt}Lw`2S<$iyGKXG?^xa5xMSz9ogZBf=bL|c|r+wa?r zA?K?j->Y4VE0Zu$D|de!_&ZR%y$PO4c#j~xTMEBjhudcllG2f+(U!SxgaaTyAr=H@ z+U2~~ocFeD>{|5!6x#!7Yg?djg}KS8m3ZbT_YudVoWIUp6QFo4onl2JRZNRZL3?br zF+>G&2cT*ldDh0tJX3=wVD`kK;oPmvT%Fk@Z1&A40NU@lV7{q&MvXgVyN(&i7T#vY zW$t(}=;C)ssGZX2H4MEKnPXOhMUZW9c|<34)%=j{TEtQ~`UUY6SG!w(%;>^b??Z1N zvS6|b!k&VOZcibF>&%&j zWUuf@)&;~U^^unzD+vM7M4CW)WNJ_d$lZ`6=a#r*Y0Wb8L=c~FR!0L(_LWlz-ty4v zL(cFS?E*mmlD)2^@mWrFe?ux#OuTK(w;Ee@-9VtPNt@hn$DL6uxfz|`%JsXY@>+KMv{ zL!b92sp{7KRVQ8%Fr&Nx>Jt63UzW z0!!J3llT_KF@rqCK@BJMADV~%4|wx@uZMTvw*-hDtV ztS$!WpGeFN1Y{65r4|n4tZ0=w7dD$!&?SxJynIC_?lQVa4I!EX*dIrtvKA*z46<`? z2D3zC2y7j>OkWxkdQA_?b^D2(3)v!;p^H%Gapx#?E>?V{b$K5<1`<=4PMIV%xTDCl%YaZ9A#hwr%^3 zZL4Ct;);FK2lw3WZ@16>wEw_dYt1>vcqTSQ`o_mPV2s9Tp%FuD@pE?}j9s^cFui;l zSTO$h4%BU82iQI($Sy@H`Gki-?TcZSrMr;vDMOhlBpF`YD0B@ph`$9&NOX|Z6u#o# zSyKRvyw+J$ZTKzvB!ikWaDK^7%@a-I@5&iE#?tN#Sk^qT;Cq0y^YGSZYfH%QfYDs#>e z&_Psl#ul_)9CM^mkTnO{NR)UMK9)J08B6>ieDN_Jel~CpG7TmC5JdhfQR)1Hkaz>m z0#p#?*Uq;@@{>5}13GcsS8SK>*Du&GSaszs$Rcs%heEKvc`Ht>d2m3D+Xav!ojM`m zhIhkkQ7=&g(2q+2B%joeSVX~Nn1Kv=NFUL|t;9rTFjxTerRq?k5YP7`01^^@KYo-a z^cN1=2h`=7y2zK-AZueFRmTwOupzD^R_uQIXtMGYG@egOsPVv&gqk@YeBc4+9uW_( z$tjMJHA{OvFpkzh?qqw#UJi=CSaId_c zXI|yo*~A-llssd_Y(-Ao;z<%AVzV6GSW}7IBExDI5vpX|lr87F&hyi&P5mf&48{AJ zYnhN}+`%1Uy>tu=tHo4u3qEHqDe;?wW6=3-z6lDV99f3nWZ<(%Q-%yRx;KoFjNG z8_Ce1sZ!t*>`HNV-?YgiJkEi@Y5S_KS4JH4ik>@PKoN>jMAo2{v z|5GiR>k*MeV12+#!t5~#q1;5z2vU~qv+&vJe#a%8cSrf=FO^tmavoG?s*YgDEo-@|^h%O>O_wEKw(d_d zo#vjUf&d(DkRU_jrs(*wYp9s>U{r=dI($N;Nf=aE;Uyvi*v(`_RFxkTRxN@=zC44u zU`LL1&7@4N_tmomk3cIu80olDSg#WP7|Ko?z^*9mrmH5$2WvgFnF*@VWPKY^gG?MO zI%xE|oT-4E{<^#)%tsPK1cEu%Av=(8$1@0U!P40KyA-fSqpO>1A zgqyoMCjdNmhpr%ZuI)j>(YNPcd+ZFnoZ#7^MA44XfIR*oaoq2~T4-k%Y6sYm_U}LB zqoYmma4Z+O@=JTPD0E>zMz>CnFh?nX{?Qlav20$l8AOp$_hI1b@6(vyTEoLR?c(@M zGDUcE_6$DZ3hauX`evgHL9qsbrBsb21qM58X?|Ke8 zU@||He;+1N*h}x{iUoxWwi;cKcORqY1iYl29c7J zdpQ%N2VSv4(fAx;xZ=YptcD!RZM@nFP*gDVFby?4FJ$kpSDap371#A`w`~iRfnlMa z)#mVzviDx+7&oKKEYD7GoF|F#(n5#%K%^okf`~9&#i8%LEPcVtg<%`S)@9&ey-w+> z%lcT3sqT=X0OK0Vs%nU`fJxM-6~o;$P)?Dx{^bG;XTfSm2) znTyM=hrIO|uC|1)9r2ujYtml3K8{FP)cU$Jh6%?CZluTo>n0N*$>F0)$5GX6(&IcN?9^VVnF}WpKKx zUunAVI)9ITqJAA!#5C~vvweOyZU2Gw-o|_CYC86b9xl_kCO^y0cK7m8KHIF^tUT5E zC|}mLvv1xmHeI((;zw`5gvcWUELCM81s?qxg#NQ^DroGf0OA?kaZRX!uo=<^HW9)k z5>B$J3+o8RFh>+X@eJ-SPerOgzVr6n{pIH@0ItLSWBQr!tb=qZVzSJsL$yvDIH~dk!s}HL#M`1LNHUCBmZHrxDIjW#%4;V}@J%nuR-bU)KJj zMzk7Sdz(a>vQ>|oUVDFa(|137iqvYT5f;m9Npo+ikNe1dK^-ZD1auz}^(`7*6ytLy zv6|0Mb4?xUpgZ70aOEYn|AIMsa@867(3u$28Ar8j*42EBPWS_qzXt$(W zLvdz2IK2}Azqps7FG7@7_bKBZLk4Da^(&_CNyN=MMGFIPAr@M%L2-4ZeTO=~N@zwR znB)>+E(zR*Z^-1{1%>E4UcLTsuBE;cHCbqptTCezFjLl($)aNbl33j(edLRiwMj}Y zh#MgvOc>$WF(K&KJIV8wap9I}=OKu@=-eVEI5G-&ggt+li5;K`SDMmouMx4}9vPLB zzluxTl@G;h2u4E zqVtSq37Ofq2^KqXppO+hapbQRtIXw%p*KR~C+`9e_JZF#y+OxzJg~Y-nyOX3D;eWG z7;$~@0iYJ(`Iz!CI(I^mPz!JmOyu}RHT(#py*>) zs;O%lU|?K=_Gv$N$)>uG-Q_lS&*Jh&U+_jnd*`+5jH^OU5i_P%A!(I^&g>i->nu_i z_y}RQk2v1^GRFs4!Hw;H+F=-$M9;LieEg(x zx<(CKr68)Z@%ae(83Rds|Vp^mPcWI`KJO;<2f z3ZX(PRZXWdZVk1At%z!8KAzN|G)_=(@Fa!&-8>qM_2PJ1?E9k^#^~7oS`ja2PfwTc>ioT!wZIulhTQ7S9cq14?sFQ} zsb?42O8H}=U2W6k>ofS1z#ln^cT2=J)oUYMMrk(u&Mna7{SBk>p7RVUpNqT*a zUymhvk(BNUzoAU|*+p=MpcU45wDk**Fu}7Q+`TxbmLOA@T1@S+LJc2-_Xr%Enm3@t2PY65-l1%(bo{@(&+CU@%3|buEmmX8Fam#1u%+P_u?46{by^yWg zO~<=zM}e=fksUx$F9Jw?p_%EE%w~4LHizwsR)_71<$%2}pNrxLu{Z4N)68aZz{h~J z=iNM0@1leU7C^1$$EcrE8%n?n1N$@7XPZs3$-9{bx3@az4atXgvY1+>g+AO$khoQV93`+PL3vN?0vSD}T~%8nqpLLa#z!hT0}#hhwE zX`}WqtfYHeqV7;n`$JSm>fSX&S83Kyv<i4 zAHQNAv``qxoiw3M8R+2M8yi>3^I3iwd3{>l`LFI57vg2?)bBfw6nJ3O52tLlG|j|p);O4N^2C;UAmWEm>}h%+>BVsHJ=fk4`9SLn4ZVj~{@=EIEy6NAMZHtzw(zkDqA5kXAGlYF6fd<74f8mtw0=REq|W zMv1vtfuk}FuSWYBhp=LluS5}66v`~-BM%Kh>gzaCu2?paI25_^#1eR|ek_ut7+QCC zOmdD|XPe4Lud^+>W|}IN*Hv}~)D=uH%ZL&`YJ_3m7r~?bgr_j@ynei)pOlV=D^H>=x14HQ>f)dT)Fl|uX3@J%vEQaxH( zP=VHp&u?T70y3!oadz&u3W^oq88j6=KMKnq>aDKe@BmpFptklGM=*oQlGzxm;Ni^< z5HkOBT+Olhp#yM}KAI+mLV2mD8BFx#@POUqx7#A=xw@zWk>;~4+6lBpc+n0L-=$nF3WYV2Sc-HkPqDhI-|$h@t;`S)ap0hbvWO0? z$=Jjx0l}}gygCzs;&-b$vDdeCf>m};cy8Nn`kfs)#aHIE8FQkvw-mR{*k;J!YY8wW zifIz9O`p-Mk(r))W4H;YX2JV=HtrFUVl$)j^;RSOoz86lYOj=(XYgw4E#-^X@6M95 zh_BvyoB4G}*AhQL@vqQvMR$K)t++%KZehEhGS6FaR51fP|4%TKCbE&@x=Z_fT!H zR0?n_3?xX+yRl&8{=>tY8ISk@MZBkEb0gBn#^?dras!zs0zwu5=ntlok`FP(yo16) zLtLN9r*g9(ApMeLch z5Qiwz#=lO;(|b9?-~%CUlI^C7kbJ_DEjPc9Shy@VP$??KM8HJ24X+nn%Z!$Cv_ce) z9t~%gf=hF%=@7=YZRI>-+`#mYsYR@t4~t7hC^fEkhQq8_mx!Ra#X z8hkVIG4L6p7@_hZuXbUf!qgvXKKSblT?VDy@)m~qqzZf!U=fdSUj<#Jjm19UF-YPg<+i+krK7&1ph(*C? zOR+!6RL#8g3C-<_OsK(9*KjgeiUBm#K~r+zzOSmxR!H_wl|){WMD<2qdaTl8=nL&$!aEs_v>LdKe@T@ z&zJPf)5N6ExMNYoL2rTy);+*HR?QqcyYEmWaaGCG>xLX)3Q1yY_ELUQ9!_=KU9AiaxkhE z11Zh7rSo@voyYS1EI-g*g)y0DyD%1jCKS*2@N2z+7tI<5WHuL&>JY1ZA?ps zUYLI}d2HsaORJt)ln3KNJG`6;tSzCmmiGQbH_@G5j{LYFP&t+fq*#;|pxB)zsMs{U zt6zSfx#}m zHYhsq;pcJIPF=On57W2Aj*l+`y0 zrETng%#{LjbMvcN_R5Q3u!onvvrbtTWL}ghs<}QVtbcVULT>r`P~yiZ@%Ypp&L6o0 z$b?~d5?}W9g3rIJt8fYCKb1cplD;v)dbw64R!maAYFb>v=DCi+frHY{p7@L(RRYnC zd#ge9M}ozz_P0dFrd0r<&zlog30Z)coXr`-D;3~H#l_?wk)NYSm_qOlVCwsdhIHys zf7e9(Ytd257oF03xv~#4zdmmO?4|GUMEvzb;KkE`G|6;^^T*)^+;y|AGe#nlpe|D$ zkx&lG6&&t5l80Y#aN?9RW!~cs1e*8;s0hpvVH!guQYM^U`6R?+NLa%PZ0pKJiymtN z8CI8UI-?IW+mf{@WHz_B1ZNZ-jpRsA4LE>#+fTT-;>4QZR`NgVhS;r&Y`CNtY%#Xma0o;L<<}AYbAGf2rxid zvA`kmmt1q3c$7!i59f5sS^SW3bBd1Q)^GN9`)jv&yEkQH^Y}>u33zc|g~l>~Ei z)gzIO?Ts(#2~dEp%q{bVK!bg9BG?}9$y$sxf1j4@$$C9H_Jc*Z$v5WTIvZatzGU2T=qgo9E0wwE z44V-ge4<#ssju}q)c@y>(8s>4KJOcSGVr~u_uqc>DO=h){5J+=NbShzkR9>!cx)v` z+3eU$nqGM~Jp-%x(WFR(ro9o@Bf>jxALL&06&Y+ijH^}YnPg+Zr|1RzVfwgAl|RtDo{n~7u#tq8XRxsZLmYUuk-R*k1I`mab2jAW2J-&p+99T*p35i{mnMg(|OGeF#}l;V296#K&7 zU*T>tTQfk{d89Vgbq$0*7}r1p8ityj+gOiKQJUtubWUXgtZtr#1Q2<#yX+Sg`6Kl1Wek*>nI5ZM1Jdw=3U@f8}e-2dp^d--rQzuAX4!Uw4=@* zgrM3V-34vGAu-+*6p(mi04eu4^Mi0Zy42)BUFM_D5mVE zGDFNpPT_i6N5VXvLEeU0az?;8rf}I(Nok0k6h_lVdT%nW*ro0Qb;PoZ{%&*Y@bP{7 zEKsofmRr9}ms;>KjtB=-(06KtcDxH8tPT+V3I}n~>&SX6{e6mQ_L(~kk{!EqZ~EZK z_LsFO^gls2+{74ieeh;AWd3f!PWGzKbb@16O2Wza%TB%oK)))OFt&O)!W-{{(jCa0 za`_DUMztS78R{`mrReObCWA(p_MTMXw=^PeT`^_9IwdL#?g#ZR$9p@eA;@?FDPjG$ zidt-o%2v$STWz~kbBRV&b;5J0F8JA6I^4}Z{T+NN{a!6g!9;1G)}^86c1=aDn%54cts1D6`JRtckhq%%BQ8BW-x5M^|YUa zC6Dnx%+C&SL9)#gqpBSvgmsQt)tP=0B=)&Qm}eN{AK92`8X!$0E5v?In+!N%M53uR zy|2t$?zqRk&BW-^4wv%7{sGxA9b_wIBf zUE5BOg*Txu#ifq_OzGWB8!yrwnQy&C&*yq3_~+BlHKNiumb8&U}(V^ zQ!_BydM>=Ku)M7PIH7_WC8i~t8at8Sd94MlLm{Z2&L zw=-DN^BE*BHHKZXn2k9qJkqNIw-Pgx2O*1Rw@|iQrUMq$+8Hh(ioxTy4Eh;k$vk#< z1Ef~u9CWT-NfT3Om-hgf?A#T*iVD-ovB$H6O11^V`sQJ1s z$vZlj8}_D(2TF=MBuLv`sZlDH@^a*3Gc&@G%S1vDiYM`+dhz_{*YfVKtmRZh%Ba<- z_zE1&qS$(haTW?!GkYwu6UYz6Be($rD)oUQ{KL`JhNSV$;)~=cf)SqJy;LWZ1?KzZ z@&y!+UK@5Oa+kKRVvoeO4Q6Zn-tNC|SA|m0c`PM138^I+^uP57qPbjW?Wqij{%C=l z9`pGzaY(1p7@l=y2B>)RhncIzL#}vfN0hP4LW#Hiv9D+zAcMs<5lkR`*5RTL_}mL%4RRh-gF%8guiH-ul2>KgQV9d5 zszZ4GG9oC^xkp;;%4^9+iqs0>_7>5NrhR^U^tWkMQp;Ol<95bs9<`TEGcmUFif^2A zG;?m|O567mj`CVD_IC^_S!TiYE@ENPWzAcJ2VQgCIY80j4>E8vvjk>gx{) zmu34=J!kNow2{HV{61Wg9O zC+fSJBEWgO$^o+uYP-%pL=Gcg4`e;a&)7SVIs>NqSCxIPo0ubQz&m^10VfVNm;#XR z;d!8bBhtXGc^n}cyBP1(jBt_wRKG>S3x`Cl~zc7XtsRBsLTzpBcXQUBV680-AwNASK)SUbP(9ID0)ZU zJi`~ZYQJ3DrUWhUao~pLnKX&#*?Qlu9TT*C>vjwUfPnQ&MLx>f!k&l@S@tciCTFoI z((AX++;E~-te=eG(oOs)h|xb16*C_aAXv|XMtI9^eni;kK0pEsfiCt*Q=-=IqakgV zjYUOqdM2NoICeA2PrPA1P@P2$5@#@Lj)&+e5I>=@d0GklAZ7U}U}=Cd%nWBUKf$hh zvEMYx{5A!wXEKa?m%k&UQm`YVVY!Wd-JMyXWJAydCp?*>};tD6-|p`94EO3550p3!6@bt=Rvkfq_RxD8>z2}rWqL2Gy6KVLew2a zJF7KcFG<3yOsnIgEbr-(W1)mBu&Zu{Sw&J8fv_aeFP3O^Th$tt*baxZ4Ae>{#`J67+QT%Qd?K<*eX-l@me~2MB0@N+nhB9tPGTL^T*K2=1 zZ9us_snkynUCiuXQ14nN?Gltjf8x%x1lf~`LR&DlfE%X$ae}!gW#Kh4X)UTvi1y@( zyF)s@1g00sY>NV5j&|t|lu+KeVd2vUPPPMQl)oCQL~NVfP*kem<>aap10t(zfuhtX z%F=W*_yv{DGN4OzqIa>2;ty96aNmVg{Z@bz&p*Nb`NBk_AhSC77LcT1{}*N-We5BJ zx-UyqRgKQYQ2C5$)N=9UCZ<{kHoqqt?^Fvz^HH?zji?%eU#~lC$$LzG?qplSw=)`X zn((lB-m{_~x7QCFKe!u`MCiO2^1<~Z3m78&V9PO4vxt~rDJ(H14N;A$SdB$&Mpb1< z6$2#ElqFRRwT7c3HPM`5BaA0o+sFGJu`20CTeA;buhKW0vT22P3I{)a2jX~u3%GRC z+D~tE96)e&s&e?85B;5$m7ewTs%>(;H9Y+hq%_vaFTAxc`XORZrqSv;h;TgtyW++d z+G;+DAYt`6#;kR;_xefExeQhwQ^_zl(0J~c=gLW>os6H z#A{{l(srw9h@V&GousOd@do<$G#A(o%;}OV`xrfOB4#u0B!L+q({Eu&y@jSSPan+V zRGZy?i?hY)J{ZBI6>9=!FSbCSgETZ*u>a7PFAuM;?X-%TC@~dQ|_`5^+`CHKtX` z$A?4vriN8&RQDmLj%SB!(cEC`)%9t6bOO_8s5X#;)~OqSWSPhnr!$P1QJ32>`P}AH z*>Hsr=DG9bWzl$EoeeZrumqh93-OjIT|{k0VS4G|cOG)rQf?ZNT*MY9J0xrlGA7g4 z=r2ppi>21W=J>V88Xa}8usm;n?%+>1f7jiCRd`}xOD(OYza zMEJQ^V;^MV-qJbE~na z;1TzTidf`(Bubj9pA{={9hAj`oYCL0mRqb*e#QkD}LhH zpUc*Od;>{q8>@~`(m~VW)Kkt!I%>Ooqq;L_YJa=$`$MPEN4F7EoR2(woOC=_2*-?c z5Fu(oIMgUb3>@~srK%tSlO2c>;tj`^ITg`i$U;$S zh6QJ67FuO>*%aH@*ql-l^6jS`bj>SfP>eST)3ocoKHhydJnp;p|G0r+95{pJio}vi zPU=b{pWK7h1aE|8PBu*k^5;%8VHM77AU%*IPn3bKa#@_4Za<%}q1NWm9#|4p<^sW+ zY{9Ym-KcG4ustU;YKsG+H8_vqV%}b1O{Z-g2dm?Qt%ZcFy0w(kQ6KLQk*X=qvD6nM z+I<;PE@kmCU`ymSU`1`1(pE&@d5LAZvt$NKR^4sE#(L0dcK+GbhUtudidXOopLjAA zYuveAX}ayex={gHAvfE>h{tbhC_2cDC(FSzYFjc5HSe?66L0ImBA)YD6f*42VDpRj z(pKxysRR*T4=J%p7rJ0O4~)pLD%P5FK*WMWv1SeR!UvG#t&4@N)>)G=9e}d+xs+%H z;6L`-Z6_Y0I|*nEiHKhpvXSF}HMEuHI+-%Rs#h4tc=h;|fdh2m;-JpX>#vR=u!P=> zTa_WjoKqyEnhr^oYD`w;v{X*Pm3Tlonut5=7??Cbq;KALUxIc@hfK&bkwmo-kq2dUUuLf zkkawvcjFx_t6>D(RRMWmV3s2 zxD}2G0fx3-3jDjzI;g?_+eWVym+XE1L;#05;!Aw3@MXaEF`g{!8)8)R)f@miVD%f6 z#vu$+(LlE0o=%C@U;L1xP#@(DH@qHR0}B)u#e4`Pwh@1I3#=g^1~Hnw0qa&gKnBzh zM%$a%lyo&pM8Iq6&&IEaUvw*5mkm%GtJ}go^0W%;TGW2R@7~Br^k~vYf1gN0>?L%m z{U5VusWq)^NtQgaEgUqX1z8Ycjgq&?cx1^J;W+zNQW=Mnn^GvowmqqU_BV1-ePre z{_J4JnfN_j%IG++VwY#^>83la>8AY90ypi_ojPB(tm`Z2o`%!$ySe4J!p?A6fwGX5 z7Kf|5mifx(gAH~++ z)tT-OI6u|VO$ZORTf%sBB0d9j4G!iJ$4;L{LP-?J>zo>4Wm4)gmBH^P7<60 ze?9SfQu}8wY&}rTfDOfx97cwTE?RVnx;{}A%xbEbOKF#KbOD#a;k(ufewNLiSUzqs zwm2B<$oezCNx>r&@x=)!f~P6GuR|oPKFN^VL9E zAH3lBs+$p1cAP`f*ggc5ZTx98)q4z#a;*2bb%g3PR4&0t3r3SY;x801|Ca5PT)g?a z(%k7tvu|XwPs#r5d1FU_qW&%iI~uhNZSbj{2iUYrJr|A2vl}6Q#WfB`m26xP$paaJ z4Xp1Pf=~r7S3{}q!ZYpnWjY;c7wde)uG$avlHYP68spV7!(x(-$0OjH@zr;N7=hpr z;o2IpAjbk{U=E)?r3;H&{A_=3sqoZ-k4O-7Y75b?rp%)cYhr{6KQDX(DQ( zY9ec*b3%NmENNF-N-{--P*zO&_ZSz%P=NB^4pdgO9As0|igJ~Qa(BZDj_8y4W-cl`{JoOUSngT`cdTyQ$gU3sYVnH8-bs=xqZOHrwVM`DRbq7Yk|Tiq++0vN2&) z7WC_87u;dX#P!p|gqxaIjgaO??482gsr@xBL_=rAtSN*w3&e}e#CDyxc$3m^Qg+O# z#M4_tC-qF=4B1iR5X9n?(m>ZL_1Usx-pX9gzRMU}+}+^Pwz0odMc5VdQV8M2^(+{D zmSGNQFq!Ppxfw7Oi{o7 z4#}>@Q_7e8{^{!U3|r4+NmqcpkXGRMhW`HeT8IDA?KpnquUZ`v^(N0ui5}9lmr+0W zgI1|bwHPb#XUNi7{C=QSz%GJf#wy~S-)ZHMW=fnUN@GBP+^pe1ZDIm*s`(SthSZQu zdJ@DDq+V49FPpg}-Ijq(am z>7FvJUCIngYFa6pV!fg84bw_BnOTjpo(44Jy?Vrs@+)O8pjMw^_ zENJFhr@CbBh$8MZ7Y%887bkRv z#L^Q8>kE;?X2vgQZZ9sNU6LAX1?VFaw6M_ldttzy>U9}ruY`@D?UH7&Uxo->_APt8{Rpxc!2WPHer8&CAZTFHb4XL zLLia{5ES5=jjSsI$~%k!Mk!?YrKe5VmoCjaudB{8;@-fP-aq%V*&pyS_Hgn>=@?;ECF~Y75gX0ZgEA<^`Z@h)*Jv12DWuxI~7-?vu|ngN|bo__ALym#at%l+=;so=ogt+?cI=p?ak+_J6{C6dwrg$Q>&j@&k@9Vzg%BS zxq@#4`8dwWBLk9A(-aS#I@%M#bcU^J&G1$@-C)MJ-Lh&%QLDHDP!zLGJ|^+yT3NGh zKJ$6Tsr=*7OM@O!9jGH0IX?((GM~(y2L;!%9bNj{a9N*aW*Ym?ZxnvU^;1A%sXUvr zVJ?K~r0jhtZwE+A#z}j!pR6W7#S6l>+>itw9AqzIM^i?3a%U)|%qKP$j%b9SYj>3N z1CBLz=xN;}JHpJaO2XdK5B-ksezcOj;XR%-qLTgLMK4gyp4EgfRN3?wio;Ew2h#}$ z-9TY2cYlKMfp!NJWuuTipiS`7tf9)s69Pq#_YV%;p$;mkd@s!l#7?qL?{;gNSi*VB z(aj|pylcKIOxBJibvhaW49WRKOSi+){c)=8LvbZj-;3(VJOW*9Qs9ZS{xRM1^)FAF z!nffUv2Q~t65;=%Sy#8P{BLUj>ddkxh#+d{9zu?}u2ep7u^f67j-$K$ob`G>Jn7do z4~u!M@5j|n08S5GEuf{HoN03{JD$>s0e`4Sb}Gq^Dk{F&4l4nTE1``_fi?M_5{H^Q zPgHeDM7IWqok*5Xo86WhUf1jOl!krI*}{2v%y4SRY+{PBt=*uYxvI1jsOE_UN|U`Lic^;`xEA+3|%HvP9?m@#+16VLD16_o2( zR7(@;#f^KiiK(d@((a;^fnur;f1{{t_l)QjkS?TM*@2&hMr4=aa&!e;M#;9timAa? z)Kcq}NbbcAnr(~m1%ietg1XJnDlVvZ;!%Pus1tx4}f*2OLwoHGBuBr%*Q&sU)I+o{~ z(yJGck*Oa6^CUoCZvY`Z)-<3w}5Ov~?)tbh}%73sh>8i+mFkwnc! zOOa!>5+hP@ftwQH_B1@0ne&^!bp0mu}{vwGl;B zc~yhp-VTOMJvu|)_XcUk7<|ioCR|P^Y5wDF=x6d8u}cQb4kA7v+Y3WQr72Oynzy$QlG5?v7JmDmU|X3vT7;QMHXp zweLZEV{Hh*f-Q+{D&@fG+I84FT}Mbm9dFDBzc8kekNwX9)o+sW35XvfvGRE+wBK?T z4P;iAb@OCtb8tIzbacvkF%L4C`DS#%MXXbOeimQih`i%h`&jSMD>63>{rQ;WGSPk7 zL8|k+z7Q^FGRoBq&Q6TEydXkHJlblkE%4|KyJ682HBmkKIVihvR3E&%2gE2?XoKXg zE`-27e9@KL6y9%R;a^Xn+oKS{Z&krTeQGu&)lbclePW~j6mC$gOr-TV-k|s+B)|mw zBmutPsXpTX`5Vh$v!MK=7{GCRjse}Pgg5^w2!cNU0{};`3lTtYi&Aj59FA}Z6V>!N z3v4R`^B$-V<~Mi^><`$$qyR<#hI>1E=5RzEPi@<-xMXQe3mVDm6D3jrQgmhtm=XK6)H@TQY-9iFmUVoC${WP>!S05KmXDc z9)Ah4)mh|DDxb!yMnrBl@Ao1lXGt<3q(#4Bc>6bbOzwk z^$;~}zg2a=>w8|9*t@2?CMTEukivVL+eIH3yz@u;I2Scb8;I$*hx9)_=#;Qm^%PRy zOc`=liniY@lGl>w+H^)G1gtdE8Jd>Uza-uydD3!cXAoRy=t|duK0MD(roQ9zD=pQtnsG{5PLFsg?8a_l%djmrwX%F! z*YnRgx8LhG8Uy#n*_GEChw4z0PhDDRZCR4&Xj(1dC7clt2!o-C0YnR>Ty;u?wbW@(fTns#LqGi%IKj-weob?Q+gapWI zN4zd>sE2QuCbhh%jkQJ^@h64z(5S?{x>Cf)eWUpK7{Z{i1V^HyRh^y6C(0i*`9>5q z!`OU(gKrxd>B%3ev0OD=Q39P=tK8=Zlz$GrDxY-PJb!b2he}OZOm~U@=uDB*8wN;o zWlVDBO}3}fv}aX$1Y65khgLY$M1Du$fU^Mc&YWrCV06j(>36p16b~p-IyV^NV~U?v zWP!Zi31uGhe?cQ|s^UtYz+p7mvOUJ2wlbb4DUhK8OS^P@R9Vs2i$fS#z46%nm=HNF zi|q@>YEHpRXYhn`v#wrzy!n@)3cnh0{gjK|ug3Q<06sVK_;NC!GNxK1zaQm`220tG z<{6%Wh+cN*Y%-nPBWrIMo(*bUM#DM|*4;+&*iQgH!PIf^?bYqlqUw$v3hg55Xlb2*|nlD!mJek&bhC$xFfst{^53a6hO;y z@YM=Xl&^#Ltc0!fn*H)jf2#}QaONA6%ZM*C^}GLYcWwr~I{54wHdwaU5+L0p`HK+* z@lKFrvwGJ~>%%l~w5UUma9iK|MT|sMFV`M@wqKt<-KI%C8CZ)oiLA>EN)Knzm`Qwt z2BojOhlA}i3A@t}c&#~!Ana_B1EF#sK3m}0>L(WJA{qmChONculAIshSHyda`VF?8 zjvOjk36_)2Xvx;N-RL*5OZ=f5d0)O@9++qG_fCP{JSVPqODM?v&!x6_F@h3^`Vh+v_ z+)XE%!WB-pq_e+}6iHDl;jkpgpF%7>?@=~1V-=rg%0^-1h$8st%}DutJ$bPyYRP=qIibXG8iKdbsbtbJ2(<#D!d$F^-dJ7&jDI<{?F z9ox2Tqhs5)ZFhJx_spp~XWmZDt=d)pxBd28Ykg~d=!X*FL_Re0FC?ekPwnEu-w))= zSqL$dmxanlQ$;V4%zzgyI@9n$0LhEAALG zcBQ_CN{&o&u=y<4jCx908y{twING zUh>B(QKR~er;e2=&>Zaf%vng4$8c^cSEp~nR@#kY_Chb8Q*Zoes-qv zj{fw%n7n2!u#)zK-`dpSTban93_2>+mEp;9m3%21J#rSfO5LmUT1y-Sm2oZ=3qgH;TWb} za}~vZW+17KN%2ZqASJHiFSG4ox&Kr6v%HK7PZK0clb22{2`k&Ov#!S{37K|M&hql5 zv^N%9XZPauVKMQa!+ML!ceAM~F?WW!6}|{vo^xEDjIcUb$XekVhFW0;rr4h+L4vjD z9D=bw5T}iNg?NZ=Du}88JwImTB7v3ykePn6)gnD4A)$jlTs1g6Ln4AEn`R?U808>) zNWI7rr(N-fbtUKsLSiZm>vLhw`UVdfC}wTcs@c#zB*_vGPMI{THB^DaSu=!gx=Fr6 zh3Wp#rzH+<#>mrK$LvV_1JsabA06Zr2$b-X$|_-iOCY6Mh2Q4mR(mVkSfSMt)um6qxT!WATD& zxmpTMu2{>zS_C2=G^Dw@xH1a!v_|!l?;lh zX7J?&Bz={{T6`nLDWbyR@LID&G;*|-W8$j13yqFIRI84}CGN9tYPj{~1X`p|;pBY& zR8mJ~r|WU(Z1S4B>71vMIPQEj8%5xL=lSr%CWe9OWjLPE(puYn-v8HW1PXHf`^SRd1@k{pfEL~=*U)9P?U zYd9<__Y=zv)y7mgdtAmuMHlw>EU3lfYgFoEtkcRI`{;97xGTX&?!lM2cihup+RyAa0!+XM5gWID>Hr(C1o0w9Jj*PsuvuO< zoKYbec%Mfl(R}xh_V51j zzl$9EW$XBVRp7=(vbIkD%s^dG8g$uYM9swUu=@tesNcio%K7S8goAX`VNXfY9nj{p zBXqmI?1eV_URp#!j&GOEkJ7P`KIZSA|m*+HI0Ol8Vue>IBjkZMyv>4{t& zU(tk4q#F5%!kcZ29&yaWTN9Z+hALreg>J-778Tdg!Fr-4uz^r;@a?jnxwA0e2yJCF zu#vMzMUZWUk4frs`s|mxNM97Y?Qrs7cqxnU;8>O7{mZhiauKMxsSNU+NLh$A;{tD#dM7-buXaCHfs(Xtg@lvN~)2H7n>#1a&8}|(vtw4^_ ztvp~3BrWn&}+8Jn96p5j~;KqG<9H9!$;<0egacZ~vz z*$_hhHr6r`NS(EtaOE_CEa31RA>vr&>A0U&3g6ggBAG+Y#Y7KA)Xp3L6k?T z=5KTiM4~@qcvXf?%37&OxIstFo?oH5WOVcy%`Hz=4NLhyex%B6Y8^Yq9-Fkuna_>( zOOI}Si#ToIf#55neaE64#B4n_=swngrm3twI_N&Ozi}p*Y=3{yzOTC7`)6vr|62+% z*CWx3`S&w)`Zi|Z_+OQHRdXk^|MvhdR0fkbxDY#87jTQMUA}XOr6qLiO6nFj(_1g2 z$q+u&InKQ#e259%Q-`w?S|lAYmX#NIUq8?LF@E5wNs~lGgL2K6{uG18aw40_5@q#Z zJ`u_Jdor!}BfuP1pTjQ>R1|8lx}=qqM@`EVr;_YfpLyC1ZiuF&+tm-EM`={8V&EK< z>}+$E))R+C;?ABHx2=1aj-m@jRWP!WAoBpYyk_fOXg(U}#!3$bOadE*^A3=HE`iBh zyC7_GrKP1#LM0hDHi```RC--_Nz09|m?};U2h-Vx)O-KGeec^SDrNbxfm4uV9jN7) zJ&2Jjm~I6`#P5WD(L= zWHptnZz(?L!Rhea)0Y6{28pae>kXm}URuM6=hdhDSn3E|8$^%&B?G}2GREvdQ1XV< zJ||#+I!~V!u%r5fq2COCmL60~pFxv;p0TmDw$M|I*`!A&;Rd&5I%LvBGt{#sh8%Fq z_>{uMjh)gFWWe$&Lto3# zaQxUS$b8BlzEP&%u|4Z9E{GT3RxhNq!))jn57KHK$9uV&1iguVd3u3nl|-qj$kO|X zqCI&V> z3!kO%>Lb&yI{fAxaeZE8ZI#L*je6Qdi=ZTfG8J{YB#Wpfhq5L08vP+~97_UrBdl?L zZ?7eI8_Nr~$9|c`6Qi2g2|dc)z^;T~Sq#8>`Tdx58QbdjA4F6clr^g}tVWZpM&6E7=%}u|b5~sA_;k$fv`2FS*BY##U2xiIGwDg)e zrJJ#7B({jInYnVEu(W4lw2x@18=MSjr2b423W(V3zkjxitP4b*hSsC-kg8)EJ)qK1h93Gpb5Zp zYFIS&qnBlxnvy@j(5&h~1BL!F>(-ly!~*nl8k)4qH7EG*YhZy_mAq}bVqqpjQ`m9^ z;qbE4GG$hgzdoI!w40pD3XFr}cS)F|YFa+`9J`UkyjZHFN;6b|s=2`I2CGrcZ(pjE z08*|sQNAhOMB=YCqc$??ymKH7T&DptuqqLA@rRy9@li4+IUa(vlo{`pl8V82_HCF~ zy1ud@u@&7s%0r@6F3#KAqkPGbrJeX^|NvC2krNsUl^p!!YVwI_foY}X_fiA$% zeu*$K;RWL!mT(~huuzj|SC84QB=$woWrxHq^LxJT^L)1~k<9E}$1wIDvE zoREEB@(SHG-r7Aq!t^8BE!6$-8~Qz8Jvg~$2XC28P&@i=sdW@@xQ21u687mjs&??A zU2pOGmElmWqMvVppuWp4^%FGT!3*Rw%}eS&iWl|ZOXR+zSMM!Z*WR~c#?C9^8nZD~ zM7sCCtoCwl0K*I~%DuL@-TMeZet@BL4oed{SWWb7e%y6?K>r$8AzlCAW2FcZY6S^n zrjJ)JbK#LO68^Yh&t$MD(;kba&ZwA28EGa@SpE{`(d$te;VUeMs=(C#Zn2Pn|SMPqIyH)}sYVfs#pkY0dU)03{d_>`8Oz zYt0oH?73NSq$Zk?YS~m1S@5~ViHhbr>urgugVZCn!U#j0<}>s(-ovZ5T&!yTi#m!} zz!~Wl7x{jeetGZUfwQX0B9jHYW#%*y}%%t2v_Dt5|v2yBRmihjccuCCh?A!)*)L3Q9dU{Vu}N zgwyrs1=+>IGwr9F<_Dtlv}Gth$KczEr}ot0zqCz$;UXp^pF;Y|Tsp}PY?`K={at1C ztD{+PdkMnH^~no8-Cx;#F+F~)B^(DDw11&t5zD&$)+B|qs#vX$vK^gu_0sO2g=g_d z-9hUsyCN)6;VoRhk8^x=Gc}7&O8lxPwfzY?wG)U~`69_EkKrN~*7_%w`lvaP4*4(! zkt0GDN%nLi|1hnJl{IKR9(mD2IXRkN^X{=Q*gM54{ik?8ow0q|PJBYk@y z;dPMa8blCqVoNdCc{{pOxgabJmU^MQOOvHT274i0RE~0w=VsFYTGJVO`}d)3dPev? zX)Elit4(nxCsYySFBGO#_V0EwA(Wtnxq33OKn}bLo_z`>Fb@wTCBDrnqrNT zKO}Qj64yEil~8wV?6-bFIdZ)Glt*jeZhy-kNZwZRFSxCo)LrGOqpPd(e8X@FMVqXI<8o`jMkgnu`ZnFsyip{hp2Hj2>q}6T z@Y^%mQ<^RxTCowx;&Ezh&32NUg)sO4g12LE_6FD>x)yZ(d;mG$`oy(4P${YFz zv)c%++>pzJ;ob;WJPk#ru@&g`J=)k;7@+I!v$fE;k2AZrDy|x9Upcgdd(Kdle;9j@ zc7C<0Ip~glkiGH#R@>=ab7%J`buYq2jF@e9UVo0Z-Hzk9Md}ktd3wqB?5uJJg)tyT zAbAKC!+B!z&823vtk{-g`1>!Y=O20J+-&vZW8bLf*SDHT_W#G&ByDV}Z|KhSU&GU6 zva#p-3d*3bVSGjD#Duk)u>*8(d_OsO`pkzX6^eYb-L61Q*-yKM^*uhl^slk8oVzTmnG(-B71&iH&P3E7 z*;Q9+ic5tm1^e=Sm+SFn?retgdc|~Z9mJ(XWjo!ZMJwAX4F}*|H^*`RPu)NFtbJYh zKrsGgCdy?l;X1$XSXJe>PB}$*6SYIZ^zbPH?YaRt;R`eC0=2T$`Iu>I5Q)uCQP=BN;7j zdiIE7VDUA1cFTGJ5yu^jcCX8M3Ff=LK1_W@uNGjDVjFy1vf;V$gdSFav3J+v9es9P_U5^JeC%(tZxzJ8zRVR{?xK|M2-x(pn^!FGl3 z&LzY{MACHg&+nH?y>|(t;!$k3Zw#tJ_8t4yW|XbEm~kjKfs zvE;zZiY{{2E{v)7iLsrU7hOJ@t-rL&V)_i8r~e#NaY;B6RZuJTYQ3Y8Ks6GwaPHSI z2*!O(jy7tzC&Q40c-O=-MjgiC!zR{P^ll`+hPozv6s`jQ1lOloM{EW$6({=H^~imo zsgNVYQ4hk{k1lIy7o7F`(E;zzN|okE@*p4hD2Sbd&?^q}(6kXjaW@J33*$Y>P(R#X zTXohKMx527;9}c4aDt;Q!^a)h%D=F&lpEM{J??8Keemm%UF-Wlrbpv|nwy=i82d3T zyA3xnDpRgk2)Ao*8fQTF68qimWa}F#hTz(AdO_vbql}!kX zm8r7st}E-@$6@Ox*cs6DXBh<2FfiAYm_@I$Eg`Ys{`Ylwik@Du!MA819rec#>HjZP z!`8<1zX4a|puo3foiG8{{oB5gU*-sitLwA#a^X@C4kwXj%GKTVwg-;d?s%#Zt6r3| zVH(_UG1FMGsiyDnit%&WOz zsN2z?+o8;@YaYUWLZ~c@QF>~fI1j0S0!7haqXQO+)YOO~BHdXcDm^!~Mg`ZWdkr-C za1{CLt2hM8QJ>ub$t4r55>^blb%?!ec2knvPP`}#KVjwuhAjQW#KglmGs!rPMy*$E zN5R!{jd{B>f&OOfKDR?)?b^hqu$m$)w!ht0>3+oR3O9Wp7ylJ>Ur>SH&&E*Y1tUNT+r(o*Vu%j!NA3B@L$zAK%8 ztN{%dkW7sq=K+)ZT0J)7Cy}P)F9P3V=>_!*_>gVYcJn4Q$IK$g7 zzI02qTkYoVMC7&+3Vf|AVs=Yu^LC8hMdGp8VG2fBk;=8i`i$uW$2WBYmcw=n-!oi>+RXVyl5o!%$y=esa<1EPQeQHS_PY$zcu!lK0^$!-~Qae+qV$AdS7I{jG;t*)qK=(jE#jV@6+T2 z2o`mlk{aH50-j8-DXhx2TH!}LyYUw8R(r*Fn@t{F8vM*YCs$=S6lcbL*|U5*;7~Gv zeXY~+=-r7%@mL(I(1xN|LM3Kq7n&9nCcH0KxGIo7QRGgO2Wc1t)h@q{!mf{SB1SfxSG^ z3zZ6qrEwvFn(Jzg@?s2{&goFqSw6SwS7(}35K^}yiaqRqJ?AGbP<6I&d^wVp3r-*^g~L%8uaCnJGh zR66qkYRB5STgchs%{6E@U&u-?$25~9Aw|dJlPW0jwPIAyT(a=4i*xjnH9%PK?QFgo%gxpm1STQ& z(*vu5E{WKIi`vfbc&y(!A{a-}B4LnKLdLV~d+`UB1LU*FlrVnu>4KV*i;Y;qCX}^ScT&2wIymg=Ssc^6^vBaSX=KD(KcXL1AIU?{&Q-)H`Pb0cnmg+Ak+_Zn*%P zs&>bNEz~6ou*G9>o5ggn?>VybYFeCIn?80?X0HA&;V_q`L*i zW-qRJ!X#hYdl%i!D+=SE2+1o*2E(%D4-azxkG}Db30Oa)BSi=7$B)x*`z?|GsFyi7 z*t-6A6B`CY0{($0(i^fhSppL82l{P7L-LvnbP~9Ea&_+L4QxC`EFzLvip?rtqR$dE z&%7o&d^+SIyN$`wzaoygKQoZV1u(_e3?-wfGa-Sta=ciH02w|x9kx<7V~-Y^eUrq$ zVJ6UV(Mb8DhCS4m4S!GBd}g*cf~8Jxl6IQ#MDY}%;;`8pKVKxcqkf(3NpOnSN73pD z39J0Z$`OdT(VJg{$XSZyK^}SAMI!_**k@Tx&|42I#EG~n%m&=zr$J#r8xhLQ6xNR3@IN}Kt^8!kUn8K!5a zzhCK06NpUygo4`V*ZND=%{PXK*oiqKrq0Dcgaen&+*Q@j5~~>P5pTILFKV8pArLlpdg>GBTlBNQQ|~D-h`I=H(!A~kO1rpR z2~5g_Om`7X>V3xkRpPt?-?8vcxf4DSs33{w|oD6 zF~9fQ(f7_jlK1B;eObCDEYlNBjgtJx?&wX$W7XP(abwTs?8U3LrhjT*dv zTHqackU{Sq4woO|4u-V*_ZxfBEzW9b=mOoVZ?+Y(HYHH zvVorFEwtw`F_*L>u0B=^K+$=k)|@(30u(_R9@($T0Gv3Cf<8lcP5U2N3O-N00{bsd_|ZsPBj=pmWb`-1b*qwHdiRO8^`=l;I?E)2CzoOC zDs$ts`V56y$5rgZs!p<5GuM}Ry-Nmi6UK#>puTUUCP3>Q#b_X--;5?QFv- zhD7d?9L>t?lZgU!q?0R$=SUL$I-IC9=LKx+#DZc96p@~n*Gj(5B64BqN&1+-bBYYt zo2}Q6K$*eky%k41Yc>|sqzp%@Hm0XNoFkk9)N;jYeiEPu0;5J1`gh!r1is1>59A9< zf&U_J0GLs}g+#q$?eiY)Y^GCE(7$Tj;TA#L$F(TP#F}Bf_mKb zj04V$UQQI{grl){e9!l0DXHW9{P@sPBwXx>k7T3Zq}yj*Ow*pr>?nQHUU==Q-*zf% z&U{iD4helQ6o!gMI7WMK60=h%r(;BRO7V+ev<@wpklHU^_E%XW3ie`#>&r| z1Y)sT$`-CfyTcgFYtU-MstE?&hzSKH`!3wBTOP^oAxHn*u6cg>9=VZ&C zf85>vi2=#@%n&Q}MSFU!CwLBNy)yAxrTZ`ZiGLLEYRk;YPKX~rroJ7-B>v+9F8!}a zMA0Bn9#&K??d{m6@QAoQVy$_Y%?02^;3A@|6F>ctV}h}AAeE-itrwzg9K<`^WtWTV zK#EH<7G_7C$vG9J%|RbTGu%{%L$#Q(U~0*{mHMc zMQSN4yrOa!bP?e%Y8Iv~poZq{obpz`+vdFyKZP%L)qVq0y*^$ri~=jF3wOP+i0OEY(4^aU8X7d z^83|mYJu4yGeT;NQprOT#^N;rh8_6hb3Ogw_(ZhZ&C|%vodI!vVo6qlyI`Jy^>D_K z&Pl7FihnMik}}1Q{ybeo}TdccEb8^)6Kzu2soe1gZM0>Yz*P+UuICXk_VJ;bD`3+-! z8-T%jyT$8m*gUzo9@dbee)`(=l)CJEZlyNfi1eii~s+T(xlRlW*Q$lq`)aIHN z$bNA4?ez(p8-&-I%OYwDtHeLta?)f?SUCn!cu6!iA1`T2JI=q-*lhlBSb{G^eX5)+ zNPjJ=#r17QZhf+vth3&oeiaz`NLv+0i=r_pvd9ET0?h_%UM6WnlVAiKASY@8Cs^(s z802dCCrafyK&f1*)!GCVcinwAq`hfPTg&W$``2L@SOyC)TKXuPRTW~|xpE^nsA+7s zv|Y3giyhYBn{{gRvKyu8lr?I+vQebs=ErV@u z==!^FY(c*CUl_UoH@y7_90NBbK68lt70{B`!m!yX`kG(uCU`L;;2;Re(`yAHVJ(~TB5~E$#2SWSX!*F3_Px1QOd>0 z%3ut;ZrEQsqs*^ER!HLY96~7r_EDGQalNNA9TJJP@I^ois1G=vLG|qm8Ql76v7sAW z3Om+N0U!RIrq)d;k}}FkkkpIl z?Bl{(w3Wq6b>!rVAM<(p?yotnf)k{wN)Rtt!2xG*(R?kI(wUf=QMMc?%yiOXV zMjJne2l=oRDIQWUNlq+yk5^g-N^M)nuV)_$MoABhnODw)$Bg*%e7C60)H+yE$nYin z$#jseegcG{;GC=(H^@#!Jx+9+bLWdv7P zFYW!!z(L?-FzDxZlgKKg}*Gbf@h;6j2>T7bOtZIVyX}qz}n^TqTU$gCS zTSVkkG6yZEKIIl|*KLuu1ldvK$nJyk)YD{@tt~~3$L`wp#^Od7J?$e|TM3HfrJM=X zV_yy3M7GMQkZr#xf$idiBm?K7#^r)Hu1sU=jm1ptc8)r!~O7jkMC?FR`6D^WPBpt)AXk-)n*==i?$>P z*(KVL8%eWVHO1%fRE@6k>3HroQIKmXSvJLv{3c54#O%71lJ-vkcJYbbzQtkC1};W60Mw6yNjK=^k}>h{SR@i6+Gmvsb4I${UVi)4u-g%n`kg zAx-kl4jI7w57{At`i7RS`VL0_jq{?vmz6-U!UXB>exe+^a}X{E6T_REo5oEsi@>e& zh_nN|X*Jspcqhl2jf`}n;!#*kzVoU=Gx3ukU zQ1@pYLB26hAt$@@BZ1Swql1E70l*?mkHcQdj4e^ZyVpSrI!+V)j+8C3TE%u7TEhT% z>DrCzqNu8fjyv)59_iB@T*KYen&An@?h_X@vZC0F0=w)dZ;xxwR=1&^hSwcO@N9}k zr}n<2%|KBaRtdAQS9pqzG*>W!@?;nuOj9s9iL22!wtI5*owF}P{RG-JqFp^5yELc| z3%z@De#$%PK|?{6ah>4Rxh&^H|NVM{o-uAfvo1Yg*Qh?C`z?(ZFbr&J3b7kaoKny+ za@^2Wn?`EYqEJD?00gE%k`RH4He&6Sy{tdJU)&Ex=DfS!-bNU0xDsWgFP_dIxIKweksb)@DuAD z`C*W79fGY=WL@-u#;ARZuK;$UikA4)@_<0{-Z8DZ9q30tJ@_%b_cvgN5r zW>wVpHh7R4>S9zt-EX_W_QfIJjG~1hJVKVK8!*9&DsO^>bBLuUknFI@w{Dl5NkbcX zMs+w2A}s<_Y0gV~>+giYf@+ibD(-i+!nec5v zJz{#KHRLD~lob1*S{jMa;DW9mp1x>O3n>yuP2?gT)A_*Q{p8{^I6+ThA&{cAC7D(d z_C!4V2{=5iB)lnv7-SEXAbU5nVXJNFW*b5fdz!L z;QEqX+cKnHSm(=lOX9<`?+K#>D^TCHR$B zU+gYeZbkJxTl_>zxv8DyHXkSj>u$K*g$ny&{0**m?W98~TOF#!+grcw9y>ujCWxq) z(t#7zn&4Tz3{AEFSN%_9m$G4r^&*9C-yl|D&AS8WyCk`*#^}X8b2WW7{xJ|=4$KD- zooO>o$)l`56?$CbmAsxB709SF{=r`Y807jsU@6EM*>Zft4_Afxt;{8DNda8(*W++V z8W+eguZb23Nm9m88O0#onaa$9DM>Pmj{1@mZ4#w!R0zdd>ezdZ*)(qAC%ROQ$XjwJ zJ~U~fm-x%=pUc&1(*|pO)Jc@?>ncX>NwWntHFLUWy)u0mnKSx}j*sRIY(8Q$&YN5% z@kX4M8-cr3!wQPVCo7ROqNyI05!P_E8+QUlFDKy9Ncho5g1U$=j)om~suU)Eq<@e= zXP5Jr^ddu2($ZY{0r&Z7X=$gxT|)?LQq0_T)4PtCnngeWI1|$($)r_-{=xeuEP{ap z^Lh6{ko_-kqelaM3{ThyN`K>tO6XaQew`;w1=H=J*2=lJlWTzY3-joVI+DN>rx#>ch zA`E&Q5frP*CKOIoG^wdgG(IRPy>&KPid_=25FZ%o0hl3jZe;9Y%<4mpw^J>U6d14N z&Zoe7s~0AE?9RCQXefUBY(Ev`Qa2>e_XQa2fcy;m8}QPDw6z0!Z6EzR!fTwYX(V|~ zPZN)giK6SJFP@5WKOUHV67|pJ?_Lm_kUw%qB*E|;?4z!&!MM?woI4Y!fA#`HXF;|W zr0Z~*Tz=xrV1W3R_n+HwIfW1~egf&uUmdw9Y)EAPDRn>q*_eh!s2>x;Jw$>J5HOcq z$=qXsx1(BB1I^l{m7L+6GK6aH5wQYKwV;jLE7WJ$XBHw*Z4Do$R<5?ko0NChU>q@3 z^r-hK3^zG9o%_x#Zzx|~x-fHrgS!BN57(3!RNV~`;HKskHV!PwQI+nfa)6Zg29Y~YOWmw`1Kf211*bTQU z@Q?!7wr)ep4Yz!6rmqe5e|XO))Wy;O-dfK5vVd z=bJE7^?Pf93o!rjH(*6i=X%a4oh08W@F6tCwqjS|7=*$%V`=se05Kvj=`wcqAlJJL zSh61x0+K?h@f z%YU*g5=DIX#SsU;jA`Ojbs7ys7sJtCqnALGIcxG~F7AbB zbP#a*rV3c`Jfl32!CozRsV!{_@-6HYs@$kU`*HNWJn57U#g$Dva&@Z8*V0=|=dYq0 z+pl1>jq!4pjJ+-8I?+qjQn9gp@|XX}5(nJC8~@a`d!WN3t=mFN3fc}%*K4BTU&$bN zksC^%NYxt9?>ypX7>wLC-xQ~=`@(I%JGcNiNN3_wt#BIZ8`GQxDv+fRdOc)n1m!b_ zWm$_f-t5oJ+r>ROxO^=yaKG7rdGzD5S~bHkWI~OzqEW=5V^2SMl2<0ttWl1TNZXeA zufr7puv~o2H0qu|gVS4!Z75Sz-4=^t@cN#rSW72mQ?xJ8hceD2Qg|=W$TO%G<*TZp ztt-f@^}FRLU%0iN8kUcKj|;%J;TCTng^tTdLycD*&mOYsV3=r7=G5K^E5&ndt04rS z>XeCX-M*%gs%;xCx$?&`@-7_w2Hdx;D=kUoBz5wlEt)~Ps1FY-E5m@Cj&!(slSeB| zb?+hTl4w%O(@ zI2y3M;{z;?UWq_MGT#f_PYcMdrkm$-4{Z>C%4c~+%i5lK92H`5)vE&(aQZvPm^6C? zusfdF-m(Q*J;GlrT&!k@y2S{h>%-FsxkN^O3O=vAs6K4K%w==lT#XBf;qQF#6cGH{ z>A(08gEe+}`L{P$#)(ez_5J3QzLgz9|H*<-NZ;|FDyzxl#q4!a)S<72WI8c*cmT!t z#4c^1JdS9Uivdm2F2!iZL34_CV3%;(ZF`D$*4~8hVJth@{LbGg*C}?#16!Z>2PwT& z2zV?}yd{7M;EJ)ga56Dq(kBDN9scZ!=);j?I*v!|9(TUrln2nB<(#_T+7Bhm_24kJ z%VLVV6&nOE^F4E}|!+ie8j^DE%w>*rEswYtj=YFWsD9@wW3O z90SZFQ&vNQDHJSZI?;HJK-D6S;aWA{|Dq;XhqElH&u3cBzlhMi1Jf;Nga+>UElFXN zhT%z$-@K$#?Fxeh!^lAb{h;9V`#g-?t0#605bzxgZ4~*EFf9Fv`&az6Nfc=dB&W{dgwRnd{NgYU21Oj(el2Z8>yUkc2OS4f=pDNHiSOzwGe% zPh8doGAx6T3E5;0L+DNqz|Ue#w+ZtFnyFIwl}7|L_K7VO0t!471i@#R!~TYH3AfU`rR{2i2mu2OXCB0m zTxS4XpG^}8tR)aVqLm&|(2UM*JcIG0lEkZ*V>q~1}rO36C zO1PzvN{@uh)cSVzZ|%XW(306iWUrO#65}MaiJ4*YVkRR}43B^W$x`R$g+S_-&eN=( z2cA>Be6!_AK28LF0^Tieg|&yKDQXQLHf)VN?Y_CO>hp5t<>^PPv+Y; zbrsZM-|1u$G5NGK&5$-!4GhYlBxdTdih`loQHQnvPyg)GUJ$tn{t< z$D*&n93S6L)|m;C01h!Yw)x_Dn;C%;*%X2JXV~c5E?L+3Y|_r~g_MIz5=WiYwp>T~UrSda?06gW}APZsMKb! zj}G*hxam8YJb6gKD&Fp+vp6k1t39Ga)A>))LA^gXPnR+7M5g1|?{qYlD ztcP7~+dem;mSsI%n%lNUO&eTn^1D2bE?jsiNUBadwl~PtvXehcrN_B9|7IG#`41@_ zX142=-z5rvjQ*;X(Hr5Oqk6qdO+kOpr0#7oM9QNeZk(j6*ef93`}0?8-9Q_b7dI)$ zV8~Vzw3<@56FRycMFRR^#8BW(SAas?gc#BvBw~O%be+1EP6~()5lmT<{ZiA#yC=K4 z#cO)9XdM)aB4^aoKe+7?9i*j%Lc4^|sEU8KD*C5W+Tr@t!f#$Ym7*!Kta0Fi=V+3W zq-n4$8vh!Fd-sdcS4#S?<-!zA8!po~5jkjRnDaXST9d*%j=7bG6pJE7)?~D?r?&D( z_Kx))XX+~QKdXlIK^6Yl-G;O$T7b4_x>7oGW^#20a`$3qKE_+h)E87|o3st` zn{)bSr>hK}oxGisxdemy6mS0{vIT#=!*yQDQktrJ(8~xk%n3~qQ|3gE)g=F7rLYEV zx>B^7_p7OuApf6oQob`&lD%t6hm{3IJL}mDW>BB>P0+x%#hk`lpjdr4&7J-apy?fe zO=6B%kL5g9D(L0*g^P#Q2^mnn#GU8y!!%5W_OzcbQ?%s_N!YKSbG*OmXuQRt_XGq@ z5jIEF?=8XKml88z3~Wu4c6g?;y+$!1uhc;^^o(;q51{xnpir!+wl$K%6w*b)%4E<= zu`?3Y&HuUr9Dr1HnZV%(~3Z)bcfq{nexb6a$S>Algs5Ed-BL^ zWCUpW$;_nayszscI5L1{5UuoS{H=Qg3?K>BA5m`uS15i)Uj9bPoC(Ljx%e@G#phBl zm1V&%%2gc;x-)Y2V%T_~N=iSFqhO*vlbx@Lfy^MTqo&=p<|Y{AoJZ@$oKri|p386C z_Lzu907A^tjx9rFfF@>M7_hWcUH0*lmgNyQiaEE_<#DWMrMzH`{L<6umMEj*yINsc zf&x;S{AJb*m+)kimaFMiJ2H@C)V~tp#x!^uo3lY@WH@;%i&HFKIVNrqZH^1)OAtD4q zU0&Y(J*{0DvU$HVLl{Hmo+`hWh2naYMPfn-eG1{iPm}omi>JvyZmJ|d(ue)OOWNai zN&Amriink?@jr{%gvw!hp$Z}|D>%_WLbtuSzLx=abzPlv3imIe1{vMgfd50Z&Ilnt|XXd$YpLgdEIP0_bckPAMvUlBU z9)8~gpC6C4_aPxmpzzF!!kDuV>ZINhOdv9Jhe4TpiX;P5n9sy5|mqb^QM z)mOp6^fulm+gA9SOH1|DCPu66YYtaGTnTw%Jn%zp2x=VW0wQ$q2ghD_4-No92^{-d zbeWCz12BA6+XM#2KjY&xzacD~P{0V4Npu5J*hq#~J0^&V2K#i!0BY>$dVLhacxkUY z+p(4+xCRzVwRn^9x+k~3@gY1LQNhX`vOGV%F?GV`?!TcKP;<@h`pz7~;6_$$a8(WB z%1xr_B4`k9$5vI4&tQi$Xq5fRzGsuLMA_Bb=a<>JVtw!mPnnIq(y9Qcj`jyN?DU-N z)(kKYU{g!(oz<15TDb%2bjwY1dMZ~Z7!PnbA>;Ki@z4*D3<-Op;n87;dGjj(0tN)! zO8w@*sd+3Z;33)F!p^FgI#i}86U((u*MZX_Wr7BW+*8W~sfr>IJ;Fzq=xs~B0%huygr08T;#XJ^rhuei^9Wkk-!xXac z!VJYY=J1Cu8uYs=1_bRZlSHufV;#@zOKaP!&9DZW-%s-e*3gs$cgP5}DfcG#_RJxg z)b_v;n&$S`VZ3x1ySmR`{Wte(&(n|zT(1WxXd%+lFue^m1BUCuiv*_FI`vy^zwMU= zS4ASD;llv-#hyB?=0Fl@HFIb{%V3^odV3k&{1u19U{gXqZ&!n5^(|_p_iqcihT4;N z$gDBNx}>z)`w^-hA0D?3w^q-CKym<^SrvBwi}yL|jAWf{vK@OJAZcXXL*(ha><3~Y zEd6P7+A2456HbkaQp*UxkFq<`)hL5?i2qLnl`?5XAK)$_!pSRF$s3T<@5by7~w$AHO>5=>w$aSXr38ju?)m;D#8^uybWx}=_n7|do&+h_v zUf~BLfQcuBt(uugKImS;L@&3A}RMo`Y<$&btyyAlzM609=FU%O`lmO zNWK>%C9=GoZqzjoOJeA!{zA?*(HsNaF}<)wsds*ShqSI)gcE+QmqvzPd(N{E=hr(X z=RQ~(3yzL+K2h${Kd3?`g0JXX(0HGq{<*e^iia9Cfkf=)AQ8LhzggS<^TtV-GW~Bd zW=zc_XLSJGmmFFVBRJu4{{)R#FO~CR`|^z8Lc*)jP{Xm{Uf`6;2o%n7zPbZ_H0qlJ ztdzy(iHHB}LRMwC9b=vx3-o*64b=m4-sJ{I9Ktmh)9pnC7juyAbpV&L2X;$jDykK+ zW=`9y_Hq&)&Vv^k2!~emPItRRmYP9=kIJ)D<9HBOM#FPSLLp$dxO0tgc@qXiheva} z07gg@tAe9T0~jOm&HMY%q<4PaU)qARt{H71tyyjHt=VmT;VG6Tnz^dZd;1+C20Om0 zvx&(Ki>NxPAh_Gvy$#s+shor^-A5%lSpGc-TlVrb!$VBtsPuKuAfK`o)xa)iQp5{G zStuh0${?Ugjprc3a@oqP(SA^y@wmAhrPk4{jWBU^%x&dSCJMU!x0zU5BWf~cGtL1d zUk&}04LMAf>gZYXEJN;%`Q$(}THhA>S|wa31ucqio#NF>0?$$o&k|c()r@G#_qFcL zM)`2YUIQW(-Wr=P9x|i(GYSr9a)HSVvmpWN za4m3Bm~{_e?wgsJIJ6t?5V&;TglAurUeU7j_~+CCcv7YYV4J5PXEUe^L*kKGdUspI zL6l2#$D2gaRHCCH&+ZpNoJ?~k!j@_Gj{sz|G~h*Mgm?fdS!`!d^~Lat_$EYQBV@HC z8?a$*N`8mTG`LV0Xt?Tc>ifBFO||$0`2_U>bn1W{JhkZCRr5OImH#=+=%Luy^7@R_ zy4rL+-#xvgqr>!MrT6CL5s)UIE{cAgEWy+n-1Z$u7CcC?R9JIl{eI{(e5g>rTVK~H zVrXm_D;*dwq0gkmkp|K>eltNUmJUp6!L!a1PUu?w`25}ft7x+RLOIx5;@vClkKAJL zlyO7F>U^Fg-6yLf{m#t_VbbC=cuPBhaC;)|AQCZ7YNcU*Ynr{Y{y>%#VIM zR?tNXvE5<^WYFCP9c^}a(Jyzw5sA}5g?1TF5IL4lV||BDg1sr^oxnx%&YmVf#eEe7 zd80l}Zd)|u@9LeEb-+}zE%JA3z2aW}*s_)WrPCQz{-avOY{fZ7t7nsqR~{@8h>Grh zFd8QyUYW^&3=pZ;Lrn2Dhgmm{VL>=c^{(fG#K&&>3dhCG00|z1GU0?{- zs^XNYwB0sm`*|#ReW8TQ*=nnkqyVR+HJgCK^mj5|1O0n?`JQx_hSWpt0JBwMR?S{v z{bZ81UUE=U(k_8S!r1U^QK`LJOpAl&!h$|%3G;4;o#nDPCi5u1{D|pQ(=|< zo$Hbq^Dq^+pT~v^gyc393w}p~QBP$~j{I2oFx^*84n)k8Ao-%Jjh0)nL%;(V;ew2! zn{s9zG}W!ERnvCWeWfff7*rq>9xBTh8*`ZM5;)W^D>D4~xW5I!TdR)?A%81zYFZ?G zx^gKK?vS;B?I^}y7`bndj3IjdZfNg;sYzi^{XTI6b^7HZ1iH_T}<8k1N|`_!fkd4d~lp+g2_`@5z(=i6f%^{ zUlW~i(*~TZ9g@l|b7s5}VKFGNjq&&}bxds(qa!ublI8YIXs1n77Rd{Om0gxmhx8z2 zT?(@-f|bp<(hB9q5&2Ve=z1X^wrW#I9~8#FXmW@nhaMeLq7xX!q1S_Ds2tAuCKhv# zz=nAq3ndiid~w!ZU>-t&ny+UZgCVDzW5Tn*LN{g_;9!ezmlhr}Kob}76N(?7)66(- z`YXEmn*kgL#9zN7upsk*EroI-kp?B)LM?+2$!UP0e6n%Uj#GTPxChd$#_Y(E1DR(_;L`{3(~*_t6U zI(Y(DPvS6i;EOLPUr8y@&}dd9fDvUvqUXecJ~p8tSOYi9&D6(4gPo`~+HX3H=RFfQ z%6KCJvUfK?nro*TtL4TON5y0??-D}7rsvXrt*`Bn4Ed0!2#*t)B`;l#V|bohBO*58 zGJF{2#qRUn5|(ioeRk1W*MX(<4S}>mkK8UFiKfaDHNDvzLm7H&(dTZNUeV*a56jj@ znhZ~F){Y6`;~qa@Rvgc*G9t9moDVEko1Jap5lU*UV42xcTo86=j;8+N;jLz5)W3)S zk>|5tl8d}oay*N8>UJuq=Qb1-nxnPF}Qdi&g{!|{qLE;C2 zF_E5-OC9T^+7>juge$8Z@8B&nCC$b&GOd7u%ke%Lo|na}=56Lk;5_vk8GTw#;-e3J zY|Yl%=t}Zq`LCA;ZYi6nw%O7uMKd%U0UU7wjfxhN0eMh57mY*=t7p{nQJ2&Kmyfaw zeEfh3w8jTvzizlSWH*0x)H#eRm>A_Zf5lt&-&IuJa3i(o)pIZ%sdqK-)hTaF<3zkC zZ6p!bsAOQ3%P3%0Cxc_xb2RZ3BhoY_OZs)2 zZmd*QepYEXs%LSPD-c;xZ&p8`^ZzYpQ-CH=ij}*faz4Bmk3qmVvofqQ;Bhd_>W=mglM@8F$ia z?Xqrbfx6e&?0BXk#MH?tw_3iV=Jfi0$qmG4$}TjuyFVpaNS)?;g-PS3X&G6vBN;W3V1v zz4OwvHZ*(cJo_8FJw(0}rFh8#FkYNT1W=ISjOfJg8*jaAPFnIh>X$3c){0nrX;y+g zbzv{&8vIO`gPOl?uP!azu_`SjB1R4h$A{1F@UbJ;+4;=^tr=+Fe{(e|Q z1rxf-toHrX(ujgfLh~v2(WY6Pv!wO2?0#W*5VN7U36Gr2px>nmtJ#5BQE+#?eX--u z0ZovYDPW*ddSL&c*brf zis%Z}9OOP9N-cG<77{(*~5dw79844hT!qN^vLEV2UfN&H=LX`na#m<9*wJTdLdQey3soeVfj3QmP+N8X=l>xoso`T><(>vEX{OAe{QV#rL5>?F$?J8ek3^UX*n$sCBCgmA+|6 z@iAV^)aQO3CPgJ@L^GEA?4B$qB6x{soeXp)@xRT4=C$w#FUf!&wx?|IOWiQOct!sw zzIuS>TaO@o-GH=?|H_yR!k0X#;_<)YCI9;vk!a$zCQ8uf_esK83mnT##Z6CLmQBN5 zaKqQ|agHa>QoaCnJ$7DzzGwqgRdEm@3C%4`%}lqOesz7~9+~wNibssgYSOJ(uN+q& z)z=)=9@*v%Vt9?~<;eU3XIsUs$6=~Ah!6uQ=dszh2e}xAXVHt<3VQW4Hfu zk!N4DbYoKo@ze!#uGMT|!%5(r3bS7q1eVX=)xGoA%q#Pk;{XAbenC5_Q{LsO1QDp| zj>Iow5L#VDWfJ8@Kh&N&ObAa3Z$g&a4fZzF6Jm$^D2YAP!_t6e&Lr2nanP@=MDaC7 z2g7lJNijBn|aKtbl^L~iSG|@wvx)R)SG)5(z}N8+d$^WJK4It^<#!6uK_hsYhDYN zui$(`HGKz@o%1hzv62JS+_nG63&1TNJ%i-7U$rhsStY}{ieY_D_1k@$Qc}<-<$5mH zgJ0(FLvEH{FjHUYRk~1uhf5h|YOk#VW-*pw`C$#P+fX0CgfLM4l$>kr;lt&8fqeMN z2Kfg$!uR3J#0tlQQ+NBg!8m7fH5f-%(GzRIh+LxHPhYA1$M}uBua3`J zXJ%am&r1BYun+Ph5G>4N4nG~Z=u*b`CM}4?YEkzesvP(_D$4@FX448A8@{xVD{+l5 zlF|?!LIjsP$17pDjXS2!VlbTuNaEJERJ^M-x;gufN3T*Gbq+f_@%5zfbk<>Tq(uFi z3_kO@w)-c*2A+%;kU*O;3TS}+tC%?uz(BFU|F>#xJW)k&PaLEFvxyERu(vgO2Z^M4 z^a){C?z_&cvEMO3FP`XG`LuHKwRzKw3=>!`)vGDwcFg&hspWEdddc_v6~}CpRIW+_ z-v{cQ92@};Aq@usKaz!^w9V+nO#4$hRhr3U28bI}hvzl1)h?gz;KQDce#6_*1OPh9 zs|ucqEUKkg%@bnUu5xFias7mfK3}gDQj4h@7HmHi1&)a5_4g{s!xMs9J!mZ5C+psu zRqsP=C|rqKuM=vm)CAkO_|72aOV3k6Qyy1Uy1aMe@VVP&1*Js#7ga=fb& z>hio}dlQn1uTDEK{na-P2i1=>qvN%Y1=_#Rdt%-+%AWNZNWCOVWNQ8VeqS- zE_>G_!qpT|kdIy3Qx2+Q2kPrISk!dqF(^*P=_o&d=PEq!Q$|(j&}z`unb!dGdP@88 zPOxs_p~5kDMU;~5d9_t0ba#9s=pjhL=xY*AIA7}S=VYSO< zvw^|EoI8JW{;ITx@+bF_WKYP^4xF5fA;_WiiloYl zi}7Actg~3nCwTg%XK5t>%&DZd^BpmbY2Aw|H=+I!t}0&2tLm7bzJhdaaHwD|0YlMP zN$*pw9s$9Z|CAma;j_UPP@ny3IPHW14J{Ki@%_$vwS{nq-GSgCqN*zx; zp2KXfi?R3pM>{`=5Ow@pqB9xXz2FvXmuvlZtMAL|vTTJ! zk*o_i%z|CZsh-+ls@u@5nDf9Au|ttCre(~TP8CEP~U>= z0r@b4{tAjPv6nA+&*5_v{NcO&j6?<~q2Fb}OwM?-wC^2q`@iUKnZHOeO&}Z7 z7j}`my%-*FXGVzK>M3yeFj^goa8LTk9N#S_{(|a*;+7l;r(zVPNVprgjr2H@_}zr+ zMY8%%2F=%5!f3`yr|F}!1Ruu7>=k{8%Iy_^EwQ{TH4xT2%6L!nm-Ze8H-gs1<#Vhj zdxM_S*$wQG4O~*fUk#l`kEH+f;R8Rj-e@rApJR-$9`ru~jWL#gD?=5vbF}*Z5OpdF zlA#(=#g$QJCgS$OB{-&~Jxe&Sh2t$x$R+>uE@j$vB7XIO(^N^BmOVCk&g5jSWA1wU zIFIQ@ps+>|wf4kqz^TJE0|FarQtMNxnJZG5O-%23%$O$wW!NLwq-eF=@j4A_gv|9| ztqf|F7(znm;SM@q($QLDLRnpyDk@8#+Pmrli?`A=R($GGw;- z*#npjx-sDUwj#cC5@m6xYVlW|scV|>@82HEm~9JmD_$B{-8S`Zdpz4YcVTq`BqvJw z*VojlRNjRDqeG=VC5%@mStH?OAgP&`QISAzpg;oXg{I3l6mcx+5xB<;o(vtSlY(@p zyk&jb+ZyxY`F&ncUEx~;X2)wY^ zG)?l4euy1DTc#p5$N3@svfC|A2J*KFEUJRL$L)teO%$qg0Rsb1E!?#d%&gHGXd#{O zjz_GyzR(Ys&22JW*CV5pY9}v9%bHaKWUt`sLdzKgP#o8=siKSa^J!oj@7mlBG7Onr zO0U3!7J(zj7;31+3tco9!EST)nkNpS?zW0SVelC&O^iqZ?(>4E`tX(ludCd`WINy-W|jWkKEBXTpV~&Kot2)z+Ehs&nu44_3m%&Vgr~*fn)*(VwQNWCL}}bF7L} zIbsYA!_)M~Z|RjW#Ieoj3F|F=sAFwtxARu*x{R<@P44*lW`3sIgpw`6oMQyb zj7%@g>qfhJGfs=*Ub0&o=t0rI?luvY&HTRC=T~H$k;Cm@|6_73;j==KfMCW2f| zIWhhRW&&mg7PkMbrBI%CU6n@pASV?o8gpN-uE8;teM#B2B#B9~F&Q>%faB4;{^Gg( zNM)`g)WTZt7ZvaND>W_48S5dlo3uXgS8Qa1UwZ!)(jRCtns+X#GAJ4 zmgHBp@qJeOMTg!2)JRPnW&{wu3d3tOlfu<`bavV$c9f2IBhArH?z8bbT&w)zH(d2>Lf}ap0`^LlQozdaCiX563;vG3DK$W~y87_eu z$~SMvhuKfTKiRTvf-lPo!0##dbgmwDY*&Q2u*aPr#7b&ui2|f4qumOD<6dXN=|xFW z?yHOb4aXxvEh9nG#6~in(t`B}Z_}F%>aOk)y+gD4U8rhgLbv1u`APz4<>5v^b((2Z zG+iKcDx6MW-963Msg*+^WRjIkMzgJ zJDnIA2+UwGW=i8r==qd zX>4+SAxVH&>p7)7N#5{Nw_3%cyb~U)k7~yuGP=n8>=Vvv=d##`+)uL#-%g)l)CcJG zM(9zDme&nDXkAzo?V{g<jp^bsKb1FsqKi+A z15WqG@0?^c8)H5QprQ9Z2{v$D5+pmu?G6Qxg+;jM&;yJIhaSaJwJz6GudB8-3bKIo z#jr^vxXZKN^?}CXt5&FSh)ZF!(cXD9(e2vVqORn0$6xfiMzX!yEetBM9|hWAc?|+} z1Sg$QAU%_(jt@Y&J~s|BXi)G1q*507)boYKAt5*R-yekCHH!T|-NJNQiAVw7-{UQpM_v)a-RAo-93Kr=P%GMjP^Rk~rLIU&m`jv9*@= z{evEkz{%dpp<9rvy3c#-iczs9*2!px_^f*<+T%(X?{cI4uS}EulQ45%cMckWXa=PGFVUd~x1nwvXOr37LosBQr`o?AK z2LGO7H0fkRx%)0U3w-CJB=wmRf4%xn{&I!-i*JAe@VJ8POYG>L#IPYcff_uZ|W zu?9Okn5S6Rq=C$nFNRaLt?12of8z16LH`|HnSIxJ`frYzIq`^jTe#tzc2u-Lz{ZA+Gys1PNUr<#!$joWv@47ljQulfB`RH5WlQ zhmzV_;UmqTYHTpcYsc;YyLDHnZB$!3zq2h)=N;UuX-Ht*LC)1%PVfwPBc=fX*wv={ z0pBV;C>h5HNlPBz9NZ;SrwWOQ4Z}|FVX!MI$q;pv zx%bzob&n{&l9kd#}{x;kysdtjDRPH%RtKy%#o|78ogC zobY7&FBR`hx~F{$(9ei$A%3%B|9t6wH$MlvfOZa2xPN(K5wml)`#%P=Boi;tD;K<3 zgE^{DKQ`88Ad3ZTM=|e}SIi8{^RcFip{0KV?e>ShXP;E&h18*$iPAxb*-jTn(OvJ` zbyfass0`PPo^X_+aF zHyxseaToQOf(w4mCRjtg!cRD9UB zah{b|xn!iI$R4EcqAr{GtiwA}Y~l8D@o}XWRA%lY3c4q2)x%&n}_})|(#`?DNXgd%1rc z2b_E;sDl;d*LW|aGlScek&j1MfHTF%{+ z1uCoMjI$(=Gqcr=rH!r9R-4!L)o%5CIDyh&$^sjG2rB+~X(>}7b+&Bp8@ltsWRM4? zDcTx|-~0J=LsZP0=tiDs{<_hcN8HacRM2l_N}nV1sBJYZ%PXf8mBoQw+1+=Hp$f?< z{jicR*t2(-9Ui9AlMO}>ppNC%vR=bWPyR^%(?GyDya|h0Mn+E@q-QPAsA$VKII1>P z;GE(^1v_(1Ws{XBrbU!~Tz=e&A#EM7{7E>-I+OXeo8La28D`>Z)?XC<#s~Di!M_`j zikaZ$&B3bDD;&s6M?TtHd6x5-iGA*pSpL(y$1x1irk#Hcsor7J(#Uq5#tL?qV@fhL zN}nLCOsVqCN~2eaoy<*#=kj|!d0%10O!>Btxc#T#qK(XhQ(DC6br1%8gj8&SZL;Zb zTjssjrK!(L;Q1Gs*QkS=&k3Qv)VNbbE7Py&$fa&kr!ebnJu-@|ZV{`0jUtB$OO1qj z8O;!>#+L(fRaE8|e0sxPLSi_c@pVK)Enjq6OVLVKNUvS~7B9Zyo6p(I%Ka17>TW&x zoB#P>2PrcC6$d8fXy;=8-(T!1_qu1IIJ}#h$+1=(F7y|w+COdSR!-eugkab+t|Gq4 zskptj`8{yHz$K-9SFYi=F>t%{cH~RD^nH1=0y}rlBZ*QaR572Os>}z^!fSOlKU$bd z7{qs6q49gUIhr)$mxaE?iQlb`MvXkd>9rx;O{D~q7CI~IYYrlqvW`g{-{N7xwD_(z z^a=>J7P>~o;@+}xZVzOh-vk#|_q<~^ZvW1T=bSX2z`M0+iDqZsZX`qzJ4 z@E*OT+h{*!V2^~8Wo8!gnnXfow=sP#pW3kY4F2lGo-r6bAh8+Yy7~&UNJsS3A%Zy4 zqjFeK&`Rd~*f6Hx32mCE!e8+B1adQOuy&wIFsP2)9X*m zyjuG(=s5HTo$jjCEQkH*DRdH8O>4&7PwEZS8`-n3+xPGfE2xEn*fHSH zTQiPj`ibTK$0|U1Gd6%*ecpbtn|E#Ts=Hf=XXa`NtTzN|wwt^;fKDB+5pikh`<-sK z2RQwL@5I5uxzq-LNKk!ym5g1TVk?K0!8^G-5QaK8KlZSa*+cy_3+SOoFL{eo7&0qS8Su-n1 znKUw|@$oE$n zZHX{6o>gioNk`ibO*cLm*Qx&~R6c&Ec$9N}Yoralkm}S0Bt8PB)SR9lk?DU#QG@YA z0W5hSfwN$(v0uLoE&9N{K$JX!)!ZV0=|u8FvpDZ)fDKIZ@`N7FQxX-a4@9ef=@yoF zF*3G2=oEaAeNoy=zBKOicP%3QgbfG%{1x2kO;O|;E)^+fZ}S{osJb}s@u9S){(-^1 z3CTYah-M6S2NTtS(+4Kn&qMO+R-QsqWvjf%o{RxM-^3>Zi`o%0b4r|lrj*$AN?|6d z5Y4zRy^hM@DmtOtQ}&J33$co%z?8LEktadH^<2?gG@%DzQRyDs#ve2|1Hy+?od`uLg`bnz!X{x_4p z%tAG5;+Se1M3kWWg76}PU>y{|739gKY^EMVLY^O)Mqs?AFGxaxSO{2&Bz_srl)pIR zqEJrG4?#ofI14?QuWu>XVV+R^1IVWrt3=OqGSsVz7?-TwZ2}~v2qi65P)6xA5cX%+ zx`9(j&zS0S+wOFoQ(Uro4@P7iRG*8E7oxMB?RO2_b4a?W^$uLs+fOMCXN)La{uIkS zB?ao6EfS_xq4nb#*d26R^eA6av&+mGo`IP3#$4-~C3Pyc!pq3{>FI0nH_FUTy|5M_ zy9y0r{PF8m8O&6vtJo@4Y@h-qmg&Q8mOL^XHURr#RxS7Js5|8S3V#?`pmlsdAP{?^pzN}nXt=yxY zz76Go+zB?V?2DC9=j`*dbTfKr*)lSmY)M_0bV-hE)@iH3q6Cgv9y(>MFmwu_xa*p& zB-2yagqB1@ykjzsK{4V$*?MPd(u)9;?<3n>$|~Z>=sC?4p#o;`PieP{4uvZW6C`kX z0S=%7z^EIC45HZ0FUniw82wM5L-&{{4p2W8-Cx8vCLwbs-xmluh>rt?Kt$&!(f<^1 z(too!C#zTP9qMpx{$5s2qf>t1#GJF(S-5+*s7?$XkIya6i9Op->a(mqeXl#!6)69u zlvmGjYq#vh5{4ng>Xf`o-h8%B%mZQAEan!X!298EG;lj9^2I`u^PVz^V0n7|mKoaX zwR3N39O~>e^O6#QM+tDPA<2`n>6eXtQ*--2W;LcP`Qrk}Sm1{a1}6A#xQ730D!_>8 z7ZCb_zz>R{!(QLD{#y(lt-cFy6%2*Ul(KNsALf3p*N8 z{iB@P3fPKToon5?!9>2S>bkak-^y#01HM0%MS?vz66RQ%Np%PewlC49S{#XDlr@*O zFI)4t?%+lq$-nNaV;mpFscLU=XXkrjIrt5uKz7jM&L8+UC(bdBjmfx!-fWKwM#Qg# zH1RXF3htsY?%SJ;_<0Af=>d1k9#imj|0U!_Ki@!9dyPvH*)NNv`mVid`$%3>(*r%{ zy6}-`tLJLOO4H8ghgCaKd_lRK(>724DT_l}66Yu=6A=!tk^6aR?F=;oi3zWE#|`Bz z@k=(`)`Lgq8Y#8)-wX`-#PwED| zAA93uBVtPp!aN%E?{?)G_;{n~9RTireRc4!=9~3K<@hah_Lp{$sbKG`*6TtG6|kRT zmHC{fu80t#7Bag#;j0|3C1Hy|K#@Z?kM{tu?(1aQ4&gTvGoLIVLfBMj`oBU zd+{w30@L*TI;A=%EL~K0%qrOSXm;9msw=DwEO+QjO?SC1AMbBh-}!!MZvu~g+#UUy zK$qJx@;2O73ZTC#p!!Ve1|{nQo4$gQ^#h2n@`H0AK*{=m_476reH0-8oec}@c4mSP z|5B_C2Wq7`IsBtonLD!pqiZSb(X_ zR|Eoy(ag`vrX>5^b)4I?;-7>rDR4o{_FN1??h!t2_=i(z;xoK6?!O3sXO zQ$$8SJ`5kcS)%0frlte~cO$&Cb3~F^6P5th+veXWbTM^LP^QlHqRp-qycxlWJd^0r>7rA1@HQzdFx)Ntso?Ndj6|f`?^CFn(+jvar5R4miF$ z#ymv?AUX&?Z3VsWtD0&v;MvFYW@;YOW+3~qW!2)JOz;{;E{uoGx+=N|j-D;CuE=)`u+W6^O9ETw`ofUUj>K^|1o8=Sr zxU=GdpNvTvsQiWIrXZcF)>tO;EEtFLhBS0HF%BPdAasuou($b@WyRlH`%i|Tr+Gn& z!wcsq!zo&aNqUU4(Tos%t0x6?^_4%qN?tb%r8WEPm>S0l)G_845oF4R-~3^s>A3PM zwkl!g)RsldUrbJyG~0B@)@05xvllL`ue^ZZdfL{ecaU0r8+lw5iv8t79})i4{D`- zq-!isv;@M-(O?{H*cT{=0Q~8y+$oe^bGRsm@X9HiT^#pJvp@-HYK}3CS#_4$2;7q8 z%x^)(9#}(tFVXg?TCS;|J!~F{q|e;JNbt01?_*L_L3h;z9q#E2i~&zK;fE~Bs*o%j zFOPDo=KQ0dABRszg`YIN`Xc*k*Yh4x*!%=|YLtf_b}RowSw%6x=VJxR;U5O&@c+xH z$?|`!c&hV;XKX0E=(VS%Yn>^l+HhD|5e5f;*Qlcx%J8c?7L$8TOb7gqpfP^^iFwZn z+-oIpR9rC@n8}A59<ZNGmosIwBMkzuEMpg4#zQY*EZ(PBaA zz-VP4GD-vA$&}U3sAnKA>eYrve^&q>Iqf`@kS9>ghUZ|*!5*63=-BZ|osAeM02vTO zq)aHT%~C{zBsfPaJdnI3m^C#+LQ*n;g15c^DX3)EP79+JH7qV|+&~sLc3mKkQb`!$ zL-g}XINhaY`EMx`Stf1-z*1_L_F9BY_Up7Nvd7WYI2KP4KCJBkThTZP$9gN$?Sb@`3!}E) zJ1h&&TutaO`Z+VX*@aV-h{MPjc5KKr_q>-0v|w9gz3vFa^(73uXTkspxy3IcZ7`;5 z8%qHcT}V3z1=1mS?VY_Q$VrF;>K^b28T;IHxeB4~X5k@jksPx(bu>&f(_5_IYrRX` zdXTJF$>6_HD;G{eLzU^qg!rti+h(;D3cV4=NVIcR##KaQ#!92)&x}s&0`Zm=Ubq4) z>}V|2TA^FbLNRE6t!N3NLYAigNWGlWob%fnS_}Hf3}K8piwrAKPbF( z#nj%b0c@JeEj6gELrq*lvdThq+`fdm{z-yJ6=oD+X3jJUfTwi`BUwAZq34*uC%--} zKu%%XLjQvL$7{}(o+9Ip`I98hDd?p#^JVbNq1v!Y=-}`y1Hn^Squc=N;H*pZNIFDE z!<=I(f39jwE(ub0LO`fjr#oSr6%E`>f+N&0>E{BjX^;h5no!+@2bX`oD<~dW_#PC> zZyEbtTcI~{E6zSdVc_aGFU5fz2B$DsVgM%XtLv7JfQYo6@R+yB;N<0`zlK+Bs#MCc z$wnm<$rjVS47mX$h=%EZLMK=Zve-sj#8UDmFq*CQ8k3!Tk8rM|F|GnX{=PxwczRxggAvB7^VU}g0OwjMJFgdY;Bt5mI6G{xz@po(fna0qHQskOuGC~ey24`0E_^=~u536}Oq@=B0A0J) z59fKlFHYCx_^1<+FHE*Efx%PB%mPP44<2$)*Miel*sfU~-1} z#s2r|%=l}jgnz(&3pF?Oe-yRgS}qD+?joY_x;)jv&G8Uf^V`)~00{=P7}y~0uxR-M zvhOG-O*k~)X_O7U8qry{%R-{ubFJmtU%LuBcg||*4lyxsn?)#_vt4?O7> z-FQlVh|@Zs7YFu^kVrXAww!QYyx-$~yTPnn7_7Qk8AC&%c+f={*t^>U#K;AO0f&ux-_Q~DgVtA@ zu>n0U8t~=bz6%X$7mx<8?)r2~bw%?pi>nexmg3J&rITHvIw`JLPAhU=Kf+-`NOm0* z5&^t#*q^S}{oh}C_=m)5V2lKjiHj;|XCK+#R7xI5)3F=d$$IsF5Wvsfmg)&P+SoQ6 z$UZqHr6+x`n2|<-qCzQuHEelG>+1HtoY&(L$z1k;y=HyH?8dg(S{dY$Tlz(kF1t3yee#tauCe zC?tT02ezAbc$g0SQUVOf2$;>DG{eQ7`PVJ#J+q#{xjTzgvotb3Dwr$(CZQHhO+qUiGWbJeIe)d|o z-x>d4TvS!B>aDl;8W0bAl^*Tao2wUUGJU{18h=2%3xM$r7a+iDnmG*l{UM?1IR=L$3h6K$+S^NVs}!Cd%Rxohb(h z-Lm;N`(%ZM*%zvani}uW>~;ilgJ0BkVj%f8@jnvUh?`ni{CE2#VbJYd_{YvQOeD`n&KQ_aNB(1|RYr2H%3rFxAC-H}9E&)o z`FZz@EE_*5Xu$ZGM}PURN6#ZRIg)XcRIMSZp>YX1Q+marzNQo!2K}~rp(6=SZ6n`7 zhRq+&9P=P-uuMkfK257dek3YF3)${njhXrZ>pAVs;Gp_^r$f!!B=_58Tro17;%0&^ zb0QE^OMS(&qg1ecGYn8!+Zx2t(waqqG2$bra%0AQ9csJWwG4;Md&)_@t2&L@eOvpI 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≀j8IpJ`JP%R_ek!` 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ΝL)9dv#hY=G4Lhz{xm~J*?HBS{gBPc1l1pgmA7yP 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
      v0Bxe`Tw#Su+0Y-QefsxkbDG%Zb}iycQ%I(->_ z;AP9 z9tDZZ;Y8Kj=e@}MYrZFW%$ylqj|iM3AMOF?2c8$_t4IZpa~sn@{J!>w3P%%S4+L|Y zJ6|Mh#+2Hs@x(VXAHR|NaE2V63d`r{ITh_j!3eFFksOSK^JoI_S$Q2Hm7y?y8Yvcq z{w;mOtE0%35=)`shIgsT!dCGy(fN;{rBn`qvqjeT3TDGDudFI2W%M@PAWhu?7~|+4 zf@VC^9OLSJym=`P=0&!y3!4)vWgugoaNDVeRe^iX)I{wYxdlX9J=gyltGFI^bY9|XM5i_2E!KSj+9JY6C~z3FsavH!X; zFEG>e<s7alfUGl<@l(lM>1BW_oFvb;%iMMoKr${1Gy;St;h)3#xII zLp=K%LNj5!clY>3kO?4jN8hwI9!9waTx_}*QZ*yfXM~wQP!KB#&c>>!)=q<|rJH@B zBLL&?oS_al{HM|1ohJEqIf=HFX*&ub61HowjH7KmjZvFg$i6jaCW6{<9o2-P#xBnC zIVAij*Cw|AB++rjJ@>Yi`5>CkReo!eDn>$K)@X8^lNZD} zHbUL&lIS5&kGrQ!sz~~V62GgOhj_z~3jE*!N5M&5`vAV1o|Nd7`D?~XGUffQ#ba10 z>K~%)av`TP)pfx(_v^21?387b&*lx2R8nH6C_u4YqP|;FKa=XD)-zeLX@wxGnk7?( zV7FB>g>8ZoExIXyPqSGRjvjql0ofvmgn?otat!AiSI(I0sKU9e8$%OU*g_Z|A5N zpJC8R;{wd;)s%Ve%9Niy*jCZx9uyRFnT@~GW6Zic1vc*dC{k`?~!WZ9iTU|R|y z+MPmLq6)p|lfxh}Ke$w4hPd}>@}exhw%Uj)e(jw|puiI=gN$^0m|dyW3$+z`rXR0Kck6ef2`uA)i}i%N zC7_7iPv&j~#>eryqruEl#GQs0nw(kfihUe8Wrf z0MYZiike31x9OUmlhS9PSX4GOji+G{Diiw4tf4gdkdN@7RpS#w6A@entD&(dwr$&T z_(e^_cE>pQ)No{SR?XTYI;Z7lVCT_tsH~${Mv=u=CaboP{^yREO}qKQqS`}_)V_4h za5Jcq#L7*1?yK1&z`^}^*q&#t-Mo`}%a=Xsdxk*hp_V`>FEsN_+y)^N1npC+QXs{@ zTKk+J3JMN@-dN_L$h|p(Q_pOZqBd2tI8139fPLe1(f^!zsppo$tG=dfs=xZX+N$Tc zR~xlR*qPz7bu8aB5m}$BsH=KvYtt}}O1yviyW@CHL8Qj%k~z|h{~ssV*35@2G&nqMth50DAJKD8#2Zu;$RZLFzMkN z29hvJDy7qa$s{<+q?F5~YEH(BP9~!tOCUHOi62}3d28o`aZyIUP@|c<(kS6>)Oj&X z!JoG3`t#R|_2Lnp>WQx65o|-hSS_h+f#=+nC8j;r%(h6?+j7PJY(=$Cxr5YHG*?FjBy!kCPqFX!le&NvHOy!azWiL${R=~?U~LqpHq zsoNyWx`tO#q^8E?ec_}boAas)2vcO+u{*PDB3^pfQNCvbo zZ=PN1lnMlYx5+UGm7@#GqZ))>SL*erkVpOB*tCBENY-)rn#~_unM2^rpi9fjm@e?u zd1deBQoDFv8`jJV+s+fm0iFrB9MBoBnB;YDvxyxk+|q$wugC;KXT!! zZP8w?%g3G`v{YQ18oiwR+KE>E)lhv&V0g$2F&`{ZAFT9R;AC3~SiB~?#>UYi6gW>_ zs+gB7oOoqbnF7a%Ei-aqq|hMWoBo^qVFA4va|q%~F@wC_Ot%s>A` z(un^LNZNlB2cX6d34#H^iV$Sjpi_c|>D3X#NB!*ac@z6k|KXzm$&_}vd>~f`=6Z#u zI)zz3V+Riu42|CF#bgxAW{gQ6Z)M(-vC2|PXEPJYfjdrfN6#9{%ON#i({xk|(SliC zlUOy8ZoSHj$~H*t%1iN00Z9=~Dcns<3Ra#*o^G4HQaYkK%D_p{F5d*}+AMv%HQ)h{ zG11BiG}nt(AM#?}o+$fg+)dSl!(MQjO-d`1p03SVL=)7w%jIz{a6kh-ovvzz=W05Z zA{NkJn%t&sw$5|_NdNeqop5C&P-w()-|@1i(_`t(BW^>iVPocoL^JkrkhPl@cyQNU z)|m?-Y|}FV6-)oh=ImbItN6WwPltpeClOEYp`(#c0LI3@3qfk9s&gDscBwUqK3zm? zHjJkRt+Ced<&^Gupw|8F{RgZcDfY$`DwfWXaa7ue>&BZ61+;Q%a&yqNK;U;(4km>p zV7>bS0u<+XU|fOc9SukQZJe{Xe=j!|U{Clk}p`y7W z!*N@ZIT{7`(C{$QCa_`gd?P%!7;BC_ACB{3h)el&`>trVrE+5DzTZ#=7 z*oR2-jZY!z5ZdG{G$S?g>1yd^P8GpaAMyP4vMCF44(9{tRO!Bxk1Xu4o=5> z*9(Llvvsal7Tk`_Au2%o=+<3kqqCqL4ZAgFw~kZ47TE42~z;dnqYDwlDTyeisNHsCYWDEwL>v9Px%&vuQI54St)}I&ZWvIDWnd zY8;kF);<)Epz(LvFeuy@YZ_sah8Gl_R1q_%^W zBh>nFQ=A{d=|fZkFVevIc{Q|wRgIk08~5>w+_5ftD5zLO6rbAhIfc2I?*<$g3}_$M zTSJY9#H-|SuB0l7co>@5gJ0YWL|3=cjkFnK7M_<3?A8cKPpocX4$vTpq z?%U#pxGho_|1A(jhbQV=bBh2^K9q}x^=^|9N68*cuig6TIL3M(W|uDztv;+`-A-O! zZzDM_;b=-d^(eze%S_B#^QYZ+B}b7vqoRB5HYh@n>x35<20Bn8Hklq6%Z;TcP4vN$ ze$L4Ve#klI>WbKe{#ZA^5h?;nx>gT6Uc%TX-9R%D$?K~NcIKk|GaIW_D&2is=}Tgs z&ZS&3_p9suLQTQ?d0tIwj6cO#gXh!(L}pzgB;Eef+mCS)Stq_XdY3|ypQUeN{w#U| zWA}SW;humxfp@Fma`*@B-M8okCe`3NuiH9SMF7jG9?LSpQmfcqh)VT?Z-XU{)Mqn`DKu&Ac+ROBmhSRZGhHF z@q6(GC9uFLtNJyRv=tNdd+ia%Qv_&X*NW?g+ z%lYRCR#mtr-n#o_y8F4n(5wRB=(D2GyehNe5Fk|ygR){CQHV`MC4@)v}tsh09Oqk3U{RB`tfa1(VBaUT0Uwtg4)QMgEaVN-9vqQ@=HV^7ur zwh5sRVmz3)UB*1b%zQkQ0K&~pG#K2lPS0bi6o7CZu&_^X`OcC2U7XK5wNCR~p_Kjb z)1Z8RBnbr{zG#EzS!nJ+&c03qASDe@ z7gWIIk0t|~)SAKoy0 zQ-ZaD`{4hHwVVIx$Z`CC))01ZhZ_ z4vt$mg9!`Ei8SCP_848kTw<q8lcJRJk0|$Y~-Yx{H&^VAKQNiNq4OS7wFqeNmBr@>!^I+(!#}CeDRaVV zO>DgAmEC1?z-VR1-FH^olMe32#(S9=rN>8o)?CYyO1=Cvx9Y5? z%SWt*2bz`bVo3FSz!{Ym&q@=uX#I<;X5(p`X6fnZI*+qOnSnNjPt@-bT1vnY;*`1P zS=LeVJVXgLq}_x;zR6ljpfNSNY$G2}bJJa&2HO?gDwut(k?AE}*`0Lc>~Hf~WT~$P zCIwpE`c0T)v|O8}9i-({nU>v|i}CnWdKJ{n58DZ8^{k4_zo3-n#S@|n&lSZ+>rF7s z!09;-C}s&&%2eEFeQns@h{3NxA#mJ!+fHbLwJK`Cp*p2StsbcZp0ftBnk(~?{CWt4 za&3>EGqkI15JNvRl`do%mzU{g^;VR?Xz~?C1ymR47+KZ;U5}ch_fDNkCECcftcRTR zE&$^MS1}S_A;S+f!jLl6EkPb2STYo?OZ0F4$0uIkG4sq%#CjI!_nbzEt!m{$%T$s& z^~0!gQ}7OH{*xn1ZFJWG_;#&PPDNLhYMpJ6@ zx{0T*p=eLFnQ`immRJi2Q5y;X<((J%Ss-$vI8y zg0hjs;JSM;h<(O(Cwzu>E4%krUcG|tF@2KkDUaoJK+9`8`&!;&`{>-TeNu0*E}x5U zKIZZD-vj8co{B+mSulxeHQ0b03pARX%B*9TG#k~WN<1qD?_!_9GML>!h@Rk)(*bw@;L7&%qM*k!d-UzJXI3U90gpUcT@CV$K+xP5r-53wJ1Irvv60A zsAnt|)iW2umQS*@}b!4708sD^1J^hll@ ztU?bbr6HVuev@o)77ftU0!4=)mFts)^Z_#=GYG(dWYs`yk}N}8-1VU-_hvr!Gs0Od zMxU3?Phw3k1NljYGt@muH}PbJH^r&)6;5tpokRJiJ}4Gss&>S}(|Ryv44$$l2wt>>}=>7bJ`amj75a z!4lAv?O*TS>hUji0^Im8|nIyG%Z9A^-v%Fe?9x5qY@sYv;LQgap#ppqa*BL#; zM0avD=mF;Kxl~ly)iW(gvXz~DnyMVHSzQxEk^8AyvjlZh-BMX1a&M_7&r+^d?Tcr) z%}_4L8q*i0vUnSb?1p#2&4L14wM)^JE}}GTPq_3!`i`H&?H=5OZT7{0!{nOMvxBAe z&2r4PD94^VI;lj|n+f%RzV1;uxif6GJuSH{2ynN0kHD^Xd`FKhApqRB$)x}B;49EJ zh&QV_SZ*$|=Mvy)cTARTNh8>*8X5X=_UK@5Rg4_X*?Q@Cf+%FDksInNP6?UuX`h-= zPppaki7dIkQ}msV)|5z zm)o8v+|7Xw-p+n!7z}H&Lro+TomZ=hFiLd>ZxgSJRT*7_ZjE+1b*#>lLv<*-JmO+(8ZZwsXe^K0cxpPb6e5JI1SWH!VBU`f_qQr%0JzQvN>KN}z+= zz{6e%vY9sEkPGokB+N(~+tKu%V|_R!x+VMcr5JgIRXyD|wk;uo%Vm*@mH;4?Q5f9v z8H0|)4y7$e$}8wmZCSkGxrz49bt4vdYsL)a;gV#1HZ7g1Jt<%oJj}uXpdljc?9iKu za?xC&UV%l(Y4Xs@;^iUHx&0=n%{E?=sbD}RQw$dWXZARGaJ1nQ4Bme|wMv={LfeWI zEIh!O38FGKNEyJCIw=%$1lyv^tW`0~*O)U3OshO%>)DMT`4vAoCybAe#PyG+>Vc3p ztUt>^_pWD&=`2zGGkpy`l4QI2zWKpLQL)x` zlreuX3E;;f7^_fUlbyoF9Ngt+?EIwgmrG0O@2hivTLi<%#fd$j2x)v@Q*xcSkI^h1)$`r>wGn&IWD7<6zdd>$PMA0io zpFaptJ5w5T_+GHUzUD{D{o0kRjzZS|`j?1>!-0YZfd^1p4Lj=ju>3?O^WqtbUeoKG z{|z!+{x8Pffl1SD%N9+$(zb2ewr$(CZQHhORoYgiZB#n*>!}8GiDIp|9C} z2{|kp#7*>hT=eb41hqEvXUm^0h+BE17rx3d6z!Xh1)NbUk8Z%(jr|S^{H+#uWe4}o zd$e&F+rKq})riyctVs2(8cg2b0S+ijYBeE;Lcj!_If< z>`b)aypJxY7QJQ8`s~T9uggRy^Z_*T10R53Hl3t^TRpTV0IPKreuI}yaJ1P>vv(b2 zqs>;7O;?;On<=!o>GGK6{OI|$@=dR%u=zWUi*Gj3cyyIybS7GcfI4EtXk}c8WwFFv ztQxsuG~6*=<;v&7w)hO;K5QxzRg1O_D63yuW|gniuULzw{o>I%B3bY^(NM>86dzV0 z#pUwMa@KA6*7J$_Kw>|l{yr;mxbiA|zG_(E#kyn*iJU5g#VenXzIZ5zD_%P@8X{kR+0bs@ z@NQ+~_1ZLeYnv&2EmV2%6E7TE4rEyool6PyS3IiyD7elNmoCKLz113(bhyp@Zjd#% zc59N;+NPiq`Ids_MhvB%#@oC< zX4P2qB+jbgC$f?b@ZI!eH)SRC>H{p6`u*AR*Ao>}wV$M8(o|c)Wm$5y+F=`6by5Z8 zs$R)f)GUc>sB?Aeg3!&jM8{Qfsz7J~`*2$Z(kYNf{POd^Y1Q#?-%<J-n-A@+a8k^C+GH z#5!^*zQyDC3x?)q#L+~t5k{EiOi0IoB^T-tll%d-cM%0C^{&=HD6Oupu74AN#U`_X z_#`XeXdKbQW$RPmxZK#f-THF7_OIh@gxKa}Bo8m^`XnN$o43HBsU&u$yqG)|Mbs$= z93fR9oXJaV3?Uw4Z5Q*H>qE%~$XAa+114bNKv`57fZ*bA`lePOQ5@)vkkRgm-{tAeu*PA6nv)W>@l$vg11UwWm7LRkQY}GuoYB5`O z%?sxyOi$pDzUY-=m%*aQA)rP>nF7(&K&_`LGe9dAv$ZCGDBp_S!t#~xDNelrz}Td$ z;5+o90xeTtP`}57TX76~O(u;kwvlMF7hpS}Wd*+##yr9+on-beE}p-S33jA$7ls<{ z6q+Kodp8^TEqvC-AfKA|Ho&=5ny%HF5E_5&h(bYpVa>4^nYS~ED$S|~E+bZ_=;!n| z^){6_rk;j-54a=we0pHup6*I{KWx(zQxpffNr z$gyCS()-$Cs?TE<07u0}Gxb&kpoSRn?5a;?s7UW)P?mRSc>xW$F0%dYXo2jJ(7~89 z2Af$bjj!LXejFiJD;36#XPl_dOPlkf!H&teuk}@tNYVbs&70OKDAKkI@Oy&P478(= z9>DKAqpIbn6Xs@S!yB@bY$jhvzw1z!sO*j=G;|y~zHZIu z_W1(X5h@xrEpQu%h)L^Dru!#gg~51g`_h1#zW__UAnIJK0F{NaqG(!Z=UGvh!<%|Z z9uFA%6h0ZoKK78daWYl3Qx+sH!?cp=ErS?59ZNqLtQkddDyKEGxB;YJ|4n^H0wYbA3lIPR6$k*}2MZ2hYvN4jWar{&Wb)HnGBcsGw>GeK zcCoRhGx+~nPydnSDH%Ch*#DcTCq+R<4u}Ccn>MeOJUrZt4vKgoNGyC5oyX?TKhd39 zY9z6wi$Z7r&%JPA#LlO}XsZ>m0$r=bpC5Wdwz{+T-w#y&NSE*A`fb6XaI>R5h?yWG zz43y1h=-b22m)V(x%PpU_{4p(Cq}ilYwU~}p73GRm<%MBpHvyEaE1c>z~d}B!xd1k zKGmh!qzFlzIbz8Y3}q+B`kKRz=#&Ykxd`_pQ4p|N1JN`XESD5GmL!MGt6wRNAL8O% z!+I=!r_pu6IpudlRaT%V$O?q)no)K~gffZh7Q7h5+8hH%Mq^0O5V7A+xPcp;5Bl5( z1*3rXpx@0Cuw=oTJO_=;g=7*O(!|>t;;n3L%Rxh<3~KSRS8Z+A*UVD+XF2qvqA6DGYTYtvm1ITqKjmZ|nPgU!x*iH; zPK;Uw;lPd_uhK{}0MDUUyF(c+$8Sbg<>2VlhV;3BgY`5Y_itIK2R0b=TNjkJ?ke=g zglw>CJCAt$OX7RD+$n+~FByHcE1 z=D+C_v!_O=OD?d!)NC#2zQnc{*Q1HNWBBaE(-t8oD}OXp%Z4XREM=4~0&aIjO_j?Q zeTgznbOtNQJtS8$Ag0$Vnr-m%iF7u9Ey5ffqDcsGAiBPJc7h8hv2q{P80VB^O?7s; zA!L`b6*B&HY)fsCT@1H|SG4=PU!&W-9pwhG|27(2gA0JX%*lW0Khcb&bpTMES;V+I0yS4ZStigp9l9rg^o)yVf45h|OS zQbaKw1Oxd~I)L&H{sy9;U3_VdU@LRh*j4E!y@ljOd4b7;_70!}j&2=r4gi(5XE2e4 z_6|7!_ZWZpQ}V{ri|~T_2eLa_Eu24zbFzGjfYNwnWm&$VJG59y=t;12I=-%=z>p8x zJMJ0OcQ?I9I5F&_^JXLth;PpGmtZswMnnwc%T)b)&-Huqv%I+n0(ff$v9a{>EeCtn>!`Rb zc8_ir>QAZ}asPCU2Hx(*Cw5Uz({n-oYvEOg9dcuBqXS?&bcF!lH!0hoipBP`5YYyCjC-%AvZ{*iEnkt-SqK*#w zZ@&}dnaAdBqbi1f06{35z5W?t4LQmq<3a3d2zvb0GuPLWF82-fJ>M-W@3obPkbP~0 z4-Vpz!KugHWZ@FqIyQPiTw z5hWpU+T^H3)vqWSsjE-nHfN@Pk&SW{A83SyR@Z^ZqN$s-i5mwezWJxV(DoHeQa{o5 zDXX|5tfr9M5c}d&2Ls~WB*wbTWGrft@WN=zxa$Znm2EH7$Ezl)V2dsm0A@Z7WA@arO@Kw& zG!K$i*)+`@*LRXMYhAT%3&JEfs*h?`jjU8P(l#T&A}4P7Q=a{i7PtNoxp|Ekt>h=B zS&*`JQkc3adF-EAs!l!5?&bJYZIh9Emh5BVNXpEvnO!l%Wh_wZj6SaiwY*SMb-eX_oMvrr|ebShdp{ ztQgI(Fow{th7n{)S5%v=^$b7a)@{|zVaXck0~|%x{5pq}~1eHKq~AiAZ}vH;NQgBl4?gD#T4AJ2eWCs$$~y9^k*70|}V~ zbr_wLFMQT6n_-fFn7PT>_P5z$wpLQvDuphxkIyo6GvKJtQpPPZaS$|4B&Er&>2`Mp^O1)(_fKD7-*#$2i3{Jh+ZlhI=dXUhTJ1gW+F?THRt690m zIMgz&Kbdw6FtTmzlA3MrQ?_-k*ccrBo!c=WNR^yo+~!p>cJNY&+q`n)FJ_#B<0Mu^ zBM-w#Sg`IYij}}J3p$V;BY%193W!LGQ0l9ajF!&+n!X&)&`U;+YMtNp=Tx(|b{%N2 zc8Yfy?DKuTNp*;`9cml_XaXG~Jo!etP`T@CyiU98|2EL!zueFJuc3a_z4burC*^Yf zX|OT;Z=qiPpBzlZ#`>R7Pt5SIVBeFp?D-%HANq%3QzboPocLSjXFj&cB(lyfi9+!s z$XCTU6pO^*9l``$}HWGKqysP^x|FuN+MFi znxOaWWsyqog34;9)X1ygGy9|}EX3BRJS3*FD*Bk_h`OpW-it)u#Y?IWQFU@+=QbyQ zNB#M#4KBbXUf5^3N+wO#WpUVd2;!#p{f50IE@qQRcXt^NY2pFxmTPSQ^jzCrE}RF4 zma5*-lwVZCN_b?xL@cDdsgOto1elK8KAh*+Dxfk2XcJ&9#%$<97lIl*H#>)};$7 z!J7}U-#KUp#o|Q9;jL|1J^`hkCZU-mKnnRmvca^wpoGKz*Vflo#97~&;;pwV^OtSI zyx@e+z>pv>Nx1oG;R9A1aG_SCD8pL-38qV85rq6|f2oAOiQe!&V_)2edAX1uZ%pN_ zpnGwgA;Jk@+W0DhVy(ej5J1As`Uqav8(K89{D%x4oth)?jJhSr(ycd2(@WvT@QVR< z{r;<^HVT=7lA!wU7z@d{R3jdYX&mOzmW&| zrTuHoyDx@>>h;6J7cIe1WAqTPg*2`l`m@SYBuGL;9}`7}6f@maFsg8QxG1J{y9hYv z@|y97)UzNhD+C202~*g@Fqj<+NtZXCxER@D6hkC6`@qyA4k$9RcjEoeE@S~7urzqb zd%WQqaUf?H!aaE%gD8t^y1aB|F+)i@sa(1-g344nGQCLpu80}Vv3r|GZkPT-q{tv* zlZh!6>9jh@2U>5vs5+aqep3BW{qzdXNUZ_f`__ZMy*N7|cGlEE@OkoibQ+(UcDnU` z;(<0p?_WhhL5HEqKb%`0>+ePG*vU+hgXn8GpJyJkm_GpZ&DKru%S-(vZ;s*tH0HMk zQllmw(xLQmw_Rb(MbGlL#`fl_we zh^rx3wnI64JAK^2zi*9wQR()V-TES)2f_39rM$V`9mefq`uudW-})S|y?9WzWLf51 zH;%UVB+?isVJLL36&SOibNpWtnWwEqrc! z07Vk)?b0D zfolALZmBTkwyCiGMG#bfZcIi54|1K}fOAv@AYmI35fX4^4Bd*iyE;>7)4>SQ0_5tt zcmfSA&PZjokgc-b|A5UGHQY2{DD%3mP^_su0E&i$V7Rx&d&hpFMhW{vN?5JnAeR(E@d&iS&f>E0hUWk$zzrUwU%rAk&t3|UYaxoobb~qdbg#|% zUcL&}A0Ow`OeJ%_Gxn&W1y@tzyUUqsl5UZ~-?lhUr=qG? z&nGGci(V+h3EPm!k__abfv4!R;ie^H`0m08W^)=8Zl~G5(-m73TU6s51zsw#HAgsH z=tsHpo!1{!qB+jbDupSt?0HK~Y+Pr)hU>$yblMpdXs0cm$pbr|C=!FY6L=n%;{qsp z#EKqma~z6A=)+j$%19t2$z?C|KR9_X-I#z^Gx!9T?aXFLiF>@^!gQD$={qbCq*cu1AP*FBqsI@}OTpKNkG;AYWMCVWDDLmjS`fTGij~0{#EgpZG@{ znG)jUB3*+1E!1ag$O8R9^(EVVzLf&>^XCKFZ15F8x#V@_tIwgB0T{3~XoLDI^Opwr zi+FdI_@q=wLgiL_(jNA+HL5+_R#dATJ16Lt7)+u`Tst#=gL$>jC{#P1Z^T>loJHfbYn#F+zXqo{!l$}3-x9gk}rT}fxw+nPCGzT;nLy0hc(8bGYi#`F%b$q zHTwlkI&^ELsO2uaDz~gVwCw?wx3GmTj9wzQvhAz8SRglrA^rWPcKAfS2|TN}@G8QM z)GfuF%7J!*>VH}75H4{N3#Zx8DrYoF$&7xRaL76a*`azv--sUE;tqJds_N4~t7zTw z?)<6-E<2I3@d$ig>`YqWHL2JYn-h(yd=12tP%5e}xnd_@R+vxIG!eZmve-Dzr$GbZ z3q{o`9C@u(6SAo^3FKon3`w5(O(*`^4)G_i351U~6Rg<_NJeYOyf?-T%e!lrYmA*n zO-+{ZMRvgLZW{=|3g!>68-{n?E(WhZJ0pyI0Mfk1j z1^t>67@r6~I1Q)88ovWXg$y|5Pvec8$}r$omI^As*4N5o z-3FGVIM3abHkM`}UEEB~;PLxk;$)oKoYsD4?pEWwqnN)(5VPr91plzkVb2nB{+fPc z0uEWmRAS?#`h^69f8B4Ws;L%ttL zC>W2}BRp4EN5U0ZBRna=NlvcasEwxSWqO!*nH%%QqH5K9_y~2`FsUikcJ8N;;L#*_ zeZepO;J= zr*Wri)W|V6x^R&8xgf+k)>(w4qV&bgf0ROP_ro|vB*}tztyye|;an&TWgUD5K1)<$ zI?ZNwcW!F_6ou=>0kyf5w8f}I#kG>MEf z{zq&Gf9dcL*Lm}28A_~<1l!0eWmG2le1fe-$IXi@_h);Ju{7{yxY(;aNH)rvmF6S> z!@SjCR^{An+HQTQmgrcL0UW$CAzF+jyVZKI#I~bIB-LnwqLj zD0E}AJrVY~#k;^fJR-cz3Gq!iwk%fEIRUwud;xvfT^$L_5D@+e#Bu<%*Z zl}ko59(g!J_LIxLbN7}Mni`)H^K=c@RT{3JKelk{=jDpYqhS*@)n8pIT`op9xQ?D} z1Df$X*8BHm>ms1n(}_LQ?S9wMYWc-Dcv9wbZ1>)|fdhN?_TP22L#>D9q=V{jjvAWW0IGi5}TOX{$Y{0V^OVYFnBFns5 zFZ1;zZ+%{q73eXXtYKdr`GotvbUx;oWC(!(B7Cbt5e3Z1AW-9e8vKJrNt2!Mg zK4}+u+M0(t8|?xr{e2fH`*_in;s<_Us0+_*q3L zp4gz+a@qtq>=BN#rr2fjBNfue%umnG$Ba=TQ>GM7>OB?TNT3Y@m}@GzqN7q z4T9l#E)YOoB+$MT@-g-4y~0-L%B;hbbGCLcak!=xu zjlqY0EizI+A7z=oVX+$MJ4nCZc3 zYmj=#A@=bEKX@G=_UQ^UBv{sY9mq-rIh^338x7zo0Mx=2;s9U}Z?2 zj@IWv(UxYRM-(&Y;4W$h$KaPYxuYhKB;V(t9dd{`$JV*u`wa2encVACmFDAhK#DV*hY1kERPD;Zg$TPYlM%_LXyAnf7_Zb>mbFD8JKpAeAV z(<>zdfZw8rJrIjMAVYfuSmtX`{vx_CtYa7C;Bk+8Zs6V8+j2t0Zv{qmXk;=#B04G6 zoI0_f`LSMHI1&5Qr@D@}^FWFR zVC(Lv&my8mbdJb^sGRM||Hk1Zz|gmthHpMX4}H8YdXH_iDG1~85Wv+5#EV^Z7bGN) zl(#aV_JyJ}H?3p@!SfOXU1F;$9xvTwDSf2mxM3xnzic}grx$5mLMZI*sWnN-i{5({ zt`p41?fD)s1t~Gjc+!eRZ_%h5b4(T7xX_wGp!AZ!y)*ovWq&2QnAxbgnE3voq=jZQ zHxkj!GlL_7YoU?4Yh{$N_hY(pG+2czr|SX@cG}?!2$`^4b;!?*KFNxp%=~akbIbyh zqX(5yim1toz=@f$4V6)j=)sBrnz^wawed%V)QUigxv?3wQJQGdihzo_u@SYAG9;bS z0VV_=2SP#&s+ehHA*6O8#&;n{@=PM-ai9Kd=x!lRWFc>v(LaVUeA0v-5@UjgG1|-o zq;6cCH_hi&Ks15|C6Oj&L3mUg3xkTsq#Gs?l2Mj4lUCkjStq}`nRbkz3!m=_+#v0& z(-#7DS8dVO<@h`=m?nwg>(1(Xg0afD&B28Yl{dfp&|o83c(r`JBbKyQe&Trp#H`&k zkm-FSs?|Z2MW)cKY}on|Xp{W}j<)0V`47A?<~n1JC}WT*V^XUlK+Ylm+n4}MLJ$T? zn5Xr@8Z*%tE?^YFXrN<~fJdevtLi3d_!u5v`0Vu35yXe%pha=+Ep)nIQfvw@F%hYl3@b4ziA+&zAQ>;_Q zhKrfQL21%53eqwv(x&s_VLdleG!w>*s`M!(>EqQ1iGKQwnvCXmEmBKtD#8oK2x>)P z)J4_QVgw7b@Mb3AKtJ(e24S$mXB^7d$S&Tdv($sJNWLAf^ipU{yRx%p&2Jk`%MzQh zDT|f~i(fUyHkz_EGTkerWZ!tl$dy=8F&We|iqtcz)H4-GQTE&F))U4Ky@n0}h7JZf z>cZz+=2=V;)oQ}5bE>Q>74wbfy?xX zb68U>u5rfaf6kHbaMQgz-o-PQM?~P8R-TkU{h&F(8uWkdxe~x7_%r-~G9G@;{|vpg zx1bZSw@@>1w6(A``&Y*`L>|F*U`Y(}(>)(|&z{A@;f*s!Bt}u5w_ufiuv+#$@w_mN0H=LYh7otPr9HDAbD9+{G zntXdt`6sU%a}&>^?Uuu_r2eYI}Z0NlmjqBv2#uGb7Y{r7CO!Qt^8?l4g8I9LW zEVTHYl^&7BV5G&u?s03?kUvwzZ5nS#?K|3^dX`&CLU7HiLPT0Nk4Qt>Zrf8_FDj** zS-j;1A@N|bDrI%fL1JVxHkzj?$+MQQbIfAEd9We(JHoTFv;blRCMIr5p?bBL0PfX- z9KHnpRX4iS0Opqk`tM-!B#U&!D`re|Ok6Zrq15`KxuN(*2k*h4(VY1ik%e7_(98Ua zi{wAGs7F?s#Du;8a3!6Cbi(nIjANxH80BQcF*r%$zCg(!2F?WF9RS(R3t9lqsOn|~ z+@Jb{NR=c2f%XVM8(KU5E#CeIv`x7$sUV(?5(Jiz(`6g?`S`GJ>7jf*f) z%mpy~o0m$+%OD}tbfHD}LXr3%wA{(GbO%*3!1W$kfP%M!`x@%Q>^u9}3_UwJZSgg8^GiQ7Q)C z!s_3yz`q~s@G>(8d<-7$9kXTpdU|++)Q1}Zcm)UnVT=T8;|^H5pD+Q^sL2hL5woqN zky|4U=!ZAlpv+J#qBLnK$wuO93F8qcTLvSkcX!~jc09*vRyX1#>d-JEO6~WI0@L!@ z^s;?MwsFC%Wv7sQ-Pze|5YcZcB- z1xw(EId!@IPvG2tmK~zkMHC@^UOnCqK=*$J=l*j8HU?%U!UoO;0)|e`js`~mfrFC= zb;bI*15l%B15>bn78c*#1$3xJ+o;&u#zZEjc=&IW;}7Xi2FN}$=0E=U^?d@xi*ZK7 zg9$kiUD`lY|ldB=WKnHVzjzY&_RA1liv)9PG zCf3F1buiw^2l&=nB7xprGz;3UOp-d>V3|h9DXvzfDtMZ=D?dgF<)Dz8jceDzr~W{8 zRte>*YK0bB5)}-d94Ty;%-|^Jngpz(IFg82*(c%4_xnASBsCYeMwB}HJL$Rz}!q6 zs_Zll5!O8VzFE7ccRc9k^~V?76)hkj;RfIqGf_oIT89%^+hu^vCeqGv7wjZcYJGA030p;+uBcZxVrpt|Q}kftBs0a03=&8qYGnpC zJa5Nk2DY;TfiDKk*g&82-4MJHE16HwPGGC~21H^zn$JPLM8FhAh^qp5BhJ46lV$w_ z>O&Bv0P_5?ET5lv@;?JC|FdNY+1c1zo4Eh$an&S*IBrU!hs;7n86OwL#~c*kZ|>mM41&CGomOq|jNCPG?fb!PCG z;WgMyl9sc7(tYNQZp~R=A~tQ)u~F7*vAMLS?JDLy%aEy4S80e|*4vtw7HOH@-`1)C zpk+Sm5y-=87-0&WS!^%Ophhc9_ezU7Vakn8%x$4qUVL2hQC^l_!w;v9&UfQ-8O&9W zW`t1_{Rs5AbqH=_w?Sa0Q3UMXm#Vo3rlH%Tn}CM-XXBGks*@IVo=I0g9QJ-;fsCY~ zPk)^7zLkhJVP-{~ooN;OM8!@Phq@X@=Wi|R<*@Bm_KL71NEKEWah|Bo-t0iAAs3(v zi9ir329rld(nlxY8;XP%6+l2TBf->Jkb)3ZMe)&}(`T8Y3rsp5?8U%xVRjupYn~zX z*y%Y~f`}*)-PIDDyXOdS1wsJE%MVb2%MV0>=LhDali-ts(t|-l`8Ng(u;Bv>)#3kw z=?najHlJ*l{UFOHjDS$ArHpX|0M3O)DF^w1t1jbz5Qii3L6%a7v+z0~A}Ry0JcI); zPgs#NZDAs`OzX4}1>)4Yl2tZH)i34_F?X3}>M%{$-mQNqM{$zlmx~4Ejaa}V=yBa5 zE~q6xT(K-^K~TEokHGZhQ zK5&tDUv?MhMdNFM@C#IJepO}QlUQy^JlVt^k(R8q6Plwf6N7HE==LP*V$hrmxtw(?ZNW!$u}lc-1XFWCt;tqT094&(5rzE$45&;|5)mn3Gb z%W|6R)2x-o9L4y3=|XK`ki$mwL`4>gWIEcyg z>C!;+=B2hpz_i~O;@VdksZ#I*kW{UZ^{V)B

      J=L~v4CiIkKqFdPUf+OVF_JMU9W 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 PSlh697fl61Wb^{WM$w8rpc;) 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

      } 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ⅈ_bIv)wLK3y&nKRrU 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∈GN)zT#{tJrq43&5ig|x8;jaD0Qg1a-` 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

      k*?bq>?Vg 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�gz~0K?Gu*;69m_Kx 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%0D!K=ffT&0F3@)7{v)2bP`dQY_;SoV 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 noz?)n5o}6-+XfwnnnTT{ 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�u+|?%PE>2x1Y22HMr_yvIND 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

    1. Lx3;0ZXuv9l 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

      U0K-YV-jsQ?na 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%0AM^N?!-jPlc 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 z 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

      fq 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 z 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%0At=ZHitN2z-ryLu0Uh)&)98bNN_&^ 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

      F(lOU0uj+!~u%#@`S8_V(NMY}Urp0Y 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

      ^3|h=}P*QM~dVO2e`}QFC7CYm7 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.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

      mb=!%ZE!PsSh?+&G>$1#@26vRvW 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

      e~C3|u&%{f+)B7U6qyZrC=IpVZ)d_a8X( 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 z z=Le3^#&hdPVyz8Fk`8;Ok7CK~y=Pb)Gxs)UxOGV8COiIWwTQ2GINaFRe*} zO37QloBB|L5Nk?MfCB0KKv8ATV6C~Eyh2^w)3^u*QF63FTxLVWkzLyfHfMj`=wSLJ zYmw}SFbR^NrJ{7qU2F-jt&sN97iy=LGAehg{~=CF`(p-QV}l&_lfDU>;A?2*zjtKLm~tyj71-AnT0V2VC6?Wh5Dq*oK}uk=@{;w+@JRO@-kj2qKi)!y{{kOf10FyfKb_`*if5-N|9c z8Y1et)sba!9Ljkw=TvU%S^&>(M$*A*WgFy7G_=-nTQdkNdjqzKIYU4$%{v5K>Ql`I z$hFYq;dOLz!*x6Ejr>EUmIK`Ee9G`fMGlW5Ss6~5_K3lYKiap3Nq_CP1T&>hBjvfD zh}bbv*1U0DTl2sP1Gn~XUgSoM7*)poF@rz#R^U&IRjk~Ggo;UT0xV9uf6aWUotTFwaf+1b|wc7q5j1MjzyQ#ZR zdy&_U-d79wf!cT5_xtcqY1$Uj+H8}3@!U;3BMn0k+^R$Bag0}7Qk$~_8p;H6jHo@-?;$fPQ6|C~ zJC6DRoUpEe-AWH?#oM+pSJmc&i{p{7x7GM{b&L}B)BB-k~fMNx=E26}2_D7&QTw`u0kut-=fTY)y`w+9ThM1~Sn;TK0A(5wN5!wb_@9E!L-uD|k<2<<~vS zD~{HiQQ24F*;-v!xZhJFd#4-AOUuJ0xk@@ZvedL@g8d81zJ-|+gQW+=QxO0UB_)Ga zG~b&hX4~(EBx;?7!3q$?!lOt4QiINhd~j*_;rAseF$_ro=VD{z%sKm^2z-ouCuI8f z6!Vuwv|yo&@_hBA?VKwUZdi1fuKP9xo8wG{h~XKTLJYQBp?{;n2T%361(R6nGgxtl z4M%?BzT1FZML(uKvUJmQ@2LtpIAr@?p>#t!r_JEd>GqHN5^JYzU#*93r*7|x?@)JG zefMJZZ%hBUF-0wWr1u7a`@kN3iuQf*)V)}G8GiY{O!2*?zOj8Xd>{Lcbh^LK;*phhUb+=l&6CG-c)6C?$BV=&W-MFt8Q88b(WI>?_R_R#iM+5Kzp9iZ=4Cub-t-XXL)pP%u!n znL@3bL9L;xWp;Cd>qz&K{@1;adrSyb*bu8lEWtUQwzXz1S@@1*Q&%?lE{d>VHJus* z2isd{z@o4vD8;5}quiTV6K83DEt)5uQzLsh7~M<9&ykgErO05mhd~ADMFa82Rakc0 z%2}mVe7hR=LPD992RLeJ@?yHn&nuU7UK6AI$A$Tm2(}K)0$#xZ(#F=Nz{JqO8@nlN zKne`CZnBOs+1QwB^lH*awPr)p{SKU~ZgFB1u#!J`s16lWsZu;RKB5{Cwnb8+Qu;Wa zvPx1#W4U9ZgEOjTzFD}RMBZEa_v*QaWmw4XLAO54AGa*=XsDy;mJu_nB75Q1AJ;HT zFLrJ~x=fz6#f&nE6(b*gnR#W)jFQYOc?F<1gfLU6ST+F!2xeTdOpgcAjHjK298w zpe6Z*$nRO1R=oci`{cSf6N6^5iSM~O@*qB!d6S;EF=4O{uly>^N;l;PyQdL26c4{o z1WOb*0eG{?{kzUr+eEf>H6-iQpSQMRyRt~GGTfyt@06D-L96)=EkB2FGaf3x)#gAp z>D98@pK?IJZl(w;9ecC_k0O9`Y?VNRP!SC>Oyfu%kN<9GJd3G7;-C?bhTax~rA#ea zhGN|0ie&4tB`)&5P<63Riq7D5>$~KN75JvT+)9ySG&DMDehew(wy%G?GpEwbQQd(~ zkMnQ(GrPjte(LjkArTtcW*8q1oI~kn8voiGtJR9QDX{mjqChwOZ$veJEa%z4#N%wO z{%Nkv^heSIb{jVq&@8~MHKOs#ut*sVptSC3E0Yft``fji)~C1-zhLBZy@pK5;PNVv zm)vF()JyWoFJ%ThU!8RaUebHdw2DL%loE>K@oR`7Tth%Ly;|y-a9ztG_vWSJv-hi+PeLc#Pk_DAbmuypO>WUs!ko(iU7=FhBQKO#IHY0E=@AxiFz zP9EF{*^9nGP8P5JGp%F83$AyC4j!59rLUDi_G4@r9!Om-G4+6gx-(geN+SSrDrEMd|E%<3KwrDPqRjhaArz!bz zLT}-XDPD$*v_qOg2SyNay0Z%ZGXEhWrvVGif9cBSVzSvBT6s~!q6kV-FC;6dI!IPY zJo1wtU13B13$BWLB#vb3{ydSOh7q)Lc|Aj(kZRZ(Rk0ycp!TDEw1K1vO-BUN*GQ%C zn^VS2PKaUgf*MHVJI4ZUIi(RhG*vn9QJ??VOt7J!8y8%eCLzZ=70f3SEoU)^j$LHw zuA%^rE;WuB8&o*XnNlE2OV;h9eSbm8#Yb*XcMp~tZ500q*OJ!SVc|aV?7R7{NLepl zP4lfVEoii+m_-YiC8SK!z5ne0Q1*`9m4#8dc5K_W?Nn^r&WGS-8{bjBFtU2%dx@03{vzAD9Lh3Y`o5!7U4$vz!mFM4_%JoPcy6F>c zc9A{;Ukr-Ofd7goy6oM!v@JK%O~ppzhh4d&2ytcXz_9X6Goj&`{hUoB3JKJ<>Ybro zxCfS{AAdDOYvsxrsh8z!LZ@9y)pkwijarW~4V)RO8wfI-&k``%V-L)rkN?0Y*&{$& z(Kj3nF)f*JU|xexPqTWhABanYD)Z9IuFfS7VDsZ7*`UQ%5ZhS5K zI&?6yAu2bKy3NSLB}g!W?#^ILI#&OqDUAeIT+Ss)BZGn#q!RcPdbEoovf#edS-x^g zm1>6qWP~aF3jXpnTzD7~FaqTuO{LZh&?-}QOSB<>%|25M={T^9n6aNC&e54D63mAm zlMpEIpj1^*r+*L?M12a5_PR?U+ zy|{qld$@C{^nQ@p;bS`EY>_}GnelUw#?Eci&|c1miCE%b=w|1=YL#HMRcNRvGZz#A!ycD>H(Bw;K`@&D&*^iPfHE zD*Tw!9q7`UTQg?S#?vQ#N3FBXMG zYz{GE_c>;dT^SDLSI!wit|=g=hbST@{&WXTkeNNy3a6e6WW1bGfK`?-<_q6=fml5T z2t$~&j^9-EaAVPOSP&-FTQ)j8tAqiXCd`^&EJ5IWbRvX!Z}DY?`|;?7Dw7hV2b)nQ zqU^wx&xWZCHW#8;|B5POr!k)muY;y&$;jxYE>_0;fz~`VhXwTes5%P3^9iydvP6fC z-$H2-0BGWvvna=b4P>U>IMV1rG#Va zBI0r`h)?HdH{%9kui8j}KhVe^j{JqPHM_QxPqarY`WTo)wt$B1)!aGeJq8rtAqE8f zw3BcB=OVd^{6aZMl}fhs?)k?dN$9mVEE7-Bi~VU^h|e{Bn%Bi|idS_NSiYDU)?xQp zt4&KX3BTO3487u0LoyGug$WXv@+!vI{HO!>pFN>+**yy8154TijN2^@;seCoz1eP@ zShM?pIdDfmE4Sa1)uT%Y+=v@3A>@FD5EsUdNK0f>rV=Sq?*M01VG{}{u$7G1OXFPM zM*sHcF}`uP1mQO0Mz!^4Lb8p{4h)t!F%*)#DR0I)uZ!=89cxtQ93umm15-nQnx3q3 zY|d8drX1DZ-1NnX<&li!spi7CvYiRdF=fNhO{401&l`$kO=56@qH4_~__CaMR0f{g zhR>VQKS3_cfsVUVqOUN_z0$g8nnk8ohgocQ^vd2@8{T0h-f8IGjO#?oa8J#M%vp}T zRf<@eM+&0EbA-ad94j()891d6KED1^q*}h?ae?dyZ7{3TK*C<(e?Ht9nX~48`!Se-U&;3i z4DPJq5I;kAjPH5-gN`5O-3I#)XbWKx`C0*c=Z4)oz`pcH$<% zl{d?p*04BZ<56BihDc zrWCa@EMOO=I z(b8FT*AZDC@^$Lu0_Xt%xhk;PrQR6ByB=_0XA&`R`AQHhk`PN|A{Gf02&rbrlZqHJ zu(*drt&>c#i9f(+YK9bw+Elo;38?F&1U||ldjMPA6xMcH!-w$b119!>KDVauB27zT z3iCO?KE)(i2A#wN8n=FF0;n#^G$0bIe0k1z#QL5_i6b6OMmV`CMF<5W3u}m5nB*f9 zYL0pCLMe92xlST_4g2J&eAg#YKaPvjF?x*@#xamE21Y7F6d4DQf|(X-tVwf(GE^+J zSsYkaZ;=3wqCqw7@*zlr9yv}nqD0Q2WJg|0+?==X zC#U>d2L7@PaW9wNkdavBYjy!kx{=4v>jN%{iD~Kkb45LRW+`MO1H>H4jYT(rbtFnY zMN^r<{EXC^^RC&1y8yJ~peb>S83@;u0y#r0YT7J#+Njz>VA{Ns4$AQbs@}?3JJ)L(= z)YU~Gdbwb8{{}($#peFPakkj;p)dK=qi@VRzGg|(477T~L5Fa_16WNs1)_L|H)qGa`@B@OGmgW<>#Kog&LwCqo3mQPn8mddRElM7R4l2CVyu2vq> zoe60Sr3KJ)j`P^2Jn>QCdI%%zk#k4ea%Z;zSZ^wN^Ts)PNqEPBaj6fa0X2jMB!lqL z@n78{*yi=J5LBj4a9O7La1_(BwU4Rs6L<_s#2+|OMts!B0%5*0ZjP|rc9u{E&zwKE z{qu;|)l4Wa`CNHZ#vxU@sb4G{u~gQez-;NME?@exz?2(S4}G z#oSyvbN$00*NptfJnqzPY%2 zaCHcZc*bIQB4M`3$~ib08FGgY-clSojv5G_)n;lUlz!Pw?CC#s*NjCtA@~T!4y2ky zOx!&tp<1LSVNp`D>d6BFvPT`cb7mYNBqlPlY0MpBvuDU13Dze6ZINKw$LZqXIdQOR zhDyUy*!SHagd7s-i?Qu@4OHZZN>=w8tf1(GUJ)1M`cdk~joV9MJeh(80;yBBz3|+P zqmxq-RE?{mCnOht_G-bw5mo!~;PQGsn|VmhBFc!rJkLW#kW9`>Vn5wnO1@*Z4EY9! zM>G68Aq37>Fix7ncQew7Gs>7_-7^R)9f39)E`<(_27bbu(i1e0T?GMh`h5BKp$QQ( z^#%Q3x4Ka4sIA;T>!{YBtuDv^%hEyI$mB=i@}Iemo@8*x14*>dJ_Kr|A9u?Si(9@j zv`o=~O>1U7Q6@EPPjU(l@`sy>jL`{LVX{cgUjO?Y^!@byuJ-*lhS&#$ntjT~RKi@7 zG!i{pEsx;D^E7QucWN<>-Z-8(+88^VJsK&WpsnE|z1&%h+R{BPs&0g#w=OBa9htz`NQ>QRqSszl;7Y3UsQ1fH{Q1@<##l*ULy@t<%i`y4AF)$e5Mx^N!^ zFcU%&IJL>!Ywp%M2hCyRvA~4z4yy({0nb78tw}OCG1>LIEoT;*;6rvWb6x)c`RRxC=*QWSxDkU3DnC>)2I#5!L>197H*k7fZ`l$YJb+fDUH-q*~-Ou~*r$Ry2JE+l`;!J8b`)JEkG$ECg5B!;eo0*4KFq}l_jEM+WYWb8_zIzy z{B(EkuKep&m9Sh=)ezzHtoU-x?haYRnOo~!GA-rWG_kgM)`*+TIJC5pry{16!7|up zZ9(fs%1pQGmh`YP1T;oEa4JE&x@ARR_Y;Naca!K!D;c{Mj>B*V68qIE^?Oot{F>DZ zvov`%jH{(C+Y+e87-d|ENGLMI&&CGf%W==|3&41$ua?&G4jCytJbshkwW%R+3xO~V z(deN;prL3aBC|@tR7xSQ;5@+rfY*=D>M(nE0%IIjxSbbH1!r_`@r%T010uvblse(+ zefAX#-oyiU)P4F#o}0DIDHaOhC0vpx5FR;jTUcjLdqDi)n{=;X2}Ua!MBX#DZiO04 zc2%IL=wu$xmH9sTM12O!2N!p|zkH&tvR)_2oi>_UN{?~7fTBjW6*9bsyOozG;ndX0 zz52$UcUW^*t%+1iCFWHd+EADl5z;owaizDVwUK}!7WMhWn)BBu%EFnrvdmHJcy=|t zJSzNoGzWZv$v0xSyw8fBE3bD^TW#!2g<4bm8^)=jb_vg;T;T5;iB=huic-cA?QF z#>)=srE)iMNF2ZGRRP7E7t@({0pkndKUuH=Q8G37e`HpLXHK45TTGq8U`?g7Zyd9% zcC%Q6u`mT-z-iwti9=i+E(oD21_2)~(H&78l98b~DleitCbC$9dxuk%;jm_!;Rd?$ zAhG$IB}K!EieJfH)@V5B4fx>4jl%TwnL+y;Q|M1TKc#P&<-fuBPBhn|B0Xwupn!p! zdtBy|4e%#=UD~|EP{*ESz-kuUUVtmlC7_?=_WHk2ST35s=@ki#awz1HN{QR=qO%CY zNkEsxiysqguv3RO$r}_B{gEZr=?xHMLRy*n>k#sx=x+DB)guQaM)aBapKNoi75Y=R z?7~DN>kZyn#4Gc|uzlCD{# zSgFS(9HZuhjQU;bO1B9-q2`pr>RlLo@CKDL2ed$z7|$OI5QzG8vjq9hdLh%{V+JKo zekkPYz(a$XNb`LW{?|98B2GA?*AJ{v z4Do+fx-_wK1Tf00032Qaw=yI}&Bf$k6xGL?GWCcmdd%CL4__rcY1D`dVniK}yy0-t zF@HMRuhpP%dduJ+ExI}28w5cM*vrjzdm4B1^B|A058R%>&dZ?yOau#qX@8^~(Kb4Q z%in<^dzUcDoA+qQW$U&8hV$QZDk7wVPCq{3q`i(Pfpr8UWv(rwTCN>cT)?|s3WHGT>&CNi*@?sq9VF&sG zTJ=#?Y;n$94l$RN#3k|3=nB@*48^16z(Spj!@z3B5q5IoF*uc!FjeabrW4#I!$ryQ zgVc(%h*6A2gX~;2WmDevo`&FxVzZWXKJMPcYz_=4)nZzyLDkJ^V?sGBqdR4E_2ETxNig zG&6he9CTE*R?MV*r(oMbWk>mD@)I3sAdiVGxMYTSq&JK-pKYb3_R4S5*2Fh~uBd-c zJIP-)*19~l)D0fOhnLe_3RO;ReE;;P#;>uhJ_2ewN0y4uGFJu_FLu1A<(A1*tH$PQ z$0O+N_6c2k%yMh>3>~PN%KBd4xh;w;IU3ZNwuY>m}8W%sz!1rUiX)v-u|omjMc9dsHb4t^6Iy}ht0bo+;q zr{_Ocjn{#Kl4*`has>~eU^I{!Vbh{~KtZ{S4i>q~4j#A*4?<@r&xccDpRaj_ireYO zyilKMofAMS?6n7*aLJ2NrFRCaa8d7CLeK4Lg*wg3Fz#|g&mDlv--rP-O1Wd#LAj?q zc*yl%e7wU$+wId=h9;fu#Mkegalh~1V`|Id%)$?i?3Qk_WIswg)Nnv>M3tjssPY@l zpv)4U&i$fHEj&8|b_of!qNQz<`p(WAWrKP zB#Zq5+PfT({hK{qBW4*uk@ntTS3tJdJ9g{xQ8XOjrxD~Jnute4RXp=(*FX4L>*tP% z0O*c*SPiz50cm>_K16sQa3uqEimnf=$$lUTw<4#HGA!a;`eFe zJVfpgOaF5b?yes6cx%=i;f$eP=B0yjrcItGjJySeL&fOzYj_*6;l}Bb5bhhqj!8CT ze|f95hh`D1R4J6JMs1nY=+Ce0kve4?!8W-DxL=RE?zL;(hJFS5f{Y$FBHtLxv=0?? zzokBj;cS309tPf0Ke1a{ApX0C<*1TV|M@3RJo{s+_@DIW|JSSh|Lo)?D~GuLVM6PH z;f1G!k9M2Kww#`x_MXq@Imhc5Q-{gp`0)Q+5>(F6847yOeY}0yvFiiM9-xQCU_etE z7Ngf&JZz-UVC$%yV3(^saUhM$0>j>e!xlO?D`vf#pGOAvAvIwLqy^JrgegkjJyaPW zlPgrZY>1#jz{*jMb!3A(qYBTd0DdWVC_%ijD2+WX^BDXaj~qV-rp`uc`;S=$rDU$+ zyLOO5+~_sn-BB$lLot(s=YlUJyJhreYA#32d z3d8!t!aU$kXY6pr9mhldbvvSC6|+AY?>2aMxYg2KY5LTO!o2V`Dl)Na5L0=L=Yg{{-d~J}r6GvV+%wiigX22ez4zlo=9O+11x|n1*EPY+i$#mu?vghG^XI zB1G};7%e`JK9GO1@k*AyER%XAWa1O+ZgP;xu6~vRXm1<3Q%UIgB^P?@xK=N29o!?F zqffuq{v~5jcnEX01~Vs1bNTy1t1U}oNpuBwj!u>*&kHsMV_1QWxi*o5wH!6{*i&Xu zI$&W$0^M7j<^w77gdX!W?>&L*hOl=7ZbN5b6nnw&ozbs=^CMA#Hb}p5DPgz53y4B_ z@YGbzj?Gm5W1Du|ltO&|#FKGUM@<*>n_uT&-n_n+K3xAXVV5F^A{MM-BnuGEN_BV! zqvUU(@u%K=FEgN_2T%)rGXH<6;C4Q>6-U6?c@CV*na4 zO_>mU48taiy7P38;APKpgu7}oeTZ)!`CMrE@wiG9NsgO}1?!n_^(+h_D<#VG-z$8K znHLL0E%hrHQ-@j!I=5;ltrnsxbX8GoIOf>EaO~DOjU37rmtZkr;Xj2{)k>QvHE%Y` zY0tsSZmMISg{{EVVFU;`Gdrl=^2@P9?gTd|1#p$N0{rt*a$sHdi|j^*!|GepyHfmp zlG@Jk7R^djy}%9Cx@fOECfBCQ6WsrLAwpUMhfVx{z7V1C5e&momaUoPqIdgx|d(jUY zuwU>V4;%1a+)uE-VSaYoT;Z9DLsK5rLfI05Y;pRJcOkxzE|Bm6;QDCd4kYsq3#ZNG z5uPRrX+`U6^eu`R&22cXk8cf?Y9MtZ+rPQJ0>8KB&tyOzVk)f~^}QP;o+?te*`RbF zDCY--||#>0`ZMsd8LLTpZ1U*5b*g+Ei!5Q9;@` zqM<=(MVM>$#;q#p`CjNJ(|H`pF68(i*UyPz-M=!~Q)cxp6yt)7}^^277qIz(yWptJ$#whyL- zTJ}s#LZ0sNeXClrUrmEZ7L-NP#*^ej&-k|LPU1b`c-eUL?FEud%n`r5Bvu*3SvKapk>KRIQ4^Fn^x3fl^r|=&K2VAFJ zI#B-MVho@8hmb*rxcmPme>Nr*%3(Jklix25(jeC#Vu!4g=?>r|-yZz)A57JNqoi?F zW87Am?l3pBl7Es zvRp#OBkUMjVrOMXa`I+6Y1b_Hka|@(DQZu{BrQ#ctX^|=`&=C=V|DHrs4+h(A>%1T z$8$Lu4HL9NSOn(=D(q*gS}HqlE!3#5+bXLhb7u!z5Ew!`c69oBmw5%#qHp0rzU++S z9AE(;(c0k@6`8A8e}Ea6(@u2T!F!>I4XJzl{?egKE0HeLRq&j?{{i=sX{8D?`8?AS zy}2Ko^$WF3NrwY0NR(ZwGP(@Blcf(D4@0K`It!StUt68fAHb(eR1eyZcUjCH1NPqc zZby3LUn21%57Alq`eB3<{As;fUv)GC=O)Mso8W1T;`-}iHOK6)N)YX}g% z>m8&E!{iT%rVMsonU3=FpA@&O2EcmL;|_!&!a3l?#HWe!C2?UrmqWcK;`Qg6)J(_ke2T> zvib*rDJ!2y$?8#9n&uvAbuTw-p|pA@ghM|XDU0HLlCjng8BC`3pu1>z3c1fk9upto6r;liEwgH+bX#UvE7Vs5NsS5KOy*JN)Pdz(2Il4cYX= zp1X3kP^aWTxjiVt;9BXOK1*n(o(0Qdp4*7vztmXo-X3^n|3i^0--$%F zh_$Zf884k(HDXKjjKS5W@$C_|Eq3-qb~92E=lgpf1q8@E;9*HO9c&mu7B~@@9G8qR zoX8%VeD3+{zZtzCG$mcBekSzr5dX6Yy$!(J$i#zD+|JI~-qG@Zqb{?RLmcsm(fEgR zWw-wR%~d~8+p*^p<%2kXAFNKZbRnsW`?4(9%~eqzk2Ws zcmg-(7s+XQu`)}6`|cD!!&$?W4St`*eEq0TEeF)O`NO{s9Wa-!fEg%l=`Hh=abC0i zP$^0aMsN%lJEeh`&jqbA`3|!2RPRz{mhj*ad62z&)l+2yvD~bC!p&?R>NM_U&uktj z5OkR9Dz(7Ui%9L4DYlPw+S2FRc2|z0YkzzmRyk21yH$zGw+p<3RtAm>$ zA%?P+ydI2Q0Vnb7mtwPZEBH|6{8n{&1Nkp{ySf6ZbaLkt_gB^R&a2iHKT8(00s8w9 zLOE~wO?^)6`iVt+>_%Ws62{)PIQ7UvqH^R=Nox`9XBlJFIXN__)SxU|0 z6C1<~qxQQ%h3^7^Gle7lxPkKyaf^qmntTdtGsRgGE1ByCzs_5(aAZ@%aDd`{0Eq{t zHDt*%6^+1CsX6?L-CI*Yiyedk{0?)}NHWL?Th5y6f_7T9TgjyW`x)~e0co$mSC{rNC zobc!-4SiEBR$o#_!=y_@694PJbsndo(W>uZfq*&*{x9~c|13TK=d&l_XlbenaCa8A zu`{t21^j%u7&!w>|5r_iElx~*L=X)e_DTe@jkq;LK=frGo7)D=ZEg4Z+FlbL*B>#& zIdRfw`{wH5184j&SxozszA)m~LLO7Up)jS0F&9&z7n`q%Y;;saFarg=tXOHr0%ujG z%1jjo2|t}Uh)m^CzjSdb+u}^6CTpv$%}}9SRIBQrfE>wCy#~y6#>;XDh2mUQJg)Eg zSEWH_%1RXnvt3;mCHIFfgO%ZuT3WX*gss;;m+sx!;P-LRxP2);udKBG3(O0(0SfMg z;2rI(jGj?^f`JJ`TCNi}YtV~G-}$VwsYhFi49bb@1HRF^UAJ3AdpF*#r+CCN9@Z+& z#4i4e*^=1l>9P7aR){3VeRC6E-TvCGFErbK-<+P|Gv;PdjQ_8@)wu+U?O zjN^YBs|YOHtTn?H#D$Hdd2^%B14!U%-f!fFaw9v1`v}&p(g?XKtBxDbJy)*opOagh zJ9UpFy$se)bA?QdxO#tY4O%_Wb&Mfm43REuDmF-4k5OEmS-|c=RH#mR!$diyRP4 zD_hyN2)pxJN1nw>{@A-O`;n=?lxFqjlZR#<9LredSXHT zU{S*8@az6a@S3?ExwG0YwURfWTCMpnJL@{v@Zgn04QlNy217x~H4=lINvi#{D%sTt zvR2gI+@6x~0N4OJfQM)fJ9p`*TsZ$12t5*y+r^Zz7}}! zwcoSxL`2033a*noUD%kGSF~Z%8KHED5yg7qNo!GM5AwvFes+IF!mHjWXPK^=ntn1# z4TPuKb=;A0E^OKdQFDlAAIW?#Uheqb1YRx)6u!KMYJMxO(BP9gwN4JE9r0o2;n=mA z%Alz!%ept0ULI#RDitq@ZZ26y(nsYZo<>9IYUk2a3E+K2n_rpK(+=)?Xtib|UREa& zTZt`4mziIfNW8hmp_`&;soIbcQ~x6_qIXG2X^Ci$r%H7?vlQM{Y$Hl0XVt1is;7ZQQ+EB{kzzV*)Hs@OjSRgwx1F0en!J;EN4+KTxj7WEH`>?fFp+A{m{{29J=N3J=#>+QmKQ`=K+ zqqzUcw&g4naUbh`tL^u4H`oRB9uLmSuPg&S3t^A|?EjP8HSs37rT&Hbie~`j9Z?5H z&>sY1aDW>C$~A7a#1_@x#zl9FkATWSxZsTWN+1CB5&jMP5uE4rDz>ZfL2=vV@c~&R zPlU2ONEsXs){^OupoIHF5v7K4huDTJ*HeT%a!kfl&6gL#ePxDzSYvjkThdOgFLiFg zs1u=$5~NnfD$dl$fh}G+2LcaIJu2reo zzcnyoBdsMFQWEDgLmqP1_vZFE^JzVDj+tSk`g1#QCu?|Nf7KFc*^yC`3?PI4J5l!a zOcWpbk3oTQ;c&~N$%He#ad@JB(NmY^85yRbG^f`Z?T$NlwZwRJVLr=B;QZo(m3vkV zFuX;Wd6zI#FVz@fTEX(2h6DFZHiNQa%dX2PD#It;9uiYZv>j6chhf^$jrO-XMU&;n zfu)va?^Y>G(U#c$!0WOudEZQkDgF$f2s_j)t-CogtrMr@l(gY4JM={VcZS5-ro8ai zk+@?e$bxya~CZQ&=-*PQP<{frR*(nXph;6VGzYoS%wa@D$44(C(_LE;g<+m!ex*F9__O z^iG~}%2(=sT?>m{Ng%NPHUTuOdTU&#ajIMkZw;K#@Vm{pk@XJgWux++nPV%7AfGJA zq$uxpiB+7SlE2Z(TG>HP4bXzLv;Af^z(%zG7&b!@W_b`s=H534Uf-4PKrlpb#^H11 zKz^=z7y}8UT3BDh$^p?w4A_}U;4z_<1ff3@4=gh?i_yJ|`+KH`@rLQ`cgvfG6Mn>@ zsc5SW=7KMSU$&Qf81bN~yAe}4`%ZO-Y*Hj@>MY|l1>Kpys{wV>_^DpDW<{b% zjNTD*W}IG7=`>W&j^MreeG11m6b-?jg}M=h@fR?3yQyfi^m1IemtOHA={QSt**DOp zv#$Y#0PLLwyH81kKPHu9$msrd_Dm~?trUab2MY+^waChCF`cYGQf3eNN!4+v8KP=H zO@KFX-XdSQu}282suQ>Y{N_cC(goF%<8tQwhN15=&c;YR78%-?uD?#ae<~? zRQC6-#BaNVi0pED;!0i=1jNYv&CE?YG-V7a!l0o{-UcM%G#Tx=7r@U518C*uIckkVY<=(lh=ZM7=J1ZC3i-ubd z10AcRBYfKf3OwP73s*IS&Et_*fyGe23AMQcguB%P`6++GQ{)Rj!=@vLv}yW;7fvjL zgd`0FmCyC%RnjbNuKw=3->iCVLUE1rv6o7N;|!FKZ1$HgE}$Q4p5NwIK9C;Q#p8O@ z$$!nK+9!Q*c1Z9do2^tiD2|#_PfD1MExkk4UmOjZQdu>3jBr?;I~@Hs?=Wwn{Npn5 z32W;ivICP!cfw(3p?X|6S4U3C9#crETO#~S7oW%F(yM=!;$4|;Lb0CfAGVN9(^X_H z2XHH=^qHqh{f*mFqNtqMC~_9-Rqr#89cXt)>Tp6aMyF*TpU~UBq0X9)m^!y>!_#$` zMmBpNqj7=$-9O~cC){6z<`F%?H_Ml6O0Ce4Sq8qyeD~fSEkEfJ`H;OQHhXWaWH*(G z*pW^^mPB4#-_htPfOt!kTWv5XVlzfLR)y116kjqfARQOimNh0ZU(F;llo#{>%3VRN zCi&t?_n1yrl4|*xkm^tt0iMn`O)6(c!*%E{Vl-1rri$afr_-LJYHh3eP!k|atnxNh zrHhQol7f5;Zwk8sVYC2m@Q+-7p|(RzryYQ@iLiPp?3y0EEk5>Pf(`udB{CbrckqKb zAM`Nbq~1LjK|fzcQSO-h_?G3fTR6t3_5`!~B+VvuUEX&{$hQpmn#2$RK!A?gD5_gz z%?yesZG?~Fl-oZqJ+vrI+;+HGhx@lQ=!vgFr#Xt9k9=~CinRL%s>ZsS@b)o*ZzBB` zK9#{b_ZSNYf6Z_b{2Z#q({~OesjuPIq< zUWo2spc8fK2dbJ-gkvP>vO)#E;-8SFs6zM@Jd%gUIx<)mhkfrcHOIUETiZQsqFW~A zr9JyaYXq|Th}8AIVfQ0>=uP!2`~5XAOp0p^>I5+J(AYYVw-{UAn3iNSlBl=pAe~Ha zZSIuG%C$9VIveTO5eJ=(dbB_c5p}m2l$OP2ge9l>XT8jZZKPNIzzf66{T`;Tl;+nY zY|w-ML`dF$Yx%n-Jc;T3tUQ{K|1b9W|DR6^70ciDHvgIU$yNvV+7d_d!R6wvoZLd3 zyvhL`HRfX0i!lmqXB;v}O8e-3j6aXT22ikLpQFz((cF>bdri$;f%-iJByXFYh2@n16 zZo^$MP)2O`45OqWbaM-Qs9-CpLAKVB5++wMnZrB5lHN5GS+2w``ds@C{uLIs27%ar z%krW0QhE@`aUFB^-;>uXq|LuY?MU+$8L%Z=!U{TcYd8*7xaIK>Lt_owT?HYGsh%Xn zyp!WRO*@Q;nmgRG$CM2ea5*b7WwBh@GnMSiI2^}})}^d$Rc*=kJMBC9g(ON@ENuu*^l7jN z^a;U&#Qr@87erFQk1(m*c4s_|8sWg3Y9zY{*)}yai|fS*9I`_iC}`=3FAM@@H$I@j}+F84Si z9ZuVu_L#qSQ9z-dMe&cRL=Dy$=*0Bt*eD zp@n9R12Tx+9vsPHQNKm0wqoAzfUpRLA-0OMFa^Jtzk$*X*F&#}Mu5t{cigm?Ivm)H zUNin~pyxW1Y2iWC%-UR}|C_!XA~Q(ONMfA+CJNabv{&ClE9L4VxkVjhTHD5H3b`qF z>w5QqtPBo=-~gjnt-oW<-lg3daV!b>g1aH@H)5TSfXKA)l$w{w^=$icT_(_EZDoVW!Z?{n}WH=)i4tbLG07z1m>B%1BO zG(CTkOoK%%$MP-RC|m29d8~)-7Ha7u?=RmNSY5papC<7@djY;_I2u2mX*&M6ADKAT zVA(86k@(2jF7oJl0A#n7p4Sf^Wab;&93%`*foTGXK}8VyhLFctw(Fcwy0+@ec=9vn z(T;2Zjs;b2mD2sSe?H^-Is3MfWEA~^QX(ckHhy;QjK^pO@d>e-liYh32;t{ihQyB0 zG;|6a3*A=GZ&G%I-N+{*Tp)_gXm5{YxO!h~|2^uoQYvt(7_I3)N8+Dg+o>QXDGrsA zZH{beihPeLs43ngj9H~SjU!hS);>!zygpG+h1CE>ieV%QgwF;#ofC`H1oc1%1tPtN z3ThiZ?U&P9w_cw<(M;u?p5d0oQ+CzutcTC$$V2Av`SGy%_$5a=VFiU6LiB`itE8_2@{B?dDZ^jV=LdK2QHS#O6 zccdzq0;{B)&20c~H9V&%$KeL;ErQSExU5w}0c_p7U31k}KAp-Nq#9b+I{wV5j|Cf& zx0u5nt#lOqWKK%F)lfID^)V?_2i2i*kuZa$!hVjPJn^J`nn#W=C5}kFFDXHg=6;uK`PE61dD}@$UgrP}-R7&a=Oe&YJ zV zD=As&n?L^aE0Rh^tJ^NV&9~f4(8+_yXbfY0CQKj@(X;13vF|d11=_c0Ux;R0G!f%< z^I#=LD4^G67Bgoi28w8@(r!Z*pi{Qrq8ZGY=}(p>v*Q5$t`MLox(&jqSai~$^f?;q zUwYM1@MEREb`if#!t_2jRaD+PdF}CdVxzrdMX(iR-_X1ydDPd+V@Az$xusn+O@h3QY2%jmb67=p)zVmPV&`rfNtv)zhrXsSK4a zXz^o;Hb}bUzdi&PBiZV;blkGnqN%7O={A#q_jn|to0wR{8onl8{_ChRSgb(9oIWQH zW0$SK)4aHSL($ zXLbNBh4ffbB~Kx#A$JD$sloA`BA>Y-MS6a>4|K+5q+#C_!MisMwohO=UWObinotCW z6+}_;Yj7f*1GK1|iiTXyy{JL<-Z@IUV0!I$Ne>Iig_5*;8{YMMV6`(nLx9f!^#fe8 z_e_r#J*CB=Ji}1X^>sUi9=bawUd&DpAXEkdu*4EJ-_U>9PC1-DPm$J31r_2?o~a-; zx5h?kk*eW%`~9emr+a;NWFK+3co&>iCXb$NgR{iPE%yaJGZn~4_qrHZNB6oJXm=`% zaFiVAJ{>D|XCxl)7>)w$RlW}|XsaYFH^LVa98VQ0!nC50i3moA8eSfWq#d-D#p_fO z#DvtLFuYnl#KYoDf+xS|Q$ad&h_u&@U&U}!kek6tIj=(BrX_$e-c1tpV!xo{I=vM+ zfcly`0O~%z+wjj0b_$FVq! zScfod#JKe2z_44fv#t)YU70S28AAUavfHwGavHG?CZwJ9Q1a2ARd6`8~%Zrzz$ zA*4YkIP=$vMGi)1VcQPWVAz_pR?~97I3M0 zh%s%&L1Gbz{+Tv*{tH86w{9RU2Li*Qc1@*eG5fU;+S)z zCXzHKrksSB;szINvOt4t^iY{1H(A(&sjB~QcCiq6Z;N65dnrR+L!}pLCUnQX;+RKz zi6ofFMzT|S3Aj&T{*Ix`&k_ixKq;R2- zCvrk0kQH7A$ZauJtSrV$BLym+bDBSwy#BU06})1KQ;)H}rLPZ!TX{#=mSPxfj<>1r zDj{uQL-}Ff0FA20u@h?sWhQ^-miA{e+qV?cs3#{dGrBbWPYT$-Ji_0?K$ z($1pEu$Gw(KtqD8Bkwka)(I^ytq?R8{Mm&?SXflzJ#lfKYCJ%glOmC9*+S@1B)dnB9u@#Hiaus%lHVCtJMO(%;%rFwd(p!%w7rx>`eJ8& zc8_tme42>bGreMB6fiqx;)=`oIoLyZOUyr{&ZV$1VyU8sw*sk>)MXWNm$qM|nl^8- z=Zu!;Vd2D@lPn==poC-OVAFJ}$RTv{*b3|gEWX4yDG_L;sg~4ew4zhPFe5B?gUu`v zSN>BlhA8y?Ou75GD$x>7K#8DdheQ;POyDIJ5Mhld>9~ARYSj=i(G&#=nEwH}CpjO-Am%+MHHw7+^}kuHe{SwLg+@TC5vnj7{wP0nmQSqDf^ zvwK_p8CXFI5bajdsmmihMrRouh2CvcJC{ zd#a{(;Q};D)?8Y2Y0~7rs;kwV2nDoL?-N_}C*O(sXw`&2xP{^ez%sX5(vbk?`mJy* z5;$jVWE{Pr7N{5;5*}Od-GaNjyL)hl#@*fBU4y&3ySo!40WMpr?m7G6);?9YAG*5gf9-$HvF4g%e0n95 zyVxS+s(HWIN%}#0jp`-BGg!;C_qRLhXuxzi7DQlM;1ryWcR~1zf56t!Sq#fp++N%}Y0sYFVLg_HmBiy|&Yy;Ijtq^= zamHgO4lH{JEC=Y6+VJt#sBw3Hnw6d;>m$o@?S8Yir5F^bg&PdzUmqkl5y1U1`F}NAI2dL{m&`nn{UCt6-lOGX+ zu`F-DT{fox(t4fSHt|>;b|7%{_gDOE3yyY3BpCJ5iXS_r+XlJ3l(>)(c9S$g18jdX z#XDN+r*ehw?>CC`Ur;4c9__852uszoE;U=mtkXv%>Q0QF^M zxkwteaH}&5CnBD=NNM^G2p$r7$T;DW`$f;9fe~Mc6L-`u7kNUy()IMWXM6iEh;i5} z05uMCo5&ieTC-ya+R9>-mIAkVZ}mN6Je8u>gr(-CJ>96THH4!`J%uet)Y+tB(JwdeC+L6HnXGZ=? zRJebe1^zZ$?1!i!X|ZK^=}8;i?Q~1AZB*CKb>ES#5?(Zh?^&P{(*{U=}{ zUM?Qe#MJg%a@u-RQ5B!q8(4=&K8vG{y#8lEAw;%v4F*t_TFS@=EiTU3Lq8RRVE&XrDmQ!G{pXWDdDCA7yyl3;#hHPxyV(s z+f@?rd8Li2Bqrp!sl1LZYNI@SNvAz@FmpeZrHUjUgjL=s(`Obv8h{;j)rW6{IY?pT zfOohSPVD^N!yS=)9f!p1QdcnBl!~QIvP_Jls&lw7=`+sZ*p%B9z=?!Osyl06*5D=) zPFp;lt2wVnd$n3+xWa9;#x*Ic;y~ZVG9A!AE+RZVL4?dgI!|*)xC}#o@7O~*waF>U z1wo22&B#pV>^#L{)k>(LZOTJM2$}!XNhR5LH}W%;3;MA0kdqXk86lG9ymU}a6S@F; zQT_Hb{KzuFUqmR~KfmgHC8 zB2Ky`yi4maq3H?-KaA+uy!(wcYe>vuT1CX%9u&$+y4@~+xVMGiz&TWk{FQHzDZ)0W zvivzHTn@-`6csS|E1VSjJ@L6_@SGpL@-=2_EZ~NI+8Yk>d;B9GG@i$0=B3VFpyB&3 zLRqr)x8@9D!j0=H5n1jKv`3vgR0h$BdnJ9obB~+|Q8l-=oxxBtO){4AlEc1<`ob+C z=zG5BFa6!U$Gt4$)1|v$d_@LWKdn|m-f+`vm4umrxO@o0gJvvVm^nsYS$V}Lm6Acz z`|#9VrMptk^`M%a3hJ)n-ScM<$Zk&yka0vF^4B`0RjcrC0w{a&#>Pu*PzIsJUaOyg zr(~C26lY1Ljh7|TK)JtlL+=+O0&C^~6#`nSv3d0+obs&>!gl`?>t8Vbg&R^%F28S9 zpJ}e;yJpXAAibRwT%TaO(&r}7_D&1n&zXcu*dJ~L&)O8QvzIx5%#-50jhHkIQ)Mca z7^tb?9#f8Eqd~%4xG5wBNNEXIv4epF9PjpC`?_W#|D)^zWm6~2>Dbb%Uqx)DiynJw z^3bJuB&)Mk0VSC}n!YJp`(mUbSi0s!8+vlLXo9o9$R)osd`dcG7sJVLgoXCSEvKxC zu`EE6b_wm`izJ6+J70l(-V9#zpgmDtN^7uh&AjWlRYxo+;gz=3o5(m)VL_B zo>#Q-8D?7sDO&yeW5;7y8;*NXiQb71G8I-fGAWc~;7?msDB)J^+XJ*(b)Q>Fl^L<* zhwN(K^|mppZ#YYio6OJ%b_W2A(J#Z*>c0RnCMkKI&S&PCXx^QMvJG4JmZw^2h#mBT zz!Wdq7wu{L+ALjnsnak`LCd74?KNVq#TSz6rV#AkeZ-$W1C)K8RSM8Xib^^A1N1otxGOc3mzNW zx@JkL5lNnJn$7#fg|X1N`c;*cU}qU|;K=c;Dcef!J5S0!;GzDzV2FyIUweqE#K5d& ziiUd?;}kxFmKB1OWC}tHe?|+n9i9^=14AJ=;DQ^C80+AMYYB(zzEIdh30T6xig|lF zI!FFY{v ziSGs7mL?Ib$_Bd18@dY8fPak!<&~SQ^h9~~5$i&jT>vO&h>+bkFUV!w;{_Gm<#cc) z{afU1kbaxMMv}-rU>Ao6kMf$-g1kt{K=N>PBTC_uthAHH`E?e|0O99u8}*U!wzht@ z8te2d8f6aAX{;R|Z}@@GJp|nAk+HG<*0)jNvCz=yE$Scf@ca78-$`a#LPyxRCgHm7kaWmKr_;L2b;|Gl{X^5n`E3l?E1aM(Q5EV2 zo-{i5K;n}AWV(KMSqJo9?Ch_+f>4F1Df5;R1MF^8j1<#4WS|x|T8nMI%o!7llPe8& z$h>m{Z3|}oR4&S-g%BKB4l5zb*%?uY{1(8I)8MBarD@f-3x&n7$}Ne5zGS44;em+( zGmO|{YgM~CImv^1R9d`i(ofNR%G;oW*+po1-e2#;Ukgdgo$?0E$g7_*GTnv33VX2t8& zukK8UljoV9IZtxL71^*bBi36WP8qX%f9UAr5NwRE@7B-Rvi5jehd)%eeK6&`bM-JmdFlmFF*li@!GhctZ0^BD`*y*e;*fkfbkD^_gWE z>T#zRKtgH*Gcqqs_r3$ajmEkgCAmAUmi`#c|4O0U?B1)f#Otzpc=42tDn*5a+WE(K z-Pxa33qi!-SxR=?#nsbR%-+@2b=eUV$PBiz+nx+WC9S;x3Ll4K%K;PL(do*7Ey(!M)JmI6fu8?zXF+9cj zBee8~a1Sf>gT%bft|XLNTYJNUCy-V8NTjWjLT`D!e5R$8KSyuj*}}CAg>@r04|pMp zW~)e?QYfvz6dij$9+&r_=9&L0V`TgsW;r@y2I5W1Y zobkI-XS(d#<4O?8g`A&GNzBg2U{>45V)k$KG+^W=yj|_l%_b#zOJ``ySyL#SzMY8q z!XW0Neo&{m?Hgj47L1P1kR+D>{^Cd0 zRnXDV;NKBRnaaVA>x|g%@A0a7IME?6`$=hOnZ}V~;RT$MG9@Fy1(!{t-hRL41srcV zTny2@ZhYf?Ki+&G^Z{RBex;h8*oh&1?gbJw>aQ^|I05b__1@q9EdRyuv(d1x4gC%? zu3nd-0%C>HQ8!!BUmKgsjRq?YrFPGSJX`-yQO1m>O8lC<%of6eh6 z7Osx`En-57oEQ3lpJ$^hs>pz<`R(F@$IFUnc`uyEIm16c6=ag9d+(^P`MR;P->X$! z=*@3sJ*%QY0brNZ;#EG(ua9w(3feXUO1Na&(Rp5MTvJoU z)XzaGCUeG!+UJj3_6}HzxdsqkjhFLy4XpqZ4UaET2;31RwcndLi~Q0()S{BsQy7_h zP!|lDGDMMiE}n4A^e<&_8I52|O94eX7fOjozVD^>LARK~l<2X)d4683rkr=Ctr?k&@S+P<#!!3ow~pFSDourX&D-hy`ODtVV6&C zp;T3WddE!Xfm-lw0t5BQs7rsW@XSp~`>hSj^lD5iCU}sfm{}i2A51vXG^Esc$R1&k zBp~;gD9PIo*d^Z{qz94vXOCb&=p3vxEnccV!MgfmGUW9N47G<#$9?w`NChc)YPOqZ znjXVyF;rZW6YY+F688=tcWaCXLmwUW#3Dbu{|3zUyFAKKc5ol92@}^sPRc6&WQy2i zsSPo?c>MimWpBCT?;o&`0rxLdhqOt|bqA~TQ{)r)S;CGJB6*xsJPxv)eO@_@E7L>o z-)jaaeN?GSXephx} zsxUI`l9J>rcI>cm-KP81qHNm~eOBslkx7@bZuAegH0YcC$Em=+0H>LmgDB3kDNF7r z#PU%NjD3e4-iQr*$VNL5HlG|m^^9qP%W!G_7CN78jnYtwfz2o)s%k~lHz>+NdL~WE z(F6~5J?zdy-k;>B7(@AuCsXJrCp<5Tcpu0f=2t4;0~NhfioQgWs_F-nOIqT@;I87kT{C0b_R&71uu#f71cf` zuTxmp80L)`Z0R-;z!!q(Q}Hi^{b_@9JBW2k9HR41xFw>7OXan+II=j({`j(%^FUmz z`7TaQZ${@}eku|XuY3FC>QWA*Y#plt#kU0uQFNt6(xYLZ!gM*Emsp& z-BD8sewb)EHsVi#WVg6dwZwDjN*m+|;0R)wzWBuz5htUnN^fcC54y>t$U8#lC9}{0 zqtqN2g#L{SKj{^Rai)Hiv>T?0?BBvIYba{t)2$m-YVj;CLgh;(ktOiBCL}*Ch7$}X znL>b}D%jfFV!taELt-hgHbmj+23Te{?S8$D0jMU8?v z5Kn#@rXm1vjIVP`gLar=GT^{_b?gRq&q+8S47gB?Mm<7(VjL!QOEe-pN?0+%Bs^}# zX;F6zFoG(;m)oO)mviC?G~>+f_ky2x>h#0n)a@I`)ZKN%sB!3wW~c2O{Uj$Gxxrj( zy2b2!d-dEBzrBRMdqv7|@C};b=j_A7>p6M_*Wj4y)EN%K!Ef7t?ptwm4I>?iGNZ4# zkp-+^X`bH$9T{e+7RkzPn(8T2t)S=~)^fC4badr`VS!K~S0?li}lg*B~4v|gPHAL@c=w~|z z5$VWcIn~dK$&l-PiyAdAiCpt`He&Yxd|?MP$_q;S6H-{DiYG1B}WOR;3FL zzL*VHA481H53kOxk4z8PU3%0t`Rh4VMwFqB?kvj6{O}Rp-bFk}kpXpcsX2*top@Pr z(V?lkpv?BDTQ?C91wy|B^nshm(n0E$aKwAMtT+-Z?w{pD=*3hHDt1&E6?E1FYE#D) zZ(0}e6IzcGp!MYA(BwIYZN{1!?n1nw-b-2>&D!3C=R0cN8s2@I^1h zI7x>c05wCix&+V69QcMm1Y;mOHZf5f?Wi_e1EhK!^=&WBKMjhEH$6g}lVs=h%Z=2v z79h44C$aZW5QoyYBc8G$v5CrK8mIj*@)fo~oz+a(uVHP=0h7>^4sdw&4+!l83-r?u z-CgNtB7=^#VaH^z{Bz-Ee0Y4ar+#lqR|(!&!q zthfl1AY!N`#w0Dvt>|PXvm}xp*qc}-m0U-b7D|+>UL{_zaJ6GZ1vL_iIg8?DtL7RP z($^dR)Y55AfBA{gxcOB-!`aPQlBb<4#}z28099#J>%WH_j9;8o0I-h)3~L;bg>W3! z$U0>;Z0z&IwDr)?&m!SdgaBTonFAqouNMwk8zzYR7P0R~?3;Q>prIMm4RO#0l~mOS z_mG_`>!L{@6Ak_vaQ2D@2zQrB*{|d!lHy0GP;9=n4I$0sNz;rrg2&EuA^T)t+#F z6;Qi2{%fBB2Xosrk~>g!PKy5PVy}ERkxotp2RZ<$d-IaEgYaqdAhjllrZ3u7vg|yu zOL-Hp7$q|fV1@K2b+$N-IBktZ+a;NHZ*=ql*0!}w2$#K$8AgqbhY~ZN!Y4%ra5N6; zBDa%hkl|xsbr$*_h+mO=J5hn$bL4e+4Na`l zSX}XW8MVwfnsQsc83!YhFj0YL4E!;UpJDdSzdLI&0tKZGaaD#bP$@L=%^F4e7TUH! zXMZ)h87?3}4M0swN390}$J3 zBOxje^|PsIpT~!FRt(yW0XmSAo;q->fQMN7BeXJt;bb0@aQ~f=M7EEz+m5UJbb| zay=C!{Px}Sh*{}iql}aF*tF$6{u82p(}cVAC*7-{hTk#O0U8GaebFr=7aJPi(l|1@ zv;Z5tx`!2REb2)J$s9Kl+`W)@Us@cm;Um7TdYIKtd@9Ox5zYDB^b; zQOSRMi+MOhCR^WJTK!oODlPOKCQl_mANVoowbr2OkXPQjrfMvY#}b^FcAt}wR}1Q> z8TdC>s?58^`;YgZW6a&#S{|ate&ZwdoGR5sdy>TyzJcRWlPaiZUN%g{Bs4_Qb zxo#3|ez;||D;iAe02X^Xoa%zH#~&N|V7A6vCnEQi{W9k}Ai9mt;B$@E?0MKn_hAYVRMFVzHm;Z2b7MJ_ zP;Czao@VxRms<5&myk)vXX*e1|M<#s0r0iQk73C_v~j@tpv$dIvgRMbBw}1EhN-C3 z>3w4(i50sBeijUGk#(0`$~QuTaIvWV{qvtMnUie8-?hV0S?N|a=kx~s8TRkU26o8? z26T!0CYNWyhd4u0%y8Dlw5b#c z0RO~Ey56%c((|rKwDO%7Wm5V8SqqTqbm(;RZ!y5T2y->?z}5oPp1{W^Uj_4504qCy zj(O-&Y-8?Z-Qo38nC_5R&o->pV7=2$D?Lu1($Z?1Yp>>37hLYav=ahFqV#w6e1t9d z?Oc@jS?2ouk-y|(h{(>LG~3^b+H!9IxI17I%f!CJsqu-`J(&>a3`bZxopzmCv-{jB zE33(|37ze?F^#GS4yO6qHq*k+VfQiQUktr8>F6b^4>OeYpOH`?#V2*lxpYFcDq8eB z4)_RlL-}^I5zQ$f*cVIrj9>_KP;Gp$N@Z|ub})jqsX;`v%>`rQwz~rM-IUS_FNdPh zLw_rp&XRb=WP(K7{-%wVZIy&(Ck;(zqTADc)U(%1Vl(Tef*jL<`dNj=q@t^|5k=KG zfKH8K_h%RhuQag1Wj($32GoLa1LYH!)5ped5IQhn^s45m@3B4WvOtREj{Fvk1XqO# z7K|ys_5Ci|Z+0jk4_|-*8{1D{_(@++QvHixu5)ufs(>oAAGI>1eq%GDJ3_cu#S6|@ z!u99fBlP<40X42G&#`4h+8Vhu1+Gy!D;se*R#%E(cG^@!%HV-+FmM16&HS5D1|zWGynk;@J~M)D0jD2pz;)IJBG9*FE`0#!=_r!9iB zBp-s{Y=CC8(lrz5K!H-frT_pTg85Lo6zQM*NJ+rojD)-M-J`bp5Yiaa(AYe2NS)5y zRdz9D`+jVL9*cu{)baIYJ7ildy$e1)hTd5H&^+EH+W<^*5Wi@FrvLZbf5?`)Wc<#G z&v&rvGcx)A@DAF!{p%epN_poQb z#8eBz`95L1k{wQsAQp7tPX9`Gx|-eKetpcj_JufW!!|uOFcm~UT-2|U6c3ElU@nsp+dCRfQsIRW`%&U5*xGKcacBx!fmxZ9Fwo(0( zC%$gdy2*(5OhxW7&DJwzf%=Jdy2&J~9EObWep%{hRUoLRi_3cWcRQ2^kAo2M*|Z65 zZ#nFGT``=LQ?lnordDEF6Ixqin_Hi=4Ms{l@pXNB(L&(T1TQtsnJGDGX*djHdFE-o z47j93GEsa}XF>Lmz(ZeQ+r_nNYJs8@ zF0L~$pcG1p;xf{8b=zHIC^jukd+YZ_W&&1aoKKBhCVE^zL(5SBOUFoJO2cA7w3$hj z;Roqy=6+f;wFVlJb6^;AKz(OGz=}c+i*ZF+Xt}6bnIm+^Dyh2brgP1CdQ929QEhNl zz!*`3O>JP7K{O8jUh6BTfqlGEzyPFOpkTOU;5-X%=5D3nFSu!{gkzCf!Z zLX66;u9kVHd(}0xLc-9iYh%%B#M;|{BzFFAD7-zi7B2Zq1p);90=J3!WCo7(Rvks; zvGo|OL8k0Rf?lUyQSue9FPb_)lQG*L^KC^Y^G(r*0n-nZo+~5dP#Lr86(ICpw%FO9 zIOE`*nAaqc@@Uce42)sXV9npV1<8B`xZe<7)q==qKN-k0eK{`!-aV4eM1rB{6{W`f z`skS9$jZFM6w7SxGEVFIOr z@`}E&n`S?$UEa72al7SjS%-dGYq&HTTaTVAlU)B>%78D{pP!E^1+7{qNIC zrOFrA12*J$bPkH>v55^2;i;rF3%x)S+oq22f=sooF~`yg7?UnwzuZ5qlL14cgS}5n zGT$aVPUcVMFD7z)Kki`sB5o35z+&9pHpE~E&j-IClUb6Td7BG(r2d`_3{AvA9dqr{ z_~wc1Y5vNA9}_oYEJ2xjxC{Gjc!x<*`WxX7$-YlZ3)8W|*6=9$4Kn6y?bm&SGNh7y z2~;_Ex3ysnH<14E$+-rc*VOR6TW@~^p|0Udk|xS%;_k?-1`|c!L^%h(O4+aQyeE1L z3j=1-&kK{CE)QiXykZH{Ge<6_IDl5&44c(ZUbY=2O0XvViv3^ufbKKRkR=r~a+B60 zeuzy|`}kmdv*kre8c#Z5Gx@e<6<4LXSb$h0HQjK7sZ4r@2;I-*03R}1fdVY#_w1gmqu0D2(TqQINpUbDBusIl z9hYgidTwKd$>9MyitF$?1snNQ8pb;+RYh%7m===WP8+Y4PWO~&Fe%(=g@^-eS_@w@ zdI&1v8|H95{_L{BcXP*-{Kd?>1_CDyVVwWIc4=A@oK<-?Q`b&(8*^^A71WkjMIPLJ zGc)A9ibiqOw5YEoxDqZZrE}2#!;@IL+&@mJYmf>@{lVS;uH*i@in@4Jc_PjL?sx@Z z`FI#TWJ^C%z0hDpL6CnKISl!YQ1@^p!W#hjog8BK`nVMlhC{di96x0r4$02GGpq%h z+Gbu9dD*Em%9Uel5FFGCoF2a=+&X>+`{w8s6bSX{OrvN`+AZBXYKd?jQkc4>;=8}$ ztgCNhJnZ5tO&0P zO;l}|0f)6t93Z4d&jO%RrWyYdUe5Ksbgq?`9((hvugaky7P`cFC%t(?_uFxP+QxY- zdGP4*ro22A>!Rm8i7N+XoTS=$8O0i0kd^J4q*gwfBo3+{uxyRmMyfwV%aQ{kK~ z{5M(Y`7aeobkJZ`fHmh7yW5=%I<2jj*8IYZc#fY#hZ*>Br>1lA^DkGUTGtc${e2bI zGY**a0${mlV)M@6{a}8G050#+8K#Se+8L%hJFG)6npGUo?(y?PlZ`2imF{};H9|7e za_A*%fJrSablD}FEG~Cc6g}6Q>5*~e)5lFGzpM{n)=?$T9&AMb?F-!%Sok02g+;Kn zk`q`9vceZ=dCspwi{K3H90zbsLa8BsmDo}J_~5gSQk=4CGYb9%S8_AL>TpRhr4azW ze%&Y-$W|faQd)la4+2w_<%T0be%$=t zo2nusD;hr)UMdF#r+ih6)fvW62aY!|hT5R*L6sll_-bL|#|DjKz`@nV#o|bn5YDHp zzmQf;Sw<*s?bo6CKqOp>54IR6OMbI#hCY@VK~91Ot5C^!ilC5hA7Y471gDq4e0cjp z<%#(&W~#~ef`c)q!1?`@Iv9Bo&c>td%2@{$!>Yo9c`ORKN#REZRXW$~!XFC`>!b`H z-1Q4b?yx;-SI$Jpe0xfquDeLe;uT4Q3n&Y?*-B!$F^1{BWiLTZT}Un%e|krMChH*! zQwa8i=Tt*}=0>Jr^7~9ve?(b6U`#8!vga7b2$z=;#t9-E%&PdvVOmRC$HWz|KKy=h z8vmBksmVJ3F;it5CTQba`F^f~;&b2sy<#(E>qDCP8DEV0*@T$>>jtFcY+&|p<9?Fj zqR%=P{yTc}Igq)WOH3*pwWLtvKn4d~V#K}5wEYK=8;kA8epB38y#={t}3JRE> z8Y{CqTV?j_W+73mQL$$%T=h5G`N6B-Ds=;ASh*LIWNS;{JV-hT7`-mfJGb&f? z&q$M#oDneRl@Z*kkJQG))FJNsC?i=AfIN&{Xsfh{WeA9G)Q{SeW)PxsN6xiYkT&66 zW*{}iER$5lQSONdB}?(h1xwgT-M+aTvQ+UN$122RK`C&U^M zRtvM8a1lDA8P8XZY!1q2!q6FqM1KwcW#K><^0XK_NFa6IZW>f+9Dr$;Lnon?wmS-3 znT<4#R?55MV(2PjmeDAS`Uzb{g!BgI7%L_3@yb_{;6Xd~ZKFK^98hm6E=V=Dfvw6I zpb#Jct%#mj5I}U@DD|2?)i7G)6Jd%SKCD72iTsf5?bsCzudKAJvb8$ieE(rRiJM%` zRAPJU1DmJ;}#+j z7|a?GaVQDc_cBZLd6ehSJXB=N%AU-8Rw#i}wG~(XK82mXU@0F2*57vC!KN#=q3Cs& z2K|#3P{5_tS0HQ^#g(yt_`UNBdi;bd;FrlHVO%MVkN#?&T8e2-;DyM6vu2UH%R(g! zPMQbZw08rFjrXKIL>Y9)(2u^bh>IeHM;jSZPA}J9fK_QLJub(6riw>^jlyE);rvV@ zH)$2YvDJ$pwhJFxCBycB3Oqpi3-bb5FB>wGju}8ERGXL9Lg$?FxTW{M|LSW3cbX2L zqv4tV5=-+ht)*<@>}cWiuVWTj#1|9@c>svtd6>|wwTTGq>WW^F5(J%#)@;0%7Ri`9{Bf|In z061k`qrIE(kS!nHi}dGsPZ2OETAl|Pmti!Mlh}nxju_Xwta<%c!?9XlLFkV#_gZeu z?goj8%S+w^cI1^6i?9N62z_zj%y1rla5_f?=pl(Bn7{CL4NwK`FO=6p8RF=9RFrHQ zN5mP%U%H^VlP5yXN;tHN4l*Mt8oATww-0_54w`#s!0nJ06$Nx{*4*ymq|1vgJV@Bo zWoVb}sB0yee`o35EEd~G;(n5n#oaAnH!Ham3D#Hu_1f7S0`-?4w(^#s{Ci!ET^UZq z2bnzZf$Pv4Vovx!=0*hO^L-pq5h&zhFS|mnN*qIcC8v$=p6cK3PdeBeVeLvcqnEI& zsZd13FA0}1-xFi%|BS%}d}uM-jUW9Y!mgaAFf&_UTQF3qD_G!c2fZSZ-LGcMU4>)C zyi7tnK7Y-@=BXkgCDF}oq00vt9Nge;%@nO4a)vzJ_zS~nBNFN}6mmYt?h@^0_O6$^ zCkg3MLfF~wuMKAMYBOlt%f}w(5}$k#x@8E$Ct<`lY&E{A9VOw^)>xK9=s2)PV8*wt zd`e+c9W}r;_1I1BC)r?nZX(EIe6D*36rRAH5d`Kj3W_@bC69t4Xi|jAA<{lUL5s3` z-%yu|Ww&*V3G!e;W7p$_Sn;MRdUX5SC@Ghg z;fx`L1G`yfHZ)Df@kM54mXhip@gm0*l`4)q%s0*A?rML$sV0b52tI+Q71G)17@8J4z)aoD) zPQ}u&?=!s9tIy=I_?0RCZbUw)E)y6{n=wZtex4*Lb1i8y8v{4{VJTdf=8F(Me_%RE z477tV3Gg@{ijegEkIbDG>+!9g&mPV3=>z$%d-XqC^}i2_NwR|q1NzwB=jjCPJsRAO zgF2YJgFacvElV>HC$M1{U@3Ar-ag%4V5vq6y|s`iy=-@6YFB1P4NW#c38bRvsc5LL*O= z#@3fCHX%1n=Cs->3yvKO3iysRULQZxU*2R|rG;02T2d8z8Jm@=^BdJ;HHLF%CZ!Bxb%2fTUrhh5TtoVUfO`rf3=3#__EP1F(%lMky8gM}iD(V8UN?zKq_+aqmpjtu;v3vH zx3N@0CJnplaw9|LmWIic&5l5LptxDc(LQ zcrQ5=wg$Z%9RhNt4+A8^*VdF2!N+Cdr|{UiKg~o6%+ywRM>jc#7;CtzrIZAftTb#` zt$;WvO*8U{Px}HvMkET2IV4jB7wI{s*@CUQ ze{>9u_X`^*;QVVyGviGt)p3o~c@~o+$9Ic$IJfD(nk>wq0bq_%+!b_xg3dR12^aq| zj?HvXV#ur#w2+@3M0R*Skm*@WAee11@oQ5tXXN2xvD`1c3^%%da6xzJINIJPF^1Q!L2yKI> ze$00P&eq$q6-Q@ePm3(K?^-7_FmaeBwA`Xv)OU)xVp{~#>rC-`d;BowTje7~1kMH0 zp_DI5k`GmpZW2V#3714IsFaJKk7&n>4`53UjlnRov>>^gqFaS39TS((NTAl3QLYOR zConbbo~m-my4a}1lFs{4+dzf^`%i7kDuy)UB@5Maq==+Fk|Bge(JVMB##rV&X1<1qF z4B?F7oCxb4LEZ>n8YRCme@RU%uh7Ch!V%6=a(21Cod2R(Z~42j%IN}A!FD~FRwv00 zOJP5gT@BC%F+8QdD(Xg~6*k)9y9KKnNW<54I2rXYAri^iU>bIj6gsMW)b^~Kr~^PJE{4RK=mOV&@DfyXR%`kIJ$PeLn6PI!@Rdk2Fvi0Q$Kq-XF9K= z)f#dXN_JoUs&#bOUpFxxI<8+|ss9~?%fbYsA}l={ZmBjI``ph|=);Jmjxvn$9K%HT z-OeachLL;BbO5vY^>mjszqKd7MWRyfR~W7g3fqTlaY#L^>>N`kk60TqCv~SJd(srr z?T|{_rZQe7Z0!Tq_ET5Z z^v-ND_Ls+NmC(QFHXC0n=|-xNF7N94L#CK@Bo9mPvi-I#$TCJ@(B;~{^lP9==_~Ug zwgt`Nnn@ol2v?6#oZyhy=JoSd?Q5(npfLqj+`l_BHD(x0Gu$2k6qJN|}&UCj!T`&Iii3q@Td>42N4A3vsE z3Aa?1E?mBAy69MQ<|ZxCzR)9Pc|h~HuXa{b3Z3ehD{5XVS|I_ySoz&@k-o{IhRaz! zt6j^2H#f4Yir7O`_^};CV`l1=ANSff@%n4%q#GBDdd{ul&Am$z@)FN91wx}a#XE@h zzR9;C+qhc?op9a;pK)T*oNu3KJPZn6;Ivy^Tbq?)4CJe1BpLG-;wn@2x;Es?R0Yd1 zVDO;=TSXcT>2U=8i@E@=VVcJM$#Kx9oidXd>Pok|ahib>5<``A(mN8zx)-FdX7rIbEQ+#9$zfQ7&9*-H*aFIh*G%b+N^ne z1+krUtd*8Dt(G$%Mv%&v7^o)Pr7jwaZxi*R6r(i1(vV!7UhDnE=NMzsGue;{WnB4A zpXsyY8=hw7kd^W)S$ZbEnQk`)-e74jpjn~%QrVJ1W=$mGxB4>l3nt_;pnqgKuUPn|DNgb1pIFInoG>G6J+cgemhYW{Nh2d3|=`l?5 zwNq&DX%Gl1;ZjYKjGF2|P0_v!8p|H*V<_3%%|aTwDf6Coxe=6eCG%0LoT5S%QY9%E zweic);Dlhx+^4^`j&bJ3RXpzgAJ)z(II}3;^0BRsZQJ^iPSUY$e6elY9ox3iv29x& z+w5d==iaKRxi2$SGY{vS_j69|+I#)iT0f9erucJyF;@_gr1KG%BJXL$HsIUzGwnra-ACXHAdt+CwRN?c`ylgyDHfcWp^VAYd!cb zBDtx69YUoe1qUh z->lksyD3nU4)q1He-Y@b>xE%vO+8G{YgFn^`B@GVY7&-Vfj6@DlIUG-gz&_ybZE%b z5?GY15Zp-R^(Q}|ohWp35Xt`F%eOAKEX2;bMzV}CGEjpGstFOslum3Y9jCzb5525{ zr#)1&u#TDjL55YsXXL@A%@GNxSE5s6Mf|f?JcswBX4Rz{O7LqHWot(Zb|&>k1Xd0f zIJ@P61w7cwFLy?DR;WHF=lGl{Re&TovBamtv7WMgy-*OO!!NLpe>LwME$?yGiBf1( zxBLNiPf%FA`Kgw*c6&@n2}Boc}So2}`}X z1%LErc4M$dkSBC0c&+Pad@ZlCu0luq04T+$lSq$6n{pO8blS8}m^|%t-7pdEKOd}z zTj2VpT0v!>ESTcBcLf*bk(_$aO6CyY;DG)cTKm27lzkt*)+pGYOY3JT0IaOCz7ta6 zOfBtPMb955#Yjx#$KgMO+~T#VO$<1484X6lI4ReLWtr?|vPT$!te(%v<2q%S73c~# zAFSWpt=p~cfy>C(3_!<*+Or6N6NjkyDBmOh{&U5_nD!|GQg0)BE8S&xT@c_GU!5X_ zN*zjq8^MlenWG)_43bhuqO-n11-*FD&fk{A(p#JWO2!ms8s-p-034a1oU3AAE@o7+ zAo0$5i}G1=9{FY-Gze1`D&{!I0I^P*8?0@tZ__?pXILWG_5CpPi^4A1FF;SpPTFqb z+K_U8f{;n|=dnifTUFkrH?odWAFDC@&EtLs+7 zs~)6cM+a)SBSj-e=8uZ7M2(MuKa#Fbw*S=?LtA+y5O*l=fU_LWx#?@XV~2Uti+04u zk@_TUhyxTiQk70i)gyxULW8msZN+76;jdn)ci~f?Lc%z=?DnD#%cfh9Wz~n=lhIQL z@yJpI>xT)7^`vRw6pNsco6IHpn<+DvO9~jrLWB||uN!z|N;bM03Dd6%xwSv!IP9xa zowPWH&K-YDgp7|5G4$aXPx3U=S~+2CwHOs92AEz;ZH z;akxLw!qjob5Fq$oO?)wGK78}&Bq95U!U}W}lO3 zq*Zmg$4D#+Q=A?n7H>Y^ZBK1YBjy~xqji->8{;s?3b=XsAEl@0Do|-J9fwWZwjLpw zATgyffY%6@KYO7+yW?BSab#XSEIx#x!%tC`8BNto?1>ce7*5u-+J?W!fUWG{XQ?ob znJ874;xAV{cgIs@k=r>#1rfFmI;Yi1Uc}JCJ?I={7?+bSa5oJyj!198TN>2At*8vom9EBbhT7FuV#Iz@Z-{@)0z$w@Mb#O^i7V#w1RQjUrMi6(ofnnr4;ycv~cHZ z|Do@YRnmlc93kK+ouqnD@ukCHN50n^=oQQ5Xt?5n(*8hQIx%5(2)jA$VDWavjPu*xCQ%yp6B9a%36H~Z4q z?P0Hzwnq+2j-)`)>5i&E{&O<(M8C>jqTRj*YWgVQpi7QyElu`*JW1{JloX9#CT^J_ z|DB)wuB7`{`FZh`ZfwVmH|Lr!$Kdx$2{ub5MtNLGCVBZ4!*%))=<;>#S&DO^|uR$~7Tjn(=@FXiJbv z12he-ot)fUr%_H@a7s(RPkZ&bNt=89Fjb$QD304}?0n;>%uX*(Uuw^On1$z7$=qpB z$TH29tF>kqG6dnlFmvFHbn=&Wa0tjC-dPe5CQXa;ng-b}B{u^>GWMs3-Bs|mEzKC< z{sGf(nl)C znHhO#v}I2YMtclGiG^O4CWoxYJhDY}FJfm%^@1DoBifqbJzU}t+@h&tt%|nTb5W*6 z+oIcm(xMG;Zb6QTpoz;AI?qJ(p@ucF+V0>vVc#2<=6WVQ<>P>_bHX=DERfn$mf1eB|UW*(i zkxS?P+E4<}R`uT&RyPEGRNFIc>{L6Auy%G#XGPWg~GbNy3vGvAzT zU3Bhk_OTv-o*qEgw`%v7VV0>Trm8EQ=FSBnl}I z^t>1n$dU^53Sg&A*p%phq7yaBJYD%$aVhUkO}N`v=G4>>}L zFg2{5Zyg$u9Pgiv3U#go6wYblCwi<7HQ`~sJBgD;n33T`pp6P2XLP5ti3T6V7n-Ls~q+ClMA`7vh<>1@u+_v2DYqD8cjmxX%R*hr}I- z*&Xr94T{@M-G@N`J-?Jt+%0MxTQZf#aAMUVP0J0t{vJ;EK;uW~u}b8zssK|NYG;w_ zG0=s$w&HhZN$jzU3#DDz{fY7qmJ}zz*}B*WUcs&9+0TV2ei9X?x16LNIt!F)o`h5B> z`o9{UV$_DGsw6A(R-LhCr-<9+5w(m(adfw16^*Aqq!df#4678UgU8pDFK0IP z^&urH_BzRuj$~BFIz(`44C9}J8#eox-1WVuZ<&R5!SkhZj_JIqRm6nwUVfEnjRU)#DG?HW-(Anm z-3bkno%oeY>e07TrszCRU^Yiu6aK^bcdYO%bOw!2$-*PmqWw!5>Z6E#?Z~F$GGj*Y zc+y0_9ctB%^4*K?0-Fm7V;lqeLDBFEI+hH01&!IMbPM?X(kn851z?&y5QF;TRV$nI`{CnB}m2GX1zI#fAJ~gWt<*$E+SqM%rDi1qVI**D$U<+2#0cTIZHxbHhO68L}a*d~@L0rpX zVaw7zHurYyT^TUh3mYR5F7fJP7L4sd*}(KGADh&C}Kc+qdAoxn- z@AtLAMC(1(mOI{DGhF@n6#b+OrhC4;w2to3BP4wvK@gzZQXahW4ezps|{xUCLCyEnT81~@fCc8G_#)?)1H zk#|fnb`BM~&8Q6Z`G2p}`LBr>@n%5epG4DOWV0ya4{px0nUeDe@ERXY;xrD2_Di@X zlc_zxwxA4=Vo8)vbrfFbmE?^&6n3OIdJ_QwzW(T@&WFd21)>-tM#oFvZ{kQ|>u2(x zbW0aJtu4JfibaeL`ljITmvN>sd^gXOZ>iayOrzF7dv{=t*3wJ_b$mKVrK!W!3AZ zesiB&k^T>4!vB4SXKZIJCEfQiXZLubSPR9Yt09*qt-@xQZs(~s`&W|K~_ zkpo7I-JHdR-!Wwd zi^;wu0^VpkcSvVIAS}2Tcrn8E`;QrDb^T)aaYO0LRFebSAV`6y#EkIicxecG(yruCTg5h-*2=N?q z?=L(2NQ;iC^@!6KbdWFl&x5v&uvVsJ6gLhgbQqkHuYef~NgF0)g!jA3%|z#!um6nH zsc52{%Dig;_S^-xjo|h0I_n&(tjGuA*;8hkHEwG%EI^b3kea>qO(YjTK_?&^13(%z ze8Ye!CSc=sq2Ke09G8BfAfIFZN zHLK-iE~m#;S>()Wqv#l4Sm_Wreq!)_($E;Pvog))UdV+xc@%k%Yzb8uYWRb$2J-V6SMT&*)`m#nCFD@WCyY>9?IVL>uD} zm;>!Dy4v8EZ-wH5zE@C4mEl0t%`KwRs;YCgDR;>FjxRgdTtK$ZAwXS*q-zyk}V#5}*1 z%lh@zG6xCN8__uyoD}2Il$D;9`Q*F}xiu7Lz7D%=7b8@#0b@s28h+%BwQMPQEAsMq zh%QSWo4m3ErnL<~>kRp30hG(C2W3AE3+fqy@8GtF85_I~(4XB}?cLmp0$h}Ijd(%-ezQR9jsr0d)d|=y`}}I&JME7sZ2jb!@?Fo z;4TG=&87ZA7A7$KNY=k(_g3P+Fwo|R7_T1I+fcuEtnseYL-eWU*5$Ij*W4Y`a_qog ztGpAJ=08b0My++!C&-4;?e0xi;OQ%TJoSz_+b=mL+BiWG&^KK%!s4!C^2*u04IjHS zUkDVFv~OBHcF`laP2(?KX4ebz5q6k>PHHixX+htV*KIATrKDX;uL@!8s|>q%hmhSv z1LXR=WP<1P<;wmBZy*FOPc0#*>cO5U^ngc{<5 zL>UE2swDIY;zAA{!l@SMgJxLd;UHe1u9`uai(RAv%92hg9g!*Y&!koi787^G3DgNsS4j0|5184SVk^?Zk~IIgcf%#+R*$0T zvYdj*=%eWKi^FTV!R)Q7`AS&-#9fY$$1|M#ZdET2>^5#)-eQyz`V0S-yTJ384vG*} zJz;J)z7j_X;Wfihc4$<(_ZRFvJ7~;sQ^)9RqW@!OtYNzWdz&<(%02R=FL-J?5gnofGKz zARu!8_bT^)TXjVpf!{n>FCJ9>lMzN za6y56n|(!x>psGjC(Bq$Og7UEl}CMk*4avPB%}+thWy97R7oY@^i=W zmw!~HG6krY-(tDT@5jAX?Aqe3_3t2RgwQ;*i0U0CO#H<_8xe4@I;mGKDI8UnsHT7Y zb#RyePhU5*|H}Bv*mq*`#*}=d*x&S75l*t`^~(D>)2pXl4v{y9%oWvh>VZT=f4bJG zzo6jY*0FV@XuyNx17ctvbNFq4g;0;qHU(thn7<%o$I&=thfJqB--}G$3a5U*LGW?wh z%0pbm>bttjNb5idzJx!Xkv{ONC}{?{v~$OEna=`rI4}aTBKJkq z;AU8!A%djj-+$|e(^09(>C0dz1l1d~6nk*nOm_{zzbQ?Ny~a?4T;J>^DvIn6vCP(_ z_56TRn3c)&CM5TxuTH9?<*ZP%2-jX%b+b6-#K3kPmaCte%rAB{&$<-?R*Lamv3C=- z@>bqfsurx#1-;C{rLcuxjM5x82m>yg#8q>SilLcpVj87R&SILQ!QJ(R(09QqGT#l~ z^aD<`8u}h(NvU0?SKAKWc@FdZzEYn(wAH?Xf+#sUz>vAt2iyA>;Ytm`F163e8y`s7 zrQy3J?~uA)einBl`^yUS4!H}dYsv@0DlAz2ww`7_y;4^q%J{Jx@Q?UC390a$2is7h zgV2Cn<`0ZkY~N6ADBtND_>Y7=^%sr-n~%`F))#_->s#nhp?!IT(i^k>AI6$J7VS!B zZ^d?wOKp2xZr;k5H$TArfG>ETw!1_KUxW8hdIs*OOe~$z>M-d)5p~Zqzy~Vbr+Uv3 z>~>}QTT4T(9|atG6AVIIZ#W0|+*9`iI&1H~{P#q?f4;~Cb^zcQK2n-cL*s5E00xWF zKCEz$Y*N4b%#o%j9*${;q>|_OGiJi)z=E(?wSGq7Fyt3Ur_4EuT{R}?SV`XJhb}CYCJT2fm##w^vGq+c4$;hhPl#%!72{f-5@SO_Cmi^(24R{`qs@{?$e*-o`D4HR2-QTs9*-6{HmZ9du#_ zV$w%bSF&9?KjoCm3EP2O2sQb>FC)&4lo$uM&mq-gUVJ|Ese%l(@}VqeD88D?5I9E8 zYAG8_z_ztg8zbk`Q@8q#pUTjV1PN>Yk`yh45Y-ofCrroh`!Pn!dl4SN+OsP)g9tmI zj5Z&Uk<3e}Rcp!Oy8X@P))(XwAH`^nw`^)EG?W)0G18(aP{j8HGpAI{S{guFX5<+0 z;d1bD&B`2GsLpokG^bS3V*&4;)uj&Dk*tfpp}-M5hG>~MZ-v(>;WEV%l?ydAEmcMie57wLAPd2%($$%vurPF)R?D< zjx52`CFcNkWfo_7q6Yyp-H~<< zFoUf`liA#17-LNAL5seUuiEwC4-dsB6wmdkfILLCio^wNROZW2gGqLmq9m+e&pVD| z2}x3|l{m4RB7Xm?<})DL{?DDNUNIF^c6%~x@F=XK|FSdL{NMbZ2_p{+s{qXR{ zU=4L>ueRn@G?jCOD{jrP8;Z1lPbG8%8DAr;YX+2IUZ6f(Hr${}{p}Chi8*y=^_Z zUTV*4HQO|DVbh{3XhZW-^&J-ARGN*(>BhSrRRO>5q#QYwo%2*tA-zt=vrgZ>&d?+3 zVkRQ%Vk4s~)upAzRVF55Ea$~@S^5hzFiCTYrcoafA}m16y_W>bK6ncMAQ(4{drUTK zA4|@u=d6*tTq{%wdq*J;#%O8%Y&0^xaY2hgHLGJmkAUr(hTlRcsJ82sj{q_qb5vJb zw>TtKdCt;egnqUNz0tl>|5#|~qQ}kj_d57tqsFE9c!D}61Howty-zlf)bw>)*fY0L z8tS^PK)IrzYEpxut+gQ7qHE+#?%rjY-K?s4v||MpZQ0D4SwmZQSsQ))#%Z~8V0ao% zX)CFIY}bX8%6biF>{lp@wi}iSF+9!&t;L3m7J1Oh8c89O{Se#aTd6mrE1U^NBb{-p zy;k%!~3dZnVkNDiI#P{1$w>ZBPDzZ4mE2gAELK z6&b2E)+i50-BtY9NjqmfV|5(_ez;*(7Td-VqV}-LPaW$}`T{E*Kl5?|qfQ%Efb&3F z`41{lYF2e@ExE5a1hyIb^gXy<5qsb%GgUin&-z+m2xM@jn&0R)hn4YD*V_zRF94+D z%jqlZb?-3OC{3sO)v8TxwzwP@#D^s^d;6XsnNI*a|{y*;fWL>PC zEvzkUf&Z10z=#zS(ftn0_neJQ5x5eFsr$z`xCU5*;O$@C%eRjLKV#tHbfb(I_R*xF%5-C-ID9=JzYosK72ASt3}5@aAuu1kF;j!%oFw9YTZV zFSW^9l!~6PFBE?iXrCws>jeoG=Ykq4;25nM40f|vTFSs0ZW{C-^Chauz%GmkYKNfb3*C(1!-7on zu^g^a&5n=%JN`=d!sGV)wq7=sVb(tB z>qo~BC(!+R>MPj;ILZ4FJoTm=KX;QNGgGjP?w;O*!Sn z>eRU61?7edAuyj6nTpvL>oTwnMM(LLRz_&Hy8yLQRAu0?p+7 zmXzUGlqQIM4GGuW1VmZehrXaHRYi1md=CU?=9pohmVvwj$!y$L=e(!zXfSB@KM;O1 z^~Xun!vVuAipnkb2E$k4hSsw)h;Jc)9*F8zLcRvPY_uR>$o1K{$lJVf2Vbk?0n(6` zwI*6qUe`?dOOblP3(ls~Ro$^*R*op=f<=2`oFB)(xmQL0bv@0$DU1ofok^+(E_=*( z+X=Xe0%vOx-(mng94Bs2{|FxtooK)zS)acI^{htlYjep~mNrdC)VhQNyVErOdMokq zw$P$F=b)=Gps^l05^|!GFDk}D09sFD0e&bC5^srlbPr|fk#dpA2ey1v|-aSoJ`=GONsCDi(kN>bJP&GoAAXP7EQK5WWVxE&*IOCB542 z+PeguR=WbAiOmy6J-wj#7~H{%0r=qD(PUr}4l=W;_M5%10g2oc_PAyUS(u~7GQ0TG zL5>l3vNrL$5RAJ80S*DMP#;GH7s|d8txy@7dH#~1@XBD<#u>Uw7~cuyz)<*PrD9rz z{%BzwOz>0)!9cz8d?ebceg`a*g{od)Cj@UxU=|o}Mt6ZfQb{>=p3UzaFV6)X#msdz zUl3ev6>)hdH|?52RCnKax_1tOL`YvD>iRr}86x7@&%YF~NwPW-DdRLVq%q9Pg`^xA zDjlccG!f57TP2t+$<~$=S5;bU$#lzGT0WgxOes4(?{kMzTVUDL)xtW2i|oprV|43b zVIfoZpHX0VChWzu64@j6Wf#H$u}(8Ntl3r++idz5I(j;WD4G2=m!nb=YJoUHyK59$ zZ6x4+w!pzFR|>ALut`XhBrM4T+#&5K(jI(wAJ*AF?L5WsT9qH|3W6Dw`_6=Lnrh%m9}(UEGII`SWd))_1oST}PEx<~D2Lxe$)4T!G`m}i=t1ZCmYVqZ#k>*}`J}?aU zsv*{j#^s)|hdeWN<$!t!m`%(su@oB|DrWV0>An10)0WS7?)j%|>ILz+dje_WH1vKV zBxP#+_Dx!TBX-5=&Pia+!6Zkq3t#H7ph-Faq3|q;#m=O5kc2hA$Jm31ZIAc|oB0+} z5izt)Jzflrx+h}xYmwzE;wqu5asypB8?lyav5*)#> zT6`X-v$7Ubaz4h>A8L##kj(Ra*jiQ_0Y=cp0Yd<0%aYaKI7k$vX6Hk?qrZUr;FSu{ zhf)^Ynq5=t4#~uXi|#lN|5VjqImuM#> z{%Kc5B!{W$)0#<|ZJ(j!RxiDm33?Gddhzv%DVOe>KkW}TK=?Tbk6vnkvCir-bnimN zQsD)u=q(X@l9*fNYcM2Ljdg^a-k!Mw;-2$br6=UWU)!1wXYy(@i<8JKK8L3uGUAf8%2{eQOqN7eS^4sHB+4=L9AgE6kYK*7EJ>KwV?YOE>ZQ&A;gJQr$SSI;>m1ea!>_1Bn}I2V~Qa0cV03n=?p7OyczOHBAna|$^^<&CMKQD&>_!janjhWD#YAmTmkO7>PIWHwcv8~PPr05)F z)-~!DUZo0E0|QXx5`kea8FN`r84Uh0H-kLgS zb86lRk!-Wi(;Ll2Q0yuQtOO7>BEmk`X|kcuf(>Y z0HJgX7PeG2*ac$;?TT4r$=~UB)CoQvM{KJiiaHo* zAtaFn_UmKHy>LHoljxEuW>6&CN#f>1o)q2<;grV55M2~YJd)hP#}V5Nb0huB=_A{g z!!SC2uas$>M&c}KTC&%Cg|QEK2dyWI|8SveSj>btg^EFl(adn3muq~(ROFhcK#cJX zE*2OV)zbyh;@B*c&`xm$=bGQ3Tc-wjGHQ&|d1CtwUc^1>jWpM9nBou|gP-`wO~uov z+aNeaqld9MhNE{#PvjJ9NB%kLu`~eQr}*T0mAXCsui&lNIO?;k4fpRI&B)M%2`Q1i zQkH0ud-g&CB3rKQG)#l}p5nA48>a+!l_$ZTD%=|VTG`nf#YGP`&|!MtJ7y@PC!M^~ zQ&7F~-x%|2i}uA=nBgG3OjI$}JD5+c0(t<1GbYm~Q#GnN1LGW@jt7VJUq@!0$&p@= zg0aO7dRZ@eJnu{CcingMnf6CdL#N{B9oO!8;cjD3dOwH>Z>WV6Q?+9QX%}je2ltTB zY1QQJVHZrhkN*ba064;if_#tZcxgaD#Qq--53+{#|D_eraEOo_qJ-|bHCI-OP6r&H zNY>r&{vaONvZ?PQfO2ztK9tVUpD@ZL5Du%6RSIys;6lIYZ3KrJVMv}370;Ov^p3rU)*gaaodc7rb-;~FO4_TdwAy9k8z_)MZPWXV50g2Fa0|b zcYWZuUv*a>Ll)JOYhmNoznIis>0hqHLp=;uodcbzNE4KbNnZyowaL($0f6j^>4Q(}U5tLqJ#d71%D7Ywv;(T%EBrH1;KSpZ`DqXE*}2m%y3XjX(E%5y;f~RCjzfh2 z%;WFDl=I4OoQ+pSnf8aG>`Ez(4fMQR+{o*$(ofE_fvly7%03E2IKswmYTWIRJFua; zdFgtumtX2aNup^g!bSWiw>vH-R5mu}I$%*Q*T{0lq?1rn;VH*ppHWz|W6fKAX3p7d z27XG-bKbO&SItpA-awh!;5*@hVZJF>E$tej(2HI83Zsa=RuGZpoRk2dTd4?iwZcu! zqMI%ou8dJr*=@GOwbo#iY%MgI>w$Y~%~pAv6e$B6QC$n=G^L>y6OtPdD&b0Xso3kV zUS`e~uCEDkq^I_(rXP?KwOFeTUHMbRVHj7HkDDSq8sy0|;Rf(g#i6}4uBFws1ameA zA0}AQRAZmnos{0;f2;vD0`NxRI>d)$d9^YC3dfk?bs=K-XXC3gDy&Y^;Z6)3;ZCt7 z13mkp%)w`dp$^j28pbPJ$NU}L$nk~$(f=APVGECDT*p2cD(WK|^2H~tWWcQAv;Bx5HH@_(&1n#`zp8eup;`|&JHAEm=x5!y5b}<#{d+a(L81jCS&X-fJmY?VSp4RKw*PiyNQ?-!6h0%`lljWeOg$h?Nm(gck&f*Xt& zOtB|s0Y9)^@>o;pj-~P#p4!Kp63L)v2n5{NU1aXln0^Sq+g1@M6Vxgu2OP-}!nE{8 zxsUZvfYsKKcq)xR=oR<&TY=TG1?4zhH>;8H|M6I09!P6V^dr&s91 zKWR6K(48e+g7As-m<_7LHB0fz*Fkv+=-qH1>8A-;_@&KFW{-6YF?|sDEjB4y34;pp zfWg~CR>WgrL0XmtwdgWEqT{ntK28Tx*~6wn;=YNvumj2mG3c8hyqh4qgL_4&^JWcc z)gfveF&Or~$woKbz5mnNobqMdvQPD*vdiYJIZJed39pa&g4@k_gXpcitNqf_>vp3% zYfdUjOII$x>%{q}d|oj1!myQRK^}0u_YNl1iwx--Ow>3jg!)3`3w1V=0!P8HKXVHo zpuew<<;!q`_o24y_98&-1)UI;7oXHiqyW`r508VyZm3rv93~@$VQz*|PcY@oUMqV+ zEd*lIbGsXeL|%)Ekktk*gMfcrH|7$+hg+rltivEbfGi&6E0&u^FI4M{o~N?k-=P@V zm7_dJb|os2Amv6XB8B#&5;R|6k6P2~M^kB5CPPzY*GT#vl((|_&>%e|Vvio+ohf4b^JbXQeHD3*V zvk6VwBRJvDLS!?OT_!&q`*oYKfh|KXMBEUUvy7DeQx}R{WL#b5+1We%btptyzt?El zw4Yhi_9P2u3o64dGOJc}8xxjkz=XrSHot&FNQP>_Tb1Ep5!?}){Z~~x2Y}3V+`4y- zaJ0lv>?p(L(Uyzqa*?yvKG@>6M&kAvsJIXIVDq>*(I!h3sGC}>-%dad%(*9mdI zz4R(rti7n9dJZS2_~kIvMOw#U0aZrObtp;yaTT=Cwcmk3#2^+Lu@|tBZRs+c7*p{r zAT9l)H6Qf%Cj{LO!Fbkas5p1HVLWO7`5Ib%&|KkI-qbcdW~OaU6tY#fIl=e`C;Iow zD`B>eT(x3yO;hnX58~`?b6PrscZ*f_!IiOiSlo;jk>nXI&R&dOSdC=2>%{0SZ``8^ zkUL{$mGZ1;(p8NtqT|Zq^zQUzCTXJBP1qQcO=dcKNQnj7(MDNC`DJlKvSa$xJ+ZH0 z>IYn>AS+;j7gnx0wM%Vr+i7a2_wyA~xMl*jSJ;c=)tU;1dw;0|5eM@^)=6?SuW*Ib zJoKx1%2mvCHuPPNjqNx_C5Df-T<$F(Be`?(xJK?+{0Iq`1*RulEv~kH{^?SsRPS=Q z8L$64?7MuPNKp25dAp*Q4uU8qG@n=#0v7Mws&rA; zx<211n*thK6YyNsr(hiXrdE^BKJmJ=g`b^5pTJs4D%buD{3}Hm$E`pQbTzp@v?k&5 zVeukWo;G>3M0=1iyysBl%@KJecu3b}-jpbw$&&3i0T<(=6F0oEjY<;A&xkRfue9g% zieM}Fc43pItJI1Al%v8L$^s@0v<53xVUNY<1cET-z{X85o%?{wao}LH$?%i@F4KibX+~TPWyH7*mYH zj~f;O7+4XBKDkK{(wwC9Nyo;<^n>O-^gxiTm`tQkjR#3E8nPe`VxVAbb|mycKKmXh zjbG@fze?|6!7YAjBkNzJUu%p%qJB8FYY6`Wod6!hC8kO#^Xv8Jn}jMg3`F=5Sxe2G`ufnUV{SMBM|PY^xSdqq+u zuQ^kg%J)pc74$r&f?HUW$yoPJH|SIgU3Y_%Ss>|2rAC+Rc`~C>z(16TpjP1*%{CE+ zE&|N|k=Qc+YcY|(EolPs2((7bSvE}xg|h)#{6!y~eW9pnOKWN_wh5z@4P0lHf*{D? zWtR?ZQYEG4e;np!_xm;j@Lt5rh@&AfI1lCnSt|;el=qmt7Nj_Tx@&pi-Jf(3mCBwG z+FZ{u%D$V#Zp;YfOI{r~|FTe)aG4h1O&Lv&&2Dg3D>_YxK21ZS39Er6a5`~qr_RZL zC+IccWsYj-HMbsCh^<#K#&5=v*QJ~fmV7W{r72;~EUz-b#VfXiX5$`}nU;J6ALH-C z*E40bV~)Gl=$)Z23KyeI9jd^WR^dpg@J^`|QTs)q^dph5^k*|nW{@MJDJ)>GwN9lC z1=&QG(oMs2#;AQ!%su_K$^=vKbSHeNiX@B_ttxq4M>Q6IxjqM*W*Zo^sP%B{!`To4 zVuU&)Xxo&|K+Uy2&gq?`OtCtRgiujV&9@dZW@|tiAf&Kj6gRZJgI>S-42`R?Sih=2 zXyo{P7IMIX=8yQ>RirZx9u-n}_{5){2AxSj z=C`SP3aTL7KG{|)%;~Ox`04C~#u+Q{v*JE*4vxSPI}unFfb==_yK4-5*`P5+XIU}i zk$hE{jB`Fw_Q9CVcx@c4r5AD)2FDPV(QkBl#JX3PUmBMt`$@WZ_G->?g7R%uv)<>het! zR_do|jfTXL(;C~480Nph3cmX|!rd&4Eq@~YqU!z;RW6^HbH?o#^#A2c+Wqz=rM5osK7O~5tA5j+zXP}+ zwm@elCp#BMW1y*>qZyFN-rCUC*~P}1$<7{VYhi5neKE<}xdLr~w$A@`o{U`rhypNv zBLA82Xd*s71uc4A_%<1nfmIl)6w^P9m-aIkJpb!94um!o%ocT>Ku~pC(z;O z<7J=p#n`qc^ekNJod?~HCbrGc)*p-ctIuQ}>p~Ib1XGo>97;-48$ZxWEvFH~ba&FJ+H7n!KJshos;3XML15nWnpaBz$`V zC|uOllf!3!Qy(W$To6emZ~V^e4?V*)Hf|=9HaUy*Y#1=1UCQ4x8~OX%HnVun8WW1^ zAOW*AKP;wO%t)of=d6~K$_H1PNFd7V*6pPNrDCbG>oJ%-KHWp0-9!3bo2^;q`3qhz4|IF=NV4s^4o1zv$3$Ek_C zt%hmLV77Y~detwE7rQ$z`G&krb~>7jFn$%Z`4QKV@hKlPtsp6)z0EIKgUP?^7KxlU z+H8sFu3SW$u(4NFKc;1HYP6uH2DmyvYHF>lVlLUr8!2(vcwK^ZWe?ESv-hC%WB@?h zeTSc&#`Bul!<$>Q3~pCU9g)0M<57dCw%Umw&iRRDEGL#vKAMWbU4Uk#&`3Elm*2A! zuX0m%iNTz5%kn4@lUrzmIe7^Eh|^gWhm4=V2Ko+T)BJFiD(yET;OR@ zs`IWcN^F8prLXe-Q1ypL57^Eo>I~DVr#c3FP>q}o>kuc zxmA(VF74D_gS-rD{mm5)wU2+7vK0{=z^NhD=;-s1}21{vB)vr4*3{dnSOT@6PpxNHzs+o;3OXaRSH z_tS0%hb#g{vjcKC@FeYK1mT6=3J_hH2Do)d@OYy?M=|$xP{T37#)t#P zewD+}Rjrzt7`8+Joiq*|QxnlviqI(8@e3OSJxafEyyoqIQ$-G@vLHND z8P#ov;~6i#o>z#^B(2vU3?!1)G)S#8AW0A-*ObXXYH*$x|8a0?Kr1j=yi%8!otxb8u328m@cY>DLz!clQ__~*zqD>~!S@i0GOV(FWOLZwb8DoMmp%ZdM$X6l$K_fi6`m2HQg-U;=iEmQGb>T-f9%lU;oVec+3Sa4{Q)h>ti*1s|J!J??_dLuq)wKr$ukLL6HXfOzPu z(=x7g{@L`VsTRSoMXSBy)_D?Szv}#Dt(Re-4E~8aWmRxz`^`riz-x1)s1DZom$U}T zROB_#l@2lUQZTE+OTP^`2g+zWX4lN#t+5U z5R>lR=MI-|9LLLf`!xOsaqk%2>6X2V##kTEKY&#XRD!ISv z-Tm*~eaF3bcb{?2{V+ej<9Vl^wdP!NYSZ&AQ(xfE#O9yu{+u0!G9kmna+)?AnS=UzA&giStCbV0RBJx;s~m?~U-;He~k@O?ukH|p?v z?*!{bK^8_U3F`6y{t63Zf9(rs2V10irnc!Xt^gmXz3(9dm&RvVKf_C|~?PRuPX zd>+mm9yi1ucW$-*16@CR{YZvENd`WXObi&~#z(9NKe*>n-RnF06Z>dJmvR)`Ht4k*DypdCqyb`o=uGbdtN|xa+YUWI-;IewEy|-1)qO|5 z+~6%je>c7FXoowSOAs`{kzy-V3OagrlEL|A8SSu+dLmhnOw=^7fvDTgLNprZC9G8# z1H#a3W(Ygsky%z$WFzL@`!jgpn@BnPcien!=y_(pY$xB96SSbTf zg!ESjxw8o)ztxINySU?WgkarB>_xV-?s@QFi7pmKsJwWtyo`t_F67C&oXY%8oaCG~ zSUShOxBc*VV>K|>l{?Yd^Li$<*H1QR$KlrWw@&t-11DrxklbKLCe3(FP1!jAjEv{dfEPFF?l1NUL)oJMU`Nwy#d=GId zgki}SH@eEx?`!OpqYrjOhnV2N@1&^P?b{G-mqztRq5JUuR0E@Vs zwSnUt%}+xy#yG|p4;3vrL)tLQ7@`5qW%iqr*^(+4y9Y%hPg!(tYu3W$?7nn&aaRU- zwayF~T`(N%jMq9HGvR#4+rf7s+P;A#Ps#Bs0Rk{7opNf7+9C`MW$*kkZc!Tx@~0sb z#mf>2#I2jCZ*y@m>9)$R-B*s}P+15sNA#Eq$osk>-W(PUVCP{x&G-7(t9m|BUxho5 zGk$bHf=xWFxpaXatqSunuh}0$5F`JrsUkpm2rLAO$s_CeX0e{Ne8ke8uI-@gP`Ffn z^~E|n87qBzs*CbRpGe=?N5PXw-Lr9f)6*B8>-;b4HZ!z}%s~dg}Ry!~Wyc(nx)0M z*@zj(ipw@;EFM-yq(4hB;%Cx1S(-Smn?p8E)MH&Nzf)=%EXS?NkiH%54M$q;wuTeG zYa(wcRDv!6@R`@*MjABImY|abB}p@L`vKU)u;gMUN{wn`o38Opnu#EPBP;V8PJJ6dW4bRJTq(hgSQ20a9&Hv`W9a!5r#wpEunO0J_JSFR{u z+86a5)_5p=$>#tnK+4kWX+1o~-(lspqNxAm{wuu1u(+KTj2IF9eTg_ljEcxk36$hf zlox5vT{6k^1^W(s7-|=d>X&@i+kP#QjxW}7?#sAZcMP2K_BSP&$vSIrc5Rsx;Tv07 zK8f)UqvDZ4v1?+P?^Tvz*&d7G3({iNr_)lq(sEz4gdb!Fv+yGKXRvaEfdovC*e#aJndgaeyce?5KC$-u00RzB$#Q$j(XrGS%Mx(lyVNJ(=_$$ zZsMPBUR-sLvqgL2O{*G-}DK&EkNH01ei9OFn^Z+kWqNP6US=HUV->IdV}hJ z^bFp^qU*<`0sniDrOh2;=SX4g_^dy%>RY5Ui*$qiJLQPM^ZMTF2*d-&Kvy^sycHw4 zSVMGF(56l4huKMWxX@F2Rq==QUWUF_YFwf7k!t8}#mZxcEeO4((Q)sb`nse-M22lU zoZgEGalW!UMz-a7#O~|T#-rQfmewQn=YmUIQIRo(#_YTB7%`8{twoHw`UP=08=eO2 z>Z)I&Mm}H839!m^B2TS+!q})i#Ho1D9M&0Gl+nHQyK}~86Eh7z!|1g!>lI=yaIbxm z9<;-sdgmZNm9EEsigiuHeQ_FzN0Dle^fseiC;>cIjiU*(!GoC{^+Sy!;5g(AaQ$Uq zrDZE+&!+S|p(<_7;i1IZpgI7c3X_w(faaVvxT;P(b-Db$)UGGmXZp!ZEBsvXw+~p6 zL`MhF4KN8xwS+~s@Zk*wcu@1ZZ#eSSzuMYk(&H^B{f+tjZf21eDo-xD?=TTgN06^5 zKheWtW+fejS+%^ZeFR*MeSDlYXR4zu06|(cn+j%K!uH|W%#fS8v-Ik2V%8${k?fG7 zAXQbm3{*b&k@8%nf3zR8I-iiX>Wd4D23hz8!BVBMgzMdNlH zbfpHn_SeMHK0W28ig@j@H0{)i=<<*E8Ut%JGabl)?TKm@t3cVqMsw5=I5hOALqsHWkJjqBQ(Uj>hu4BcI2dbH-q0!oA#!?7h98u)G5GoTv46q#)U~%5h|NiMn0)ia zuJqK$nrotQF!p#oN#iZ0EL!F?6-CPaO2%+_PpD>9EnWA_UkrtrfeUAtIgW|d8Q&f!#Dj3F6(55DJjB+H|$W@ zDyTc;eG86p8*yILX7r3_GFdt6m<-_7@J+DR4BKJJB z2fFNOolkc<8~R}fRyPJxVWbbZv!Ejo%ik5jiqE~Vsd>d)ngKXzLKZR#Sr$032l$_C zP*m}9aW%7(wQ_O&2l22n`8)N9ZUPoof)hi`>Z~EB zpA?jc?dWKLvMB_uMa594?&M#lR6Mv)Dxg#4O;SzGQiyDySIm-@v4q8s=hZ`u&kHYh zFd>5DGj52njZcld{F=xb&jo9As#*6qT8G>`K5a51#7RRLPe`fON5F+3a>(!_EiRLq zYn*w?7jOxK$QNlbtU@`xD&H}?`Tmf)FK?C6S6@>0MCJ!F2Wp5|AiLwANVyS%{5+>4 zl>yy2sX98YtfrX&la)b-Aw-1^>uyq)iwpZs5Y(~2Vhkp(?%BUo-#YjmfgYOI%S9|q z^+IXr@*{en_Q&neR9V((1C;c)j&zAIKGNS;+7I!Ea2IneFx!`g$yPsF) ze9za9R-=x26e|qdrgbSX3;*%EEHpO3F>qKjJbb){Ro1Z|P%5M%`L*Yx)#&Z*1L%%s zFnWv?riXGwZdq8bPhNo5vvHC+gcCE4$*fT)|A1@xGx&CZXYQIwmF`8qQ*x#vW9pNW_>4@?%yu{rW_ zBdsciOI~}3M%nfm#HjXt(V!A$l)dM3Q6shfcm65)n|utp@p4MF7;vM_T1rOS8$9{{z z!I?C5`Z?(=z5|TDXL0wPH?Tp-6S@ZK=X_=Lii>`Au*|Lw=P}s(r4KCf^Ow>eVFkQx zy@7sSE}D)-4l+AgqhDM7xxm1#Jl%V?3YA26@PDk)Ri|6iv4MX;Ee9^U;#KYIXizL8 zznqFRO1NvFdamDP+eN;y4Y4pEE9e(v^JQ@;0*l~kF`npCm6&4{kxM1Ymdv|3Tigav zu_N5Lc9(QN+B0?!iS;;PzAx2LKV`7+mKZBvOQSRl5|#3tBM zw40y@o6eD}i8Rv^1}kH(?`3TpirM^$k-4v^y#O%HO+5AvFG$9R$hz8KPC zMSJ+GdvarZ6m^jnQ{h&%HXbz0XL&wS)4z%NsS|*E{rY9IR9sZdiO!?Jl{Q+={Y|P< z!|%%x{T|L7B_Zp)d1{7=jeZw6K8BnQi^Xaf`;)Dw=>n=w78APLL**0Q;#V1>%Tjwj z;f3ahGgMX!kse?t1vIShq()R(2Br?0Sf??PSYnCS*=;FxDLE-O`l!gV6ro>aB@|Cl zVGwE_;#UVlW!(j;*Abs!|skE~S$${{8ff|N|$ql3bt z@;GgwJTgp$d6g7wgjrg2GcGgxp|#B1O^%M5Ej~Z!n7MS4zDG2kl}tm8C~@}@D|zHn za(SDaPsHwmEv`Qjkgl$@&`3ru-Q-5&&(l6>u`IJ$=xedE6?$)|qnju>-QRwwGws=( zR6E*k%y$wmGjLV7_qj){&3-A=)E{FDyO5ijS6lB1|8iX2mS-M!Ud?eRF#|ED5_PsZ z-SkUXyQAVOxdN>QM%1RjvZ|c~t~OI_8_4=;<+O`yWoyszaht@l?#zvi zJ$r*egqo-D450=ZiTJG9!&6hJDK>6Pjb&Uy?j730d`LYu7Dkz#q?)MwsTrt_zuCB< z7OzN>YEB$nt}8UxfQA1jb`cJ~{;hz=9=dH>yq9g@_X^0xPjW-r9~lD2>!x5P?MqJWe9Yo6Cl$I)HKaP1;8YE$z zP=G=bZfB9^dy#^H=C&k8bAhIT>WEe(Fh*6O4n{$dVN?N6rif(0EYAXDEu9Ove)3)-QiiRz*|E;CY>O8r32vNK@Qa(L#= zSBcee+@`hEcy$C{?HkZn1@JLN7@pzMOjyuuf8U=l1-J`CR1zY{sx-HyR~qzVYR$t{q=e<66uI**>KlUGfBNj05g+^IhAW(ytAr zyP7i4CrAz|Pj?c|?cAwY=~6}x7#8|-j~V!xBuGf^4dN=4c^j24TKxRZ=~#F*8#FLj zG;(5WkqU2y2kE);v*k)B8_g-T2p~01^3aoJXz-aD(pZE;2Q&mU|xqI?;Wu=p33>93z;Vnbt>j91v$cv*B^s8?i9-f%nOOns%AWK6_kxbjoIG3&kP?B5rdX{LL_rBcb z%v40)!vf#Hoyz}}^M z(nb`k!I>}jM?YqI4E%vk#A`71zk4agLvY}9m5V38Sh^Pu`L=lPie|$KVG4sCyGf-! z%LUV8Wf8CZu(A>##Z6NEl%$ptIW41=<7WXt62F7&RhSGgs9ZgVa!NOQ{+rOQy?6&&qNk%Y^x z<9ZHo*15FWiq9-G&t4o|GeWtyeEOi z9PBVM?=7%r`BV&=8?xnc*&EN`nvL%bwai#A)}Lw;qmmMmwKblLhA_5N-Qsfh#3O0R zU$J36$d+#Ud1t~hZQ=<9g0v9=kqbHe+lb9|$aJh$BqOpk!h|+aD;fLLk~k*xqhUaK z{tk1!)WG~y$-4;ccKhgQ7h#qVDDO20kh9>?l@Jt=C1el~XFs7(4LuiT-~tKhDCo{M zlpsG0(27z-(bNH^BMbqQgaEMxnY!g0(3{J5(Ytej-Z_g8m}6fub>kL+7a)x-iB^L- zTA)vrB41Ni8S?N!JYY6LiM*@g_#B~hBaBme?U%MM=)1uTAnLov0WS?XXM?40%tX+E zI8Hc%8B{+jf$G78Oc#bvB;^?H>EHJHy4j%7D?JHj z)o$!Maw0V=V-WL>1`P z%8D+-UFNL5Du#owc-wZHnPcMfk>5M(I+ur1#jTpUaHMKCJT`I8ZXulY;9Skkr$U|G z)LymrlI4?4S%%-iT_8-?#3trb>=Fm5~QaH9@JMC(RnjeBY5)cMf=xyIlW%-Pr z&d-%Qk&bYDmR}*0b5FZw;v*2dUB85f!fNQPN=<$eDy;^Ie{%jX1FxidyGl9A&xjA{$=!;eBVU(scG*coJ{k!X{LCo zWKtmj(oYo@CC>Hp;o+mRR_zsL!_SdZaoV<1UnP0ytbnEj*!yG>ctN0DIm8x%UO*F5 z?Jbtma#=bEG9g|eu%sW_tRyN@S!SBT5iXdYeepb!B@{o2tD+SYhbX_l=w|$n#1+y# zjxiee$gq;|4et-}Hc+r%DSV^pv+v)y*vD9Tzckp(e9Amcz40>}E@j8HroQp@6WN97a{CXcvfE_yGJk(Q0}%3oI= zT|qqZ(?8EX9SYj`ZlYL%c`wQKD8w)^KbYUYq3-+Y zNMSw9dLz4oTIO&r^>F&3b(1Aj6~*kM5@|B=^CEnz=H~q0C1}oRVCX)>wLedN%uEt~ z_`i`d^$%ckV@b2->_U-7&A~y3-J4d$(d|d6V9$G(eqQi)rI^zC#b5RzU&fWc3xbKB z&eG`2B@#yqBf?ymfu=0B{$!_sM4FM~F&-D7baJBGYTa#$fHvjqzhkuRGXCPC7Y_|R zpw|?71YTy#2v{!N{1nlq+!)#nzRVIGpP5&DJZIc*;8M~5EWG*%Sz$lbaDl1E=zypS zQf)ws4!IGf=T67*4A1*hdCO6TyrHuliH5tZkRt*KhwxFZver_)pD2o&__E`CUAVd7 z+&n$08}~YtVqs!g+I`gklW~xz!#vcx?A5Z=*e6V@X`rbrBqJ^Fgza9Fu8_guOGITJPsHxiPd8obRBy< z_H99c)eb9T3`WNfan;{*_9`yf9aBu;>1wG)iTN~96zMpwfe>LRTdw%DtCwidm+vkY z4|~hMir7XsW%EUaiuTJ~88fobsFkx|r%=ovZA-5F|^X*TAk1SGSVx)T`E zrcq)PwlS3B4$r*MPP?G&k<8gTPH@lFjFQ3pGr1fgXq}=c4DfJ&0sJ{faY6r$oHawy zRZO|vRLfBAYS?;PBv0QM)DsUh*frapjrJBO1~7V;OCaSPwD=41=W7GLMAJy+U5>5IRTujEF?e z7|lhEQAAEkXr0+&hy=YimEPW#%?8(oWgN^)vhz;fNtlfVle>GK;8pkNQJmx=9f}WH z9>i5d=Zf{+#kvy7mK?Q^UQgm@K@%HG#0_dHYvnYYRhEH}Os)g|nbLl{us1FE76HJ8 zi~cJY25f&a{-+BcdjEFeZIh&ZP6&F|A6Z73nO-fEY8R*yI$F2;qh8+hT@ft%A6qKB zctffpQgpeQ9^DRXJ@4j1=p6Zbf$?*$CAwcLdfTUXxDS7wfZx!Z-c*{tABTd(Lo@UUxf z6Z)p#sJGrjw~~~tKixwUv2mTHoZxTSaqA@Ly{heAGVBFE;k9_S_S*HqyjQbk6TE<^ zcdD`6soz4Z(P=NE&J%V1v?jlJF1c*)c~;fkxYfSfw4S!U0Yu9s!}y}U|5-wvatC_@ zY0%F>B+k%m3)XCc>E)`VN?8-UDng>hs5nE&`w+8L~QqgOv<8Pu?J%zo-0nS`moDrpz zhkorSpU(hi{ph>?6=I(ryih}bet^HtahDMUQea)PB`43fzNmClHIxEGRarJu;}smy zd12D3&VeuICl~8I?S=8kS@l?V%&K487_jU-R5J>^4#?U>DL4MHw3y9E25OR_ft)hMmYZz4vg<1^5l?nb?1tG3J|5=oG zLs(+ag&iQG`@l!^4e}76$M?X(sNvLv&>E?X=riT#q>Oeyxmy*Y!K-e6PINRmd(+2g z7(QRWv-3e{(2k~>{$sk#ucHbj+famWX@IAHNsGf_ld4EQX;8|NxE@LpUyOJv`glZ}o}?z5n3v}Y z&q0R#Z*Tk=_qktmntfRk18nF7_$L{`l@0~|bU*Oh>qK5N_u=7yfQ)edKNfmA{IlN~ zzzh_PTrK~8`wnfzHT(`=H}Uzd`Erj@{Lf3#EmI0tq9Ha9-Pwm!%B0nXs_deXSQyd zh#fYShWf`2PA@ zTL<37hM;yZuiW~5kQ>HVb_b*gF#rBU|LkllHmutlcWaE+N961aVC z@1lMtej-|$z1ybon4%t<* z$sB_sBL>h*d$mn?pePj`7% zs=Ut`p0L6H!>OIH>W7pWJ5UgI-c^XfNRHc$(Oi;)+MJyF;^JL=IX3*(_co17SuZN^7LMn zafmiBrZpH9Tekye4C39y^hgj735m!$4U9e@)#&xgqiIZ6C?cMj!Dcj6pR_CGolPb0 z3p9*@y1sde?EzLqkdAq3|^x>2XTwc(^ihd&J?+r&G+%<_*cs}*=rMbao%-@Fv zsC$*{hP*q8b7(fIXmB|u8tOCv`xhZ<>m!{N*=%>%+oIh|lZT}5X9uqr`GT9c(sQzI z3;(AjtTq&Z9f`>N>xMzb&Yw}+Wd0+BC;@wnkv%UDgg7Uk~W+mI;cKUVPnoaKkPhaTq<0c8gL);}h^;$bZNhFd=AgH#qS!8=c)h zX85jrMWHX~Y?mm|?JCv=MYNXFr_2;YDw(!r%>|+D(%meA&I)!Pu)ylg!aAxlmD$=h{k>n#Jsa8bvAzD$33^jrM8q(4S%45u=a(z*b*2jspn30T3k5=n;)(=C z1z&u{;a8PbLp`<_q>8H4+OJu%_MBEs%C*>}!FO4bh09$9jPF|)5n(B#4+|f?jZYu143L}>_4F|x6N^@6EXkSGM!0>RYj~^d7yXP8{emp>3_kIUKk-6Jn}J9-Xhve9MKoHFhJZ09n`>d2wklH>C{QP>UN8%j zS>}}X0C+UUeXKQMEfjXq8Noi!q6LXo@WOY_yb2^ccv*%qU{o<64hiX9j{0l>@e{Kv zJ`%y`VfFifCFIN-BLnyCY>+%iWBA|^aM{n03{15mvPN^(t4e1@!LP&N)Dz`5$iW^e z7^qVzKy_6p=26ZrE?v2%memWdOrcX>a4K73y(uq3E+w#beaKcWhIyZc+QRYZS3ed^ zKgL!Tv>wb+LDcu_!;F_uPzb{6@~i({m6gg2;suAUZYhOUoi#-{U=b9)Fxs5PTDB}R7xB@Yx=M3P0c5I;8&xL$6jocS9O zib~|6C{^5G)*;LmemB;iOt;pZq-8>Nc~D=0$&P2DN-N#qH-%p4k$DW@*PvKD z0AAj6#22czpyE&*j}>i=lrq+74RyCSztQpO{n zJDp4!!*U7_c+)VtZ+@RkSI26OX{7olgfp{fL6=y-T0zr!pdB$o@kl0(#GOK@Br4AbBx$6R;Re^4?6F4cfRS8jgimm9xcqj!T|cfug3Hni+Br@w$qmE zbSZlfuH_75gjNqeit>K~^Upk7^cEz{IDRHdW+GIQ)@fr=q&?oLK`VJ{STdoWGFkZ* zQnwg-5%>zWXn}gqB(yk)79KnG(KnSE5|+a;D+#1vVhFOZEwLG;NG9iMe~)}vbJV)NRkHUoC?KU zC9j{@&uyRN=WY2w55)l$@a)N#y$DCse zLNzu&G0W39`I1cdT|HLAV;(Hzf1O4{J+pJ$w@>R3cH9z48RVlJ8qCr&&QNWj74u8V zA6rQY&p6W(j|wwiZm5cxiuS3_q79QWzAY(@vF;jIFiG+mn%P)hFQy)|V_AAYf^L#< zNxm>Lw-tOGUjdn^XKfyB$ccd;mf6VCBL{xLNI^>lGq|iHm(t~}_Kgta6|+fF`cZ5r zCcegYSr~`LLX#CKZ^bQ;a`EP*+k75%EZUKVOhc`kR~&bYJps#>P?XCS-P$kRzB=l& zI`-C@{N$o_vHnaHe@#5^t2rz2LPoeB?VICp3++$!&ES^$eW;B6vx3#9{JCIXb=>~r zCTL%&%Hs)bSOX(|#|Yt1$}{*?{brQKZ7PZc`6bC6oF&q&i37nPzR7iX$f`s<-(P+_Go1g4N&lSC|A*T^0n$9p)`cOF@0jdI#C zT{%6oM4kgCu^t65(B89+KEx#U*(`q2XvYVEgON5_QB33tqQp^i&j7WPG(&+tLm+II zWH>MrMi_z!{WJv2J;cKaR@LN2@T%HDqrf=^&V~Je{MQqG|7T#I-fX-s}zkVsF z=-^`IYUN=6$N3^x%|-!L2#pVP6VeU6N)k3oVfGRf)3-njEcLazz&OEQcde;9O|RZI z_8s%%a~72x*$w1#am>@Sy|l`kkjy|X>p+gnOqYvPz_0fk)LwMnWu}^aZxj%YBrGB3 zNH&ZxsLg}g@?CWlZj9%Clwvdd7O$=WN)N6oOR5|1_?IUxUPTAe*WFDK_;|2E$e@?{ zuncr zbg$;0ziaAd5xkxo?RdKdDY5GK+w`>1?=5{hN#Uh7|2oJa7AalHvrExMuz5jiQlf|~ zS+6+e;5^VeR(euC&tGrD9+dU6%{Tct=Qf16%^B2-#N~Mg5u~sJ^^2Zzjq^aXl3V`- zEZc67y=sE)N$(TyJh4|~2bE(}J_dAz7AWO)#sC)rCA=w*F zWWWIdLMa?f<6_Yz0YZS)u{ya$cX7zqIFv6Ym)vNtK*_qn7n4I6agO9M4Iw^gswJ(x z+mPQkhT?)L_Q7IUT7ih?zzT)>F^z_$=%HRXLTOLkJ2!SUt$3y%$!sCN_cCU{a-ajLBZyjNJ-!>8aq~v>HZAH5?5KLTfvnC`(e@sZ{kE_QMiY1yd_E57? zcB3;Mu85%%-iTRkey21h1D-s3Oz;-n)nsOlQo7U2dweL8=1kt1s`FN|K*VM*Zeemy zaFUH1;2uin41q7Xfl*mWK}aj8cfSan%W*9rQpjx!1U8o4hbaWR89sz7AN+IxcY@SP zbEo?T`cLou-KBS<@7lfs@LG95ndz^Vm`njHa2Q41?CiXLKjry*iAh#Wct8;?N5g{$ z_)1Z4_sagQmD28P#Q5_7a4Tw(ujx!WrHKP!d<{^=C^?cSca$uemawT(L(>uqF(ZuYM9whk6n_6#oW7Wi^vY5hQG>rZH20eT)S zd>(@vr;1dlS2$)Hr!; zKn2gVVwMK{sc`fg7Ml@XU?2ceK0y9z`^dk;a&U9~16LFJfFj%lUufRh4AK!lPl$=R z{ubGAhltWgVQhaZXOT|YY24ixE6rl9q>nZf;p=D}SUz!=%Rg7%f-M?Ov(g=mB2AN`{X)c`FBDlu!fe3Jg zXFjok{HwnDy1{a40H9s~@*i0@puY-`o9La*OdWosVpouX`OJj0iRm3~q<%>C%D=F{U^k40)7Hq=nqJr@Px|CBD;!Yw*l|EH@*-~3-FIwV>5*w z%>>8Mv0YNKm-&AjFM?Kj?74G+JWs=Bn-R_4mya z1A7De_IyD`%jS8WHGQ{DAylF138@n#z2;duBnGt2jzX?bc2J<#)kdpGhE)a%juM2H zwlLMrbyarE z*bDqJp^mP2qQVXv#t8Asd(qlGzcNS=Q$mx6G?Et(*-Mm?^k4WeZQZ8+mAmhKBN+mP zO7Q}>^QnfoZ=`r+OkUYoJ}1TTNL@NXp?q6$Tl#8n+bnp8^{VNT@Lx?kX*cM`9RQ;U zARPZW99uKCkFXjGc>%VK>yIpf99os(~Pr~h2{S_ zEPyes|L=-Pv6>W^1@Pfvz_VDU|4cEq46dH8c4?=^`!sN&0W*(OyeS~{Q=;NANLsJ= z8bz~X_wEZ^`L>ThL0D~=@Pj@KJ>5M-9&SsM5W}O2 z^k#FQwg*DhUUbnKMEh%!^;gSMmS4EabTy8e1_f%)689gPQd51XSy&Cwe65Vv@>s&v znJeyHZfkyEO7gU$A)@R77um0)hgTHwg665^2RNOJibH9jEem~D%6wp&ND)_!_w|dX z9Cbv5O>&B!b<~`?gi7_1it}}#viH8Lc)bcbF|1<{FIa(2G4rH@4&zZGV#Co_JZ_}F zh1T(xT?9GguA)T1Lf&^9m20iC#+Zr1n5w{t8$SY>@uuLLRI0{=kh15}55Gr4*@k5< z8S3huO(~pgP?&oSS`jMZ(i9WakhA&uXun>8O#r z`2?=Agd~*o8IethXE<^d1>!zke|D7HkS)>y}!P9a7?Yc;P*!#>&j^-yNS^%D5h4Pqn2jAHprAkuNzC0 zT%%8f=%N*Ivu&T>U@f8I39+W{R`-E^f$sV#R=uBa1;*lJhhqFA6uw>)(Pec&em2X( z`nmz$%o8?)B?P8x7gF;$9W#c`N~z-rhXJX^<2hwR^L>ok|E6dUlkxUK6bweGm3?HM z-h80W^GfCkQn$Xob$9P348sRE6t+?+G-?krLyL|%xzd41!%E+FNsDzFcd)9|Z{=>< zhzW^MfZE?wukZM_u0eCSf=kWb0-QTpX_g*Xhn%IKVqWr5{n}2?) zKHLXIz{@WVeaaagSOQ5X^E1~@(OtX;y4gdNMb%|VGTDNi?NGP3juQiIj37U(SCD^B zDi2Or3o3_zF|N~TL1zd#YmcAh9e>ZW)`+IEU=X|_$m4tU!ag3q?aG>cz?Y^p?Ic-7|C`+w8bQb<(bVeCQ`eOtVX4XOLhdPx=*wK}OZUq2Y94}kU%1YV zpRRj3=LJlzcmY@99$#>9{9*&dJNS8Hdg5j#7IK{q%9YulGy)>+H5@vS{kAgGC9ejY z?GLJskybf6vya(e>4b~glB#OS7PSzxLbsf)N879V%;IXvZZAMp$z7loBh97pNOrY@ z0uyo_t1b#qWS!1P=i}ARy)!ANfz??r(O_x`phx*v)PRU41*KkZ`C4exOjL6WQwz(0 z(Po?UL~~OVdV&{#q9lel*8(X%%XWZ{IA{9EYbzK*;Gm}=&Vo2#~){X8wlH#LC&k*6dF( z$>p2SL6ndtYoffe13p@l7eJ@md>(SD-ln_D11yV~7!VH9%-Ye5tZ=rl@(u(FOH+(9 zh}gC|ToD^7S_yv~r>SWAn#f5&u9U^k54{O;z`ht~*?^DHp&8ggSVS`i z=4MVoXMgU4-;j_MYHR;gjgT2+1d2$_$|r=E`zzw)`A^K?H%v;>w~^m4TLHrVU&H(d z*CCf@Zw6(CyLdvoQ_a3)Dx1OQw*a)?1_(`Nxh!_iQ95bsjn^Zna$hzfN<#1@Bj3CnWq&%3?9n&==u=o@~-vv+%`KQ+*kC5I~h~ph8GfHBlcF`ddvyEC*M8RVGJAh~ZxEP1b}b$(-Np50>5h)9TN; z=d==25v@{`oimAC`y4K}Pb9BDg2N3QjBtOt{m=>^1rH^SbA1Z5c~^UT?wSk#{JJZS z1wVw}$eDw2T)`f=p7{fM`|}VzF9i&DbFJ@O8g9OWJ3Fb+R@XVqDgU2t8h*n>Wj{^* z2TZ>IT9>X4j(>}Q|9^qx=eRU~wls9O5^8)PX!{xeqoH(mb2 zQt{>3n*mX$N?=n+L5@?#Nd7edlC@#k(<>Rv!v6m$>V(0DjI)=xjGzXav^SHM)w@oe zp)Pxr2=0PW`u_9--9S;}Hr%)|0D}Jn^6buNDBEGuwmaRu!DPWIy7kYfV+M#i@sp8B_loy#KM$-}pe3;J)?LhUc(x&NznW@x^o~h;ziV zCsvNsyBEe5m+%%!q+DX#WSP&Ei)pvYI!~|a1kFBUcu{VUcsBp=zUQ;qw!gCS5k|mk zt{nnQa^J}~JqU8^AA#|t?|P}g*s4fN%$gXIo)WNWJ4G&^O`eyEeh%4YogX7`LNWn+ zl;`%(nqmA`bPuz-ufNg#K2rS`j_7J>Wn%NEmU%s>=gDTmJw~HlY z;vA~ygnHy`38o(9092^xhFkXUDg@Ni<9~XAO^P?{v$Hr>B z5$iC9khyh=juXa~6Ah?ZmJ5t+kRU|k`sn+~pKd&UhnkY;b-jO>>3@+n{=oPz#`?d> z83Pa-52nopLi#}Kkaf62;J5SQ>4PV~Q?=~Tb?&P|RInYRt$+l7$9eJbDN z{H@0lfbat3KV$%ZVElVD{ofdF@*QR*3i`~)`*#ohucwfLV^@^xkpB(iZ#CAgOa9-~ zC~6)r$+wH6YdT-u7XyiL5(0w`P{=vLkpFhl59 zP{-=$nVtgz%iA_PhcRoalOd^|c zz#6#j3lHtj=lvClk~NWHT9(s_mJ55n#6Y*F&0G1Q=*;At^8X_4EraUZmMu_%yF<|6 z5Zv7Z1eX92f&_PWCj<-b7ThJcySqz*ySo!0*!vbad!OvQd#euj)v5Pm*7`kq_Sds} z^ypr(j0_(VL1a$S?_>_>+w*Z(gp>h_8#VC%e96$SYz71i^tQ7rj)r_lW?`Mn4`(1wAO#SsKUqUU% zYuw30c>M&%}7%`Y)r z7%Pw%bX%|-!HMbO`Zb1AACX@nFdi7?(U?=jzcl?2rYj1j8GKY*?k-qTEbOuh9<^|w zHLt1VJJI2)`^=4^GO~)`=>(OiMpsp-so%aEceodnn*SyV2ItHTYF|%69_EB_h9{^QC-jDx0Q$ zO%4p}taN$yPKH$n;`~ZO*SRAX7XOTQSXFSX8iRG7L_~3L^#ooav07DN$@Z(r5*72w zgd?Wm*>$}{H5Xm2QPIes7Q;fENxn$f{6Ei2Z0uJwr$ye=xRTIcdaM~*E7M>eireQ( zjVIBryobq2UWw1(G|1Z`?p7?$`$`?{<4lh|tJ}S^07sIN9Pm1V$mNU)WxV9(CWsN>=WO-wv)C>?;}iBc$YGuixvW=wIFIhy$D5c z%39GO7S(WV8m6%Qk3HzU;+Z4D3kC+K7Dr-Ci1yWM5Y9(i36UAZ+v;j%_%6rls5t|B z5G!6QWY2Ck;T33v7)Zol<_VW&NMs1vRJ+9w9sS`UAMLWkJOTTF8eESGx!PLR^g4!G z*1wuS!NQ<+iP%N5cHC`ToF)=QZ~FDK^i-}FN?E@Cjz7N~+_~^wy2s*%oZam`;ojUY zQl`$LuTpO=XL)a8hXt#L%L-!)%SX?;c^{=m6M7DtE9?c~SNh~=mXNlI+AXOcoU z8|-{s9qW1Q-ZbpF%!Z6^>*qpKTC&`!OK03a3M^J36Z;aV~^s)qScuEa~!9aV?o~Yg;tr9 zEQ^yGK4vcNm|{}?k*nRq@80Ricp{4#)tLk8_E$BsI#bBN#-yLF4bFN!VN}HohZdsq zr!EM#``=?%t4LT4vAbWg&3*}<+>?s2pTPb|=K}YB>gRLe^wqj&h^3A(c;~0y0ZE7w z+K9OVCezP%3O*{_*J{R@DOgQ6i5;=OpvHBAE%h-P)$v4unKS<|#npGBQbXs7hhMg` z#&hb{`Z^qfVCq?da*1$mx~AURS*x8~;pfe$fsB_hxq__X<{t>+@2wQCz9Tfa#oq6n z{6Vk4VSGMo1uTgMSoBeSP;D*H43-nUo|&bs(?hVA7qbUya&-{DBKxX}K!4@}dD*Z{ zb9kVC+r)4H+jVRH1S!hz_IN_P^vB$2-E;WY%HOx^MzQoKn!wX~V&43mdJ*=z3JpKS zsfva&rz{i^k=}55X&*P$Az8&!kH`b7+Vg2<%@disjGCAtdyTjB<(dj=7s5mm(s(3$ zUM)+_QPyh?axW``;}U6JP~Kt_q;3MB+%6%sNbncKeYeS-Iwt-`mq$b}k(^jEX+vMds6$^RUFTB;oxHh$FYZ0;YR{GZY#;#DyWjOUtku=^{ zy37gnmwb$ru?q(?#rJ-%vP&3h@ZpDkVyJC%VsrOGv{9X#^7k^jGSS*Qg0D-B#i^DR zi9eLK)pv6VZ;hIbnslKCpX)$L#7k8V^Y!0)?UWTBg!@JdDymr#6>49rx? zn(*v&NJsh#36G9NY!IM{`vNXLT&U~|8CD9th^RzFwlMhW%JW)xt;-0}RpL^1Go{n_ z;rrkhUhCe=J;O{@Oed)160fQ&wY&5!OR_sj*af0uvP(^&e-^c#tPlH*k{e&MC(=H#bEYw3Q12jTVJgv&ZKaKVFG8;31oFe`l%N zQyA)3+d(+&uO%!F9fgC$ohDpZ{J8u>9YHSRS}M#R90peGNJB}PxrBU$fo8AV{Sck> zg5QdTQfz4S**out&NZxeFzU5Pf|BzcDDF%oSy zI8oK!sunVdkH}6M<8RHdAF!Llb6fV1be}jsd7j;8oQu_j@df+?l&s5(@-vtZVIyGZ z*WAHBwMG`m8X3Sv-$kKLlaaj|_s*`D4EZb|n&e4~R=-SqZvbmwHKd**6ZGL9hLf#u2+i5BV>I)g4kut4Zo4nt5I@q?(GX1x&}62n4|H{I`IE&sbB4$~UriP|MZOx;l z?^ljsh6~j=sTSYAgE>g3Jt4!DHicv_6)OV|RhA5!?8lN1vi70o_|_Y~i_@b@L(8=G z1Aa`x5FB1lbU7AH?nPj!fX%64J_fssGfeq=mLt$x7q5Ls*E`P#aO_RW3x24z&! z(@gn_&*}I&Vy{dCZYgDCs#X)re}Jczu$Lt}3YXZcSp< z)-4lqS!pKRd}>j>ApG^}r*dy+jbuhtggbca`l3=*H`a?Ek@tE^h}`#9vG&s$;83*hmY27mX->My;JO|j z@AMaxV<9B@e=mHadFeCpQ~F8XQ^n!T3CS|f_uGsgAfW`X@~9fhVDaObD%^Es`+kn7 zVpCUfLT)!7fcLfkc6sYS6c1dQ>D>WP+C4goTN~-=>uA|Ll&kCtt>*2-h>h|yg74<6 z5IucmBvBd<$+9cp!(*!6ljWYASEgaK#cgh0(4mB~wcFe_3cSRs-oN|K#%(Y_zi_wF zh5o7?5z2|%!b(|KxPi`QPU=gHw7`6F1}QNt>Nh|kpjmToiZ+z-)7+CXcmcu)VvA2a zQsx`9OFI+~nAKjmn%hs^(RhC_Ga-}Fe*gK751J#p;APrl(a-UI&fj@_bsfvvYh-A$ zPOrL_(oC0)VAc6xhaflgMy9u1nNZZ02T@-;tnh1v3vUUpyajS+LnYLCXDtRF81vqa zng*Udg^Q6Rub1iRKl)@~0E`_^EU4pchT0fWQ}h^|u=Qi#ax{ zLCi>)0TajX`cos)t?`Dl%x!VycQq0TDGS~s zEm@Caziw$YA?IEtk0Rr5td`QM)=$mGYf%B)@ga@hZL`Nl791!y?i{K|LT!Uln;iRyj$>9Az2sh8un zRBE@i9)+aJ7GVM#AANf~K@@UV7<_t=Gm=||eHJ;neP3YmQ*b=86!&JP^!nvi6ea08 zA-LKiPLUY($Jr(wjJLDZ2W$c+!a@o!s6%FvgxJ*)MU(=|Wmr=K2lS9Jk)4Tc>aSm* zzPTgWlD!;cV!6|*xUhkOPt}vqRTQ$0u5;~w4>KI(?$3M-U(A$#=h>g?$#r`X&D^N{ z?JdbE4OAmO+fxo5Iy(J8*v99Ja#%BbO}}YNL3T-EXW{@A--W<=9OqWG384clKb8`&^>rv<%W*OrrWb}bs*TXTIBJibxYEf{OnmJ zz7+U~H>L_p_)4^G9QeDS@KZIa(Ntz{WLdS>Che$^V!JJ=vT-caE%yP6YRsatZ#`}}R#P}EVQ!>g08kynmmH;hG#EcOGuBeDzy?3o>Xs z#R0T4V9b4hV13*hU}x}<*F}iM5HKV90uq5c=EIQf(hMRa)i^-^?h zz7{CM(x-Kc>VmG-U%R_!1GOBToYG>2I4}Bz8!jMN3Y=7ipS@i)tJG)z!1y*)-A!Zo z!`)nid-Z~&l5C}5lPlZC?Ed%FzJaFMX3vOYrS6VF$Iow&l*}_ko^ziByIPTVpe;&~ z@`^(6_FV-;OzaN75}Ml-L6K6OOT%h#%I8q_8^Qz!M9V%5`#UwzC(T~R`Cf0MvK1)8 zo(4#EuQk{x(}*?k41|Om&y(cyDJ7wW(<(=5od^rYCG&_H%bmW)bh1ZW1=I6(vRA(9 zpk<**A%>8AiIDxRSy9{;ZO{X{=T+LMy^x?oS=o!|7vRZY?CQ(z-(I*4;2tZRS&5 zfFdxouzuhp*%f~0rOGgPrm5Lo8fZ14z1E>P~7G-XpJo^ z^!0czKO%<}Dv^9A8Qm9TK6kYH#(mIr-H)n9@TS*hSKL0tZ7F-1$9gYpRiz}C-mtKR zF=iI5m?OB}sU3NV|2nfoWh8J@h{o@bKUgETEy=lYclo!37i31T$fro4gqIC4ijHSIMP_N=O`7 zKb80*zI8+}6f6F<<9c=`4kshTr)hzAHEx>R=fz&A#{1XQJ$Z*6&9fsZD?fgkVtKtv zQ%tx*G&FZ%6f8G4}vuM@`__*t*3vh zd^6$2GzW5BRf!@rl`^#TYRmHuXj)x}tXhcswiTp6t5m2tkIGMy-RxJm34a*G(B()4 z)G-5ptX}~J(KFZ8dN7CEzsp~d14)k2H}pGc7w)33tbE>QAxR$Z;-Am8F%0Oy==WD2 z9^(=XJ5Ws3UZvZ?3j2u47Hg=Ijvc=sMl4*FS_7X$;;%>gnT9aAtpo>7BF?b0`sDd$ zy-r1Rjo7s6P(uY>xgI&Wz-u2P*Z{czMX^o+*Eh9B>98*{tuJ)d7$-ZhIhjmdJG!LH zgRsy1`Y?Y~)2Hfuw{|Q1odN;*K}L^;BNhPp;_-f9rf021Z)5rZTL}!l{xoNHQg?A z{agSv zVZeEmSm)P0{ic8TFJ6;D?TUxRJX+5Zr_LC1rKf|+75SZ}AX;vBhC5pPZ)^?dif9H6 zyg`l^1)N7Qd%pnvCUyW9Mh&`$IZ!CZNW`6E-$dR$nEe{t9T798q%o7*PTV)V#zX}} zlAr(Ob-zmDv^Gf=CJ|JcHIn^M1sPYi3GWTB^kl&^D>q6we?oiP?OTW(Q9YQh_+;81 z&APU}X}1a6@911g8FK;UM>5T<3eyAZ!exPYh3a$Rv!FFXqi)Fe(72}EccK8}QneC}N65^$rxc!P@Sc(ihP z2R))zkFzuvV8Mo+E8>ToiRAcew#pTdOqcf7}$LJS7jo^C|d0oSbqmT<2Q=xw*$v&G&vL+Srd%rnr zX8KOLcV#`LR}tC3^9~EsDb#A8VRpD|sPMV{j&?Jd0ueZkhHa$a#^rA%2FNcEm8mvC zjvfx2#~IO3>u(mX4GeY9CcsIxd%kcJ`N&g#?)IeA*kNuzhv@&Mpm2XsQ1Ac>3S9J1 znHMLr9=(>$NvWR|P@*WT;ge|V@z$~$Hs03K)-@o`V)zaakg zywJ;4Mz@0@7KYl7C}D(f58Uo+>Q@EzCv+Bg^ur_Mx1f~s&WIlSX!VuN#kL7Z(fb;x z#B5WcN{LflhfqPzTGAzSl~@LyV7zwF_4L6=JUYHWvJAv36K-B@hAn8u(9$+%+=pJL z@|ix|aP|_)L)X`jf_5Mf`9Px6TZkHWcVO0Xy!8jR5aqfPKLA%La2~}q{dIkRKQ!$B z)9qcqW&B_P++O6s$2ObWHBU;C<>>SiKEbs)lFvv1Sw>%ssZgz@DK;R6VYBsdDYx4P z#!f60_`;y^hAg`_SBRFLNp(P;dkSt4gY6&iPEzx3xt}q8zj7PK0{5p79QB%V(Il!v zAAK``=V{Ei$V)y9{m%&9;k^puYTSuXR$1mWlIp z{sQ&W1gx>BATUGvGA$6sLK7!jts427OXe#D6^mdcGD+@{g8Q~@*8mR(Y??)f3Jq-0 zJ}*^{xf{NQdv%8<=JVV-jgQtvooS_K97`n3OcJl%Bl7tCm*nwIJtYTXiKY1qiJF6A zT-3zhSEiEnnaw>6Mc(`aUjrRCEms4IOO408(SE@2Mg%(CXs z3vkrU`y57YS4M7-t{GM*u|bl0OR3>DMh(6;8~&e?Mo}&xDv{hx-0r z(MkFXYQtBL3z}t)yUO{j`3RsdrupJ)vxR0jAuUQQ#Xcd9!S^vb4BwrWZ(U0Ii4nY( zKP_394|*%%e<>DxCh4=G=QD>U$%Gw)-#xXX35BWhj^$=RZEsoT?K4 zW&p1efcJ4}lc|xVwuP4U0}<>NCW{QH@_?Z$?Xg=K=~5}g63au9AUrA37ZpZGIS#&M zY?R~87mZG4GYvW@DaXgI)qQ?UM3r*XuksC@&u8#-*myBBm$6;H8bjR)oCy@na?On! z{jBKw=!s|i9SdyG74DgNAXONNcJN9vW$t8d8W4ozeKr zOI=mrs`0Ebx&wK&F=(_^LRY-bjIu4>m2{HHxnJ?ue1jDBde#>43&c65&r6<0^&7qC%bW~c#70_qVz?wvKY`1Q`R%g=&_q1}Kw@x@}KhMit6ip!!nA{Olcb@{vF z-KWu3T--TEk!+m}wk61i!)gJjtG2N$S)#pTm;0Hoq$J%*h|gsavyQ-D%sP-fv)`UQ z!)Z|%YC430 zNyoN^4$oj>PVWZHAQYjUmyI@Ld8o{&b>4|jj1Ml!RmogzmJNS@a!x69G8yRhedmu- zu2#uEeGjmM6JUqOJ-wzDcDnSs77pg77FrMf@mfLM&$r=S(a`=Y9u!K({@aXvDeC9!=8H<}@wE|fBI~yAPBbIZ zT=`_3rki%R-w9ZRwlXnONa*@OqVGRos9Zp!Z(hzSMZM8X*|B6*rF zKHtV&!IIRY7dlalt)&~NOjeZ+OP<9g4JXEEEY^dZgx@;aCT3~y$^}YR6U|F3gV)U< z39liMa3@o;!S`q3rWk+jG+FNZlp1zYbgeh%Dj0#37H?+m2BFojW0xdu*qjrj7{2X_ zIs6em$>t(GhX5lo0Y-dW_72tK~VnO_yQrS_BiNUP+_nF?yG)rMIlHZu~>4Yz=^CX zfh2fE+>bUWy{*yW>Gb^tkS7CV!BCYa+H}0}IxUnGS!knE$0!!Gl=vpNdMt@Ma4IM& zbYdr7%pUpu_n6|X*e)S{j<>%(qnkjICr`!r9i&i!_&9`j2#ry%wQ5>RL8 zIP~laG@Enn)j|x_TyN7h7_BDH6+3v?#>wgL!Z1&nVpl63T)6DfZ+sO52EEE&!p@*H zb9%vqLn68RdU(k`b!bny-Mu*?#-x^t>R2757`@u9b5eGlIaTXSxy}`$U6F1~1{#Xv6vn|=>`Xb6`s_s>Fi%1dp?UK)TV7GY zv6I$KJqd#7ysh&{aQhyP#vpL>-DXUR&cyB~qBNTcrYWNalxfWzzYTZyw;MVpZ`YOl zmS)7JeO{}&j*$#JWvF>IQVm&q{j*g3suJqoFB8Z$aL5>&5CFHpcx-n^$Ks*8BNh($ zg)pMfC~r5x98NFnh?)-OO)?Sr zUOMq#{lw_S5XTI!A@+G85b{d>6Y=?{WQ_j!h6eVlPvGziWl`1cbMPr0k~-L0JRRT_ zqb;8h-f^0uwW8xsU67_p!E1?Zzl9uch>`k~w&1~`g`xcJ1A^a|`7yK6l%HdA>FIb% zDtnp;KI(?My;I-HXjDnm4+MU$isqw$EBUu9Wi{<4yF0%%gzwvTuT1Nuv@gmS&wI^M z&zp4KPV`U1e(vB6as?bH8aR(DQ!GqPwJdG)9$q_8tKh%2x@R>}&KlVMkqB)6=u?2l z&CzJAi%vweizsTe-G>A1?Me83Zx6^>HaC6vLBt10;qrgO^jBT^U&N#j&>!)ZV{djG zXcr3`q7xx&mvrZNtae_ax^^{g-TWq?1wnEe8nkc*;D9*3$7LjcUDMy?xs z4W0w-d|^d&BD|9#LVUd)8LYsnhVI>O{00b8fR3UKXwV0AOOLA{|AJ)qF!M_Io2uST zhCtn0y9`)C^!$1J$2>)mmwaxKMR%*mOTz|mmRb8YJZp)eeiNi){ZogFpxVmBlh~?v zZ-n#+4`Nd=rl!xPnE;PTvo-w?Y-2SE7u&DcxWA<;*E70t9C9@q_HzzTz(Hm{^*3GdE%AwHH3uY?qKB@XeGd4uQP{6r zKs}~tQ98wOQTDP7S2un2umF^Ot?6Uqg}rB6B8gk}cQ^1}D|)p}6LwO)nO$m4IWwvz zCR~_VS2aheJYue2s5HugPN^H!&ArNW^D^Xuv0i!HzKaX-a(2k3a2d%q=`rRTI1OZb z0cE(YT56P`V>WZYuexnVnG74D4rvbOx{U0jTHLEz8Uxwga(cqTA0=d^9tHcfvLNSd>SWZN5 zV`T?4SU?d9AX4l*G+{L+4_b7H+)2r-riTf4g6mV7Ud>$@*~UXeT__YT$=>w=Ry~RvnC@O?W9y z+62z{hHAn-=i+Hy{|Cg5*sK~%dpO3-{ycCg#`&17z)AJ(cf9Os&JIp5QTusKd^Z35 z%w1CIIzU}pD!_*x>pzxSHZ~6^ff5Wz2;G2|?Z`#uq-3}msAJ2bN61B0HC0;7xgQp0 zBPYiY#^EmhZgZ2?o;34JKsw$g+tlbP2pH`rmxt{c=l79we6q|OO!E3F>Dg6TL6Smh zi`UcJW3Z7X3+k3ejJGhxLL$(ZJR@tk>blU?FmHmRak;BhJfE>8$+?c6gxJY&tQ3vJ z6hMtHEH;{Pq^5MfQ0Kt0vkEsehGt1dQ55N7Vnh2XGyx^`I`_x@22h3xnq4*j&VYih ze&ah&38B|hM7gT))%_IK&Cn^7jCyVLd3(fe@AS4D zN}Gv~k9`tBVR#sG6v~;)@~f2kr)ZJ1#tKz$OM`FAJE;}ADL7)PTlwJaeIa(>^||9w zm-+cgnrq6p9)(xG#lbBAB~-ljWITXy5jc;GgO*MXAYq#MF98cM`wyfzz(D5~^|Rzv z)uDN>>HdL1Mqes@w+!R^H2IYZmQi4jLzmN}UBNgV?ZcKiJz$>G-FUGB;nO|-&Gk8U zRjb9OUZX!aq}tM_iCNZ<;T{tLH*uFuQL5V?-qW}_<6=B9mJC&OR#Up2;y2qik{Q~A zT}fcEdm=m?PF*>pQwjO?L%ccjyw_kM3+WM*U+GGf{=X9r5M000EIQD)Ob)pC5xeBWT`(J6&$LLZos;^sr#Q8awpTEQ3b8ZE8M1bdOKIs|Jt zJoy@qa%b|dKyKDGpo9{%-7!&SWh!M=59>;q6ox~;_~O^{3?K5@rhmKHDqprc zFaP_J5g{-2CnE>NEliHC=u;8}5<;V;_0>N`;7sS!Q1}xG>dG#+I>v1akg)cGkc5h-2*-Y zOd|uy{YHxwh%z7aEyfk~_+5-B6Lc1tm?~2BpgCi~8uvxGeKwnF5nAN8dYEz0bPmx%U+Yp+XdWr9dbJQ8iKGpuA+>g2iZ6&?DDTBc1jqUXxg7s+8%04nUMIky;lL3A&VO7t zgM^m!K%_Lc(bu#72WSG2fHo?5NlnSuH$Q+##yB9Y8pzuzh;Gwl2zK2 z8mlW>$@kwsicnUG$vTA68a!0O4wLP9c14?Tw;mxlQ85o5LDKFkO9F9oz@k?JV>?F7 z_?|L1+P4_K+4`zG1Dow#V8nD_s_rK@)XcCe!R({o(q53OES2#gf{=m!zD@Z5j_luD z(tk1e{cA;Gei(wBXGG8V`W)_1vJwYqOJV2gZ&eov7tJ}7AZXzt=rec})1j+ps%QI< z%*cj5G!=k%?XF!9SiXr8{hqo@?BW(y*u?u%2-H?!hQ-=o^5ZR!>)p(1or!mUlUYdk z;RV-bjr1iGJ86s}e6z5nnODqS?Ax7ALLqV-sV@D=7GUjZuCI7ylG0PNE6!y}>oB~V zSr(gV-2WN)4S1NdCjh+Mz-Rxc;HGP&^=tM|;k7j|`**`IuO%)h)*mMmcjw~Av>ND@ zQ@ke^q-|7f#W!p@Ur^mmIjA!?S<$4%;CkFZt3QLQQz44V5NMUinfD@29=qIWV8w~K z_RM~g5*J5VAq{xuMy60!2v#X?q2t1>_cWD1t_L(|nTx+vVTkQq@;W){BXWB~EM+ep z(6?-~$QdC0nv3Im_)37@TXchx2<<(Q{P#Fl1rnA<24bdiiuotmxHVsBvNrCql>1bv z@ZZu*Q`{$^2Dbj-n#W3@)U)FM9En1GFFEq5Bpk=+_K#$M7#C&{w7#MmIFCwsbS-r3 zKlCUo;HZmYpeE=i zCS~Mdts%7?xKmxc>4o}f66yt<4QU{>XUr1yJiA|(%&gI?k6;kc>M%?PhoVfXuCEi2 z_*up~&XRTl>ZHVs_43h_n8F4k;s#_iUfpDv=i-xEP6qFXUjKm&ruKqQ5V-uOKymaq zrw0{$4>C0RSM}xqn?8qdMg%FlFZ4c2PYihlasC?3GxFt=lNY2@!p%+MwI5~2#EG0> z%#+7Q8yGfsZAxmRuIr3|mBF>^v#V2%n`&Ny1@ZFN5ikh_y?*1&vG3(_+HdS!kS1^q zA|&mv@AL;YnrNr@V6OLr6UZ@&>%zGxS0$z#<_e8D@F)*n8jP%=Vva01dlMTBtFPgR z$Fwk50<;aD$h&tf{$e?(8hr75cr7J3VW@^PFG4V^h*)~bH78UERD)JtYcH0G9`Lyg zOQN!pi`2@HzYigB;VMW-HKNXURwUU8W|AU-+{(#M`39B;@#&kG%-2uOgMIHVXM93E zFus)i1oO@+c>?^47Z}28Os;ihJ~FruqMsQ&carY-UfI*{+4;E z%d*?IYa%8~JB*BvmBdfG9BAtQuxN0Nupc0ID+slLH&JKL@Wdral6uu&HivyMflS>w z#wOcH04x10d_V}7B=D4t?EWyZJ8-rLdQ8X*k>!hE3Yha|BqAxqA)_-k?Lpt*TZVdT z7y1S?Sly!pW+T6umiy`xN!L_QZc>F}j$4a)*WZRdK(Q8TV06a&Uob_1-~aq|{C~mx zn?nI`#(--f76B5ySm;g8xwK8>)q}{iWH*086S?2h?CFHURCK77=3Zd*f3gV z>E$+Hgn6;5x<+W_wFI zW|DlRU8fLg5U?UpVt9JTR*A9$?bV-?+J3lg-%c{UH+XHx=F%Yl5C@u$Yr~y z2=rN)*9dJ<&>UB(1~1UFt+Yee<9x?0_&vhBJ6MyqPggJRGL$ z*W~B(_Pl)&oYMlsVH_iMLL7WwPvn3Y*&aYR6p!Fd^264)i}1x-w^n9sS?KL@4#6-W z9747S<^>?RURQ;*@U9l)UeH7^zzF*g+g8I!lJ{uTd@`TdkVF&yK12Q;0}G9PbNAW< z)mG=JnF7ZZZY)cA<-I=Y0$SXt?avF#t3TkUj}NDSS|^G?e0>ygpbJzEKuQ66Hq;gR zfvGTHth`UKfGZ0oCe}(q&w8toNQ=9uRJS`^n51vgfu!0vb~H6U3Cs4Fxz$G9e6&1l z>{j}7BCEdFtNbCnU_4~Px!i7BwQ3cxD%+$_5PzQG*y&D$;9d4rM#P$v1PWC2Jb?f+8v152*#+l5dI zMI7QdWqYdPR2mP7^(WxvQ-Z&EhHf-$lvK-ds=h;I*+MKgo7KU1b{oaY*I$PCn%GqD z1w6uQZ&LcxPimX*vlA8%vCCRM!PCqT6@zV{Mu4Luq=1(Us)MD4ZPy_fNE79yfsGW` z^izSyx0w(9%&R=&NeIjQFvkflQa*5R{`*cI5Vn>u)krS@SIOhC0rCtRy$34HO|Ehp zq(<>b^Sk0`bwY6%++Lo${ZZjm0G1v-D)LLz8VZP7c|oF9B zm_?u=FfsX`Pp&5-={cxMD+CT7aQ@>crDtxhXA1laB|XsUw9$JYKnO!X1pr7nb=PkB zcAs?Pi#}QhuzjD1#4s3@$WWrA*kb2^$p9yNVfCZV$*Fm-Pstm_?5Kb5^-pZ4bn$6 zbScVs;IvFOZ|hAXvk=_yf5K$AqU&lD-ZOsrqr}nI*u9AcAhrYNQB9b?p@RN&^WjSa zh^?)~e}6TZPR*500>NUJC}`t>rgap;`#jjN2-T^mH$49P*ZCEg+W z`%%6)Nw}kG=a<_)B$y2JBjAeDOuzpD?3GUu0T+DMB>3^^+7s(B3>(s)+!(dd1dv$y z3I^kp!m{PW7c!W&3~K`Or*F{VCVBi<2!znBnlMhLP^Y%nHKu>(Z9(43yd+Fc0EFI# z$JRD_cGka^djTsw9%3)B(u1oKW`b_&<5w=fg=@6%NNDLH5$3WCcQ=@Pjksyxj~*fG z_4vn6Sw6%HXC)pI$(EbpTZCAI+UNv>=1HrzR?Axe$KbGuM$lXEWw+5%2?+(BHA4 z-(h>UfV&Jf6+Z7RHMzH2V!_tQ3$Mj^_bvo#>Kd=#ITPF$x%Liw`VzfxN(V~^v!!V% zlqNKe$Zz+=4M6K;*D-p z{X^WU*pNwn8M3`v0K=`@eQ8L0@=b^9bBuJ>^HKnf`S} zf9I6{MFvWr^q=k5|GlLQLKIE{od|L|Q2+H&H0-|+{j2*5R6@WX_JC#tnnUVUhY2-3 zDGuDP-ks`w``>2-X#O!Hkn%sy2>Acq_0Ly8kn>Gc3yiFeP)d^-qX=Vo0-6%YKmBb= z00fA>)l4oB08;^+$Gtd?!166~EmL|^BlCx80gy1pR|s*zCZJ(Y{0b@7?NEX7K-V#` z>D}Dv71?d8B9Pu`g3>#0W?%e->h_coMX6F*;lU=$LL ztq39rEr$Zxh)oc#v-xLz8XdM>n0Z0`pZQtDOcBoCFABX0SkzL==4}2t^X|jdcQX6_ zDKjzDwDm*Hwm(XC1z&x8NZ^eDO^rWl$XUv=57=USSu51zk2wgJ*o>CN&G$6KBi<_F~M#shoH%h03SPW5iHZV;D!;!WHh$(eHD1czoRv$pKP3reUFF`Xn?)*bG0sh0 zy>+B$F=I-|U$Kk>7-_6Mx5eY{V^x^3v;sv!_4q{~4#Yq%f#g0Eh7bEXoP|{^uE)lOCvc z0{(sgl%u>x6?-GfY#KaIQhc5LOLlfibZ_k(ksir$P&>CLn3^z*oj}VxV;;LHRcRJj z*sgz@Rxt7YmG?*cn>s>ue>%-GjyoK)uQf!?l^3!O6l{h)VV&pG%q{CDM!cUUX^)pi za7W~Em_BY$jbaYC`;LyrB8xnUAe|<=ZS2(T^XMT9EFBp67FPU@vQp?K&lHwfr8f;d z&|poX?Wr*dv#vh0R}L;6o_KagPt`l9s!z#Q$hRppFy+@BA~)4ru+DM#&w@|-2aeig zGIj7Vb~MX%@xK=FK({(5+7?PT9h_7B(`?Pj!^C!gxj^N|qsUx+Bhv>@{BMRqZJER` zmOF&eh04Qe5znD=5(z=^Li_inj-YrEbollusJ-0#cnrVv1hR7MZ@je-3rcwhq;G4N z7HnV=7u7G$bVun|aBKH+Q0VktoxhDj6tO8f=NmTuk$)gi!P;ebM?A2-8>Ti&P2wai z7_s~{X{`FHNu#KzWeGFK)~y0XjYD1pxNv7nCPr*I9>sF;WrLhC>y?Df&y8#P z_z7d}huY}(>EMV3%HbHSQWqC8BL$ANc8<4j|GXt_3|Mdw^#vkE9(PNoS`R&C(3&4` zW>kJ1U`enIUuzOC|58CcXER69J<-?-O7tPrHd-NFpnYPjUa!<(+uCq6>ZgmRuvxdg z1!U%^1;w}3Wu32zEEl%YN0GAux=VuNh0wrY3WU1STvONY)m@4{6+z-y z(Wdp#Vpte6>2;}Pp-A9|!pIQYd4CWcEYM>|pcZK(a2{2->ze}I!(ZiuSXG+>BH=yC z9tjmjqCri2BLBB}x$FFd;!ggHWGoJ4EmS=e+f11v?LNTS zd=Hb3)`$p`bj?=hLhzWNahg4%rR3bPC##-v-8?&GyY_&%Jp3)&j4ftk1dzwI)JChPU|VLJ*0R0~vRLVQ;{YquF<$H!&{^~n+> zC{HJ#HxtEt(`1X^+Yif{=c-=J9GnQNU+fGH>bjT{aQ9JjKBe*#H5jkgi_N#O*`*+v z1jdi85kU__6-+j|K>Y&PZDvlN{iJcGI`r#7p3;$kQ^TIF;f{Lav6qXry3tiI} zFn4;_!tZi2T<_E0_^9SZr_5|XNF^%50h42z>p7)YLVLM|r^=j3s5l8soR&ZSVC}PM z`p!Y*90=c|n3CV|IT}5bdqAA70!Et$E-=q|o~h!_*&KXyd*{&1hn!-6_yy}6$_%rs zGjXm=hDwn`mJCmo{7US-6tzRVi}Gd}RX$@w`VP`3O{?vnLV(OlqU(JGdgUzj0i8e(qcH|0O* z^;r`BtoRx5|5>0L_NYK+U}~ZL@Pv{}iA+Ffp{m{Y5bm5iA5q%_e|D5u>UO17ULhUG zNVAAA#;>A+Z6;GrC!G=XGR{@D6^Hd2GOgl6d}R(+tMlv!T6`_7=6>mS`~IFW}Qr^UJkt; z%sXRQ^pW%|ZcQ1UFu7`+l7V?MO6-_Q^zf120yoBL)MQP*M%2!vah#}4kE2W%l?G(s z_am3DSeum$s3`j}1a6U(L36rsKdCpVHIz+KGVCd8T4Ej6@dVfA@sbo4n2 z4}RI&_72X2?^CEFA_?-&N+K}`PV=M4a&%I=NMPjo`sM8Pl_sz}k+UZ4))qw*J4F^u5WA`Q zRnbQ(Q8Nv+(vzKP(E>XEhBku}ncN>QJE9`owhJ*@3&}`{tKmEg9R`v78h@KN0C_A@ zp*)E_fJznc+DDbZ2G&Np^!gTd*7Uz>#_tNh{#D5X>y$&lp*r!I<xf9Z*LiuWxKTtD<$0^-5}j5-Q6K6-QC?K3KG)N zDcwkSNOw!8lG4q0-TJKcJ`a0;V=UI#d;d7c{r8^poYy>O9tXLtz*VcEfgcv*;kw4r zBmYv>*caji2y+OWCnbx&g>f`}-fho!!qXB*PcTNo zR5iN}{UQ-V*1``h?SikIPAlXwK=9+zdV8;yZ0P4F2pCLSSge(re5UTH{7z49ngZq% zseT&I+H|Ef*78RdSKGfNaRyoeV9$~F zFVG)kn-6SwUE9ER4-$H*C4|^c7WeaM{+EsaQqac#ksb2ZDbH`tgjdZJox7>y>0G5R zBSqdZ>c@;cvvI^iP2rvAot2b~4O2#yo0Hl{bHJ%SWCn%g_4~_@W(1aDNa;2KF+k`~ zPfEuCjCG(6=3wsf+cg3!W3@s|@c6z9!g5=(2(F0_yekJs?X#BXiPcz|Q~bS7oBMXQS39e6B);U@hNe zk%+q$o_zaH58ZG2BEsF|5v!?7v)~U=$*-eHVK86>-+OH5qNoH^nCYo#HYL8vm}WdY z9ZCNj6T4=Z&5V)rli|6@2am|nH>430<%&1~N*2fF)7?4n@5t@RNtxaSW<$SUv*_hy zd>Iv}3sJ7NT8=6V$pq^lA|Ui$(cCrg|Jj%e7w$crC^rQ>!j(@`yO4R^7|W+MGu&? z(vKqwhU>xDLA8v~q}5P~ZdmAoMFZNVec-FshKok8C&|I$c{iEVVZdJ;wQ_1!-7CHi zS&+)Q^PxyCr)h4@W}ujRqjR5okMPf6Inlc@t_BdD?a4+1h;CD$VFrt=Ufv2z)9^L_@EH3{mOBwiEHlA(?6-a8FGyrW^FDLo{`&B=8J84^eY-EVMhnRtUhjQ`5U zGtFREenXQ1lC;%wmz~}ApPDFo&=%|kG!X`9;z^GWU<7}FQ{oiZT!aPTi-C4vJ_RKs z%XxiZ(wrraw;I2Sry}i;%0(~J@IbePZnh-!=gOZyoMM#4rW-5rhGYyOR$1|bBqQDj z_1V2n3liax3(Y^j)+PW_kqgpU0PD`Nb~{h-~>iaH=J>p&`WPD?Ke=L z2*e4Ua|c57&eKEve@s65$UQVl>Ojp8P(uHt`!%=L|HD**|Bn`dh_uGvS_Jw4e)q&N zJxiqj55!cUMQ{UZ5g=JQ4m;cI?z7DGaG4GSL~RpG5>b5Pl#jVr+-AC1!2Z_m-;Pd` zv7jr-2;qTQL|YuveN^M&R&UverArBkfOBSWYhV*>Fj@Vwy{GUdwdYam!^$ii2jsRc zpDdA$!5{EmHu*8o$~g#{OlWx`54IF{Iuro24SA39Jyt^#*g1C&43a*eC#Kq-Z9m3Y zs(ORh;lu(OdM@piH)SSaUQ>v=rYL_S_x!7OuRep}a^6jyo2bA_Tft8+Fv@&WJ+mec zGf&7uMJ>3XaWe;8iLMXy$H@X@#KD{at{xYG)ox~#*uN45P=0;gPH(c@mF9-Se#vB7 z4X#-po+{VP*#{4gyi0BazE?X!7P#<_? z&aGY%=X);UF$?TBjMKxgTARx#AD`Y(>0^;;+~30NnfRQaCezQfp~r;~~OUXseO=iPphutL|LCBU(AH{_v~-TG9mW6NXOeW`?o~2H(N zLvBaLf|H0I`n=nWtT;s-Vj;{JkZ6_jb!wL755Tk>07XCP%LkPFr!fm4NdiDpAi(<%a{Kycm7DJkwgL2x4zg0?ck6m# zlpDL;s4xaDE^k<9D!iM9oODMLINwE$pJ^4OR1HRaKiAMGsRN*-vI|Z!5peG zvB12UzRw3Oo6O^G@8(PTv&<0I38%|e`1;#8*EldGjyNX5=s&QU>}V{K(%Ucgx^ldI zXO$s$uf^ge^wt**O@L2!lp^vJ11@yr2x9ss1#l^am z)EqYJ^GLyKYy}liG?$J}-Z1b$Q_Qnn@CV4`1^7mD5R{M zar+GNmi54SQZ!-iq;F+z_`A+F4D2ERP1Y69%)|0MZw}vxAOoJ$C15kJRIg|Buxh=6bJ?g6azz^ zJ#XBF%+S%5%!s_K&Zt7^jQAYp+}RTiDZgif7Z9ayX?e(kovExUqUukMq&n7)=nVTH ztl*r??*&Q#vVilXy)p}DM<;U=_rEdUd&|~fbSl8_J)mExd`<$G?^hF( z5|9w0q+Xx*Y=)JTCXeM?CBGI&pK-=eQ#A|C2PFVLctLEfvPtro#Esh{R@cqaKDwV= zP9y^$;4mTKj~Y&5SGSa}^6>vI*n@=gLJ&UjA{BAzpYJ}|q2Qdu zU&1^oHT#z^|7y1e|8GU1`#&s7=C8mWL1geP@BF~O0l$Il&b{xI`WZ+TIV*jfcHmNI0N?YZW}T(+A1s4^z+Qh|?6QcS1_E-SLe}8x zK!mW%Qxj4GlM`z!6Nv`$h@+OFi(C%kp6#Xi6c%Io$Qd(ymW4IOsC;SoW^;s~UDgnF zCfOM;uO`pVwoxHV#9a)53!dI*2}>zB7Je_#kLeg2Dq+HkG7O03ex81uoiO3ZW_b2G z297Tijy`kHxHro`M=?7gU8lL#DnfXuRH1sM^+(x=?CuMT>NkGu#^4&|VDF`{<8}); z2*GQc3MTkDy&lCbeWc98gMd0f^Z!qBDZrZfUtm!{m(8JzaZmd?uqPo4gDb`AYKfoL z77O3Y8!g`qKmsXVKsz;$nUbfCsyt#V*?qkSKUnlB4=tKqlyRq{89ps>fQU0FUx2y- z0cp{5iJu7!?4|a(mows#x|Pwhn^)(=qm2ISW|@$zzI@oD76{c~^qT(DAD=nDboTz3 zRE!vt!7sl@!674v`9{#If6G8}TREw*?$hl;-lZL@>K5D zHvzTJ#e7?;*IluRRvW7!0^gZO^AHHPKk)cIDo5CgTvxjR%1H&z6P4p`?C^Wo%@|nO z0Wi?^c)QarSXj=Mi1AoXj#ug9PWKQ`@GVuR1I2%E*47fy4sZg7KZuv=51y<&!W=;mqRtBKABUn+@1$cEqs~+h-?={QX z5Z8SVkw0Q%@OW>=YJ^vDvn*OPhIpgqt43b+Y*_cs?Yq<|C&pQdqedI*GR{K6tzW2r z@^6KoZsDT)+U~$He9kK-Fd9U$tD6e$bW-q3f6Oovw&q!K)(3h89WL15jc#p!fr~St z*^iorRoFB(BmCY90fy3qXup2-ic=ySzaSdgjAVp3UiSL=UTOZK<<^OUhu%P+-_EI- zaJ9agBcnwR1}TVv&qPxDQrjyaBR-WM-%UVVjmDziT(hK-`A5YBb6WCdM4j=9dV6Dy z;N7EkYI3)*76|nu4k!jcse%KVSfDd-u(kX%Drc?qrt-T0^sP%nXY9Qoc(&y5dF$cP z@m9*ksSP{V^f;L$>q2+$RPFZpr(aHI1wYDWPA;q)7xvv=y4CL0{A{-UCARJonD6|c ztc)|`OK^IrUgcuQq+#Y_9rotp%IWwA5{NOmTZddODk1Ig@nH&bYSc0E8Cb1tzt`Q=nW2~@9 zZi?d7UXb@|=iRyDu{ln7tWSEZM}&w@FmBacevrK0VG0l;o8duC;D$rBe2Ed5H$l?j zFid!_&^guewKt_g2rE?Lofg)ANkP`J;0vM1_;WFhRnC8c2v%>WdZiYD95Kpmev)r7 zTY*y=5Fi2}Hi}R=S6KWWSz|Jh7&pnv$z}$3gVs;db!t13-*7Vbrg{C-NpINv`15YH zn@Vyn?r}py*NHU`zWEyO`$x@HOLdQA5DiD?e|2Z(Hct9~28mUbBtbhZO)qx{Ar>Vq zYc@!RGcWi^>;gCi*eAvCHqP*+bd&^GMTL^FKh`AMcsldrk0_V*y0^5j4OP-MxwUv5 z;F^Y;+X)qImZ$cU&?ZgZs!6$+D-@1Ox>f@K&K+mfLe{II8xA2jU6V}Zu zt)!Az#aN{Snuyl8`x2t~HB0ylV`3K+#?xi@fPGZqUyJYep6!a_!wbAGZ$VC0vC5f0 z@X4N+H+V=Vf6f{wLxyXQqXyRXo@`?3@C5D)KaG4_SC2kJA8&P2C6ui-xvk^fqf|`f zj_oJ_a9Zuad7{&DbfR-GH~d|LzDlguhE7TbLaf~FU(RsrY^_hlNFkEBAZD>etk z@Tq{2J}LLHGXJwWzlbba3&v!1$8Q(fRJ>a^kjA|d-k6>ySr2Lb{gdq5=1iDC%H=F& z^ggNnhEh>pO#AbAF)H#K=%9IT^kK}G(8Ckn+`$+$7aHknCLdtYY4!XY$N1YQ>M;>{ zYTYoE6%)(kFTr*FaHKgY6BrbFX(3fo%~Dk7a#;+=r7>9cQn(>~udFV! z=#cN9K`)GUvbhx?pBHf0fb$=>Kmo8ieJ69aGm&#a}2jp(uyMk0F z(!m;h4pW$#^+kf>7l%&8sy5Q08VePoCLd(jAWmkr(|UK;dB_P(a2+p|mLc>jWbn@C z`2Tr-%y17|d4TZaz<7HkaqJIz0BHuy@cR4_dPgX={=+1&f14CHCA$wnM;Bs@trlxuMBs< z25es9`1L-vx|%rJYGu~)^Nl2`QlccNbjWN{=lJl*9xqNK*!Kl$#9h!86DYV1`m8Qi zSWKIVh}rs|&pz`$pvXAV&TGwW(0ByRjcM~wz7h-g3lG6Uc#DsNSqbM5)iCU$`sJp3-c_o_@$aq7mRK!kqZzzdGDZ)G zD91v{Qd{tfS#_6=-&*gj@##hSr9O|vny23IMGK!R=m3!!OYpH z2GHq3{0c;Vk?#n;7=ewskaOQ z%`JiA%U@>j*(+boM7toyV>LJl#Z!qJ9FmMcR=C8vdwmh%Qhsh8m87gQ-A>lPSR~Y5 z&yOCCS2`lT@JP^NKfIm?K*(<31$xqu3Q(=K0ctD&vI(6jFt_zPzfp}Ab?9M)4+a1q z%$mNE2$z5NK0IP!ft1sg+zeZhTyOGP=fPu8Hk&RQ`ZYEvm#-5?=B#6gZ|9jvk@gOi zPd_6qQm#r|87nbjdty#<)0nSxxppX~M{j%KLwvr1+z z8Aps1acmKT zVr7{wsQVCP?^T&%M}f`TRv+$7?{PU{1@+N1I+C!$pbxX;ULLoRTwwOu+nwNj2kYgJ zC!!ogQDh=95oDCwzh)Y^r%gp8cE2T9u^hv$-wv|95xgIscr^Y~cI`G%2WS?A8~LO@ zskOcx9f-v5&)^R^Kr<}NgscUSS#o^N;z~gWJ{2tf-u4OC9yUa2oc&0el#}AwRsfCI zLT~Vg(|CTyfQfNa&9oilYIRcY8TT3VZnsIz$37k#%>4A@TRBWj-qW4+RZJ|^Pjx-F zsXpL)GF*#4+6tfL3xD88>^ND7Z$v^>+)t8q{@E&a&i2)gB|laAtYIY5RGCETVpbJz z1!|av0mY|YfF#+vPZy>l3H`=+ZsQQZ;X!>Ve~_e?xGPcZefy}gFi}BTJOe004^YOF z3N3&#K-nf+)DWn~8*~`l(wTKr>Vwy4QQ^4LjD(V+hy9amQV7=P`eQ6sMe@`h2Xw9O zgh=G(MFS#rm)pbm>uuWl=!NARz=Z}X#BMvn2OhugFisOHwoYcax;e)JR&UapUbnQO zoLwlxI}uDG?QI0g@8$e@Wu6Q92I+%im=@P;n~xUl+-R<_9*y;;OTU+pZis06GgxZk zS@MJ0ZhbRx%w;0Ib{9fqw-E(Z#>Uc7?_sydJdvxoc}p#1{O+sm3q+zUZCo+k(qn3+ z?Z*0oO0WpgQ)ByH-+#WgrJrWYL9?Klz;^jbO^wwRk(gj zfZX=jUmYI)4JJQeh^u^jQ}6}PEQ^tTcn3B2MbFQMw^RMpefSj8FRZ1Ydid|9 z^+tfA#Fw$ni$o#v&0Q9={68;?PkW&66Ce&KKzLF;_s?ZH7#rIDK}jP2C<_$f(Stzn z>TX3Y(Hpr`qQCL4h^KJc`DGZ#Cpf695^eSLC@!P}YYw4o`+^yHa*3_KGMXhawdg>%M~6P{ziimbL}Iho&P$DrX!W|NaTP_4y#N zJ%qhLWey?n;O0u}`gg7Q3L0VWvC%gHQlwWdg@0!T2Ng*((tABYL*yV30s-Ls$3grb zNgXZC?dS~j4J}>&f`uagjRyE{Jo(J45~Un6`i4Vdh!Pkw>Mg^riJAHCHbb|;ow`%? zK*B6y8fM-&DXPtaZ@u+zTusy(1tm%`EWeP<4xgzZYHKIFUAK7G{zXC2oA0@YMOPNv zDSbO1jiTO23~y~4@V{7w+eiIdq7ORibYLuW0le?)zcIsu#Jnjh+J6U# z2O81g|1ZS^hF||BC7o=ybEg6j@OsRCO(3ISsya9j94uzAT8eVRHa)eM(=RD9VPz!E zQKquch#%4;a2%!$`}P1a(QCHIWwLM1jlUlH8L}_i=IZYlJw7x)4A8bNTCsxc_Oj;vXja zL3arfQsBQ3(#iOrcL{(H#R03y5s@B=9AR_PCbcKKfRq^Q3{p^hOUL6Oui>+9KYonu z3yvx*tc{!PNs{HvjfDrXcH}trqJdaDNb{?lhJK>WxaJ6~LcH?2^#=crs`^^*`!8R= zfxymzq4v2W_6?!{-gm1A?433!MtNfO7^bWE`78>#T={L7&_>@HA{HYF{wXGNyqh*? z!tcMmOOTjEIUqHK%=oKSqw6ZQcVn8v>!PFSW4TgPdA_GjB z9-XN1g+;|F$M5FjaOt3(T z5xmNqk35eLHx)=#8+yPiLe$P&Eo&Bz;c@+Xj?agnsr)N^@6Fj9sZ`0rqNXbT8GGrn zRnj{vT_UrjB9T+*%2?Vn1DX$f)1)NN{a-|yKZ9OSf!um04`o3c@)_;GZpbdwo;Q{C zAXIMxc{ud+Q4mO8jPnz;@Kyz!C*=_UP>?ey@KOEPj2Iw*9OQ|%tX~<2X$OZ+5RzSf zK`bEUG4vZ0iwB%Cx^G@zzzK#=>o|os|Z?m`@?h0WgUw33K~>xB@lk0%a8v?#{K z3gr3JfQ5 zKCDdjLkt8QdJV4|yb>Lquk3slO}iAuYbQ^!w;3OHJP_Nmz?jOv#BO0Zqa;x`o4|BR zQs}ML;p!44r3Fog#h@BbuKnN|HLDI5F@M|7nj?d`|CNy{=A0X=R>iBK7XIyK6~_BU z-pd@fB5d&hsf>h}ukg~Yy1v`S7OFV5I#_&z`2peS4bi%e_m6gH(p>Bky#bp6ec8;w z`On{6a~tR1xflQ%feBcDDhTICsZcY+96zQ;T|dfsFp+d zyEB!^=k*FweKY=};`DIF8^}ToutMj)jo)@745FgJAQ3rL)Eu7`RI5XmhLIju` zzwIF9ATFQp$8G(>g8g7?!DK7E+8|1_{N?ns(xWP1eLBfmH6R2jU@ELn62=x7qWQye zsTv6)7>4f!Vd#6vC)d}=&GEQh5Q`XNb8=KyuT6YDs7CqL%kV&!bJc~|(s^=b9udTd zUm{DTNNw)r>e4%?h5@DIi!`1*@5gg3*OAh5A3ePOl?@)AZE~x6@fqs`8}xTA$IMEw zmKf3(DF_%*A8h=I@+*}!p)ong@)2nLsPkKpeb)!=N~bER3unU4FjYmhnNyNhe7Y|) z>>+uMY>5s}D%4@F-%XA9P3b1z-u!sD` z^`GzY0S*8#1IWGeblLw*3(Eo&3IH8?$f5W9s7BQ{P{t}qjfccgba^Y&mG7xMual(o zLznq|uIRCA@$`JVFSeqTG;K9m90zn7y#iXW44s&e-3ZXQ_E5}{!E+4e}N8(9%IU-bhT{_HKgpf#=U!* zaQ>*Bp%$UgiVx`E4meM0(%9((OS*;tDhx;oyg(HRV9geoA#`{VccC_575d5hfN^k; zB|mb*pIQ-4H$nGnC~?YGRrk4UgiGU;;{;x$IL~Wsn~(_dtPpN=yx!);9a&?@?0YxP z`Kcqu1H#sXd=628DB_}v{MKh>MdvmU%^YWFehoN*&&Q$qve@>T+Z9aa4f@-9Tyo14|qq|(L!oD%%+!9;4`+7_xI*tKgmpJwm+zIg9w>6VHB5WThdoaf3X)v6&l@Qeb$Ysr| zm#S+)c!7|br@%Bb%BVY~?btb#cx3z1@x=_za@WVkheV>UOV_T95^e3apy(5^mYsO^vznr1!XI4_wvxED;34p?^_w zZUiWB@9%jdov^+qR4UDSPD`{q=BG@GW3Fm)Whd2R2xa2H_Cnys4?9W}!|v3HeZ=qm zR)C{uhc1hyv0CphlP0~}ZJV&&{p!8CB{Pk^>8m~n6d3DU<6CE(f>_jEun#H71QC9N z6qM>|8k!$Iv2e->)iv2sWz$kndGe^~CzG&O6SyqB_16xbikbWJj;(ywueep@WYm|J zv9P!g6~pR9Eo_PaY8O}#YFvI*nb{F>v-iruqnGHa$;k#ZH3%AQeWI!z9RIvUjEUUj9M05rh|XyQp>*1zLdHU&^&621lL z98oBLpJ+~QYnVn7^fn14cl+m2g;hwWwZuyc*0vCOgEh{rL0?=sENY$-fBz_z8_PM> zRGeK{Jxwi7l=B16>jPpt(!`Fizdg?Qp@XerAk+&)`9s@hLnUwo!*ur*SI-yGaKV$A z_4ji&-!FT8@kE&G&oaxsP55R^z?_>ejtZdp#fQ<(@4Cgz@>Q|udEuAjzm8cn?Zl*A zNTYcLNB0K9v_B2+hFde4bkB%dKJ`@!n6VhdezjLsGzDxA` z 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�{h6P&b&LdBwDkqgwU0-Jy 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

      p)1s8f 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%0AAZ&4lS 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

      e5#asfB7CfwG@9+| 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 iaaOz}^00*&ERll2@cVa6_jb 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

    2. FtG%w2cpwm(1A$QN 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�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%0DI=3!jD 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%0ANTx3}ijkR537}fzQYAzb~kO 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 r+npQUmE%yoZ(59=wB-J(N2N`=u`8ZGQW| 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

      eBq^l-eK%CfyM7J?bs64 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%0DDIr7}9oef;j17TL^sBAZ6ih+;jI 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%0DKotw<#qC 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

      fO{wru~t1EI1I99V1H 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¿%SFD)6BhRciFAjx!Nfz9;-iiWn9N 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

      M(6BSdOZGu8N< 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
      ~j_0HwI~t3Zn0d;wJG$AYsbc}g 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%0AWnf-#w)rtc{p!30mzpiP7y2&J$MXXUtlXhUV3?c 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

      Ojo? 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�EkBmz2@&kJv?E>zw%V>)w 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

      gSm793@Y7(N8Q~Nw?XwU$ z747I@ai|?5Sf~XFOqCs}b?$?E>WihT5HFl19gr>`Au!HREd!4~8w_;o7vS32GLnnu z%Ts(4qoXk2ug+K7ujFAfh0_kd+E}*zkgK4KCp)qNk7l)T!EJHC!t!zHKhP;jcIl1$ zpnGO7Pw`xCqHq(!RsJTM$-{2MDFlzRe1(R1ZgaQFxx#pXf>T%B;V&@fDjMMZ+jf)O zqWgoM)vM`BIRGkifVb;6&=}?xb&wnk+mxkkGf_f7c9j-00qf*JamWMgaB^at?xU(# zu84498e<=9_k1WiO0cG(-DLX2AUE@uyasZXpGOIc3>F#C>P=@#qDFwZ!1r#-HvB6? zgy#)`aRrE+>1(1!Nh%;xYcN9&gn1eUx=bH>#>@g#K`~DG_<&yn;X^iL^n|iG{&FYE zm<9FMu5tDR)OfCzRgeRGICYbgR_rC(mJ#Xxc-SF^uGCy=TCkV=c){qiF0?f;_KE$F zTyLi#fY)j5mjy4Gifyl~CwxC;HI!YZWGSmoX|nX!-FXQ>!TWk4oSSmPRBxx|V5){= z?W|NK2;Y0zT47rji5~~Rwsu1vhkuojtfp{aT1G|wc-SE}Arb&Tgr4M397%o3-8u~6 ziF1!YFGC_l@H%f{f;NCh8=bFnx|g|mq&-+v6}{(pV@YZ&0tmKZI9ftbOAn};>B4?Q zMtR(R*vN%ycH*uLT#~@B(ts1&tLnN&SdYE%b(htUL{gX*opb}BN|WRRh~*-H;&S!j zdZrp#dKY ze)zOBVv0Y5I*WC#i zGw_JEx1g_xU%hk*+q0q6Y5p;guac};D-)&}0sW=VX1r;>L+7h{7>zd?KQUx`^{v%o z%!#(w?1=MKYvH(7W{o}TDr$l`VSf&%)SX?T-a|IlI#^@?X#HFq4@F-!(D3=PY!(Rg z7@WrA-o}cTqDENHWg|W5A594uLYVo#28mPsY#zATDmxNq1QztqiR_ zgOA|L!w6@|RC!|DB`vy4^Pjy_9-u4P+h9lObagYp)yj}F{Mnz`>nzAa1y7vFR~Qpa%r&=&n%o|CWm{8ZQnGS>m#JUM_+B%6TZ1?c9#HR=ZelO z?XC?`vASV3X)@{Y)4_8X_kG$%HaFAN%9-~;@V)$?tK?57UL1rX!zA#!=PpiU2m#d66}EbFl%`UiZ$+yF$Ig^&WE`DyUk(E(Q!p*4o0Qv|4&+n8LHfN$0ztNkwTUxJn%yd7|ZJdAJ~%_ zbq0!S-?mp2SQXJQ92zW9#hK4-tNFLyBgY}x;&GXt&^@!`KrByV^b$488hm+w3*Gm4 zCK41KnC4L^bJJY4s#}>iG1f6ir847_jioqt-wVndAGK%kFzR)Pq+5u}H&BFL0wAvo zb(g^tXTJk@A(Ydp8Gt8W%_P5)03`xKh}~XgbO%_q=K=pWej!t`HL`bRz)62%cI(D| z5UNHev5RzEP2#9NeaZtLY^+m#ZQbL8_90R^{;5n7a#2ZrkB^jv1Wr!eXv^B&HMglA z&kT11LV%e>v|WXP8L8p?FXF^pwj^0nJ|m7l)-%esZ8==c=5d4 z>Ul|C(9mfxKpfM5Lq3nZWX_n`gPdgyucX_jNgBXV4oBPJF1O-BIugWYD zn8$U_pNaNi8i1e@0@zyMK$furvKmW)4=xa;yh{7@kpl46XRH!wHw%~X=98=TtP3?~ z0qhA-_53Tw@LdrDnoffyvFb$l@Z(KkqPS0c#7K(bRlvP1hR&nm0bA8nu<{VVBmZ_C zOzMec+yja=CNL2cVI&a!f0RMrGY}@(ot;LLAI+6f`1+&{X02WHmHF>pI883yRdxeC z**oBHFGFPRvnpsSBF~T%1w5hJQtswBoZpB7f=_Eof8~Se{@`^^54zpo+P$rs+Nr zx2#*xVVo|H#y!XF%4V=hFl#TS0WwtgH!U8K_HCt6_KA47qza0!%^N(-s_Ovpf`PYi zN6{n`>_#UUjXI0qgD#f`zL#K19d%0AY@5&#cfaS^w{sxVTm{6l%1V}gpX;Dii|h4V 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�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Ν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 mS<&ZjE42^bZF#n< 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

      Hq7{Sa|c2v@j$qRs~JQ#8!(vo$fPCB!`4=NJ%h$ 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�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

      ZzW^>DnlG^P`7WDOx<{ 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%0DUQGP*gr6?4?W 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 (~?~+hOq)n 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͕+ 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≻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

      I45jR!Dk2W;$t{81!^lF45v$Q`7S>l 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�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
      e|Q%sW*S!5BrGJNTgr8>MU)L zmBor+od`7s8Qn3_mIOhs_8SDU%b}aYRcD`7vgZOuwY~<1LNFKZ?Kyk*b{9fj?xvw0 z8XQge?q#^_DGklL1RSFA^{Q9NvWC#_@$PWR~OdG^7GU`M)EFys3io zLD*-2?UJhH!x_MP{~L31jmoUL4e|tyV5ne!;c4&>HrR#+3V>K0yEgo<-W&xuQ~!Y$ zRsE62#gz5pU|ozx{tcXJ#Y9~(ZY>$Tpaf{rmz$Q>=(I62~#ze8~E78H~ktmEE0 zrFWr^ghXG2>kmfk+VpcRLpK zAF&q=<}hpxmbWX+?u*+4-#jQ}!2ua2E{v@;fC6iLtFLw$JxW|2F3_wm^eRNZB~^xK zX9HJbK{w|dV~LAhZXvJ@l?ukYkBt4MId(}uyfly-|4tmTH!h~ID!3`uMOOgH7~!y_ zvp~A8@aQ0^Xf+LOZLwn{ejMgT3oJ>Mr(GtyjnB<1$$|mVX$$#wgdaC}@;@xoRn)GQ zZogU}PXiy&xQM3xsJT8;JV&6Kdo-}acD7iPY=jmh>=Gm&FYgS8=Uei}zN6$}ah=`| zx@mnw!T)v(0#&m?Iy?37L{VHP)B;7&RJIJ`_ZBx7XbqYvdf_K7bPphNzPadW4R2!Y%0rLu6}&+{ zXmAE!D!OnGsp9`4r3gozbUz+4Sgksap8*JSyR48lqcdbSLHMq7v|a{gylkDQzLO8+f)>)Qi)T z$8v`7g#vbQHTeBKV1KzLR_!@U_3%p;{{CstcZ9)hMEKCkk+SrClqU?;FK^!lMa?9W zc|{~it%5UNUFqlM(%ykv)+K9m1G5+?#On`&&oyUrhO2|?dI~t^RoUh6FEcP?E&JTE zu2#uHaieWDXEEUfvOgz~#H0jj*u#FtTf8tW%bSL12INPQytaQ47rT;L-OZX^P^=uz zep1rBso7nj3GRSM`&+b&)CNpzYN)PhhAF9;tn%JkCA9o}-?Yl`O_OZ%v7-&R{xaEBF2=)v0vX9Fa`69eXpum^NV66MU!x%0LD-GYupeG-kK(A>g z!$z8Z6yQ$Gf}w^(NpGuOytRQ-tV;LODI7J{=j}-eOtDtvn!h5-W`Rq9* zV$jy|{#OXN|MJ@*_lz!=OLDS4+5?!UIENPPgjR4DEYJ_O$5O!dSTv!^b=s#%hgqcN zc~EXycnnDjAcKXyp1pq}gE&j~YEARnA27x-?nz;es!M%muJ$pSml6C=g#Tz!kHofv zt`E$f$5#tu*erxw{uN5jI6vD-Q*QR6*$imrQ^oNta)uwP)r&3d@_FBZrOld3 zJBTi*o;&Z(SP)D6@(s)jT!Sx`0_rI=LCtav5C$p=l8P^5gBbOH{UKL4f1y{`v*2Rk zd%rj78x>E-W9L1Z3k*}UW|OUKv8q1?*%gr5Sq;g?7=3QnPc}_Qv z?5MzYFcw5CdI^s%WCH)d2ItI-4i--WR{K!TQ}-K}TN~_sJAQXv|0(_H*g&-qDdS0F zK~;862uc;(<5mwr6jLPhM_yb{nieN`>4=7*{KG6gcbTNe-gI?7!;VC)P)!eCPm9-g zntCGT`9b+J+0#d~Z&1`-8OUCW8Y?fR<0Dm67oW$y;SYZih(2SUe{$=WJ^QVn#L}d( ziFeTDEM(;P`%>y$Ek6EyK?qB|E(ShXz4x&{aR-=b)F|fs!EkBeCbPr|^ zp$5!`V&-{19H{}5@cVk~M8K>N%)MMQQx%9GcUnVAuSi;YdoeosF^RXfSK z&h_!(lj8`USxl#U<2i|-;l}n8!jV5C5@2iTbGHLQa|HL_oMdU-_#f_(cQBT*mQ5gc z2MU+zDsUh#St{)Qq*k&fFgN00`ZWUATuv+7XEt41P_vQf zZeLH!+(bt-q7Z88_E}%A5f+k+Sf3=eP3v$9ekS%tmFU7ha3nmKT^M#n71+Ne05PMH zRUv;eqYRje*ORJ#^k^(~Gt1Kt{1;Vh>Tmp4jm>e}wEUuSS3E!!S*-jc!t+{Jv>=jo z#WL>LX^2K`S0pE6WA1wJg=%q*aR5zW56~2X2q%)*iV9c|5047>i--S51^x-J=?Klc z6u@2zm6p88r@O0ra&)XKi1|b5oeU_w|K~)$gpO=?Vm{9}6OdmIU`rmAlx`*fjaAi{ zZeI$3`0DePI57b{W+$@%%^Zs~j9+bef9U_@Qw48GRY7H1=4?z9O6X zCR0G~L~i`w-bqRImCW3b-e1J31c$HNE0&C}))8~f=CWB%I*2;|-L}E0lbg{jpB)^Q z0eYF{j_Lm?K>xwk4m)p871xTSs|F+g>sUga8b_~vJ^_2nf8{?~vsEBL^9te9yZ^=A zp7Mcnh4e<2S8|U{&?%JeG9W2KE z7i2--TX%kfFP27GV(;|CMv{+vPVperqc- z7R+y<1dvPr0axy(a%NEaT<9pC-f=1(eFUkC=+Wu_R2MyI+QsGoB(G+5+Q7#+`g_d+mzL%=AzhB0Z@OuABG?F*u$l(!?AMeM6e@b(}GNU%>a#+ZR zaW`ji^pSTeU&Bu+sOVjlk7tqmqLzFZh9uUqj&z&i}}W6~S8(kJ3IM9`mnc z`m=S;<5oG1Qkg(W?x!;U_@pUmBz8uV8%r4Qf??3?0h=Z+z1#=@IUQp1aQq25d1Jct zH&p5a2rZX)qQaD|-Y*q0XrY8_t85JfXKdTx0Nr2b(#2NL^1oe}RD~C=TGbNZ&|kF>n?qPkcBfhWIfRK(qmi4ng#T7rEseo48 zJ>SaU*spiO2-zTsnJ9eXmj8Ss+)3r-&G50}ev9cGrJ+?Y&-&{L0WdQa4c|lV#C@L) zNo@u2n+S>WAx#%82p!KtEB$LG;kPd;NG@9wzv8K)MXoDy^nSrp;^z5p#V)B0FU_*xZV5ZG0n>Ri;P^62of98$s1o-3LyyKB-sx$z_E)d`+>)Jln9 z1XJ1Uc`hM4qCwrvb@ox0@t$`jrk#e4e=LHey-LxA@|Fa(gAXB>LFLoEd;FLSxWWoANZD3EwxA-qQ{3Q6g!a08MM@PaN4tU0eS;sq9~bQ;4q>ygo(4LzeB4CDl;PNe)`gANW^3E<8S9-j)R_nA zN=A|xwOA2OLjwMN6eEL|`sovKR)ONV2i+cY!p(G8*yPOi&ze!5H$~5Sv70DRnbh8f zK%87&Y?MR}U}>8qYg21OYS|-7l6@k4#YxXDrW>U-t`6UXsdqEebWCbVFD2X^>kL=u z_7T-h>ze1-&u|DteJh%I-i+CkwL-)|ssP`Jy9_!FVSMS5i3rudjZ+8w^ z`{N?kS@Bv}V9N*9;-lo$97ERGh_0k!A|Kx?s5$S|P!8WzQ6kiTWej=lLhXC5-0q%? z*X&Eet&;aDb3j%f^H7Y;*u~w+)(rcNt%+~pEx+x0+EincL)Q7M|04m1Tpu&(knvqb zv4W4eW*a_Sh9zJSTx0^pz1?`W%n~U)BOwLEV_pOiH7&=nY>UeHCsAn}*H@#4w zqy;pXH{k=|;(N&n0pdPFyL!%e&IWwtm>mws+54a_bHU=?>HF^Pv(0e006&QjVq0oT z*lyqV;CgcQ_&$K&=I}Tl!PdWC%tE^`Fgegh5i$!ydms2+$&zoj32wJmLG?V-JXM81 zGl_^a)*0)ZGMnpl&sfd6B4aNKb*jC?y>ikj93b@`y`u2%(XEM*5`Ib->-emQ9B{~c zu3Tya^9EY<9w2kPEN;zm)bDr^;ms$WV(^hW7Ydk`)$Qshmczkm6LvgMc&#i@9phi{QwoW}TjyIslQNB&YXQFkL0q;--=46((_ARkWY zbnQmf(wm+8!0p#i16DZkzwUGh(rj1trx9!m8vMtYp>7Lg;UzJG+Lk_tHDzM{anm}Y{!hl{nw2ad?4UL z|K3&Z>3Oh^s~Pu23I;lo-R_uatx8=7oymM)%YKhUr2IAK>jgFvaz5A#Rt+Oa;RZJL zf?8xe2<-E!yOZSt*VitN2>t={=lI{@Tktdb-?cBQ^wzwlgj7XY<{>JW#R?kF0gmgg zT`Jc?NGx77$j&w784rW)cpJGXB`3)=ZI-Q1S}@(=>)*K4K4?PXoX9hOiFxW!y=~B1 zUElwrzW?5~!d8-+m9msQc>Z(F>4t0v3EdqK*nUx6yzY!Ip%r+=d`qJe@5HXS7nc!! z+D$@k``YEu+~m`_l`hBbGU|THiW+O0cp(1&hnHqK(w{-uYb1+r4>@>|%d>K$rV{tYNhZ zw&j|^OHvG$!WH36?ge*l(KI?tF$48G!TZB{2J)s>eZJ2h2m>evcMcqiX4w!GbO)Bi z?v|alg^LwMw)6LjPVi*kL}R(olsk~RxfoR8z8l=9diTBl2~Fdv`NWg=GZ%^o)y&() z=%NH_*qD<6}vRUcEsXyK1)j zn$L7Iq?3e5v9bl{GT6Ah;TPlH+w)C+`Vs5hOR^fI#A5Z_V+p8d2rpJ1Pu6ub8eq|6 zb6)w?QL_Uh_R4X4>--&?Mgx66v{aEf1EV26Hwg7lt};K;E@*fzhvrxmfH z`W}Dt%WJwuL2wEgSS555!Mk&bWM+sK44fsk7eRNl0=`V&Cqg?iDVn!3;OkOy{Ia{a zgF7wimO@Wd(n`5HDw`d_VQcU2-7QnM=b7kt1B~$<-jeAT1P&Hs4(E^+4HH6OP!tab zKq!b5AOvn?s3wsI_S=5UwQ;aQ8j{(4WNo-&rtO|}c&<@nLsZ)T;XGDNJ%4y8b9S3CRI=>2M$^OqrSR=-!z?1STC7lIq$@`4(e*sS52=4)2*Q7-OE z4jwHeabd$hx;rOsQoXsnzrVD5l$WHrfZAb&N9tG}H-4<(U(R1@04!> zCqo&0PMyV{UX3q;SLT6Dd#HISc*}Im$KkSh6HHRYJ(bx~gQ_g>fAy6n=+%N8>fNc9 z>M6{fa<;Fk{eW6WePUBkABQ{c^mKPDNyB>9iR-CwG#DPaCLBh$CY&uf%zapKft}y# zF4z5gcAgS}K>xj@Yh$l43FpV1Jrs3FdB*xnx3V!c-CxA#q%UIE>OPi7aMmC4YO>c) zHQZT(WnO(ma}gG1A`Qh#}UH>9-632v+|w(4|~RF{7~oiCke z5WhX^)im}zMn{|6jMa0U7--cZBfZ)kQVp}BRE>l>pvURUPkJszvznfWx~W55zQ)SP zhs?mojU1oxf_n2tr9!qLAwyW1n@(Q57aip|&{L;2>H4!ByDLi|*#0M+6&^0*J3FXn z;G(C6=ihF$e7@+BrmJM0@|<7FYB%J1hRit(sMHrfKQwe&5I9iazgO5Vhixgg;z^f} z5snvKy!7$m3{Oi-K44VgR8r?|n5$f;Z=iQF+eF7l9MmmVII)qmz`3cl>B0ir-@Vtk z?*6`=`E&())hIqj9ksm=BTf21%C-u14{^!rwuN3UORy(gT2)xDJ$*ipn72sli5dN* zN70KsxAkS2%FcCtLvlOqOSmw`Zynpyrs2tQ^sdY?hRt$eGEK*3+q;bBjBjwwNY4$v z1lgKB8>26N)-c${d^q1IMEjmFNnm*db@3#%=~=nYN;JF}l-RCJIT$Z8e7E7-FRiij+Zo+Y>+MM}^J zD>F5~dE})vT(ri~T`#5H=Il;db>_XnKHSyE7l5O9HTiiz?P=;`3pE@>PQUh03d0c# z-lJITg`$F510xOAjZ9_H8G9PiJ*SLR4q1Z!ipRzxXNHG*H~0~DN*5#2SQp0-30oKN z(<$y0&kR<_1&q;C6>*f^UKfi8YZx|*DdjA`YIEL-I+QcMo=369Yb-Dg^b*1oPEELo zU^v$4`yz`rrX29+1tL8Bb7Myr=sKQaTqdmyMY$|+=!Ol zo;b}Qay$b#E9vvDT$erns)20NNrU!LXhG=2VmUZTj{G$?EQ~ALTLflKbFQaB!NblR z_5q|()}QX-aMu{;;a!)PPk9$EIzfM6FKH=X2d}h0zg}6p#^%;>#f;kqae~O^2fw*& zgJOe*GQXmQ!eVIY&Hy`$BB zLQEdK(m4|kbxw8GMfTeDyGezsi}pA=j{52fyAz0fN#a3KvlmXvHLqfiILXfP!lGyb zYik`Hgkof*?$0{;M{(Omw1N#}Q1EB1Bqf(c8j|(BN2r~f*FGdr!`*J=64hl5_xFiK z6n(*LT*Tv5!zuSm6octI9>lAG3uU{o)AUfpMxQANe7X?D1^v8nU)a5&^Q>V%>8W_W z!@M4Q`oV$iSl{k+CbZwCn+9jf#e@g?f)n1|t@FyZY$Ta#eC>E!*-ng{FgWdu=5v@H z8F9TgUQ1Tl9HJi#j}l)Y5_+a5nWYPw#b+5r;Lx4tYPffa+{lmAcziE#J;AxG9Xz`I z)Hi_KROhr#u26vMM1OTObgl|pRD6L)Rd|B(m}l*6Q!ln`)gVw8o_%-ZI|zL~6n}1N zVXU!w=N=b-PKU%OnL^ASj{i~BueRr^+h4f;NQMgy5K%G8m&94XdpKc*Y?8!Ha4(Mf zjSUS4st7>kHJIvkJ2AZfRG;da96S!(UE*`#?lSL=r*=elc?VaH-icYa&trta)hXi3 zzql1MY@6rg;UY?e^B~a_hUsIYyzq$xkD{ne?J0_~q&8Xzw+r zDcRfdO%I|Nan&7-Io*eEVUJRLd|lN}XW-{jB+tZn+UCufPkvImhc_UzWzW)N&lxjy z7Fv1^)?tsy6&a1ne=MJ~dMOUe;R*k0+a=aH)m&4M?)7L(P(&3z+U!d0MSDlk4F-GT zIWH9xR>P;-roc8DjH;8qYE+lo(W)er2$iScM33qsj7FF&}gqm!ywL-cfWKq5kx{e6g^!9oG-8tWd zc?Dy^&=c27tmsE)sC0YA#-}llyiU~$JWhB`*iI=}KTT}C3pE3-MG?x@Gjf*XJG{$vEJ^nLmGi}6d|0PtR4b&rlrI)VHm z@d4N_1LMyf_1)L!hb_57m#S_T<9k~T<^7cLpw`X)^RL#e*@F3&I0!3(;v;RD7bb

      1uEVP>C{=eDmqI`G53U`_0v9>ujl-G(mE3S1R9w4yy* z8`RST%qDg4btyS()ZQHf38)5&YS$)mkDOoE>V%Zve}e7F`0(j%0*1hE*ryI)$s5IU zZw{sJhWvm>axJEOJ0OLzSKZM8cc&XB)41=b#GE*g*ZGYYP0G&d)CHhOZpIbw+two! zuEuFK`BgS8;^3!*fl$`>z6p^nRaki)dChr}CT25lDg)(e^3IrV>Djv+O_ z#U%P1Mk7Azcq)XwfQ}E*aa_fcoa8Q66wd!hJzYGfT2=a34uuc}s>46cp^U1W#%xb+ zR0DS)NkB#!uD+P|8O8CU#rJjY14l9(ng~1|#jUQyQIiAK9I|!Gz#_HnB32yEZ$vO| ztH_IXZ&*F@cc$4~u#)QwzB&nH-(tw)-0F2S2MVIQC$5)#wdEX1C9QB^&z}yj;gBfT z)G|A%z<_3|=Y0>KIN+9gDIT0Sl8WO}P4RUVT8dGX0=O9HNsxWVgP4}ub8P2kGMtm$ zr1nQL(lh2{HgLo_tXSV~90>raM8{Q(Aa+4K1iW()YW#l6jM?)3!$-F(1neV#K6*h9 z^wGr*wf0D#B0HeEZKUak?D2^GQ}K7@Di3irz8^cHp$vH2pX6RZZuFUh3!S{(Qs@gh z%EV$$dy(DJLoG>q=q2I*>fn={uqS~>s=8g5kxypeUFw_L&-0wpqo(y!7u2!jeM{{5 z%;zaECm1t?k0RD33FN5zQ;84N)@%-ZXHMh@J{rfPa?VfBD=)X)#lyKDz(OuQSCO6{o<(?w@-U@#JmcN#j>F>G-bm9JygH zjMlgIjMM8rdDhOCEWqD+kxziCr7chc$RH(?iDIs5Rm{O~p?#^a#@Uj1>wGP5GJU;1 zoggAQ@Q*<;!5KF7O4fqi>9W<#t>4wfX*=WkE2&#;uIC$Gqc=Rh8^zu+sQq$P`wAZa z`m~+pLSh&MyIGy5#%$8o@V9&ITzt(tu>>yZ0{^?E-ut)jP|wJ9{0AuyeyvT+;I?BA zcCpB1ihfR53ekjT!!OdUqv32hpSY0}vtuE_&xmC;Fse7qF_Sn8!CW_L>iTS3AFse$v>!1jK7z<{0#SCVOdLmX6ZQM4=_`oW4Rfe9o3 zw5;kO?XAguFG4!(H6%-}`i=MpIQ0&77^>*c&h&;)uD(I3yf(gGATcM_Q#dT#P+epw zzc5aCT#|S`tE15$^%;D4p%|fyFAlb?$K(+^O&tkdUN`Ui9VKyY_E)S@WYV(**>;qE z2vDBOZ9{caXfsiqaV*cbpR()jzi=;5gOXWuSou2OzH}*WnlUDIW_p4BVs&x) zm0hlyVuBH1M-Pjdc~o%rOl4TtIWB6l^VV~@K;x`{HQ`xe@Mkq&%3v># z+krP&b50F&6Ze)c)^DdE&>WazW8g{#bqqIf@Jku(SO-%{4#AUgWDc>`b39vJQTEyM zDc4oLxZ=4FKKpv)2=x@mcCdVrNOkGz;(OByC)aW@OcUBr{gk1U^8H&b%r}pnkjQDU zDx40Gst{k3B)-dpa8KQ`%v*%N6v$B5X0b|nUlQ%7!@9sv^qD;zbrC*C;KFGBCcs=9 zcYRv(Q&^KM?Xy|O;CMVc1a^EV!gm=N-ySSMSmR`7zcPN^xM@-6v#+WiC~xhDjJUWpDNWm zzc+yAG;*mgcptUM6-?1ng|7XzL(TGWCVSG8CUY~w(D}_HHQGmaUB|z)_HPq4(ywXtR*Rk5zqU0W8$VgJ;x}M0!xC3ypHKKoZ z0V4zv=6{wcbr|Qg7p)HT2h{WYD?_x7PS7u`B~clUoq#VPokN&&bj|h>NzT4J!fw=9 zy`&OKWjyHaK44+?pjFJYYU9Y^jOIri+WcO-qoemhca8sX!?O#PHpRlAeZ_TWZWsL(qiIFUTDp3(u5)m*fmYA*~KHD)eS7@60&3-JtjkrMf53VT*j zP83y^%4Am9@L!A>?m8RQHs}F9uUDe&D>83 zM6PZKGK^_BdSjfhCp~LBPR8SKwV4TuXZc8W`9!);HmQ{GqOGIp(9!tm2MRp2l4o35 zV%W=`Vi`9E6y$~-mll%~RO69bQ|vy>d>Ta<@GU(iVC*#YbSlHxcHFWXwdp)v==##f zWk}_Wm;Pcig(9ksz(xF6Mp1HnAsG)vq52i;c+}fS*!j@6kR3mPM|R;u;m)L}XDF5U zs9qT+Hfsg2D|HR~;!(xiF1FEx?mO2VfAkMEz?a*Z-O%Cb6NoEHws8DDwzA0=9NBms z-5tIFMJWF@`;zE$TJq(Wz$ObbJX~L<8t1cfvDykCE2$&c))=T4vZlIpNLH4Q`vxGE z9_qyfIa&rA8c%kiES+M2j_W!wvlEdK9mjmYVmmHE@PbOqzLsVT=11fK){I=W?DUO; zR{fRY{VlCihCyHy>z!s@hI(5TvUY5n)azkaNc^82&v+&4Y8isLXR6<&1}ij?)4pW;wCqImf)Mn7vjlo@*+^Aj8Nm%Dux4@H)cYp@BhY>&* zZ#sU3K#9ISShO_gIewZEhHKWc$S#0e{>K zZNWY~I~RrXd8xv?ThCjd^wS8GG#($jvLkBYZbQ`jwLQP}3?bi=Xi5f({=D$hlbAb336m$q#tD}%4s{y(AL^?nQbnpD( zr()UTHU`6NY0fr2J@%rP&$Jq?%LX1}q@&G{+7lhyGK)UmofXU{0!|B@$|hI$w+7`i zNn6BBFk4{*v$mWrhu8~T^b)%w>?Fra^Q&CfmU)LCNn4!HKFOJFQAX>~l{HxsGz&hm zdnuBt-gd99(6x)ydGExcQ7sm%s}qDObNewJ?^cpgfms00_zJ=$88e3t&j<#JCc4aS z`%*mbB)4*zt=;8#TH~|G$jrRXwMN7<$3qkRJ0P~Lk_uh32hN<%y~cC#fN-Pb%?rX9 z$hICn1KH}CmayrLao`$O1nXCr@UWeu2p+?JLB@zQwer_uH6>n`-eYifq- zCPv4i`91TT>SD24Ybr`CVhRDUSH_$Oq;9#Ix2QHN6z4YYisR(w#fYvWdr70}q*;px91zAyrf@0OaVOrgwQe2NK~!!swS)^ssp{O4QeM< z%b9E2T%hsG5yMiTYIHyteMl5N(UU)X^kH@Z+G#2#V;5{#fDSiW@M$hH(5%YLG>xC0 z?5}QoX-G=;b`C$t4_Wjp;0ro%M{pLFJ=)cRknJ&DAH>m_cRmX&phYd5h(CjxK8 zcvSKzAV-ax9W9cn`ne~i6owbnvADVleBuGa$V#6PPyK|QAq56oFb1=oR@1O$rr|!dBObL($Dvh-S~xbWZIUK65Tj^kwgorg=kgk;zw1cr8D4qvez@bSS~ef z?|s0s%>V?G$EtzgNjvT#Q`&aO3pYY|Z{p#Xs=!Z3}-C-cz;DDbL zvoTn_##l>w^CsQ7i-A+M&Wq+KYHXD~f9Kh{%3k-|;HHfypHV=44FGg+h{HcR*@dDf zgdy|#xv)rQ?7)rVl{xx)fes$CRq5?;i>ui;+v}~P{Y_a>n(Zpp0>`dWu~dI2HTg4R zONK?A)Sij&EWfV3qsQHn+EGG*j0)8I`gOCmstUE=8#FxJJ=6-Ce%u96B}jh44w_ZS zhAGoiV&M2LAPE4t>vg5>s!L=v3eoO)9C*JS=!S3HKXJBGw*byumXig-O zhNE*ed$O2XYc3VKrwdV|Y&RmqZ`v~M$yKW1FTG#i$$0xjLa5={M?;jZoh~#TH*6j+ z0%(SA{S-S|*HQ8TdlDXR+?2nLNw1q4Bv!NxBW>PrBZmjdJ1+OW+0GK%s~9Gurp8ZC zA1%LgP0M25Pif&eSXleqW`f(d$_mc(gtGpd9yJ7dlw=`2J|~0|-cwR!C?ODZ^P$e^ z?OpomV{>se7^q$zR|#Cb?LBtY_qV0;*PZ05?>2e2KIJsVhX_gmPYrMwIaNBaZnh?e zsx;|nj>J)p#ifq34NT_=p7i4~+HX9&E$?DCF>0EyYi;ZzhK|kPts6?kvwe>jP8jM9 zJWnX8_NaTV8qf%_6&tlMdUR9822$VVbdw za-++O`>wTH5uLX#O1G)6>9ke#b<9b5LZQ4TAR(JKA_Nk+ zC_w`?{^>>&m-ZgY0reJ(PrIvK8w@XI#-ttUyi`{2{a>qp(`W3Ph60A(Sz_afv{|0( zIu!$|Q)DyytY~iK4|I>(A4NY?Q+Z}U8gHV$7Nts$+f8J~K0nb-8bnf!BLWvmzK~NW zQ>9M3R2Nda0$$6yUhm3cvUE0`c4u1D%8b4pMR@36uxcCX>S=m`bfS$N7GmhJq@7*I znwI~O(qwqa^94$@$CG7oH3ev_fCil~lbf8EW>xJMY#aTk_tipf1vf%a^XTeS_|*_b z_)iICpnCkv9IW0uIWRaV-UqV3riF(M*m?~tB(NdeBA2a>v)o`HR8*n4&a;sSb}%OcatK4#C{8%w1hn#6ZmAKDRH zMu8A=QD0BR9DeGQ`}BiPZQnggn7A4eQ~kiJ$(YmVrah%kvjU+{Kp7(Vl@h#F5H(NdtEl;-aNa{D43?zx*w^# z!+HcWX~LiqkLY^b)h%Miw}2xXuM7Qz!;K9^>cA2DY0s$L`$`D@fr#0HkT70l?RbCW z2H|cjl_19F{!|A>a{2(Cm;>O69DF0(=Y0c*c8Jk};i&D0lc=d5UX&6%cA_@~yGn;` zI<_)ppT}+rshL=Ad&!t6%BbR(w(u&K`2*TF`EPIDK@d4U3(*BG&_Kli*&QB*%Jv4`n+dog(HA;pZ>i5VMoxwd$q!% zBheXxWm6;2?BqWG$tHbe<@+XKPDl7FPDq|yl%Od60kvLbj8x+k&M&{#mK=PnDbVqp z9@$pMWaPPKO7MXtc6omh47JHsJ!HLUxjjelE%4tI!>XrNY*RgB5>runDK5Lz6Z2JP zS5V@qs@!QCf`=m;J54ogL5wAObwYXZSvRFO>Y6S2m>^FFkB;5gjW!qI*QTOgy zRfjHOI1M5ZDRh56jxyBG3}Ft2Iz_0<$ITpb_@$yT6u z>KWE9FmZE}9mlQe-h%N$zx!Q&o2hA#6jy3 zH>lS!1bQ8ZW~%#7QeH29b(*kC+pKq&XC6QQ582N?R34BTVP8~+{h?*#EjGDSfa-S5>*+fXczIn3=> zfU%8?eIP?{FkOY5z{RrexB3aJ@va2Hjymi1FK;wTbscu^biVu4EQaPHJ5H<5ar?%< zpV!qI8fFTkx1!g06!4f9y0I2&jGG+?{eD+M;P-2oK!4}p+ogI@s(J3IhskG=5( zF>&7A#);MxkByTi{CLkQ!rC!%ee?EZZKjZ%p{t1^FU3*=%g9OkVxa10@QH2ElaCawhVb1b?AzlZw!vx%o3`{}<2&1=P&xJZ*n6oV zL85=E5R^(O2nMz%#xTF%n;e)Ve6@X*>)T(Ws;qaD(l$-Z)uF5L^-B(F+i0zOChs@2 zoKu9_8@vU(%Rar`9Y3ZXhL!z=t@_gfDu1-m2L6Vcv@AYV7O=1uv!W;UP);OI2`8a@ z{EZrGSV?KxoXqsP2S_PQa2vEdER@U=pSfZ+Q9*qsm@5&Vv>cX02d0VlzQK zmXOb!nB~cW!(I!Qtjvk~fokuP#8g<8TEb9=Y(kg7g!H(dTxm^s;eEh%Ti;f*s~^{V zr^0nIN!qom$3FhTE{EK>$}N>&i{J8b&ri_-#nr70BjNQk$1H({Qe13Sn*)BuaFBLD z#<8A_w3ewIU-5BW_bXfR*{L<0BXvdeq(>p$wM66_e%&k?BC9OP8TO%D-V+c{wQU(X z57MpEr~+yPBL@bw7hUS#IW9|}JzrnPIf$aZClAiyi_+|B`uNNdb&MRqo@+s%-e=kM z8PqlBCCYB%a1%|}S%dhVaOz^Ug?9xRv39j=mULBgz?gpQ_G@!^EuP~IoWL#Z`clqQ3 zzcJtwt$5W-Rc97te=#n?6{G*6%bh5Ddn}YULZky8U(Z-x-fqGD*-&-FiKMW(eOdLX zrJS=mWnj8gWO^FIv$~Wi`{bAp7U}#OA_dPgqNHOX#rn-gAt0UA)^f~VJQ=tSPlDy3 zu=bpaIAKTEQlE7F`XSahZnBX$Mx{01_aNhDG!y-EC@=H(CZ>tEz>{yS_J)-BIs1@+ zOj%fBIM(&K4E?f6hO#7?P=!==ugL1o`7F$b8z}>*vulfM$Tf473teB;$FpJc~=(Gk;PX*P6 zeCTD&V%!t<;9^1ypwm7f!qq5_4%$`djAuIyR&AqF&t6W@+AVT*Q~mZ1D_<1<7BWqiq9d1fH&W!l0ByGQYul{8h0a%-NSTuA8Sx?~U^2#nfV0(*`$E zONH2}Umm3|q*Cay@k@_KoqjDI#9|00^ZZ7V-e*@IzQA2gaGidaDBw7$EBOK@@ccz0 zLLvjzX0V(&S<6%MP{Vvt=UJ~nqKq)+{ffGrj)kK~4jD|*kLjB(T*1O+c{ssOJc7ex z;UsP&)w4XZsxOR)M7o^(UVZd#%qOyfYB|&}TfBgCd@XPGmR)s@YCmbi{DXOW>;Ue5 z=DBLRt}Zoy0)8sQ2OjLSDauDn1?WK~dtf5Ei<%#}w02W!r#C02=a--Z%SZ0a{5xMI zNQ#IWJ$aNa?8+=s;lD4G`e-aT9QplL``!@h=0<pyI|8Vnblo~gKF67kYY$a7I{!q9{Dt(EIny7mR0rItYb_R*JL*x%IzH12hbI!wDC zWk_f75bZ9w4^t3RSbueSj{aPkz}_Esi1*#3$osl6KGTGO*_LM8NQ%1!{I~7HZTlDR zi{D0AwhSh(Eiv))cVtmja21JO+vjOrJg;rISREM?A#oB-+=6Kg8SxyhIcXMf?gq0J zh8C^Qxod|g8W*;2yT9d~q0nkLPE-#T%z^m~4RyZ`aT~}eJ!ikm$*h_i_6>L7s`1{x z&!}y~Pb`5Uh3E~&h5|v|I`?)83ID{V&?D;DZKrMg?sg01Tc-O)#>CgoHOA3i+23&6 z)VEG@o~5p7F3MOTDK4&VGGUsp!6!>1f0-K&DWwa?xq(T0ggq?nasaQiyqSNtzQCS% zj=n=Jo9p)st6cR379+lhP4<@wD3kJerS2*&kKhk#_7v)af}+(2;a^Y!w8rlyxpD(_ zYv;IHj%~M8D{GXS0=Nk79`oKoP``Rj-;A%;Q>36!P2$J?@C0=^9^TR`eD-IBhIpli@OM{ z4pQx6d5k4J&Kb=?7PD?o}}QdCoRfLm4zl4 z5Nc2k-@Zx?Zzt^@7fHG*7Z~Z!zah%ljQ?mZjQog}AF5TpSh+Nq1GZ{6GU7$uY}Wde z)r>XRyM$F(@w)IZ+}(HTSsFs<-+5^JRrwv6T}U&mUAn+VoNn$vWwP(xzxU;ubGc)_ zpC(S7w|*U!wAx5qXTtJ$RhJwO&2)LvD`RdutfW(N?e6g6dk7z*X7MUnQwamY=m9^|-5Kxb9${+4t?C?CVoEEL6X7nvgbI;DH>7 zV?Mj9dTg>gaot+vSIt@=L&4Fhv9gAscUnO zJ=oyVWOeVK-JvRGMLTjodSBoh0?n6b;W)IqHb6-KvB47d_T{N`RDJW_>S{rmLvmnd zZvEY!bcPuQ&kLk5^e$2L`2e=L{C6@OsLH3Ib@CcXdn(tnCP!DQ>d#Si&@o1QFglsv zxAPzjO&-*0`QnuK+v1w$*{WZ>jCag%*S^DaF!i);QsuYYV(^pXLU@VftLFn{TI&e^ z&GwQfK_IHy*9->(tZQU}c zpu^isi;-J(pw)2P*8f*gx>O&G^#i5$-L@?o?$Er^eGIcb4D)1P)j+{YC1WBp@x z8YO-TrfCSN>rP7kxc4%)TvQ?oHj)}g7iuss83;;f;2K*>Q=V;QgfEp=eKuMZp&t>sR^5(A(ARfmP?tPsg*jLidI$=C)OZX zrp1Kjey7`V97bY3kv*Wf-+SE`<|9~c%}~=!FhYlC23~~VVfu!hMvBNMuVfCg-j8(; zdYI;TnRS?KU20^6n2FKI@Tn@HUrZ&GSt-lJ8=a#WjiL>6=_+VR5ot+Vfa%9FA8xmd&8@5cE1$p zT3?c0*2XWv-|LY2q@L~V&%DMs-OBx58F9G7NM{#77v1~0x7l#*ndMN^_gXo39P8@+ zv_ZEhyszw6R#+rYX!sk+(pXQ4lRqK~d4GD`*CWdv61BfFdcBLg-OxiB-h{O8q{|In z0=-V)gE3KwRfO=x@#p0%mEs`n*TffCQnhi&6PgXv+@ikeKCcf@8Js*E*tf9|ppQXt zO#qtu8c=UL*}H5kTeT&#^L0nnRT!Dc6KRkt`(Rrt%QvYzXgW|0=ZLEDD>5z=A{=)& z)8}>19KBPWP1%Yo`*(?0BDGNsBke6mv^7_qU(ZmpeOv=tv?!kvCcq9rM?z}k-1Kh= z&S5@f&pqHwrf`31@-mnXJRCDbKDw{=vnVS@EV@BRi|F}CFQ<7mYT|*?0xlO%kHa8K z#dog}$OFh&9)hQYQBXb5Z5@RYPDLnH*~Qv<)%C^C+NB~@Ehb}uH`#mlv)HmML(oY{ zwS|2P{ScGLUKrXT$f_~Mv$V@tPF`w5un{dOj?PykyrkTy=J)6xfhNL_eGh@=UGi1Q z^{B;RuyaJ)DGu4ahRf;mWl1i$mp_`JNE%m2nz?qM8CsV%f3sv?-QurphxePnf*SVt>tXlPK6}f`|DNXx!ZakjW?Nzoydpx5;hLdDp`reV=5(yJWRPquvI}E zB+V>OU(G*CM9)tdjhp4b>StBmtEo{=O}HE&sj0brZOyjzB1{dLE)IsftE1&Og`?EG zpa%VZGHo_iK^i-6xF2g*VCt>*7y36?|1Ca8+iU0&+O_&Isft>-1&oKj;}plncNZhD z?vU;oMw*wlNIO#l!w-8phOqRwBE5MUR6b3i^#I2+l zil>%8q1OIBV4TI?jABdrwo|W7VLu&-X{h`azd|ww?EIsmm!^SVZMO}$yA&q};^OJn zh0b!F=iHp68&n0mIf<^durrF3TX!2^QnaRqpAl!*QUt8 za%JJ0j9bUollWL#5pNtcN*jl0W8X5lE#?(GBQ!BhTR!o_F_nE1C3}iX%pi$Mqasql_O9_}wVS zW1Q9qy=Z!=@dnc^EZBRU-$8Fx#m0NTu1B`fP9M6IV}i5c(8AbEpI85>?b8p02yP)F zo~xcqniI^+C7o4zOVT|hPW8_DT7qkJU!AZFh{eUu-(`h@b3^j;91%^v+OZhu|9(Go z(cgV{b+H5`D|0J+IYx-?!|I3xBPJkF*yVJ(T%h(+-XLH5Z}WIN-5F4a~MllSjRw~hH-OVD01tkVjZ&m;VAbs-c#tgbD@eBN=W z;9M(N*kDtJ%+fpIr9mx9Zz8RdMY|>>g|g9E+#FOEW7LW4)11<=h05eb@y&a3%Vo8r z1q;F>LcL2Qgs>%}TKftIx&E<@4hxAa#cyR$*RXBj0_UG{vB43+|0pnPy(|aA`|s5y z`cr{e2c#B)=C8cZnhE7D!4GN;Bgo!}*?o?&x2d`YGkb%AuUjAb#i5{zO*DHT;#Mv( zq_S5a6HEyma%>CO^dlLEUy}0GlR3%aGEw>+7N|4M-fXF1@L^bHzGZ$&0X&USc}Q(* zui%lwWtU>)CGE3s=7SrS0<9UG)@C~JQOhe|+zt6I&0obhN}Ogm-aMnCn&O?OD4oH+ ze6o+LPU>%thgzWJ?5j?zUYHENh>+_DW~)*vj1h;t-k7!R+xynTg$aMYj|Tpa*=dnn z!cfL-96dU>OcpEpJ8WF>-4<9la#)KmD!CGTsAV+T_gY6(NHZW- z>(==)lg~vMn;HtaZ}w4z1m$T4SK8;ECcZ0f9lzYeEDRXzU@6#6R)o^i1cFv7%8b6C zkonG;hP3N46Qa{J#g*OpN~g6r7nnyQefUY$>ImxJlMxnwep5dg6X*Hp1h77`0Blr)n} zwvntlS+Um5Rd$n>68-z%OwC{=8R93!-;ZuSye$D&hy1rH;f8lp17lUH=%&-ln6qj3 zIYYr7?}1hzNB3H6j7BrE^BM2iaw`8>duCUvEYw7a6c-}=#$8(f+vL3^REJL z8RigP&QTDY;_HjmTyZy?j=|Hv?9YZ-;oqeLdJkTy&&#V0Z+#RbI&&%pY*ScV&>ETu z=i6+x&8TOqqb};;?c!hCsAy9L+Y^)^Zao@*=2ljX;8CjGSK9Tw-^^Dsqf!sKdyuMl zs_jEUR`=-|75xSWZo)fO=WAEIq`cjVdK#zWNP(+D`>iT&;Mo;+=Xgr} z`*#+144etP;t+q<-;Kom9YNj6p)bu)MgvY+)Fc6aX;^HSl2hAcKch$53Z5LtkfLB% zBGHAIMf-aav;yU@3W?h=;Yfao{mc^wy_sHKGUn2&?Jg%Hvtj(H*G5D?$~iTbBf?5~fWzr>ot zWaid(k4Oock+}`HuUsx5lvfoH2OkuOhpGG8tZ>eod$~Ztu=)Z6S#KK;!V)l$DftqV z3+KJ7kw!M+X?SmdJM|&$i)fO>21GL-5h5%Ai$?7~CZtq-cmzWzoiT~_Diy!sZ`4~I zG+-gl&M!;;F<|z{9B%dP?G5Jj2Wv=a1dbi4hAI1qp$a7MAsG_sgcFio+5*K{5Xpf- zx5@@dG1u3QuQx_TeFU^uL+R2#CB%mx@IQN}QE+>=zC2jCTmm+SjI|rhVhuw^J4Ku# zfbz6$o%_hq6moip1Nv@wC!2E{T7Nd%)MEFL0+`eA0ze|LNQ;&1X zbz?$4HS)3dmw@-TmqX!&^@@UYC8&IXkr?p4T6d=DJ~mGUrr~ZQ>eIOWhUY%E7D|RQ z!TT3Tg9xY#wwHJa%}1WK_SXU9RSi0CxrMa69UBha+EES4&TM1v>ye6G3JRhGLuJSW zTA1GEK35_po4ZmFKax2+PS>p@9h$IlJWNw*rzoo*I^}x#oP7CP(V<)?0P8hcxvJ$+ zKP5DhXD~8%yFTNq390Q}ok=?azQ^vzBlD${{UL%>=2I|rqEH{N%tswP=bsTGX;wz3 zSI=$dT8pe^hrDQlWhy|7>k5T0AhZWam6A>YT|CfJiZpPJPO)L2i4qe^w` zo;3GmhQD+B&}vBkl;q)_e($b3VxzOna#@mR$u7gP;^8{Y{nqE4D{!2EF$?sUg+Kbs zPQ@v)xP-+-_G0^lZzV$o(UubxvS{^wL!&I{nH-K7C}J5pg*_Zaz8sfrDYbIRyUDSg z5s%}?EJSZ`){LxAG0c5P3N*kwTbCi=-m4H!VqCm@lN=jyLcmhOYy$rh+Vt|1{Hr8L z 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%0A?cl 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\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(?P\w+)\sstarted\.$', self.__flags) + self.__regexps['map_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sto\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['unmap_port'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sPort\s(?P\w+)\swas\s(?P\w+)\sfrom\s(?P\w+):(?P\w+)\.$', self.__flags) + self.__regexps['messages'] = self.__regexps['unmap_port'] + self.__regexps['message_out'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sSent\son\s(?P\w+)\sto\ssystem(\(.*\)){0,1}\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}$', self.__flags) + self.__regexps['message_in'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sPORTEVENT\s.*\sMessage\senqueued\son\s(?P\w+)\sfrom\ssystem\s@(?P\w+).(?P\w+)\s:\s\{(?P.+)\}\sid\s\w+$', self.__flags) + self.__regexps['timer'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTIMEROP\s.*\s(?P\w+)\stimer\s(?P\w+):\s(?P\w+).*$', self.__flags) + self.__regexps['final_verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sTESTCASE\s.*\sTest\scase\s(.+)\sfinished\.\sVerdict:\s(?P\w+)$', self.__flags) + self.__regexps['verdict'] = re.compile(r'^(?P\d+):(?P\d+):(?P\d+).(?P\d+)(\s((?Pmtc|\d+))){0,1}\sVERDICTOP\s.*\sLocal\sverdict\sof\s(MTC|PTC)(\s(?P.+)){0,1}:\s(?P\w+).*$', self.__flags) + # End of __init__ class + + def reset_state(self): + self.__state = 'exec_test' + self.__logger.info('Reset state: ' + self.__state) + # End of reset_state + + def parse_line(self, p_line): + self.__logger.debug('>>> regex_list::parse_line: ' + self.__get_state()) + self.__logger.debug('regex_list::parse_line: ' + p_line) + + if self.__get_state() == 'exec_test': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'map_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In map_port, check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'messages': + m = self.__regexps[self.__state].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + else: # Check for TTCN-3 message sent ('message_out') and received ('message_in') + m = self.__regexps['message_out'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['message_in'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['timer'].match(p_line) + if m: + return m.groupdict() + elif self.__get_state() == 'unmap_port': + m = self.__regexps[self.__state].match(p_line) + if m: + return m.groupdict() + else: # In unmap_port, check for final_verdict + m = self.__regexps['verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + elif self.__get_state() == 'verdict' or self.__get_state() == 'final_verdict': + m = self.__regexps['verdict'].match(p_line) + if m: + return m.groupdict() + else: + m = self.__regexps['final_verdict'].match(p_line) + if m: + self.__set_next_state() + return m.groupdict() + return None + # End of method parse_line + + def __set_next_state(self): + if self.__state == 'exec_test': + self.__logger.info('regex_list::parse_line: Set state to map_port') + self.__state = 'map_port' + elif self.__state == 'map_port': + self.__logger.info('regex_list::parse_line: Set state to messages') + self.__state = 'messages' + elif self.__state == 'messages': + self.__logger.info('regex_list::parse_line: Set state to unmap_port') + self.__state = 'unmap_port' + elif self.__state == 'unmap_port': + self.__logger.info('regex_list::parse_line: Set state to verdict') + self.__state = 'verdict' + elif self.__state == 'verdict': + self.__logger.info('regex_list::parse_line: Set state to final_verdict') + self.__state = 'final_verdict' + elif self.__state == 'final_verdict': + self.__logger.info('regex_list::parse_line: Terminated') + self.reset_state() + # End of method __set_next_state + + def __get_state(self): + return self.__state + # End of method __get_state + +# End of class regex_list + +# End of file diff --git a/scripts/build_titan.bash b/scripts/build_titan.bash new file mode 100755 index 0000000..9d39632 --- /dev/null +++ b/scripts/build_titan.bash @@ -0,0 +1,106 @@ +#!/bin/bash +# Copyright ETSI 2018 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +set -e +#set -vx + +clear + +if [ -z "${TOP}" ] +then + echo "Failed, TOP variable not defined, exit" + exit 1 +fi + +CURDIR=`pwd` +TITAN_DIR=${TOP}/.. + +# Move to the right directory +if [ ! -d ${TITAN_DIR} ] +then + echo "Titan directory does not exist, create it" + # Create TITAN directories + mkdir -p ${TITAN_DIR} + if [ ! "$?" -eq "0" ] + then + echo "Failed, TOP variable not defined, exit" + exit 2 + fi + cd ${TITAN_DIR} + # Clone all TITAN repositories + if [ ! -f ${CURDIR}/titan_repos.txt ] + then + echo "${HOME_BIN}/titan_repos.txt file does not exist, exit" + rm -fr ${TOP} + rm -fr ${TOP}/.. + exit 3 + fi + TITAN_REPOS=`cat ${CURDIR}/titan_repos.txt` + for i in ${TITAN_REPOS}; + do + git clone $i + if [ ! "$?" -eq "0" ] + then + echo "Failed to clone $i, exit" + exit 4 + fi + done +else + cd ${TITAN_DIR} + # Update github folders + DIRS=`find . -type d -name ".git" -exec dirname {} \;` + for i in ${DIRS}; + do + echo "Processing $i..." + cd $i + git fetch + if [ ! "$?" -eq "0" ] + then + echo "Failed to fetch $i, continue" + else + git pull + if [ ! "$?" -eq "0" ] + then + echo "Failed to pull $i, continue" + fi + fi + cd - + done +fi + +# Build TITAN core +export JNI=no +export GUI=no +export DEBUG=no +export GEN_PDF=no +if [ -d ${TTCN3_DIR} ] +then + rm -fr ${TTCN3_DIR} +fi +mkdir ${TTCN3_DIR} +cd ./titan.core +/bin/cat < Makefile.personal +JNI:=no +GUI:=no +DEBUG:=no +GEN_PDF:=no +EOF + +# To prevent link error /usr/bin/ld: /lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command lineema +sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile + +echo "Starting build..." +make clean +if [ "${OSTYPE}" == "cygwin" ] +then + make -j +else + make +fi +make install +echo "Build done" + +# Go back to initial directory +cd ${CURDIR} +exit 0 diff --git a/scripts/devenv.bash.ubuntu b/scripts/devenv.bash.ubuntu new file mode 100755 index 0000000..af00444 --- /dev/null +++ b/scripts/devenv.bash.ubuntu @@ -0,0 +1,73 @@ +#!/bin/bash + +# Turn on debug mode +#set -vx + +set -e + +# Colors and Prompt +#export PS1="\w\$ " +#export PS1="\D{%Y-%m-%d %H:%M:%S} \w\n\$ " + +export TERM=xterm +export EDITOR=emacs +set -o emacs + +# Home working directories +export HOME_FRAMEWORKS=${HOME}/frameworks +export HOME_LIB=${HOME}/lib +export HOME_BIN=${HOME}/bin +export HOME_ETC=${HOME}/etc +export HOME_TMP=${HOME}/tmp +export HOME_DOCS=${HOME}/docs + +# Home common include directory +export HOME_INC=${HOME}/include + +# Update PATH environment variable +export PATH=${HOME_BIN}:${PATH} + +# Update LD_LIBRARY_PATH environment variable +if [ "${LD_LIBRARY_PATH}" == "" ] +then + export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib +else + export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib:${LD_LIBRARY_PATH} +fi + + +# Add JAVA support +export JAVA_VERSION=1.8.0_92 +export JAVA_JDK=jdk${JAVA_VERSION} +if [ -d "${HOME_FRAMEWORKS}/${JAVA_JDK}" ] +then + export JAVA_HOME=${HOME_FRAMEWORKS}/${JAVA_JDK}/bin +else + unset JAVA_VERSION + unset JAVA_JDK +fi + +# Add TITAN support +export TOP=${HOME_FRAMEWORKS}/titan/titan.core +export TTCN3_DIR=${TOP}/Install +if [ -d ${TTCN3_DIR} ] +then + export TTCN3_BROWSER=mozilla + export PATH=${TTCN3_DIR}/bin:${PATH} + export LD_LIBRARY_PATH=${TTCN3_DIR}/lib:${LD_LIBRARY_PATH} + export MANPATH=${TTCN3_DIR}/man:${MANPATH} + export TTCN3_LICENSE_FILE=${TTCN3_DIR}/etc/license/license.dat + export PATH_DEV_TTCN=${HOME}/dev/ttcn3 + # ITS support + export PATH_DEV_ITS=${HOME}/dev/TS.ITS + # Emergency Communication support + export PATH_DEV_EMCOM=${HOME}/dev/AtsImsIot + # Mobile-Edge Computing support + export PATH_DEV_MEC=${HOME}/dev/gs032p3-ttcn-test-suite + # CDM/CISE support + export PATH_DEV_MEC=${HOME}/dev/cise + # Validation folder + export VALIDATION_DIR=${HOME} +fi + +export BROWSER=netsurf diff --git a/scripts/f.bash b/scripts/f.bash new file mode 100755 index 0000000..9e2bb39 --- /dev/null +++ b/scripts/f.bash @@ -0,0 +1,19 @@ +#!/bin/bash +#set -vx + +if [ "$1" == "" ] +then + echo "Search In Files usage: f.bash " + echo " : With default = ttcn" + echo " e.g.: f.bash module ttcn" + exit 0 +fi + +EXT=ttcn +if [ "$2" != "" ] +then + EXT=$2 +fi +find .. -type f -name "*.$EXT" -exec grep -nH $1 {} \; + +exit $? diff --git a/scripts/generate_png.sh b/scripts/generate_png.sh new file mode 100755 index 0000000..7c73718 --- /dev/null +++ b/scripts/generate_png.sh @@ -0,0 +1,17 @@ +#!/bin/bash +#set -e +set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +cd ../plantuml/ +python3 . ../logs/${ATS}/merged.log ./${ATS}.txt +cd - + +exit 0 diff --git a/scripts/run_all.bash b/scripts/run_all.bash new file mode 100755 index 0000000..f5fe449 --- /dev/null +++ b/scripts/run_all.bash @@ -0,0 +1,60 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +if ! [[ $1 =~ "^[0-9]+$" ]] +then + COUNTER=$1 +else + COUNTER=1 +fi + +if [ $COUNTER == 0 ] +then + COUNTER=1 + cd .. && make && cd - +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +rm ../logs/$ATS/*.log + +for i in $(seq 1 1 $COUNTER) +do + ./run_mtc.bash & + ./run_ptcs.bash + + dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) + while [ ${dup} -eq 3 ] + do + sleep 1 + dup=$(ps -ef | grep "$0" | grep -v grep | wc -l) + done + sleep 1 + + if [ -f ../logs/$ATS/merged_formated.log ] + then + mv ../logs/$ATS/merged_formated.log ../logs/$ATS/merged.`date +'%Y%m%d%S'`.log + fi +done + +exit 0 + + diff --git a/scripts/run_mtc.bash b/scripts/run_mtc.bash new file mode 100755 index 0000000..1fc0784 --- /dev/null +++ b/scripts/run_mtc.bash @@ -0,0 +1,48 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +TITAN_LOG_DIR=../logs/$ATS +if [ ! -d ${TITAN_LOG_DIR} ] +then + mkdir ${TITAN_LOG_DIR} +else + rm -f ${TITAN_LOG_DIR}/*.log +fi + +CFG_FILES=`find ../etc/$ATS -name '*.cfg'` + +echo "> cmtc: to create the MTC server" +echo "> smtc [module_name[[.control]|.testcase_name|.*]: when MyExample is connected, run the TCs in [EXECUTE] section" +echo "> emtc: Terminate MTC." +mctr ${CFG_FILES} + +sudo chown -R `whoami` ${TITAN_LOG_DIR} +LOG_FILES=`find ${TITAN_LOG_DIR} -name '*.log'` +if [ "${TITAN_LOG_DIR}" != "" ] +then + ttcn3_logmerge -o ${TITAN_LOG_DIR}/merged.log ${LOG_FILES} + ttcn3_logformat -o ${TITAN_LOG_DIR}/merged_formated.log ${TITAN_LOG_DIR}/merged.log + echo "log files were merged into ${TITAN_LOG_DIR}/merged_formated.log" +fi + +cd ${CURPWD} diff --git a/scripts/run_ptcs.bash b/scripts/run_ptcs.bash new file mode 100755 index 0000000..87cf8bc --- /dev/null +++ b/scripts/run_ptcs.bash @@ -0,0 +1,31 @@ +#!/bin/bash +#set -e +#set -vx + +clear + +if [ -z $ATS ] +then + echo "ATS shall be defined" + exit 1 +fi + +CURPWD=`pwd` +if [ ! "${PWD##*/}" == "scripts" ] +then + cd ../scripts + if [ ! $? == 0 ] + then + echo "Please move to PROJECT/scripts directory" + exit 1 + fi +fi + +if [ -f ./core ] +then + rm -f ./core +fi + +sudo LD_LIBRARY_PATH=$LD_LIBRARY_PATH ../bin/$ATS 127.0.0.1 12000 + +cd ${CURPWD} diff --git a/scripts/titan_repos.txt b/scripts/titan_repos.txt new file mode 100644 index 0000000..8842f4e --- /dev/null +++ b/scripts/titan_repos.txt @@ -0,0 +1,56 @@ +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/scripts/update_user_name.sh b/scripts/update_user_name.sh new file mode 100755 index 0000000..b5c5d7f --- /dev/null +++ b/scripts/update_user_name.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# Debug mode +#set -e +#set -vx + +# Usage: sudo ./update_user_name.bash +# TODO Use git clone in temporary directory + +USER_NAME='s/etsi/vagrant/g' +for i in `find /home/vagrant/dev/$1 -name "*.cf*"` +do + sed --in-place ${USER_NAME} $i +done + +exit 0 diff --git a/titan-test-system-framework b/titan-test-system-framework new file mode 160000 index 0000000..554d6b6 --- /dev/null +++ b/titan-test-system-framework @@ -0,0 +1 @@ +Subproject commit 554d6b6b3ce1e51d88267a3c946cd30caac97a55 diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk new file mode 100644 index 0000000..db5fc7f --- /dev/null +++ b/ttcn/AtsImsIot/module.mk @@ -0,0 +1,52 @@ +suite := AtsImsIot_Emergency + +sources := \ + AtsImsIot_Diameter_Templates.ttcn \ + AtsImsIot_TD_ATT.ttcn \ + AtsImsIot_TD_REG.ttcn \ + AtsImsIot_Templates.ttcn \ + AtsImsIot_TP_behavior_CX.ttcn \ + AtsImsIot_TP_behavior_ISC.ttcn \ + AtsImsIot_TP_behavior_SH.ttcn \ + AtsImsIot_Emergency.ttcn \ + AtsImsIot_TD_DRG.ttcn \ + AtsImsIot_Templates_GM.ttcn \ + AtsImsIot_TestConfiguration.ttcn \ + AtsImsIot_TP_behavior_GM.ttcn \ + AtsImsIot_TP_behavior_MW_IS.ttcn \ + AtsImsIot_TP_behavior_RX.ttcn \ + AtsImsIot_TypesAndValues.ttcn \ + AtsImsIot_Functions.ttcn \ + AtsImsIot_TD_DTC.ttcn \ + AtsImsIot_Templates_IC.ttcn \ + AtsImsIot_TestControl.ttcn \ + AtsImsIot_TP_behavior_GX.ttcn \ + AtsImsIot_TP_behavior_MW_PS.ttcn \ + AtsImsIot_TP_behavior_MW_EC.ttcn \ + AtsImsIot_TP_behavior_MW_EB.ttcn \ + AtsImsIot_TP_behavior_S6A.ttcn \ + AtsImsIot_PIXITS.ttcn \ + AtsImsIot_TD_INI.ttcn \ + AtsImsIot_Templates_MW.ttcn \ + AtsImsIot_Templates_MM.ttcn \ + AtsImsIot_TestSystem.ttcn \ + AtsImsIot_TP_behavior_IC.ttcn \ + AtsImsIot_TP_behavior_MW_SI.ttcn \ + AtsImsIot_TP_behavior_S9.ttcn \ + + +modules := ../LibCommon \ + ../LibIms \ + ../LibSip \ + ../LibDiameter \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/ETH \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/UDP \ + ../../ccsrc/EncDec/LibSip \ + ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Protocols/Sip \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk new file mode 100644 index 0000000..9b0b530 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module.mk @@ -0,0 +1,2 @@ +sources := module/src/Abstract_Socket.cc +includes := module/src \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd new file mode 100644 index 0000000..5b05592 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/Abstract_Socket_CNL113384.tpd @@ -0,0 +1,61 @@ + + + + Abstract_Socket_CNL113384 + + + + + SSL + + + + + true + bin/Abstract_Socket_CNL113384 + + + bin + + + + + + + true + true + bin_ssl/Abstract_Socket_CNL113384 + + AS_USE_SSL + + + [OPENSSL_DIR]/include + + + ssl + + + [OPENSSL_DIR]/lib + + + + bin_ssl + + + + + diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE new file mode 100644 index 0000000..3534f2f --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/LICENSE @@ -0,0 +1,277 @@ +Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + +1. DEFINITIONS + +"Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + +"Contributor" means any person or entity that Distributes the Program. + +"Licensed Patents" mean patent claims licensable by a Contributor which +are necessarily infringed by the use or sale of its Contribution alone +or when combined with the Program. + +"Program" means the Contributions Distributed in accordance with this +Agreement. + +"Recipient" means anyone who receives the Program under this Agreement +or any Secondary License (as applicable), including Contributors. + +"Derivative Works" shall mean any work, whether in Source Code or other +form, that is based on (or derived from) the Program and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. + +"Modified Works" shall mean any work in Source Code or other form that +results from an addition to, deletion from, or modification of the +contents of the Program, including, for purposes of clarity any new file +in Source Code form that contains any contents of the Program. Modified +Works shall not include works that contain only declarations, +interfaces, types, classes, structures, or files of the Program solely +in each case in order to link to, bind by name, or subclass the Program +or Modified Works thereof. + +"Distribute" means the acts of a) distributing or b) making available +in any manner that enables the transfer of a copy. + +"Source Code" means the form of a Program preferred for making +modifications, including but not limited to software source code, +documentation source, and configuration files. + +"Secondary License" means either the GNU General Public License, +Version 2.0, or any later versions of that license, including any +exceptions or additional permissions as identified by the initial +Contributor. + +2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + +3. REQUIREMENTS + +3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + +3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + +3.3 Contributors may not remove or alter any copyright, patent, +trademark, attribution notices, disclaimers of warranty, or limitations +of liability ("notices") contained within the Program from any copy of +the Program which they Distribute, provided that Contributors may add +their own appropriate notices. + +4. COMMERCIAL DISTRIBUTION + +Commercial distributors of software may accept certain responsibilities +with respect to end users, business partners and the like. While this +license is intended to facilitate the commercial use of the Program, +the Contributor who includes the Program in a commercial product +offering should do so in a manner which does not create potential +liability for other Contributors. Therefore, if a Contributor includes +the Program in a commercial product offering, such Contributor +("Commercial Contributor") hereby agrees to defend and indemnify every +other Contributor ("Indemnified Contributor") against any losses, +damages and costs (collectively "Losses") arising from claims, lawsuits +and other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of such +Commercial Contributor in connection with its distribution of the Program +in a commercial product offering. The obligations in this section do not +apply to any claims or Losses relating to any actual or alleged +intellectual property infringement. In order to qualify, an Indemnified +Contributor must: a) promptly notify the Commercial Contributor in +writing of such claim, and b) allow the Commercial Contributor to control, +and cooperate with the Commercial Contributor in, the defense and any +related settlement negotiations. The Indemnified Contributor may +participate in any such claim at its own expense. + +For example, a Contributor might include the Program in a commercial +product offering, Product X. That Contributor is then a Commercial +Contributor. If that Commercial Contributor then makes performance +claims, or offers warranties related to Product X, those performance +claims and warranties are such Commercial Contributor's responsibility +alone. Under this section, the Commercial Contributor would have to +defend claims against the other Contributors related to those performance +claims and warranties, and if a court requires any other Contributor to +pay any damages as a result, the Commercial Contributor must pay +those damages. + +5. NO WARRANTY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" +BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF +TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each Recipient is solely responsible for determining the +appropriateness of using and distributing the Program and assumes all +risks associated with its exercise of rights under this Agreement, +including but not limited to the risks and costs of program errors, +compliance with applicable laws, damage to or loss of data, programs +or equipment, and unavailability or interruption of operations. + +6. DISCLAIMER OF LIABILITY + +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT +PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS +SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST +PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +7. GENERAL + +If any provision of this Agreement is invalid or unenforceable under +applicable law, it shall not affect the validity or enforceability of +the remainder of the terms of this Agreement, and without further +action by the parties hereto, such provision shall be reformed to the +minimum extent necessary to make such provision valid and enforceable. + +If Recipient institutes patent litigation against any entity +(including a cross-claim or counterclaim in a lawsuit) alleging that the +Program itself (excluding combinations of the Program with other software +or hardware) infringes such Recipient's patent(s), then such Recipient's +rights granted under Section 2(b) shall terminate as of the date such +litigation is filed. + +All Recipient's rights under this Agreement shall terminate if it +fails to comply with any of the material terms or conditions of this +Agreement and does not cure such failure in a reasonable period of +time after becoming aware of such noncompliance. If all Recipient's +rights under this Agreement terminate, Recipient agrees to cease use +and distribution of the Program as soon as reasonably practicable. +However, Recipient's obligations under this Agreement and any licenses +granted by Recipient relating to the Program shall continue and survive. + +Everyone is permitted to copy and distribute copies of this Agreement, +but in order to avoid inconsistency the Agreement is copyrighted and +may only be modified in the following manner. The Agreement Steward +reserves the right to publish new versions (including revisions) of +this Agreement from time to time. No one other than the Agreement +Steward has the right to modify this Agreement. The Eclipse Foundation +is the initial Agreement Steward. The Eclipse Foundation may assign the +responsibility to serve as the Agreement Steward to a suitable separate +entity. Each new version of the Agreement will be given a distinguishing +version number. The Program (including Contributions) may always be +Distributed subject to the version of the Agreement under which it was +received. In addition, after a new version of the Agreement is published, +Contributor may elect to Distribute the Program (including its +Contributions) under the new version. + +Except as expressly stated in Sections 2(a) and 2(b) above, Recipient +receives no rights or licenses to the intellectual property of any +Contributor under this Agreement, whether expressly, by implication, +estoppel or otherwise. All rights in the Program not expressly granted +under this Agreement are reserved. Nothing in this Agreement is intended +to be enforceable by any entity that is not a Contributor or Recipient. +No third-party beneficiary rights are created under this Agreement. + +Exhibit A - Form of Secondary Licenses Notice + +"This Source Code may also be made available under the following +Secondary Licenses when the conditions for such availability set forth +in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), +version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. \ No newline at end of file diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md new file mode 100644 index 0000000..d3dd011 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/README.md @@ -0,0 +1,14 @@ +# !!! IMPORTANT !!! +### This repository has moved under https://gitlab.eclipse.org/eclipse/titan/ on 2021.04.20 and will not be updated further. Please check out the new location for updates! + +# + +# titan.TestPorts.Common_Components.Abstract_Socket + +Main project page: + +https://projects.eclipse.org/projects/tools.titan + +The source code of the TTCN-3 compiler and executor: + +https://github.com/eclipse/titan.core diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc new file mode 100644 index 0000000..e3d359d --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.adoc @@ -0,0 +1,1125 @@ +--- +Author: Gábor Szalai +Version: 1551-CNL 113 384, Rev. A +Date: 2015-01-20 + +--- += Abstract Socket Test Port for TTCN-3 Toolset with TITAN, Description +:author: Gábor Szalai +:revnumber: 1551-CNL 113 384, Rev. A +:revdate: 2015-01-20 +:toc: + +== About This Document + +=== How to Read This Document + +This is the User Guide for the Abstract Socket test port. The Abstract Socket test port is developed for the TTCN-3 Toolset. + +=== Presumed Knowledge + +To use this protocol module the knowledge of the TTCN-3 language <<_1, [1]>> is essential. + += Functionality + +== System Requirements +In order to use the Abstract Socket test port the following system requirements must be satisfied: + +* Platform: any platform supported by TITAN RTE and OpenSSL +* TITAN TTCN-3 Test Executor version R8A (1.8.pl0) or higher installed. + +NOTE: This Abstract Socket version is not compatible with TITAN releases earlier than R8A. + +If SSL is used, the same OpenSSL must be installed as used in TITAN. For an OpenSSL installation guide see <<_3, [3]>>. + +== Fundamental Concepts + +The test port establishes connection between the TTCN-3 test executor and SUT and transmits/receives messages. The transport channel can be TCP or SSL. The connect and listen operations can be initiated from the test suite using the `use_connection_ASPs` test port parameter. + +=== Module Structure + +The Abstract Socket common component is implemented in the following files: + +* __Abstract_Socket.hh__ +* __Abstract_Socket.cc__ + +== Start Procedure + +=== Connection ASPs + +When choosing to use connection ASPs, the Abstract Socket is able to open a server listening port (acting like a server) or client connections at the same time. + +=== Server Mode + +When the test port is mapped by TITAN RTE, the server creates a TCP socket and starts listening on it. Depending on the transport channel specified in the runtime configuration file, it will accept either TCP or SSL connections. + +=== Client Mode + +When the test port is mapped by TITAN RTE, the client creates a TCP socket and tries to connect to the server. If the transport channel is SSL, the client starts an SSL handshake after the TCP connection is established. If the SSL handshake is successful, the SSL connection is established and the `map` operation is finished. + +The SSL handshake may fail due to several reasons (e.g. no shared ciphers, verification failure, etc.). + +[[sending-receiving-messages]] +== Sending/Receiving Messages + +Only basic octetstring sending and receiving is handled by the Abstract Socket. This functionality probably must be extended in order to build a test port for the desired protocol. First the TTCN-3 mapping of the target protocol messages must be elaborated and then the message processing functions can be developed. + +== Logging + +The type of information that will be logged can be categorized into two groups. The first one consists of information that shows the flow of the internal execution of the test port, e.g. important events, which function that is currently executing etc. The second group deals with presenting valuable data, e.g. presenting the content of a PDU. The logging printouts will be directed to the RTE log file. The user is able to decide whether logging is to take place or not by setting appropriate configuration data. + +== Error Handling + +Erroneous behavior detected during runtime is directed into the RTE log file. The following two types of messages are taken care of: + +* Errors: information about errors detected is provided. If an error occurs the execution of the test case will stop immediately. The test ports will be unmapped. +* Warnings: information about warnings detected is provided. The execution continues after the warning is shown. + +== Closing Down + +The connection can be shut down either performing the `unmap` operation on the port or if connection ASPs are used with the appropriate ASP. + +== IPv6 Support + +It is possible to select the address family used for server socket and client connections in the configuration file or during runtime. The following address families are supported: IPv4, IPv6 and UNSPEC. + +== SSL Functionality + +The Abstract Socket can use SSL or TCP as the transport channel. The same version of OpenSSL library must be used as in TITAN. + +The supported SSL/TLS versions are determined by the used OpenSSL library. It is possible to disable a specific TLS/SSL version in the run time configuration file. + +=== Compilation + +The usage of SSL and even the compilation of the SSL related code parts are optional. This is because SSL related code parts cannot be compiled without the OpenSSL installed. + +The compilation of SSL related code parts can be disabled by not defining the `AS_USE_SSL` macro in the _Makefile_ during the compilation. If the macro is defined in the _Makefile_, the SSL code parts are compiled to the executable test code. The usage of the SSL then can be enabled/disabled in the runtime configuration file. Naturally, the test port parameter will be ignored if the `AS_USE_SSL` macro is not defined during compilation. + +=== Authentication + +The Abstract Socket provides both server side and client side authentication. When authenticating the other side, a certificate is requested and the own trusted certificate authorities’ list is sent. The received certificate is verified whether it is a valid certificate or not (the public and private keys are matching). No further authentication is performed (e.g. whether hostname is present in the certificate). The verification can be enabled/disabled in the runtime configuration file. + +In server mode the test port will always send its certificate and trusted certificate authorities’ list to its clients. If verification is enabled in the runtime configuration file, the server will request for a client’s certificate. In this case, if the client does not send a valid certificate or does not send a certificate at all, the connection will be refused. If the verification is disabled, the connection will never be refused due to verification failure. + +In client mode the test port will send its certificate to the server on the server’s request. If verification is enabled in the runtime configuration file, the client will send its own trusted certificate authorities’ list to the server and will verify the server’s certificate as well. If the server’s certificate is not valid, the SSL connection will not be established. If verification is disabled, the connection will never be refused due to verification failure. + +The own certificate(s), the own private key file, the optional password protecting the own private key file and the trusted certificate authorities’ list file can be specified in the runtime configuration file. + +The test port will check the consistency between its own private key and the public key (based on the own certificate) automatically. If the check fails, a warning is issued and execution continues. + +=== Other Features + +The usage of SSL session resumption can be enabled/disabled in the runtime configuration file. + +The allowed ciphering suites can be restricted in the runtime configuration file, see. + +The SSL re-handshaking requests are accepted and processed, however re-handshaking cannot be initiated from the test port. + +=== Limitations + +* SSL re-handshaking cannot be initiated from the test port. +* The own certificate file(s), the own private key file and the trusted certificate authorities’ list file must be in PEM format. Other formats are not supported. + += The Test Port + +== Overview + +The Abstract Socket is a common component that can serve as a basis for test ports that need TCP connections with or without SSL on the top. The TCP socket can be used either with blocking or non-blocking socket. The Abstract Socket implements basic sending, receiving and socket handling routines, furthermore it supports the development of test ports that can work as a client or as a server. By extending the Abstract Socket component with additional functionality the desired test port can be built. + +See the functioning of the Abstract Socket below: + +image:images/Abstract socket.png[alt] + +== Installation + +Since the Abstract Socket test port is used as a part of the TTCN-3 test environment this requires TTCN-3 Test Executor to be installed before any operation of the Abstract Socket test port. + +The compilation of SSL related code parts can be disabled by not defining the `AS_USE_SSL` macro in the _Makefile_ during the compilation. + +When building the executable test suite the libraries compiled for the OpenSSL toolkit (if the `AS_USE_SSL` macro is defined) should also be linked into the executable along with the TTCN-3 Test Executor, i.e. the OpenSSL libraries should be added to the __Makefile__ generated by the TITAN executor (see example in section <>). To compile the source files you will also need the OpenSSL developer toolkit which contains the header files used by the source. If Share Objects (_.so_) are used in the OpenSSL toolkit, to run the executable, the path of the OpenSSL libraries must be added to the `LD_LIBRARY_PATH` environment variable. + +NOTE: If you are using the test port on Solaris, you have to set the `PLATFORM` macro to the proper value. It shall be `_SOLARIS_` in case of Solaris 6 (SunOS 5.6) and `_SOLARIS8_` in case of Solaris 8 (SunOS 5.8). + +== Configuration + +The executable test program behavior is determined via the run-time configuration file. This is a simple text file, which contains various sections (for example, `[TESTPORT_PARAMETERS]`) after each other. The usual suffix of configuration files is _.cfg._ For further information on the configuration file see <<_2, [2]>>. + +The listed port parameters (<>) are managed by default by the Abstract Socket. They have to be defined only in the TTCN configuration files. Though, if Abstract Socket's parameter handling is not appropriate for your application, you can ignore it completely and handle the variables directly from your port. It is recommended to implement your own test port parameter name passing functions so that your test port will not depend on the test port parameter names in the Abstract Socket. + +[[Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File]] +=== Abstract Socket Test Port Parameters in the Test Port Configuration File + +In the `[TESTPORT_PARAMETERS]` section the following parameters can be set for the Abstract Socket based test port. The parameter names are case-sensitive; the parameter values are not case-sensitive (i.e. `_"YES"_`, `_"yes"_`, `_"Yes"_` values are identical). + +[[abstract-socket-test-port-parameters-in-the-test-port-configuration-file-if-the-transport-channel-is-tcp-ip]] +==== Abstract Socket Test Port Parameters in the Test Port Configuration File if the Transport Channel is TCP/IP + +* `use_connection_ASPs` ++ +The parameter is optional, and can be used to specify whether the Abstract Socket is controlled by connection ASPs. The default value is `_"no"_`. ++ +If the value is `_"yes"_`, the functionalities of the Abstract Socket have to be controlled by calling its `open_client_connection`, `open_listen_port`, `remove_client`, `remove_all_clients` and `close_listen_port` functions. The Abstract Socket will not create any connection or listening port when calling the `map_user` function. Using this parameter, more than one connection can be opened in client mode operation. The Abstract Socket will call the `listen_port_opened`, `client_connection_opened`, `peer_connected` and `peer_disconnected` functions of the test port implementing it when corresponding events happen. This allows test ports and TTCN code to directly handle TCP connection initiations and events. + +* `server_mode` ++ +The parameter is optional, and can be used to specify whether the test port shall act as a server or a client. If the value is `_"yes"_`, the test port will act as a server. If the value is `_"no"_`, the test port will act as a client. The default value is `_"no"_` . The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_` because the `open_listen_port` initiates the listening on a server port. + +* `socket_debugging` ++ +The parameter is optional, and can be used to enable debug logging related to the transport channel (TCP socket and SSL operations) in the test port. The default value is `_"no"_`. + +* `halt_on_connection_reset` ++ +The parameter is optional, and can be used to specify whether the test port shall stop on errors occurred during connection setup (including connection refusing), sending and receiving, disconnection (including the detection of the disconnection). The value `_"yes"_` means the test port will stop, the value `_"no"_` means that it will not stop on such errors. The default value is `_"no"_` in server mode and `_"yes"_` in client mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function of the test port is called on the event. + +* `nagling` ++ +The parameter is optional, and can be used to specify whether concatenation occurs on TCP layer. If value is `_"yes"_`, concatenation is enabled. If value is `_"no"_`, it is disabled. ++ +NOTE: The `nagling` setting is valid only for the outgoing messages. The `nagling` for the incoming messages shall be set by the sending party. The default value is `_"no"_`. + +* `remote_address` ++ +The parameter can be used to specify the server's IP address. Mandatory in client mode and not used in server mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `open_client_connection` function receives the remote and optionally the local address. + +* `remote_port` ++ +The parameter can be used to specify the server's listening port. Mandatory in client mode and not used in server mode. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `open_client_connection` function receives the remote and optionally the local address. + +* `local_port` ++ +The parameter can be used to specify the port where the server is listening for connections. Mandatory in server mode and optional in client mode. ++ +The parameter serves as a default if `use_connection_ASPs` is set to `_"yes"_`. + +* `ai_family` ++ +The parameter can be used to specify the address family to use when opening listening ports or creating client connections. If its value is set to `_"IPv4"_` or `_"AF_INET"_` only IPv4 addresses are used. If it is set to `_"IPv6"_` or `_"AF_INET6"_` only IPv6 connections are allowed. The values `_`"UNSPEC"`_` and `"AF_UNSPEC"` can be used if the address family is not specified. The `_"UNSPEC"_` value allows using IPv4 and IPv6 addresses at the same time. The selection is made automatically depending on the actual value of the local and remote addresses. ++ +This parameter is optional. The default value is `_"AF_UNSPEC"_`. + +* `server_backlog` ++ +The parameter can be used to specify the number of allowed pending (queued) connection requests on the port the server listens. It is optional in server mode and not used in client mode. The default value is `_"1"_`. + +* `TCP_reconnect_attempts` ++ +This parameter can be used to specify the maximum number of times the connection is attempted to be established in TCP reconnect mode. The default value is `_"5"_`. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `TCP_reconnect_delay` ++ +This parameter can be used to specify the time (in seconds) the test port waits between to TCP reconnection attempt. The default value is `_"1"_`. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `client_TCP_reconnect` ++ +If the test port is in client mode and the connection was interrupted by the other side, it tries to reconnect again. The default value is ``no''. ++ +The parameter has no meaning if `use_connection_ASPs` is set to `_"yes"_`, because the `peer_disconnected` function is called when the event happens, and it’s up to the test port or TTCN code how to continue. + +* `use_non_blocking_socket` ++ +This parameter can be used to specify whether the Test Port shall use blocking or non-blocking TCP socket. Using this parameter, the `send` TTCN-3 operation will block until the data is sent, but an algorithm is implemented to avoid TCP deadlock. ++ +The parameter is optional, the default value is `_"no"_`. + +==== Additional Abstract Socket Test Port Parameters in the Test Port Configuration File if the Transport Channel is SSL + +These parameters available only if `AS_USE_SSL` macro is defined during compilation. + +* `ssl_use_ssl` ++ +The parameter is optional, and can be used to specify whether to use SSL on the top of the TCP connection or not. The default value is `_"no"_`. + +* `ssl_verify_certificate` ++ +The parameter is optional, and can be used to tell the test port whether to check the certificate of the other side. If it is defined `_"yes"_`, the test port will query and check the certificate. If the certificate is not valid (i.e. the public and private keys do not match), it will exit with a corresponding error message. If it is defined `_"no"_`, the test port will not check the validity of the certificate. The default value is `_"no"_`. + +* `ssl_use_session_resumption` ++ +The parameter is optional, and can be used to specify whether to use/support SSL session resumptions or not. The default value is `_"yes"_`. + +* `ssl_certificate_chain_file` ++ +It specifies a PEM encoded file’s path on the file system containing the certificate chain. Mandatory in server mode and optional in client mode. Note that the server may require client authentication. In this case no connection can be established without a client certificate. + +* `ssl_private_key_file` ++ +It specifies a PEM encoded file’s path on the file system containing the server’s RSA private key. Mandatory in server mode and optional in client mode. + +* `ssl_private_key_password` ++ +The parameter is optional, and can be used to specify the password protecting the private key file. If not defined, the SSL toolkit will ask for it. + +* `ssl_trustedCAlist_file` ++ +It specifies a PEM encoded file’s path on the file system containing the certificates of the trusted CA authorities to use. Mandatory in server mode, and mandatory in client mode if `ssl_verify_certificate="yes"`. + +* `ssl_allowed_ciphers_list` ++ +The parameter is optional, and can be used to specify the allowed cipher list. The value is passed directly to the SSL toolkit. + +* `ssl_disable_SSLv2` + +`ssl_disable_SSLv3` + +`ssl_disable_TLSv1` + +`ssl_disable_TLSv1_1` + +`ssl_disable_TLSv1_2` ++ +The usage of a specific SSL/TLS version can be disabled by setting the parameter to `_"yes"_`. Please note that the available SSL/TLS versions are depends of the used OpenSSL library. + +== The `AbstractSocket` API + +In the derived test port the following functions can be used: + +[[map-unmap-the-test-port]] +=== Map/Unmap the Test Port + +In the `user_map` and `user_unmap` functions of the derived test port these functions should be called: + +[source] +---- +void map_user(); + +void unmap_user(); +---- + +=== Setting Test Port Parameters + +[source] +---- +bool parameter_set(const char __parameter_name, const char __parameter_value); +---- + +Call this function in the `set_parameter` function of the derived test port to set the test port parameters of AbstractSocket. + +=== Open a Listening Port + +To open a server socket call the following function: + +[source] +---- +int open_listen_port(const char* localHostname, const char* localService); +---- + +This function supports both IPv4 and IPv6 addresses. The parameter `localHostname` should specify the local hostname. It can be the name of the host or an IP address. The parameter `localService` should be a string containing the port number. One of the two parameters can be `_NULL_`, meaning `_ANY_` for that parameter. The address family used is specified either by the `ai_family_name()` testport parameter or set by the function `set_ai_family(int)`. + +The following function only supports IPv4: + +`int open_listen_port(const struct sockaddr_in & localAddr);` + +NOTE: This function is deprecated. It is kept for compatibility with previous versions of test ports that use `AbstractSocket` + +After calling the `open_listen_port` function, the function virtual void `listen_port_opened(int port_number)` is called automatically with the listening port number, or `_-1_` if the opening of the listening port failed. This function can be overridden in the derived test port to implement specific behavior depending on the listen result. This can, for example, call `incoming_message` to generate an incoming `ListenResult` message in the test port. + +Subsequent calls of the function `open_listen_port` results in closing the previous listening port and opening a new one. This means that only one server port is supported by `AbstractSocket`. + +When a client connects to the listening port the following functions are called to notify the derived test port about the new client connection: + +[source] +---- +virtual void peer_connected(int client_id, const char * host, const int port) +virtual void peer_connected(int client_id, sockaddr_in& remote_addr); +---- + +Only one of these functions should be overridden in the derived test port. Note, that the second is obsolete. It is kept for backward compatibility only. + +Similar functions for client disconnects: + +[source] +---- +virtual void peer_disconnected(int client_id); +virtual void peer_half_closed(int client_id); +---- + +The `client_id` parameter specifies which client has disconnected/half closed. The `peer_half_closed` function is called when the client closes the socket for writing, while `peer_disconnected` is called when the client is disconnected. Both functions can be overridden in the derived test port. + +=== Close the Listening Port + +`void close_listen_port()` + +This function closes the listening port. + +=== Open a Client Connection + +[source] +---- +int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); +---- + +This function creates an IPv4 or IPv6 connection from the local address `localHostname/localService` to the remote address `remoteHostname/remoteService`. + +If `localHostname` or `localService` is `_NULL_`, it will be assigned automatically. + +The parameters for the remote address cannot be `_NULL_`. The local or remote service parameters should be numbers in string format, while the addresses should be names or IP addresses in IPv4 or IPv6 format. + +The `open_client_connection` function above makes the following function obsolete: + +[source] +---- +int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) +---- + +It is kept for backward compatibility for derived test ports that were not adapted to the IPv6 supporting function. + +After calling the `open_client_connection` function, AbstractSocket calls automatically the function `virtual void client_connection_opened(int client_id)` to inform the test port about the result. The `client_id` parameter is set to the id of the client, or `_-1_` if the connection could not be established to the remote address. This function can be overridden in the derived test port. + +=== Send Message + +[source] + +void send_outgoing(const unsigned char* message_buffer, int length, int client_id = -1); + +With this function a message can be sent to the specified client. + +==== To Receive a Message + +When a message is received, the following function is called automatically: + +[source] +---- +virtual void message_incoming(const unsigned char* message_buffer, int length, int client_id = -1) +---- + +This function must be overridden in the derived test port. To generate an incoming TTCN3 message, the test port shall call the `incoming_message` function of the Titan API within this function. + +In order that this function could be called automatically, the derived test port shall define these functions: + +[source] +---- +virtual void Handler_Install(const fd_set* read_fds, const fd_set* write_fds, const fd_set* error_fds, double call_interval); +virtual void Handler_Uninstall(); +---- + +In `Handler_Install` the `Install_Handler` Titan API function is called. + +Also in the `Event_Handler` Titan API function, the function + +[source] +---- +void Handle_Event(const fd_set *read_fds, const fd_set __write_fds, const fd_set __error_fds, double time_since_last_call) +---- +is called. + +=== Close a Client Connection + +[source] +---- +virtual void remove_client(int client_id); +virtual void remove_all_clients(); +---- + +The first closes the connection for a given client the second function closes the connection of all clients. + +=== Test Port Parameter Names + +The default AbstractSocket test port parameter names can be redefined in the derived test port by overriding the appropriate function below: + +[source] +---- +virtual const char* local_port_name(); +virtual const char* remote_address_name(); +virtual const char* local_address_name(); +virtual const char* remote_port_name(); +virtual const char* ai_family_name(); +virtual const char* use_connection_ASPs_name(); +virtual const char* halt_on_connection_reset_name(); +virtual const char* client_TCP_reconnect_name(); +virtual const char* TCP_reconnect_attempts_name(); +virtual const char* TCP_reconnect_delay_name(); +virtual const char* server_mode_name(); +virtual const char* socket_debugging_name(); +virtual const char* nagling_name(); +virtual const char* use_non_blocking_socket_name(); +virtual const char* server_backlog_name(); +virtual const char* ssl_disable_SSLv2(); +virtual const char* ssl_disable_SSLv3(); +virtual const char* ssl_disable_TLSv1(); +virtual const char* ssl_disable_TLSv1_1(); +virtual const char* ssl_disable_TLSv1_2(); +---- + +=== Parameter Accessor Functions + +The following functions can be use to get/set the AbstractSocket parameters: + +[source] +---- +bool get_nagling() const +bool get_use_non_blocking_socket() const +bool get_server_mode() const +bool get_socket_debugging() const +bool get_halt_on_connection_reset() const +bool get_use_connection_ASPs() const +bool get_handle_half_close() const +int set_non_block_mode(int fd, bool enable_nonblock); +bool increase_send_buffer(int fd, int &old_size, int& new_size); +const char* get_local_host_name() +const unsigned int get_local_port_number() +const char* get_remote_host_name() +const unsigned int get_remote_port_number() +const int& get_ai_family() const +void set_ai_family(int parameter_value) +bool get_ttcn_buffer_usercontrol() const +void set_nagling(bool parameter_value) +void set_server_mode(bool parameter_value) +void set_handle_half_close(bool parameter_value) +void set_socket_debugging(bool parameter_value) +void set_halt_on_connection_reset(bool parameter_value) +void set_ttcn_buffer_usercontrol(bool parameter_value) +---- + +=== Logging Functions + +The following functions log a given message in different ways: + +[source] +---- +void log_debug(const char *fmt, …) const +void log_warning(const char *fmt, …) const +void log_error(const char *fmt, …) const +void log_hex(const char __prompt, const unsigned char __msg, size_t length) const; +---- + +=== Error Reporting + +[source] +---- +virtual void report_error(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); +---- + +This function is called automatically if an error occurs during send operation in `AbstractSocket`. This function can be overridden in the derived test port to override the default error reporting behavior of `AbstractSocket`, which is calling the `log_error` function. This function can also be called by the derived test port to initiate the error reporting mechanism. + += Tips and Tricks + +== Usage + +In order to build a test port based on `Abstract_Socket` the following steps must be completed: + +1. Deriving the test port class (see <>) +2. Implementation of the logger functions if needed (see <>) +3. Function translations (see <>) +4. Installing the handlers (see <>) +5. Final steps (see <>) + +These steps are discussed in detail in the following subsections. + +[[deriving_the_test_port_class]] +=== Deriving the Test Port Class + +Inherit your test port class beside the test port base also from the `Abstract_Socket` class, if you do not want to use SSL at all. If you plan to use SSL, inherit the test port from the `SSL_Socket` class. In case your SSL implementation is just optional, you have to make sure that it is possible to disable SSL related code parts at compile time. In the AS if the `AS_USE_SSL` macro is defined, then SSL is enabled, otherwise disabled. + +Example: + +[source] +---- +#ifdef AS_USE_SSL +class myport__PT : public SSL_Socket, public myport__PT_BASE { +#else +class myport__PT : public Abstract_Socket, public myport__PT_BASE { +#endif +---- + +[[implementation_of_the_logger_functions]] +=== Implementation of the Logger Functions + +Implement the `log_debug`, `log_error`, `log_warning` and `log_hex` virtual functions if you need other implementation than the default. (they can be empty implementations if logging is not needed) + +[width="100%",cols="20%,80%",options="header",] +|=============================================================== +|Function |Description +|`log_debug` |does the debug-logging +|`log_hex` |does the logging of the message content in hex format +|`log_warning` |does the logging of warning messages +|`log_error` |is expecting the test port to stop with a TTCN_ERROR +|=============================================================== + +You can use the logger functions implemented in the AS. In this case you have to call the AS constructor with your test port type and name. In this way the AS will log messages acting like your test port. + +[[function_translations]] +=== Function Translations + +Translate the port's functions to the socket's functions. By translating we mean a function call with unchanged parameters like this: + +[source] +---- +void myport__PT::set_parameter(const char *parameter_name, + const char* parameter_value) { + parameter_set(parameter_name ,parameter_value); +} +---- + +The list of functions to be translated: + +[cols=",",options="header",] +|==================================== +|Port functions: |Socket functions: +|`set_parameter` |`parameter_set` +|`Handle_Fd_Event` |`Handle_Socket_Event` +|`Handle_Timeout` |`Handle_Timeout_Event` +|`user_map` |`map_user` +|`user_unmap` |`unmap_user` +|==================================== + +If you might need other functions also to be performed during `map`, `unmap` or `set_parameter`, you can add them right after the socket's function calls. + +Example: + +[source] +---- +void myport__PT::set_parameter(const char *parameter_name, + const char *parameter_value) + { + parameter_set(parameter_name ,parameter_value); + if(strcmp(parameter_name,"dallas_addr") == 0){ + destHostId = getHostId(parameter_value); + destAddr.sin_family = AF_INET; + destAddr.sin_addr.s_addr = htonl(destHostId); + return; + } + } +---- + +The translation of the `outgoing_send` to `send_outgoing` function needs some parameter formatting since the `outgoing_send` has parameters inherited from your TTCN-3 structures, while `Abstract_Socket`'s `outgoing_send` has parameters as ``(char* message, int messageLength, int client_id)``. + +The same applies for the incoming function calls where you have to write your own `message_incoming` to `incoming_message` translation. + +Example: + +[source] +---- +void myport__PT::outgoing_send(const TTCN3__Structure& send_par) +{ + if(send_par.client__id().ispresent()) { + send_outgoing((char*)(const unsigned char*)send_par.data(), + send_par.data().lengthof(), send_par.client__id()()); + } else { + send_outgoing((char*)(const unsigned char*)send_par.data(), + send_par.data().lengthof()); + } +} +---- + +[[functions_for_manipulating_the_set_of_events_for_which_the_port_waits]] +=== Functions for Manipulating the Set of Events for Which the Port Waits + +Add the following (virtual) member functions to your port (class definition) unchanged: + +[source] +---- +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); +} +---- + +NOTE: These member functions are required and used by Abstract Socket. They are defined in Abstract Socket as virtual and are to be overridden in the descendant Test Port class. They are implemented in the (Test Port) class definition only for the sake of simplicity.) + +[[final_steps]] +=== Final Steps + +Finally, the function definitions must be added to the header file accordingly. Then, you are ready to go ahead and develop your test port. + +[[using-ttcn-buffer-in-test-ports]] +== Using `TTCN_Buffer` in Test Ports + +The Abstract Socket uses a `TTCN_Buffer` <<_2, [2]>> to store incoming message portions. If the test port also would like to store incoming messages, here is a description how to do that: + +The test port can access the `TTCN_Buffer` with `get_buffer`() and can operate on it. If the test port uses the buffer to store data, it must set the `ttcn_buffer_usercontrol` variable to `_true_`, so that the AS will not clear the buffer content. + +In this case the test port can use the buffer in the following ways: + +* `get_buffer`() to fetch the `TTCN_Buffer` associated with the client +* Optionally modify content; or wait for complete TLV +* Once a message portion is sent to the TTCN-3 test suite, cut the sent message from the buffer because the AS will not do that. In case the test port simply passed the message to the test suite and uses no storage of it (e.g. TCP Test Port), it can leave `ttcn_buffer_usercontrol` in false (which is the default value) so that the AS will take care of buffer cleanups. + +== Using SSL on Top of a TCP Connection + +SSL can be used on top of the TCP connection. The authentication mode can be configured via a test port parameter. + +=== Server Mode + +In server mode, first a TCP socket is created. The server starts to listen on this port (upon the `user_map`() operation or in case of connection ASPs, calling the `open_listen_port`() operation). Once a TCP connect request is received, the TCP connection is set up. After this the SSL handshake begins. The SSL is mapped to the file descriptor of the TCP socket. The BIO, which is an I/O abstraction that hides many of the underlying I/O details from an application, is automatically created by OpenSSL inheriting the characteristics of the socket (non-blocking mode). The BIO is completely transparent. The server always sends its certificate to the client. If configured so, the server will request the certificate of the client and check if it is a valid certificate. If not, the SSL connection is refused. If configured not to verify the certificate, the server will not request it from the client and the SSL connection is accepted. If usage of the SSL session resumption is enabled and the client refers to a previous SSL session, the server will accept it, unless it is not found in the SSL context cache. Once the connection is negotiated, data can be sent/received. The SSL connection is shut down using an `unmap`() operation. The shutdown process does not follow the standard: the server simply shuts down and does not expect any acknowledgement from the client. + +Clients connected to the server are distinguished with their file descriptor numbers. When a message is received, the file descriptor number is also passed, so the client can be identified. + +=== Client Mode + +In client mode, first a TCP connection is requested to the server (upon the `user_map`() operation or in case of connection ASPs, calling the `open_client_connection`() operation). Once it is accepted, the SSL endpoint is created. If configured so, the client tries to use the SSL session Id from the previous connection, if available (e.g. it is not the first connection). If no SSL session Id is available, or the server does not accept it, a full handshake is performed. If configured so, the certificate of the server is verified. If the verification fails, the SSL connection is interrupted by the client. If no verification required, the received certificate is still verified, however the result does not affect the connection even though it failed. + +=== Authentication Flow + +In summary, the authentication is done according to this flow: + +* ssl handshake begins (new client tries to connect) +* `virtual int ssl_verify_certificates_at_handshake(int preverify_ok, X509_STORE_CTX *ssl_ctx)` is called. During this handshake you can perform additional authentication. +* If the connection is accepted, the SSL handshake is finished and SSL is established. Now the function virtual `bool ssl_verify_certificates`() is called where you may perform other authentication if you want. + +`ssl_verify_certificates`() is a virtual function. It is called after the SSL connection is up. Test ports may use it to check other peer's certificate and do actions. If the return value is 0, then the SSL connection is closed. In case of client mode, the test port exits with an error (`*verification_error*`). In server mode the test port just removes client data, but keeps running. + +== Adapting Derived Test Ports to Support IPv6 + +Derived test ports should be updated in the following way to support IPv4 and IPv6: + +All calls of functions + +[source] +---- +const struct sockaddr_in & get_remote_addr() +const struct sockaddr_in & get_local_addr() +---- + +should be removed. They can be replaced by calling these functions: + +[source] +---- +virtual const char* local_port_name(); +virtual const char* local_address_name(); +virtual const char* remote_port_name(); +virtual const char* remote_address_name(); +---- + +The function `int open_listen_port(const struct sockaddr_in & localAddr);` does not support IPv6. The function below should be used instead: + +`int open_listen_port(const char* localHostname, const char* localServicename);` + +The same has to be done for the `open_client_connection` function. Replace any call of the function + +[source] +int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) + + +with the function: + +[source] +---- +int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); +---- + +If the following callback function is overridden in the derived test port: + +[source] +---- +virtual void peer_connected(int client_id, sockaddr_in& remote_addr); +---- + +it should be removed and the following function should be overridden instead: + +[source] +---- +virtual void peer_connected(int client_id, const char * host, const int port) +---- + +The following function should not be used: + +`void get_host_id(const char* hostName, struct sockaddr_in *addr)` + +The socket API function `getaddrinfo` should be used instead. + += Error Messages + +== Error Messages In Case TCP Connections Are Used + +`*Parameter value not recognized for parameter *` + +The specified `` in the runtime configuration file is not recognized for the parameter . + +`*Invalid input as TCP_reconnect_attempts counter given: *` + +The specified `` in the runtime configuration file must be a positive whole number. + +`*TCP_reconnect_attempts must be greater than 0, is given*` + +The specified `` for `TCP_reconnect_attempts` in the runtime configuration file must be greater than `_0_`. + +`*Invalid input as TCP_reconnect_delay given: *` + +The specified `` for the `TCP_reconnect_delay` parameter in the runtime configuration file must be a whole number not less than `_0_`. + +`*TCP_reconnect_delay must not be less than 0, is given*` + +The specified `` for the `TCP_reconnect_delay` parameter in the runtime configuration file must be a whole number not less than `_0_`. + +`*Invalid input as port number given: *` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid port number (e.g. string is given). + +`*Port number must be between 0 and 65535, is given*` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid port number. Port numbers must be in the range 0..65535. + +`*Invalid input as server backlog given: *` + +The specified `` in the runtime configuration file is cannot be interpreted as a valid server backlog number (e.g. string is given). + +`*Cannot accept connection at port*` + +Connection could not be accepted on TCP socket. + +`*Error when reading the received TCP PDU*` + +System error occurred during reading from the TCP socket. + +`*Cannot open socket*` + +Creation of the listener socket failed. + +`*Setsockopt failed*` + +Setting of socket options failed. + +`*Cannot bind to port*` + +Binding of a socket to a port failed. + +`*Cannot listen at port*` + +Listen on the listener socket failed. + +`*getsockname() system call failed on the server socket*` + +The query of the listening port number failed. + +`*AbstractSocket: getnameinfo: *` + +The `getnameinfo` function returned an error. + +`*getaddrinfo: for host service *` + +The `getaddrinfo` function returned an error. + +`*Malformed message: invalid length: . The length should be at least .*` + +The message received contains invalid length information. + +`*Already tried times, giving up*` + +The deadlock counter exceeds the hard coded limit when trying to connect to a server in client mode. When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +`*Cannot connect to server*` + +Connection to a server on TCP failed. + +`*Connection was interrupted by the other side*` + +The TCP or SSL connection was refused by the other peer, or broken. + +`*Client Id not specified although not only 1 client exists*` + +It should never show up. + +`*There is no connection alive, use the `ASP_TCP_Connect' before sending anything.*` + +An attempt was made by the test port to send data before setting up any connection. The `open_client_connection` function has to be called before sending any data. + +`*Send system call failed: There is no client connected to the TCP server*` + +A send operation is performed to a non-existing client. + +`*Send system call failed: bytes were sent instead of *` + +The send operation failed. + +`* is not defined in the configuration file*` + +The test port parameter is not defined in the runtime configuration file, although its presence is mandatory (or conditional and the condition is true). + +`*The host name is not valid in the configuration file*` + +The host name specified in the configuration file could not be resolved. + +`*Number of clients<>0 but cannot get first client, programming error*` + +It should never show up. + +`*Index exceeds length of peer list*` + +It should never show up. + +`*Abstract_Socket::get_peer: Client does not exist*` + +It should never show up. + +`*Invalid Client Id is given: *` + +It should never show up. + +`*Peer does not exist*` + +It should never show up. + +`*Set blocking mode failed.*` + +Test port could not set socket option: `O_NONBLOCK` + +== Additional Error Messages In Case SSL Connections Are Used + +Apart from the previously mentioned error messages, the following messages are used in case SSL is used: + +`*No SSL CTX found, SSL not initialized*` + +It should never show up. + +`*Creation of SSL object failed*` + +Creation of the SSL object is failed. + +`*Binding of SSL object to socket failed*` + +The SSL object could not be bound to the TCP socket. + +`*SSL error occurred*` + +A general SSL error occurred. Check the test port logs to see previous error messages showing the real problem. + +`* is not defined in the configuration file although =yes*` + +[source] +: ssl_trustedCAlist_file_name(), : ssl_verifycertificate_name() + +`*No SSL data available for client *` + +It should never show up. + +`*Could not read from /dev/urandom*` + +The read operation on the installed random device is failed. + +`*Could not read from /dev/random*` + +The read operation on the installed random device is failed. + +`*Could not seed the Pseudo Random Number Generator with enough data*` + +As no random devices found, a workaround is used to seed the SSL PRNG. The seeding failed. + +`*SSL method creation failed*` + +The creation of the SSL method object failed. + +`*SSL context creation failed*` + +The creation of the SSL context object failed. + +`*Can't read certificate file*` + +The specified certificate file could not be read. + +`*Can't read key file*` + +The specified private key file could not be read. + +`*Can't read trustedCAlist file*` + +The specified certificate of the trusted CAs file could not be read. + +`*Cipher list restriction failed for *` + +The specified cipher restriction list could not be set. + +`*Activation of SSL session resumption failed on server*` + +The activation of the SSL session resumption on the server failed. + +`*Unknown SSL error code *` + +It should never show up. + += Warning Messages + +== Warning Messages In Case TCP Connections Are Used + +`*Error when reading the received TCP PDU*` + +The received TCP PDU cannot be read. + +`*connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again.*` + +When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +`*Connect() returned error code , trying to connect again (TCP reconnect mode)*` + +When connecting on a socket, sometimes it is unsuccessful and the given error code was returned. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. + +`*TCP connection was interrupted by the other side, trying to reconnect again.*` + +The TCP or SSL connection was refused by the other peer, or it was broken. The test port tries to reconnect again. + +`*TCP reconnect successfully finished.*` + +This warning message is given if the reconnection was successful. + +`*Parameter has no meaning if use_connection_ASPs is used.*` + +There is no effect of setting this parameter when `use_connection_ASPs` is set to `_"yes"_`. + +`*Abstract_Socket::remove_client: is the server listening port, can not be removed!*` + +The `client_id` given in the `remove_client` function is currently used as the server’s listening port, it can not be removed. To close the server listening port, use the `close_listen_port` function. + +`*Client has not been removed, programming error*` + +It should never show up. + +`*Sending data on file descriptor .The sending operation would block execution. The size of the outgoing buffer was increased from to bytes.*` + +When the Abstract Socket is used with non-blocking socket, if the sending operation would block, first the size of the sending buffer is increased. This is the first step to avoid TCP deadlock. In the second step the Test Port will try to receive some data. + +`*Sending data on file descriptor .The sending operation would block execution and it is not possible to further increase the size of the outgoing buffer. Trying to process incoming data to avoid deadlock.*` + +When the Abstract Socket is used with non-blocking socket, if the sending operation would block, and the size of the outgoing buffer cannot be increased, the Test Port tries to receive some data to avoid deadlock. + +`*System call fcntl(F_GETFL) failed on file descriptor %d.*` + +`*System call fcntl(F_SETFL) failed on file descriptor %d.*` + +`*Setsockopt failed when trying to open the listen port: *` + +The `setsockopt` function failed. + +`*Cannot bind to port when trying to open the listen port: *` + +The bind system call failed. + +`*Cannot listen at port when trying to open the listen port: *` + +The listen system call failed. + +`*getsockname() system call failed on the server socket when trying to open the listen port: *` + +The getsockname system call failed. + +`*getaddrinfo: for host service *` + +The getaddrinfo system call failed. + +`*getnameinfo() system call failed on the server socket when trying to open the listen port: *` + +The getnameinfo system call failed. + +`*Cannot open socket when trying to open client connection: *` + +The socket system call failed. + +`*Setsockopt failed when trying to open client connection: *` + +The setsockopt system call failed. + +`*Cannot bind to port when trying to open client connection: *` + +The bind system call failed. + +`*Already tried times, giving up when trying to open client connection: *` + +The deadlock counter exceeds the hard coded limit when trying to connect to a server in client mode. When connecting on a socket, sometimes it is unsuccessful. The next try usually solves the problem and the connection will be successfully accepted. The test port retries to connect as a workaround. The number of tries however limited to avoid hanging the test port. + +Different operating systems behave in a different way. This problem is rare on Solaris, Unix and Linux systems, but much more often on Cygwin. + +[[warning_messages_in_case_SSL_connections_are_used]] +== Warning Messages In Case SSL Connections Are Used + +`*Warning: race condition while setting current client object pointer.*` + +The current client object pointer is already set. + +`*Connection from client is refused*` + +The connection from a client is refused in the server. + +`*Connection to server is refused*` + +The connection from the client is refused by the server. + +`*Server did not send a session ID*` + +The SSL server did not send a session ID. + +`*Verification failed*` + +The verification of the other side is failed. The connection will be shut down. + +`*SSL object not found for client *` + +It should never show up. + +`*SSL_Socket::receive_message_on_fd: SSL connection was interrupted by the other side*` + +The TLS/SSL connection has been closed. If the protocol version is SSL 3.0 or TLS 1.0, this warning appears only if a closure alert has occurred in the protocol, i.e. if the connection has been closed cleanly. Note that in this case it does not necessarily indicate that the underlying transport has been closed. + +`*Other side does not have certificate*` + +The other side of the SSL connection does not have a certificate. + +`*Solaris patches to provide random generation devices are not installed*` + +Solaris patches to provide random generation devices are not installed. A workaround will be used to seed the PRNG. + +`*Private key does not match the certificate public key*` + +The private key specified for the test port does not match with the public key. + += Terminology + +*Sockets:* + +The socket is a method for communication between a client program and a server program in a network. A socket is defined as "the endpoint in a connection". Sockets are created and used with a set of programming requests or "function calls" sometimes called the sockets application programming interface (API). The most common socket API is the Berkeley UNIX C language interface for sockets. Sockets can also be used for communication between processes within the same computer. + +*Blocking and non-blocking sockets:* + +Using a blocking socket, some socket operations (send, receive, connect, accept) will block until the operation is finished or an error occurs. Using a non-blocking socket, these operations will never block but return with an error and set `errno` to the appropriate value. + +*OpenSSL:* + +The OpenSSL Project is a collaborative effort to develop a robust, commercial-grade, full-featured, and open source toolkit implementing the Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1) protocols as well as a full-strength general purpose cryptography library. For more information on the OpenSSL project see <<_3, [3]>> + += Abbreviations + +AS:: Abstract Socket + +ASP:: Abstract Service Primitive + +IPv4:: Internet Protocol version 4 + +IPv6:: Internet Protocol version 6 + +PEM:: Privacy Enhanced Mail + +RTE:: Run-Time Environment + +SSL:: Secure Sockets Layer + +SUT:: System Under Test + +TCP:: Transmission Control Protocol + +TLS:: Transport Layer Security + +TTCN-3:: Testing and Test Control Notation version 3 + += References + +[[_1]] +[1] ETSI ES 201 873-1 (2002) + +The Testing and Test Control Notation version 3. Part 1: Core Language + +[[_2]] +[2] User Guide for TITAN TTCN–3 Test Executor + +[[_3]] +[3] OpenSSL toolkit + + http://www.openssl.org diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf new file mode 100644 index 0000000..d34138f --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_1551.pdf @@ -0,0 +1,25084 @@ +%PDF-1.3 +%ÿÿÿÿ +1 0 obj +<< /Title (Abstract Socket Test Port for TTCN-3 Toolset with TITAN, Description) +/Author +/Creator (Asciidoctor PDF 1.5.0.alpha.16, based on Prawn 2.2.2) +/Producer +/ModDate (D:20180803135149+02'00') +/CreationDate (D:20180803135149+02'00') +>> +endobj +2 0 obj +<< /Type /Catalog +/Pages 3 0 R +/Names 16 0 R +/Outlines 290 0 R +/PageLabels 353 0 R +/PageMode /UseOutlines +/OpenAction [7 0 R /FitH 842.89] +/ViewerPreferences << /DisplayDocTitle true +>> +>> +endobj +3 0 obj +<< /Type /Pages +/Count 31 +/Kids [7 0 R 10 0 R 12 0 R 14 0 R 32 0 R 40 0 R 47 0 R 56 0 R 64 0 R 68 0 R 70 0 R 73 0 R 78 0 R 81 0 R 87 0 R 92 0 R 95 0 R 109 0 R 113 0 R 117 0 R 123 0 R 129 0 R 132 0 R 137 0 R 139 0 R 142 0 R 144 0 R 148 0 R 150 0 R 153 0 R 158 0 R] +>> +endobj +4 0 obj +<< /Length 2 +>> +stream +q + +endstream +endobj +5 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 4 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +>> +>> +endobj +6 0 obj +<< /Length 834 +>> +stream +q +/DeviceRGB cs +0.6 0.6 0.6 scn +/DeviceRGB CS +0.6 0.6 0.6 SCN + +BT +84.6338 361.6965 Td +/F1.0 27 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420666f72205454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6 0.6 0.6 scn +0.6 0.6 0.6 SCN + +BT +139.9568 327.6765 Td +/F1.0 27 Tf +[<54> 29.7852 <6f6f6c736574207769746820544954> 60.0586 <414e2c204465736372697074696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.0941 0.0941 0.0941 scn +0.0941 0.0941 0.0941 SCN + +BT +469.014 293.2049 Td +/F1.0 13 Tf +<4787626f7220537a616c6169> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +323.2733 263.3914 Td +/F1.0 10.5 Tf +[<56> 60.0586 <657273696f6e20313535312d434e4c20313133203338342c20526576> 69.8242 <2e20412c20323031352d30312d3230>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +7 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 6 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +>> +>> +>> +endobj +8 0 obj +<< /Type /Font +/BaseFont /3a0e86+NotoSerif +/Subtype /TrueType +/FontDescriptor 355 0 R +/FirstChar 32 +/LastChar 255 +/Widths 357 0 R +/ToUnicode 356 0 R +>> +endobj +9 0 obj +<< /Length 27952 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<54> 29.7852 <61626c65206f6620436f6e74656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 751.856 Td +/F1.0 10.5 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 751.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 751.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 751.856 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 733.376 Td +/F1.0 10.5 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 733.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 733.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 733.376 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 714.896 Td +/F1.0 10.5 Tf +<50726573756d6564204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +171.7201 714.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 714.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 714.896 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 696.416 Td +/F1.0 10.5 Tf +<46756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 696.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 696.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 696.416 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 677.936 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +171.7201 677.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 677.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 677.936 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 659.456 Td +/F1.0 10.5 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 659.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 659.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 659.456 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 640.976 Td +/F1.0 10.5 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 640.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 640.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 640.976 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 622.496 Td +/F1.0 10.5 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 622.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 622.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 622.496 Td +/F1.0 10.5 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 604.016 Td +/F1.0 10.5 Tf +<436f6e6e656374696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +161.0311 604.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 604.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 604.016 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 585.536 Td +/F1.0 10.5 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 585.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 585.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 585.536 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 567.056 Td +/F1.0 10.5 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 567.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 567.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 567.056 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 548.576 Td +/F1.0 10.5 Tf +<53656e64696e672f526563656976696e67204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 548.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 548.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 548.576 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 530.096 Td +/F1.0 10.5 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +102.2416 530.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 530.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 530.096 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 511.616 Td +/F1.0 10.5 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.6531 511.616 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 511.616 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 511.616 Td +/F1.0 10.5 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 493.136 Td +/F1.0 10.5 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 493.136 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 493.136 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 493.136 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 474.656 Td +/F1.0 10.5 Tf +<4950763620537570706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.9641 474.656 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 474.656 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 474.656 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 456.176 Td +/F1.0 10.5 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 456.176 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 456.176 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 456.176 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 437.696 Td +/F1.0 10.5 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 437.696 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 437.696 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 437.696 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 419.216 Td +/F1.0 10.5 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 419.216 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 419.216 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 419.216 Td +/F1.0 10.5 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 400.736 Td +/F1.0 10.5 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +150.3421 400.736 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 400.736 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 400.736 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 382.256 Td +/F1.0 10.5 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 382.256 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 382.256 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 382.256 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 363.776 Td +/F1.0 10.5 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 363.776 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 363.776 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 363.776 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 345.296 Td +/F1.0 10.5 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.9306 345.296 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 345.296 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 345.296 Td +/F1.0 10.5 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 326.816 Td +/F1.0 10.5 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +118.2751 326.816 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 326.816 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 326.816 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 308.336 Td +/F1.0 10.5 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +134.3086 308.336 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 308.336 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 308.336 Td +/F1.0 10.5 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 289.856 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +433.6006 289.856 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 289.856 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 289.856 Td +/F1.0 10.5 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 271.376 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +81.66 271.376 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +155.16 271.376 Td +/F1.0 10.5 Tf +<20415049> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +177.0646 271.376 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 271.376 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 271.376 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 252.896 Td +/F1.0 10.5 Tf +[<4d61702f556e6d6170207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.7871 252.896 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 252.896 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 252.896 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 234.416 Td +/F1.0 10.5 Tf +[<53657474696e672054> 29.7852 <65737420506f727420506172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +214.4761 234.416 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +540.4906 234.416 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.1705 234.416 Td +/F1.0 10.5 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 215.936 Td +/F1.0 10.5 Tf +<4f70656e2061204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +181.8841 215.936 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 215.936 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 215.936 Td +/F1.0 10.5 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 197.456 Td +/F1.0 10.5 Tf +<436c6f736520746865204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +192.5731 197.456 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 197.456 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 197.456 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 178.976 Td +/F1.0 10.5 Tf +<4f70656e206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.2621 178.976 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 178.976 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 178.976 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 160.496 Td +/F1.0 10.5 Tf +<53656e64204d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.4726 160.496 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 160.496 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 160.496 Td +/F1.0 10.5 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 142.016 Td +/F1.0 10.5 Tf +<436c6f7365206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +203.2621 142.016 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 142.016 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 142.016 Td +/F1.0 10.5 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 123.536 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420506f727420506172> 20.0195 <616d65746572204e616d6573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 123.536 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 123.536 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 123.536 Td +/F1.0 10.5 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 105.056 Td +/F1.0 10.5 Tf +[<506172> 20.0195 <616d657465722041> 20.0195 <63636573736f722046756e6374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +224.6401 105.056 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 105.056 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 105.056 Td +/F1.0 10.5 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 86.576 Td +/F1.0 10.5 Tf +<4c6f6767696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +165.8506 86.576 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 86.576 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 86.576 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 68.096 Td +/F1.0 10.5 Tf +<4572726f72205265706f7274696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +155.1616 68.096 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 68.096 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 68.096 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +10 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 9 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +>> +/Annots [164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 175 0 R 176 0 R 177 0 R 178 0 R 179 0 R 180 0 R 181 0 R 182 0 R 183 0 R 184 0 R 185 0 R 186 0 R 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R] +>> +endobj +11 0 obj +<< /Length 15934 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<5469707320616e6420547269636b73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 794.676 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 794.676 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 794.676 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 776.196 Td +/F1.0 10.5 Tf +<5573616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +91.0276 776.196 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 776.196 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 776.196 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 757.716 Td +/F1.0 10.5 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 757.716 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 757.716 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 757.716 Td +/F1.0 10.5 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 739.236 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +278.0851 739.236 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 739.236 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 739.236 Td +/F1.0 10.5 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 720.756 Td +/F1.0 10.5 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +187.2286 720.756 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 720.756 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 720.756 Td +/F1.0 10.5 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 702.276 Td +/F1.0 10.5 Tf +[<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f722057686963682074686520506f72742057> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +422.3866 702.276 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 702.276 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 702.276 Td +/F1.0 10.5 Tf +<3136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 683.796 Td +/F1.0 10.5 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 683.796 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 683.796 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 683.796 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 665.316 Td +/F1.0 10.5 Tf +<5573696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +90.984 665.316 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +148.734 665.316 Td +/F1.0 10.5 Tf +[<20696e2054> 29.7852 <65737420506f727473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +213.9511 665.316 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 665.316 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 665.316 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 646.836 Td +/F1.0 10.5 Tf +[<5573696e672053534c206f6e2054> 29.7852 <6f70206f6620612054> 20.0195 <435020436f6e6e656374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +251.3626 646.836 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 646.836 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 646.836 Td +/F1.0 10.5 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 628.356 Td +/F1.0 10.5 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +139.1281 628.356 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 628.356 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 628.356 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 609.876 Td +/F1.0 10.5 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +133.7836 609.876 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 609.876 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 609.876 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +72.24 591.396 Td +/F1.0 10.5 Tf +[<41> 20.0195 <757468656e7469636174696f6e20466c6f77>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +176.5396 591.396 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 591.396 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 591.396 Td +/F1.0 10.5 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 572.916 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64617074696e6720446572697665642054> 29.7852 <65737420506f72747320746f20537570706f72742049507636>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +283.4296 572.916 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 572.916 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 572.916 Td +/F1.0 10.5 Tf +<3139> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 554.436 Td +/F1.0 10.5 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +128.4391 554.436 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 554.436 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 554.436 Td +/F1.0 10.5 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 535.956 Td +/F1.0 10.5 Tf +[<4572726f72204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +310.1521 535.956 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 535.956 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 535.956 Td +/F1.0 10.5 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 517.476 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +368.9416 517.476 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 517.476 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 517.476 Td +/F1.0 10.5 Tf +<3232> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 498.996 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +144.4726 498.996 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 498.996 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 498.996 Td +/F1.0 10.5 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 480.516 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +331.5301 480.516 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 480.516 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 480.516 Td +/F1.0 10.5 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.24 462.036 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +326.1856 462.036 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 462.036 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 462.036 Td +/F1.0 10.5 Tf +<3236> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 443.556 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +112.4056 443.556 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 443.556 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 443.556 Td +/F1.0 10.5 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.076 Td +/F1.0 10.5 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +123.0946 425.076 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 425.076 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 425.076 Td +/F1.0 10.5 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 406.596 Td +/F1.0 10.5 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6627 0.6627 0.6627 scn +0.6627 0.6627 0.6627 SCN + +BT +107.0611 406.596 Td +/F1.0 10.5 Tf +<2e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e202e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +BT +534.6211 406.596 Td +/F1.0 2.625 Tf + Tj +ET + +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.301 406.596 Td +/F1.0 10.5 Tf +<3238> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q + +endstream +endobj +12 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 11 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +>> +>> +/Annots [242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R] +>> +endobj +13 0 obj +<< /Length 6942 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<41626f7574205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 741.146 Td +/F2.0 18 Tf +<486f7720746f2052656164205468697320446f63756d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.032 Tw + +BT +48.24 713.126 Td +/F1.0 10.5 Tf +[<5468697320697320746865205573657220477569646520666f7220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f727420697320646576656c6f706564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 697.346 Td +/F1.0 10.5 Tf +[<666f7220746865205454> 20.0195 <434e2d332054> 29.7852 <6f6f6c7365742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 657.506 Td +/F2.0 18 Tf +<50726573756d6564204b6e6f776c65646765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.486 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f2075736520746869732070726f746f636f6c206d6f64756c6520746865206b6e6f776c65646765206f6620746865205454> 20.0195 <434e2d33206c616e677561676520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +383.4546 629.486 Td +/F1.0 10.5 Tf +<5b315d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +396.8631 629.486 Td +/F1.0 10.5 Tf +<20697320657373656e7469616c2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 580.034 Td +/F2.0 27 Tf +<46756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 533.054 Td +/F2.0 22 Tf +[<53> 20.0195 <797374656d20526571756972656d656e7473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 503.866 Td +/F1.0 10.5 Tf +[<496e206f7264657220746f2075736520746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742074686520666f6c6c6f77696e672073797374656d20726571756972656d656e7473206d757374206265207361746973666965643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 476.086 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 476.086 Td +/F1.0 10.5 Tf +[<506c6174666f726d3a20616e> 20.0195 <7920706c6174666f726d20737570706f727465642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <544520616e64204f70656e53534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 454.306 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 454.306 Td +/F1.0 10.5 Tf +[<544954> 60.0586 <414e205454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f722076657273696f6e205238412028312e382e706c3029206f722068696768657220696e7374616c6c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 438.49 m +102.4695 414.71 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 422.526 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 422.526 Td +/F1.0 10.5 Tf +[<54686973204162737472> 20.0195 <61637420536f636b> 20.0195 <65742076657273696f6e206973206e6f7420636f6d70617469626c65207769746820544954> 60.0586 <414e2072656c6561736573206561726c696572207468616e205238412e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9943 Tw + +BT +48.24 390.746 Td +/F1.0 10.5 Tf +[<49662053534c20697320757365642c207468652073616d65204f70656e53534c206d75737420626520696e7374616c6c6564206173207573656420696e20544954> 60.0586 <414e2e2046> 40.0391 <6f7220616e204f70656e53534c20696e7374616c6c6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 374.966 Td +/F1.0 10.5 Tf +<67756964652073656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +97.359 374.966 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +110.7675 374.966 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 330.854 Td +/F2.0 22 Tf +<46756e64616d656e74616c20436f6e6365707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.9998 Tw + +BT +48.24 301.666 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742065737461626c697368657320636f6e6e656374696f6e206265747765656e20746865205454> 20.0195 <434e2d332074657374206578656375746f7220616e642053555420616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4205 Tw + +BT +48.24 285.886 Td +/F1.0 10.5 Tf +[<7472> 20.0195 <616e736d6974732f7265636569766573206d657373616765732e20546865207472> 20.0195 <616e73706f7274206368616e6e656c2063616e2062652054> 20.0195 <4350206f722053534c2e2054686520636f6e6e65637420616e64206c697374656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 270.106 Td +/F1.0 10.5 Tf +[<6f706572> 20.0195 <6174696f6e732063616e20626520696e697469617465642066726f6d207468652074657374207375697465207573696e672074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +326.5528 270.106 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +426.3028 270.106 Td +/F1.0 10.5 Tf +[<207465737420706f727420706172> 20.0195 <616d657465722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 230.266 Td +/F2.0 18 Tf +<4d6f64756c6520537472756374757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.246 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420636f6d6d6f6e20636f6d706f6e656e7420697320696d706c656d656e74656420696e2074686520666f6c6c6f77696e672066696c65733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 174.466 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 174.466 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6868>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 152.686 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 152.686 Td +/F4.0 10.5 Tf +[<4162737472> 20.0195 <6163745f536f636b> 20.0195 <65742e6363>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 108.574 Td +/F2.0 22 Tf +<53746172742050726f636564757265> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +14 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 13 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [22 0 R 25 0 R] +>> +endobj +15 0 obj +[14 0 R /XYZ 0 841.89 null] +endobj +16 0 obj +<< /Type /Names +/Dests 17 0 R +>> +endobj +17 0 obj +<< /Kids [49 0 R 135 0 R 50 0 R 84 0 R 115 0 R] +>> +endobj +18 0 obj +[14 0 R /XYZ 0 841.89 null] +endobj +19 0 obj +<< /Type /Font +/BaseFont /ace878+NotoSerif-Bold +/Subtype /TrueType +/FontDescriptor 359 0 R +/FirstChar 32 +/LastChar 255 +/Widths 361 0 R +/ToUnicode 360 0 R +>> +endobj +20 0 obj +[14 0 R /XYZ 0 765.17 null] +endobj +21 0 obj +[14 0 R /XYZ 0 681.53 null] +endobj +22 0 obj +<< /Border [0 0 0] +/Dest (_1) +/Subtype /Link +/Rect [383.4546 626.42 396.8631 640.7] +/Type /Annot +>> +endobj +23 0 obj +[14 0 R /XYZ 0 613.67 null] +endobj +24 0 obj +[14 0 R /XYZ 0 561.35 null] +endobj +25 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [97.359 371.9 110.7675 386.18] +/Type /Annot +>> +endobj +26 0 obj +[14 0 R /XYZ 0 359.15 null] +endobj +27 0 obj +<< /Type /Font +/BaseFont /121353+mplus1mn-regular +/Subtype /TrueType +/FontDescriptor 363 0 R +/FirstChar 32 +/LastChar 255 +/Widths 365 0 R +/ToUnicode 364 0 R +>> +endobj +28 0 obj +[14 0 R /XYZ 0 254.29 null] +endobj +29 0 obj +<< /Type /Font +/BaseFont /91a4c8+NotoSerif-Italic +/Subtype /TrueType +/FontDescriptor 367 0 R +/FirstChar 32 +/LastChar 255 +/Widths 369 0 R +/ToUnicode 368 0 R +>> +endobj +30 0 obj +[14 0 R /XYZ 0 136.87 null] +endobj +31 0 obj +<< /Length 9168 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<436f6e6e656374696f6e2041535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9875 Tw + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<5768656e2063686f6f73696e6720746f2075736520636f6e6e656374696f6e20415350732c20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742069732061626c6520746f206f70656e206120736572766572206c697374656e696e6720706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 742.866 Td +/F1.0 10.5 Tf +[<28616374696e67206c696b> 20.0195 <6520612073657276657229206f7220636c69656e7420636f6e6e656374696f6e73206174207468652073616d652074696d652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.026 Td +/F2.0 18 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4287 Tw + +BT +48.24 675.006 Td +/F1.0 10.5 Tf +[<5768656e20746865207465737420706f7274206973206d61707065642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <54452c2074686520736572766572206372656174657320612054> 20.0195 <435020736f636b> 20.0195 <657420616e6420737461727473206c697374656e696e67206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7526 Tw + +BT +48.24 659.226 Td +/F1.0 10.5 Tf +[<69742e20446570656e64696e67206f6e20746865207472> 20.0195 <616e73706f7274206368616e6e656c2073706563696669656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2069742077696c6c20616363657074>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 643.446 Td +/F1.0 10.5 Tf +[<6569746865722054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 603.606 Td +/F2.0 18 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6167 Tw + +BT +48.24 575.586 Td +/F1.0 10.5 Tf +[<5768656e20746865207465737420706f7274206973206d61707065642062> 20.0195 <7920544954> 60.0586 <414e2052> 20.0195 <54452c2074686520636c69656e74206372656174657320612054> 20.0195 <435020736f636b> 20.0195 <657420616e6420747269657320746f20636f6e6e65637420746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0954 Tw + +BT +48.24 559.806 Td +/F1.0 10.5 Tf +[<746865207365727665722e20496620746865207472> 20.0195 <616e73706f7274206368616e6e656c2069732053534c2c2074686520636c69656e742073746172747320616e2053534c2068616e647368616b> 20.0195 <65206166746572207468652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5443 Tw + +BT +48.24 544.026 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e2069732065737461626c69736865642e204966207468652053534c2068616e647368616b> 20.0195 <65206973207375636365737366756c2c207468652053534c20636f6e6e656374696f6e2069732065737461626c697368656420616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 528.246 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.93 528.246 Td +/F3.0 10.5 Tf +<6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +82.68 528.246 Td +/F1.0 10.5 Tf +[<206f706572> 20.0195 <6174696f6e2069732066696e69736865642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 500.466 Td +/F1.0 10.5 Tf +[<5468652053534c2068616e647368616b> 20.0195 <65206d61> 20.0195 <79206661696c2064756520746f207365766572> 20.0195 <616c20726561736f6e732028652e672eca6e6f2073686172656420636970686572732c20766572696669636174696f6e206661696c7572652c206574632e292e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 456.354 Td +/F2.0 22 Tf +<53656e64696e672f526563656976696e67204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2518 Tw + +BT +48.24 427.166 Td +/F1.0 10.5 Tf +[<4f6e6c79206261736963206f63746574737472696e672073656e64696e6720616e6420726563656976696e672069732068616e646c65642062> 20.0195 <7920746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e20546869732066756e6374696f6e616c697479>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.04 Tw + +BT +48.24 411.386 Td +/F1.0 10.5 Tf +[<70726f6261626c79206d75737420626520657874656e64656420696e206f7264657220746f206275696c642061207465737420706f727420666f722074686520646573697265642070726f746f636f6c2e20466972737420746865205454> 20.0195 <434e2d33>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.372 Tw + +BT +48.24 395.606 Td +/F1.0 10.5 Tf +[<6d617070696e67206f6620746865207461726765742070726f746f636f6c206d65737361676573206d75737420626520656c61626f72> 20.0195 <6174656420616e64207468656e20746865206d6573736167652070726f63657373696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 379.826 Td +/F1.0 10.5 Tf +<66756e6374696f6e732063616e20626520646576656c6f7065642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 335.714 Td +/F2.0 22 Tf +<4c6f6767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4687 Tw + +BT +48.24 306.526 Td +/F1.0 10.5 Tf +<5468652074797065206f6620696e666f726d6174696f6e20746861742077696c6c206265206c6f676765642063616e2062652063617465676f72697a656420696e746f2074776f2067726f7570732e20546865206669727374206f6e65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4086 Tw + +BT +48.24 290.746 Td +/F1.0 10.5 Tf +<636f6e7369737473206f6620696e666f726d6174696f6e20746861742073686f77732074686520666c6f77206f662074686520696e7465726e616c20657865637574696f6e206f6620746865207465737420706f72742c20652e672eca696d706f7274616e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2202 Tw + +BT +48.24 274.966 Td +/F1.0 10.5 Tf +<6576656e74732c2077686963682066756e6374696f6e20746861742069732063757272656e746c7920657865637574696e67206574632e20546865207365636f6e642067726f7570206465616c7320776974682070726573656e74696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1305 Tw + +BT +48.24 259.186 Td +/F1.0 10.5 Tf +[<76616c7561626c6520646174612c20652e672eca70726573656e74696e672074686520636f6e74656e74206f662061205044552e20546865206c6f6767696e67207072696e746f7574732077696c6c20626520646972656374656420746f207468652052> 20.0195 <5445>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4973 Tw + +BT +48.24 243.406 Td +/F1.0 10.5 Tf +[<6c6f672066696c652e2054686520757365722069732061626c6520746f206465636964652077686574686572206c6f6767696e6720697320746f2074616b> 20.0195 <6520706c616365206f72206e6f742062> 20.0195 <792073657474696e6720617070726f707269617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 227.626 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e20646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 183.514 Td +/F2.0 22 Tf +<4572726f722048616e646c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6416 Tw + +BT +48.24 154.326 Td +/F1.0 10.5 Tf +[<4572726f6e656f7573206265686176696f7220646574656374656420647572696e672072756e74696d6520697320646972656374656420696e746f207468652052> 20.0195 <5445206c6f672066696c652e2054686520666f6c6c6f77696e672074776f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 138.546 Td +/F1.0 10.5 Tf +[<7479706573206f66206d65737361676573206172652074616b> 20.0195 <656e2063617265206f663a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 110.766 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2851 Tw + +BT +66.24 110.766 Td +/F1.0 10.5 Tf +<4572726f72733a20696e666f726d6174696f6e2061626f7574206572726f72732064657465637465642069732070726f76696465642e20496620616e206572726f72206f63637572732074686520657865637574696f6e206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 94.986 Td +/F1.0 10.5 Tf +[<7465737420636173652077696c6c2073746f7020696d6d6564696174656c79> 89.8438 <2e20546865207465737420706f7274732077696c6c20626520756e6d61707065642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 73.206 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7095 Tw + +BT +66.24 73.206 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67733a20696e666f726d6174696f6e2061626f7574207761726e696e67732064657465637465642069732070726f76696465642e2054686520657865637574696f6e20636f6e74696e75657320616674657220746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 57.426 Td +/F1.0 10.5 Tf +<7761726e696e672069732073686f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +32 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 31 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +33 0 obj +[32 0 R /XYZ 0 841.89 null] +endobj +34 0 obj +[32 0 R /XYZ 0 727.05 null] +endobj +35 0 obj +[32 0 R /XYZ 0 627.63 null] +endobj +36 0 obj +[32 0 R /XYZ 0 484.65 null] +endobj +37 0 obj +[32 0 R /XYZ 0 364.01 null] +endobj +38 0 obj +[32 0 R /XYZ 0 211.81 null] +endobj +39 0 obj +<< /Length 10742 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +<436c6f73696e6720446f776e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.8316 Tw + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +<54686520636f6e6e656374696f6e2063616e206265207368757420646f776e2065697468657220706572666f726d696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.8316 Tw + +BT +364.6918 753.206 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.8316 Tw + +BT +390.9418 753.206 Td +/F1.0 10.5 Tf +[<206f706572> 20.0195 <6174696f6e206f6e2074686520706f7274206f72206966>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 737.426 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e204153507320617265207573656420776974682074686520617070726f70726961746520415350> 120.1172 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 693.314 Td +/F2.0 22 Tf +<4950763620537570706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4693 Tw + +BT +48.24 664.126 Td +/F1.0 10.5 Tf +[<497420697320706f737369626c6520746f2073656c6563742074686520616464726573732066616d696c79207573656420666f722073657276657220736f636b> 20.0195 <657420616e6420636c69656e7420636f6e6e656374696f6e7320696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7381 Tw + +BT +48.24 648.346 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e2066696c65206f7220647572696e672072756e74696d652e2054686520666f6c6c6f77696e6720616464726573732066616d696c6965732061726520737570706f727465643a20495076342c204950763620616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 632.566 Td +/F1.0 10.5 Tf +<554e535045432e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 588.454 Td +/F2.0 22 Tf +<53534c2046756e6374696f6e616c697479> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6622 Tw + +BT +48.24 559.266 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742063616e207573652053534c206f722054> 20.0195 <435020617320746865207472> 20.0195 <616e73706f7274206368616e6e656c2e205468652073616d652076657273696f6e206f66204f70656e53534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 543.486 Td +/F1.0 10.5 Tf +[<6c696272> 20.0195 <617279206d757374206265207573656420617320696e20544954> 60.0586 <414e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5602 Tw + +BT +48.24 515.706 Td +/F1.0 10.5 Tf +[<54686520737570706f727465642053534c2f544c532076657273696f6e73206172652064657465726d696e65642062> 20.0195 <79207468652075736564204f70656e53534c206c696272> 20.0195 <617279> 89.8438 <2e20497420697320706f737369626c6520746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 499.926 Td +/F1.0 10.5 Tf +[<64697361626c65206120737065636966696320544c532f53534c2076657273696f6e20696e207468652072756e2074696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 460.086 Td +/F2.0 18 Tf +<436f6d70696c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.3605 Tw + +BT +48.24 432.066 Td +/F1.0 10.5 Tf +<546865207573616765206f662053534c20616e64206576656e2074686520636f6d70696c6174696f6e206f66207468652053534c2072656c6174656420636f646520706172747320617265206f7074696f6e616c2e2054686973206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 416.286 Td +/F1.0 10.5 Tf +<626563617573652053534c2072656c6174656420636f64652070617274732063616e6e6f7420626520636f6d70696c656420776974686f757420746865204f70656e53534c20696e7374616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +48.24 388.506 Td +/F1.0 10.5 Tf +[<54686520636f6d70696c6174696f6e206f662053534c2072656c6174656420636f64652070617274732063616e2062652064697361626c65642062> 20.0195 <79206e6f7420646566696e696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6975 Tw + +BT +445.6011 388.506 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +498.1011 388.506 Td +/F1.0 10.5 Tf +<206d6163726f20696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +48.24 372.726 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +67.5654 372.726 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +109.3027 372.726 Td +/F1.0 10.5 Tf +<20647572696e672074686520636f6d70696c6174696f6e2e20496620746865206d6163726f20697320646566696e656420696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +386.531 372.726 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6354 Tw + +BT +428.2683 372.726 Td +/F1.0 10.5 Tf +<2c207468652053534c20636f646520706172747320617265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9115 Tw + +BT +48.24 356.946 Td +/F1.0 10.5 Tf +<636f6d70696c656420746f207468652065786563757461626c65207465737420636f64652e20546865207573616765206f66207468652053534c207468656e2063616e20626520656e61626c65642f64697361626c656420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5868 Tw + +BT +48.24 341.166 Td +/F1.0 10.5 Tf +[<72756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e204e61747572> 20.0195 <616c6c79> 89.8438 <2c20746865207465737420706f727420706172> 20.0195 <616d657465722077696c6c2062652069676e6f7265642069662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.5868 Tw + +BT +494.54 341.166 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.5868 Tw + +BT +547.04 341.166 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 325.386 Td +/F1.0 10.5 Tf +<6d6163726f206973206e6f7420646566696e656420647572696e6720636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 285.546 Td +/F2.0 18 Tf +[<41> 20.0195 <757468656e7469636174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7515 Tw + +BT +48.24 257.526 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742070726f766964657320626f746820736572766572207369646520616e6420636c69656e7420736964652061757468656e7469636174696f6e2e205768656e2061757468656e7469636174696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6115 Tw + +BT +48.24 241.746 Td +/F1.0 10.5 Tf +<746865206f7468657220736964652c20612063657274696669636174652069732072657175657374656420616e6420746865206f776e207472757374656420636572746966696361746520617574686f726974696573d5206c6973742069732073656e742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0653 Tw + +BT +48.24 225.966 Td +/F1.0 10.5 Tf +[<7265636569766564206365727469666963617465206973207665726966696564207768657468657220697420697320612076616c6964206365727469666963617465206f72206e6f742028746865207075626c696320616e642070726976617465206b> 20.0195 <65797320617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.9449 Tw + +BT +48.24 210.186 Td +/F1.0 10.5 Tf +<6d61746368696e67292e204e6f20667572746865722061757468656e7469636174696f6e20697320706572666f726d65642028652e672eca7768657468657220686f73746e616d652069732070726573656e7420696e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 194.406 Td +/F1.0 10.5 Tf +[<6365727469666963617465292e2054686520766572696669636174696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2079 Tw + +BT +48.24 166.626 Td +/F1.0 10.5 Tf +[<496e20736572766572206d6f646520746865207465737420706f72742077696c6c20616c7761> 20.0195 <79732073656e642069747320636572746966696361746520616e64207472757374656420636572746966696361746520617574686f726974696573d5206c69737420746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9488 Tw + +BT +48.24 150.846 Td +/F1.0 10.5 Tf +[<69747320636c69656e74732e20496620766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20746865207365727665722077696c6c207265717565737420666f722061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.8549 Tw + +BT +48.24 135.066 Td +/F1.0 10.5 Tf +<636c69656e74d5732063657274696669636174652e20496e207468697320636173652c2069662074686520636c69656e7420646f6573206e6f742073656e6420612076616c6964206365727469666963617465206f7220646f6573206e6f742073656e642061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0064 Tw + +BT +48.24 119.286 Td +/F1.0 10.5 Tf +<636572746966696361746520617420616c6c2c2074686520636f6e6e656374696f6e2077696c6c20626520726566757365642e2049662074686520766572696669636174696f6e2069732064697361626c65642c2074686520636f6e6e656374696f6e2077696c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 103.506 Td +/F1.0 10.5 Tf +<6e6576657220626520726566757365642064756520746f20766572696669636174696f6e206661696c7572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0851 Tw + +BT +48.24 75.726 Td +/F1.0 10.5 Tf +[<496e20636c69656e74206d6f646520746865207465737420706f72742077696c6c2073656e642069747320636572746966696361746520746f2074686520736572766572206f6e2074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2083 Tw + +BT +48.24 59.946 Td +/F1.0 10.5 Tf +[<766572696669636174696f6e20697320656e61626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c2074686520636c69656e742077696c6c2073656e6420697473206f776e2074727573746564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<33> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +40 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 39 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +41 0 obj +[40 0 R /XYZ 0 841.89 null] +endobj +42 0 obj +[40 0 R /XYZ 0 721.61 null] +endobj +43 0 obj +[40 0 R /XYZ 0 616.75 null] +endobj +44 0 obj +[40 0 R /XYZ 0 484.11 null] +endobj +45 0 obj +[40 0 R /XYZ 0 309.57 null] +endobj +46 0 obj +<< /Length 7462 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +0.2134 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<636572746966696361746520617574686f726974696573d5206c69737420746f207468652073657276657220616e642077696c6c207665726966792074686520736572766572> -29.7852 -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6497 Tw + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +<6365727469666963617465206973206e6f742076616c69642c207468652053534c20636f6e6e656374696f6e2077696c6c206e6f742062652065737461626c69736865642e20496620766572696669636174696f6e2069732064697361626c65642c20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 763.116 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2077696c6c206e6576657220626520726566757365642064756520746f20766572696669636174696f6e206661696c7572652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0041 Tw + +BT +48.24 735.336 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c652c20746865206f7074696f6e616c2070617373776f72642070726f74656374696e6720746865206f776e2070726976617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3485 Tw + +BT +48.24 719.556 Td +/F1.0 10.5 Tf +[<6b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c652063616e2062652073706563696669656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.776 Td +/F1.0 10.5 Tf +<66696c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8244 Tw + +BT +48.24 675.996 Td +/F1.0 10.5 Tf +[<546865207465737420706f72742077696c6c20636865636b2074686520636f6e73697374656e6379206265747765656e20697473206f776e2070726976617465206b> 20.0195 <657920616e6420746865207075626c6963206b> 20.0195 <657920286261736564206f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 660.216 Td +/F1.0 10.5 Tf +[<746865206f776e20636572746966696361746529206175746f6d61746963616c6c79> 89.8438 <2e2049662074686520636865636b206661696c732c2061207761726e696e672069732069737375656420616e6420657865637574696f6e20636f6e74696e7565732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 620.376 Td +/F2.0 18 Tf +[<4f746865722046> 40.0391 <65617475726573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 592.356 Td +/F1.0 10.5 Tf +[<546865207573616765206f662053534c2073657373696f6e20726573756d7074696f6e2063616e20626520656e61626c65642f64697361626c656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 564.576 Td +/F1.0 10.5 Tf +[<54686520616c6c6f77656420636970686572696e67207375697465732063616e206265207265737472696374656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c207365652e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8923 Tw + +BT +48.24 536.796 Td +/F1.0 10.5 Tf +<5468652053534c2072652d68616e647368616b696e672072657175657374732061726520616363657074656420616e642070726f6365737365642c20686f77657665722072652d68616e647368616b696e672063616e6e6f74206265> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 521.016 Td +/F1.0 10.5 Tf +<696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 481.176 Td +/F2.0 18 Tf +<4c696d69746174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 453.156 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 453.156 Td +/F1.0 10.5 Tf +<53534c2072652d68616e647368616b696e672063616e6e6f7420626520696e697469617465642066726f6d20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 431.376 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0829 Tw + +BT +66.24 431.376 Td +/F1.0 10.5 Tf +[<546865206f776e2063657274696669636174652066696c652873292c20746865206f776e2070726976617465206b> 20.0195 <65792066696c6520616e6420746865207472757374656420636572746966696361746520617574686f726974696573d5206c6973742066696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 415.596 Td +/F1.0 10.5 Tf +<6d75737420626520696e2050454d20666f726d61742e204f7468657220666f726d61747320617265206e6f7420737570706f727465642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 366.144 Td +/F2.0 27 Tf +[<5468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 319.164 Td +/F2.0 22 Tf +<4f76657276696577> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8055 Tw + +BT +48.24 289.976 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206973206120636f6d6d6f6e20636f6d706f6e656e7420746861742063616e207365727665206173206120626173697320666f72207465737420706f7274732074686174206e6565642054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4859 Tw + +BT +48.24 274.196 Td +/F1.0 10.5 Tf +[<636f6e6e656374696f6e732077697468206f7220776974686f75742053534c206f6e2074686520746f702e205468652054> 20.0195 <435020736f636b> 20.0195 <65742063616e206265207573656420656974686572207769746820626c6f636b696e67206f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7511 Tw + +BT +48.24 258.416 Td +/F1.0 10.5 Tf +[<6e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420696d706c656d656e74732062617369632073656e64696e672c20726563656976696e6720616e6420736f636b> 20.0195 <65742068616e646c696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3834 Tw + +BT +48.24 242.636 Td +/F1.0 10.5 Tf +<726f7574696e65732c20667572746865726d6f726520697420737570706f7274732074686520646576656c6f706d656e74206f66207465737420706f72747320746861742063616e20776f726b206173206120636c69656e74206f722061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1198 Tw + +BT +48.24 226.856 Td +/F1.0 10.5 Tf +[<7365727665722e2042> 20.0195 <7920657874656e64696e6720746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420636f6d706f6e656e742077697468206164646974696f6e616c2066756e6374696f6e616c6974792074686520646573697265642074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 211.076 Td +/F1.0 10.5 Tf +<706f72742063616e206265206275696c742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 183.296 Td +/F1.0 10.5 Tf +[<536565207468652066756e6374696f6e696e67206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742062656c6f773a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +1.7537 Tc + +0.0 Tc + +1.7537 Tc + +0.0 Tc +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<34> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +47 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 46 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +48 0 obj +[47 0 R /XYZ 0 644.4 null] +endobj +49 0 obj +<< /Limits [(Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) (_close_a_client_connection)] +/Names [(Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) 65 0 R (_1) 160 0 R (_2) 161 0 R (_3) 162 0 R (__anchor-top) 15 0 R (_abbreviations) 156 0 R (_about_this_document) 18 0 R (_adapting_derived_test_ports_to_support_ipv6) 130 0 R (_additional_abstract_socket_test_port_parameters_in_the_test_port_configuration_file_if_the_transport_channel_is_ssl) 71 0 R (_additional_error_messages_in_case_ssl_connections_are_used) 140 0 R (_authentication) 45 0 R (_authentication_flow) 126 0 R (_client_mode) 35 0 R (_client_mode_2) 125 0 R (_close_a_client_connection) 89 0 R] +>> +endobj +50 0 obj +<< /Limits [(_how_to_read_this_document) (_overview)] +/Names [(_how_to_read_this_document) 20 0 R (_installation) 57 0 R (_ipv6_support) 42 0 R (_limitations) 51 0 R (_logging) 37 0 R (_logging_functions) 96 0 R (_module_structure) 28 0 R (_open_a_client_connection) 83 0 R (_open_a_listening_port) 79 0 R (_other_features) 48 0 R (_overview) 53 0 R] +>> +endobj +51 0 obj +[47 0 R /XYZ 0 505.2 null] +endobj +52 0 obj +[47 0 R /XYZ 0 399.78 null] +endobj +53 0 obj +[47 0 R /XYZ 0 347.46 null] +endobj +54 0 obj +<< /Type /XObject +/Subtype /Image +/Height 245 +/Width 379 +/BitsPerComponent 8 +/ColorSpace /DeviceRGB +/Length 4940 +/Filter [/FlateDecode] +/DecodeParms [<< /Predictor 15 +/Colors 3 +/BitsPerComponent 8 +/Columns 379 +>>] +>> +stream +xœí­®ôȵ†û„ 1z’ç +2äÜ€Ùh4 + l…Œ¢ ˜ €¨#DiPíc»ÚåU?î.·«W•ÝÏ£-}Ýîrýíw½ßª²wûò Å¥tàÀq@ôÀq@ôÀq@ôÀq@ôÀq@ô¨Åq.PŽÒ¿|x#jQº/3šÔ¢6t_ +f4©Emè¾Ì€òà”ÓÄòÛS¦³ØE˜ã,ÅWÝïò޲©ÔúÒË|.ò§ùìñ½}=yãÍ!—œ†’§ìŽšÔ¢¶—;Žk)‚9›èÛ%bWçæIŽã&]ËjÎäDþÒÌknû8KƒN%Kûö#¿¡­‰ŽšÔ¢¶W;ÎÕ_8Y–õË’ÝÉqVs¥HJå³Tsù™o+öµ=2¿XßéNÇMjQ[ùG”úCû³U¯¸s¹Èwœ•kZó"îN22Ûc¢ãìÚÏÁq@“ZÔörlj&'£Ûx{´ËÊ)žã|¬oå9ÎzŠÔŽvã¶ù“’ãì±4©Em9'H<¼ƒî~ÊlÁU¡9†Wg=©pšs–qžÅgnT¼ÿ15ÎÕŽã­^•Àq@“ZÔ¶G÷ò2P³\^ŽnmˆÃm/ö@œ85·Ø8Žãœ—ØY}Ó¸çßÊ‹kUÝ”ÒÌõøûÅ·›‰D ¢Wy8hR‹ÚÐ})˜yФµ¡ûR0ó I-jC÷¥`æA“ZÔ†îKÁ̃&µ¨ Ý—‚™MjQº/3šÔ¢6t_ +f4©Emè¾̼¨-Ä-@ +ÄIp€ˆ“ °<H„ ÉŽA²¶`Ò!HöÂu€tˆ½à8é!»àö€M»Àq6Axä£H8ÉŽq’ â$8@ +ÄIp€ˆ“<à8)'yÀqR Nò€ã¤@œäÇH8ÉŽq’ â$8@ +ÄIp€ˆ“<à8)'ÏÃ㟶BxìÇØá± `„Ç^°€tˆ½à8é!{ÁnÒ!H2€ã$BdÇH„ Évq’ …Zâdíþ]P ô/ÞˆZÔ†îKÁ̃&µ¨ Ý—‚™MjQº/3šÔ¢6t_ +f4©Emè¾Ì™J$Ç Ó§9Ù9œ•ZÔV¿ãÈÌÃÍ?¤»Ì‹«èª*ê9÷G4©EmÕ;ŽÝ<§EVPÖšâû8înlNVà´ôâ«U8hR‹ÚtGî¦Dg,`~æBÁ̲²òÇ_t»>®¹ÏÍ÷ÝkoÈÁq@“ZÔ¦¦{»8âع ïfáýw8c®%rŸïS}a NšFžß…c7¾v÷ÇMjQº/3šÔ¢6t_ +f4©Emè¾ÌžgK·p0ìuœk×vW'm™Bñ¶ÅaÖ+G¼dg^nM+.ñÆe8?~V#ºá¬Ü,˶‹ß§u[‘ùYvjl»²"§g²Y¯99º¶›–2½;`Ǿ½Èçf(ôi¬A ªmÙΧÝ>L™XÑ‘T˹¼±ã\* ô,ìtœ›áó˜ö5¬¢ì‘[xL‘f?âu­`:£J6¤泖ÌÞB$"p‡·sADë¢~óóádŽ°‡C0MÛ3EsýÒ±¥âù€9æ̱³|‰tu®{iÑë˜13ý8!OòÄνÙ`9U‰^™âc/ÞÉ>Ç[ÖrZ÷ÿɦëÖÌáqgO`üH8ÎLJ›"É\¯-·R:Óg~¦ÿÿ]Ú«Yáø] úðx}0|7}~uçœ ¿1Cö­°eBÞÌLYU#Ž¦O¬ìMâbº*Ñ+S|ìÅ; Ùå8A*?¥ÛgE¹sõkŽãì…m[-6‰8ÎRÐvf“ã¬ßšãÈÉÛä8AVᬆ¤kÈ’±Î_;7QJžØ5]§*Ñ+S|ìÅ; yÚqFav®ÚŒP½3[+G¤Ä특ȽçN[+›»×îâÕ¹×Îl§¦o|÷rœø +#¾;ºGŽãdO‘Ë|Órji$:9kwæ{±•‡ë|sHU¢W¦øØ‹w@ò¤ã 2Üf”êìÁ ‚ì£Gœp5‘çlZÊÀŠãÌ2ï7Èš?ü¸ºvÝüúâ÷GX€Í„ÚÞüˆÓï:Ž;Ñ\0|¿š‘{ŽZŽÓÕÆÝ;r'Ç”· 5ô°[úÛˆDæÑÄ.õ$N]¢W¦øØ‹w@òŒãÄ–Ño÷ô²\jº_l²˜8˦‹w–¬Y^» /F]bý÷.3M&KÊvû„‘.®žÂÅhp‚kændûèìÚØ}÷Z•h%ÚºØOšØù’cªáÔ%zeŠ½x$ùÿÊ!X]¬®7J¡ÛŸÃW¼É&™Mw%Ö%zeŠ½x$8ΫÉ4ü;—ó +À_9l øØ‹w@’Ýqú%ÕŸÞÚ¾Óéû“uøË-E…Ù²œºQ•è•I»½,;îÄùKæ‘Õ[bå‚yGôàÛ*@ƒwÒ£±‹› æþø}}Û4¸à\ŠÄqÞYHÆ~ Š¹6wœN$=ÎýVŽ`yg!=»YR›Ÿ1ÇqoT=ä­ 8hðÎBzöâÉqÄh—÷b)Á6žyÐÇã:Srœ°Ýå™—ûS¹ò׫JHÊ\* ô,Åqz”î3¹ï‡âÿ·?:%ú Ç<´ŒH»â)t9O<Ô.+Õ +s ǹvíí+|Á„âm™cœ@~YÑáã½ó G÷žv8Õe~\búp*1½uÞ¾&Ûœ3KÅÛ½,ym%2Lyòü…qrXËç"#+i9•éœ{®á8£ÛÌßñ*-GÄ¿I~úå9¹Ë¢GºÁd=¶øUâµâ2|ЇX´LŽ[/¢ÎÆ|ÁÛì­-(®´ë,ƒbÃÎäÚgו[³+h9uéœ{®Žà8ÓÚÅý.FóN.7&/i[±·"> ¿Ö„´¿¿‘º~qôÙÏn¯AqçÉ®±üF¶ëö7¦ße÷ü òfN îåT!¤#`k¥;ò*à8‘…’ø_®=œÅŠ¼¨ì†›½ØÔÇÂ79úXj¹®9Ž—ŠxpmSGf?âªÙ2ê~%›ÁqŽŽS|ä‘*Ï1îÿçï>ÍG„ønã«›Y9˥⻎{ÐG/·–¢W°Ä×ó‹mç9õVUî0E+²¤YÔM‰^0 +VUÇ@þ·Zº//¡vljßÀv‹XŠóÂ¥s×¾ãLÅnåmjàlÑ>rœÈƒ>L »;ºbÓ-ý´éPл{φ){aú< e®jÞ!_ +Ì#gç¸v¼D¾tw^BÍŽc#cȸÏ[Yf¹—pæ«;¸nã.ÑæDɾíġ赪•}8]u‚Këò¢ÒìS~W;¹dŠíÌ,Xq¼íhyWÇ«'ü}–îQ~jvœ÷&ç2h¹›°)¡%Ï­Â¥oÅ™@Héœ{®pœ€øªmY&©& ×å£ç(½œºñŽBz–sÏŽ ¤tÎ=W8h€Ò9÷\á8 BŽ $0à8 BJçÜs…ã€)sÏŽ ¤tÎ=W8h€Ò9÷\á8 BŽ $0> +stream +q + +1.7537 Tc + +0.0 Tc + +1.7537 Tc + +0.0 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.7537 Tc + +q +284.25 0.0 0.0 183.75 48.24 622.14 cm +/I1 Do +Q + +BT +48.24 625.206 Td +ET + + +0.0 Tc +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 581.094 Td +/F2.0 22 Tf +<496e7374616c6c6174696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2902 Tw + +BT +48.24 551.906 Td +/F1.0 10.5 Tf +[<53696e636520746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f7274206973207573656420617320612070617274206f6620746865205454> 20.0195 <434e2d33207465737420656e7669726f6e6d656e742074686973207265717569726573>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 536.126 Td +/F1.0 10.5 Tf +[<5454> 20.0195 <434e2d332054> 29.7852 <657374204578656375746f7220746f20626520696e7374616c6c6564206265666f726520616e> 20.0195 <79206f706572> 20.0195 <6174696f6e206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574207465737420706f72742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +48.24 508.346 Td +/F1.0 10.5 Tf +[<54686520636f6d70696c6174696f6e206f662053534c2072656c6174656420636f64652070617274732063616e2062652064697361626c65642062> 20.0195 <79206e6f7420646566696e696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6975 Tw + +BT +445.6011 508.346 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6975 Tw + +BT +498.1011 508.346 Td +/F1.0 10.5 Tf +<206d6163726f20696e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 492.566 Td +/F1.0 10.5 Tf +<74686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.93 492.566 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +108.6673 492.566 Td +/F1.0 10.5 Tf +<20647572696e672074686520636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.7126 Tw + +BT +48.24 464.786 Td +/F1.0 10.5 Tf +[<5768656e206275696c64696e67207468652065786563757461626c65207465737420737569746520746865206c696272> 20.0195 <617269657320636f6d70696c656420666f7220746865204f70656e53534c20746f6f6c6b69742028696620746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9293 Tw + +BT +48.24 449.006 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9293 Tw + +BT +100.74 449.006 Td +/F1.0 10.5 Tf +[<206d6163726f20697320646566696e6564292073686f756c6420616c736f206265206c696e6b> 20.0195 <656420696e746f207468652065786563757461626c6520616c6f6e67207769746820746865205454> 20.0195 <434e2d332054> 29.7852 <657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +48.24 433.226 Td +/F1.0 10.5 Tf +[<4578656375746f722c20692e652eca746865204f70656e53534c206c696272> 20.0195 <61726965732073686f756c6420626520616464656420746f2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +371.7029 433.226 Td +/F4.0 10.5 Tf +[<4d616b> 20.0195 <6566696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2678 Tw + +BT +413.4402 433.226 Td +/F1.0 10.5 Tf +[<2067656e6572> 20.0195 <617465642062> 20.0195 <792074686520544954> 60.0586 <414e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4908 Tw + +BT +48.24 417.446 Td +/F1.0 10.5 Tf +<6578656375746f722028736565206578616d706c6520696e2073656374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.4908 Tw + +BT +216.0478 417.446 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320696e20636173652053534c20436f6e6e656374696f6e73204172652055736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4908 Tw + +BT +482.3947 417.446 Td +/F1.0 10.5 Tf +[<292e2054> 29.7852 <6f20636f6d70696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1968 Tw + +BT +48.24 401.666 Td +/F1.0 10.5 Tf +<74686520736f757263652066696c657320796f752077696c6c20616c736f206e65656420746865204f70656e53534c20646576656c6f70657220746f6f6c6b697420776869636820636f6e7461696e7320746865206865616465722066696c6573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +48.24 385.886 Td +/F1.0 10.5 Tf +[<757365642062> 20.0195 <792074686520736f757263652e204966205368617265204f626a656374732028>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +233.9022 385.886 Td +/F4.0 10.5 Tf +<2e736f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3557 Tw + +BT +247.4157 385.886 Td +/F1.0 10.5 Tf +<2920617265207573656420696e20746865204f70656e53534c20746f6f6c6b69742c20746f2072756e207468652065786563757461626c652c20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 370.106 Td +/F1.0 10.5 Tf +[<70617468206f6620746865204f70656e53534c206c696272> 20.0195 <6172696573206d75737420626520616464656420746f2074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +304.5238 370.106 Td +/F3.0 10.5 Tf +<4c445f4c4942524152595f50415448> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +383.2738 370.106 Td +/F1.0 10.5 Tf +<20656e7669726f6e6d656e74207661726961626c652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 354.29 m +102.4695 298.95 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 322.546 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0422 Tw + +BT +114.4695 338.326 Td +/F1.0 10.5 Tf +<496620796f7520617265207573696e6720746865207465737420706f7274206f6e20536f6c617269732c20796f75206861766520746f207365742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0422 Tw + +BT +424.047 338.326 Td +/F3.0 10.5 Tf +<504c4154464f524d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0422 Tw + +BT +466.047 338.326 Td +/F1.0 10.5 Tf +<206d6163726f20746f20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +114.4695 322.546 Td +/F1.0 10.5 Tf +<70726f7065722076616c75652e204974207368616c6c20626520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2581 Tw + +BT +237.3396 322.546 Td +/F5.0 10.5 Tf +<534f4c41524953> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +274.0896 322.546 Td +/F1.0 10.5 Tf +<20696e2063617365206f6620536f6c617269732036202853756e4f5320352e362920616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2581 Tw + +BT +455.5428 322.546 Td +/F5.0 10.5 Tf +<534f4c4152495338> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2581 Tw + +BT +497.5428 322.546 Td +/F1.0 10.5 Tf +<20696e2063617365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 306.766 Td +/F1.0 10.5 Tf +<6f6620536f6c617269732038202853756e4f5320352e38292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 258.654 Td +/F2.0 22 Tf +[<436f6e6669677572> 20.0195 <6174696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2614 Tw + +BT +48.24 229.466 Td +/F1.0 10.5 Tf +[<5468652065786563757461626c6520746573742070726f6772> 20.0195 <616d206265686176696f722069732064657465726d696e656420766961207468652072756e2d74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652e20546869732069732061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9451 Tw + +BT +48.24 213.686 Td +/F1.0 10.5 Tf +<73696d706c6520746578742066696c652c20776869636820636f6e7461696e7320766172696f75732073656374696f6e732028666f72206578616d706c652c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9451 Tw + +BT +376.4517 213.686 Td +/F3.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9451 Tw + +BT +486.7017 213.686 Td +/F1.0 10.5 Tf +<292061667465722065616368> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +48.24 197.906 Td +/F1.0 10.5 Tf +[<6f746865722e2054686520757375616c20737566666978206f6620636f6e6669677572> 20.0195 <6174696f6e2066696c657320697320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +281.348 197.906 Td +/F4.0 10.5 Tf +<2e6366672e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0496 Tw + +BT +300.8675 197.906 Td +/F1.0 10.5 Tf +[<2046> 40.0391 <6f72206675727468657220696e666f726d6174696f6e206f6e2074686520636f6e6669677572> 20.0195 <6174696f6e2066696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 182.126 Td +/F1.0 10.5 Tf +<73656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +66.93 182.126 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +80.3385 182.126 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1061 Tw + +BT +48.24 154.346 Td +/F1.0 10.5 Tf +[<546865206c697374656420706f727420706172> 20.0195 <616d65746572732028>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.1061 Tw + +BT +187.6001 154.346 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1061 Tw + +BT +543.407 154.346 Td +/F1.0 10.5 Tf +<29> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5246 Tw + +BT +48.24 138.566 Td +/F1.0 10.5 Tf +[<617265206d616e616765642062> 20.0195 <792064656661756c742062> 20.0195 <7920746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e2054686579206861766520746f20626520646566696e6564206f6e6c7920696e20746865205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0894 Tw + +BT +48.24 122.786 Td +/F1.0 10.5 Tf +[<636f6e6669677572> 20.0195 <6174696f6e2066696c65732e2054686f7567682c206966204162737472> 20.0195 <61637420536f636b> 20.0195 <6574d57320706172> 20.0195 <616d657465722068616e646c696e67206973206e6f7420617070726f70726961746520666f7220796f7572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7407 Tw + +BT +48.24 107.006 Td +/F1.0 10.5 Tf +<6170706c69636174696f6e2c20796f752063616e2069676e6f726520697420636f6d706c6574656c7920616e642068616e646c6520746865207661726961626c6573206469726563746c792066726f6d20796f757220706f72742e204974206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1341 Tw + +BT +48.24 91.226 Td +/F1.0 10.5 Tf +[<7265636f6d6d656e64656420746f20696d706c656d656e7420796f7572206f776e207465737420706f727420706172> 20.0195 <616d65746572206e616d652070617373696e672066756e6374696f6e7320736f207468617420796f75722074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 75.446 Td +/F1.0 10.5 Tf +[<706f72742077696c6c206e6f7420646570656e64206f6e20746865207465737420706f727420706172> 20.0195 <616d65746572206e616d657320696e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<35> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +56 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 55 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/XObject << /I1 54 0 R +/Stamp1 288 0 R +>> +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F4.0 29 0 R +/F5.0 59 0 R +>> +>> +/Annots [58 0 R 61 0 R 62 0 R] +>> +endobj +57 0 obj +[56 0 R /XYZ 0 609.39 null] +endobj +58 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [216.0478 414.38 482.3947 428.66] +/Type /Annot +>> +endobj +59 0 obj +<< /Type /Font +/BaseFont /79e08b+mplus1mn-italic +/Subtype /TrueType +/FontDescriptor 371 0 R +/FirstChar 32 +/LastChar 255 +/Widths 373 0 R +/ToUnicode 372 0 R +>> +endobj +60 0 obj +[56 0 R /XYZ 0 286.95 null] +endobj +61 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [66.93 179.06 80.3385 193.34] +/Type /Annot +>> +endobj +62 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [187.6001 151.28 543.407 165.56] +/Type /Annot +>> +endobj +63 0 obj +<< /Length 18449 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 762.186 Td +/F2.0 18 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c65>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6694 Tw + +BT +48.24 734.166 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6694 Tw + +BT +83.6142 734.166 Td +/F3.0 10.5 Tf +<5b54455354504f52545f504152414d45544552535d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6694 Tw + +BT +193.8642 734.166 Td +/F1.0 10.5 Tf +[<2073656374696f6e2074686520666f6c6c6f77696e6720706172> 20.0195 <616d65746572732063616e2062652073657420666f7220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2056 Tw + +BT +48.24 718.386 Td +/F1.0 10.5 Tf +[<6261736564207465737420706f72742e2054686520706172> 20.0195 <616d65746572206e616d65732061726520636173652d73656e7369746976653b2074686520706172> 20.0195 <616d657465722076616c75657320617265206e6f7420636173652d>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 702.606 Td +/F1.0 10.5 Tf +<73656e7369746976652028692e652e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +115.482 702.606 Td +/F5.0 10.5 Tf +<2259455322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +141.732 702.606 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +147.0765 702.606 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +173.3265 702.606 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +178.671 702.606 Td +/F5.0 10.5 Tf +<2259657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +204.921 702.606 Td +/F1.0 10.5 Tf +<2076616c75657320617265206964656e746963616c292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 668.106 Td +/F2.0 13 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f727420436f6e6669677572> 20.0195 <6174696f6e2046696c65206966>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 650.426 Td +/F2.0 13 Tf +[<746865205472> 20.0195 <616e73706f7274204368616e6e656c2069732054> 20.0195 <43502f4950>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 623.866 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 626.05 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5016 Tw + +BT +66.24 599.866 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320636f6e74726f6c6c6564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 584.086 Td +/F1.0 10.5 Tf +[<62> 20.0195 <7920636f6e6e656374696f6e20415350732e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +269.3938 584.086 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +290.3938 584.086 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2202 Tw + +BT +66.24 556.306 Td +/F1.0 10.5 Tf +<4966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2202 Tw + +BT +137.2924 556.306 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2202 Tw + +BT +163.5424 556.306 Td +/F1.0 10.5 Tf +[<2c207468652066756e6374696f6e616c6974696573206f6620746865204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206861766520746f20626520636f6e74726f6c6c65642062> 20.0195 <792063616c6c696e6720697473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +66.24 540.526 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +181.74 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +207.2563 540.526 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +291.2563 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +316.7725 540.526 Td +/F3.0 10.5 Tf +<72656d6f76655f636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +385.0225 540.526 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +20.1717 Tw + +BT +410.5388 540.526 Td +/F3.0 10.5 Tf +<72656d6f76655f616c6c5f636c69656e7473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +20.1717 Tw + +BT +505.0388 540.526 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.088 Tw + +BT +66.24 524.746 Td +/F3.0 10.5 Tf +<636c6f73655f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.088 Tw + +BT +155.49 524.746 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e732e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742077696c6c206e6f742063726561746520616e> 20.0195 <7920636f6e6e656374696f6e206f72206c697374656e696e6720706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9914 Tw + +BT +66.24 508.966 Td +/F1.0 10.5 Tf +<7768656e2063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9914 Tw + +BT +157.7786 508.966 Td +/F3.0 10.5 Tf +<6d61705f75736572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9914 Tw + +BT +199.7786 508.966 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2e205573696e67207468697320706172> 20.0195 <616d657465722c206d6f7265207468616e206f6e6520636f6e6e656374696f6e2063616e206265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.9536 Tw + +BT +66.24 493.186 Td +/F1.0 10.5 Tf +[<6f70656e656420696e20636c69656e74206d6f6465206f706572> 20.0195 <6174696f6e2e20546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742077696c6c2063616c6c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.9536 Tw + +BT +449.915 493.186 Td +/F3.0 10.5 Tf +<6c697374656e5f706f72745f6f70656e6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.9536 Tw + +BT +544.415 493.186 Td +/F1.0 10.5 Tf +<2c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +66.24 477.406 Td +/F3.0 10.5 Tf +<636c69656e745f636f6e6e656374696f6e5f6f70656e6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +192.24 477.406 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +202.171 477.406 Td +/F3.0 10.5 Tf +<706565725f636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +275.671 477.406 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5865 Tw + +BT +309.393 477.406 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5865 Tw + +BT +398.643 477.406 Td +/F1.0 10.5 Tf +<2066756e6374696f6e73206f6620746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3694 Tw + +BT +66.24 461.626 Td +/F1.0 10.5 Tf +[<696d706c656d656e74696e67206974207768656e20636f72726573706f6e64696e67206576656e74732068617070656e2e205468697320616c6c6f7773207465737420706f72747320616e64205454> 20.0195 <434e20636f646520746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 445.846 Td +/F1.0 10.5 Tf +[<6469726563746c792068616e646c652054> 20.0195 <435020636f6e6e656374696f6e20696e6974696174696f6e7320616e64206576656e74732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 418.066 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 420.25 Td +/F3.0 10.5 Tf +<7365727665725f6d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.373 Tw + +BT +66.24 394.066 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865207465737420706f7274207368616c6c20616374206173206120736572766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +66.24 378.286 Td +/F1.0 10.5 Tf +<6f72206120636c69656e742e204966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2308 Tw + +BT +193.5718 378.286 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +219.8218 378.286 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c206163742061732061207365727665722e204966207468652076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2308 Tw + +BT +459.7122 378.286 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2308 Tw + +BT +480.7122 378.286 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.6539 Tw + +BT +66.24 362.506 Td +/F1.0 10.5 Tf +<77696c6c20616374206173206120636c69656e742e205468652064656661756c742076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +5.6539 Tw + +BT +312.0158 362.506 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.6539 Tw + +BT +333.0158 362.506 Td +/F1.0 10.5 Tf +[<202e2054686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e67206966>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +66.24 346.726 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +165.99 346.726 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +219.3597 346.726 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +245.6097 346.726 Td +/F1.0 10.5 Tf +<20626563617573652074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.6508 Tw + +BT +317.822 346.726 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6508 Tw + +BT +401.822 346.726 Td +/F1.0 10.5 Tf +<20696e6974696174657320746865206c697374656e696e67206f6e2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 330.946 Td +/F1.0 10.5 Tf +<73657276657220706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 303.166 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 305.35 Td +/F3.0 10.5 Tf +<736f636b65745f646562756767696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6769 Tw + +BT +66.24 279.166 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f20656e61626c65206465627567206c6f6767696e672072656c6174656420746f20746865207472> 20.0195 <616e73706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 263.386 Td +/F1.0 10.5 Tf +[<6368616e6e656c202854> 20.0195 <435020736f636b> 20.0195 <657420616e642053534c206f706572> 20.0195 <6174696f6e732920696e20746865207465737420706f72742e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +449.6574 263.386 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +470.6574 263.386 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 235.606 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 237.79 Td +/F3.0 10.5 Tf +<68616c745f6f6e5f636f6e6e656374696f6e5f7265736574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4512 Tw + +BT +66.24 211.606 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746865207465737420706f7274207368616c6c2073746f70206f6e206572726f7273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6674 Tw + +BT +66.24 195.826 Td +/F1.0 10.5 Tf +<6f6363757272656420647572696e6720636f6e6e656374696f6e2073657475702028696e636c7564696e6720636f6e6e656374696f6e207265667573696e67292c2073656e64696e6720616e6420726563656976696e672c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9639 Tw + +BT +66.24 180.046 Td +/F1.0 10.5 Tf +<646973636f6e6e656374696f6e2028696e636c7564696e672074686520646574656374696f6e206f662074686520646973636f6e6e656374696f6e292e205468652076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9639 Tw + +BT +440.0858 180.046 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9639 Tw + +BT +466.3358 180.046 Td +/F1.0 10.5 Tf +<206d65616e73207468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +66.24 164.266 Td +/F1.0 10.5 Tf +<706f72742077696c6c2073746f702c207468652076616c756520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2169 Tw + +BT +187.9905 164.266 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +208.9905 164.266 Td +/F1.0 10.5 Tf +<206d65616e7320746861742069742077696c6c206e6f742073746f70206f6e2073756368206572726f72732e205468652064656661756c742076616c756520697320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2169 Tw + +BT +526.04 164.266 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2169 Tw + +BT +547.04 164.266 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 148.486 Td +/F1.0 10.5 Tf +<696e20736572766572206d6f646520616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +166.3155 148.486 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +192.5655 148.486 Td +/F1.0 10.5 Tf +<20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 120.706 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 120.706 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 120.706 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 120.706 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 120.706 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 104.926 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +155.49 104.926 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f6620746865207465737420706f72742069732063616c6c6564206f6e20746865206576656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 77.146 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 79.33 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7149 Tw + +BT +66.24 53.146 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220636f6e636174656e6174696f6e206f6363757273206f6e2054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<36> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +64 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 63 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +65 0 obj +[64 0 R /XYZ 0 841.89 null] +endobj +66 0 obj +[64 0 R /XYZ 0 686.79 null] +endobj +67 0 obj +<< /Length 16555 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +66.24 794.676 Td +/F1.0 10.5 Tf +[<6c61> 20.0195 <7965722e2049662076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +148.4968 794.676 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +174.7468 794.676 Td +/F1.0 10.5 Tf +<2c20636f6e636174656e6174696f6e20697320656e61626c65642e2049662076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +361.4053 794.676 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +382.4053 794.676 Td +/F1.0 10.5 Tf +<2c2069742069732064697361626c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +120.4695 778.86 m +120.4695 739.3 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +78.3451 755.006 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +132.4695 762.896 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9668 Tw + +BT +154.8563 762.896 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +191.6063 762.896 Td +/F1.0 10.5 Tf +<2073657474696e672069732076616c6964206f6e6c7920666f7220746865206f7574676f696e67206d657373616765732e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9668 Tw + +BT +460.0683 762.896 Td +/F3.0 10.5 Tf +<6e61676c696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9668 Tw + +BT +496.8183 762.896 Td +/F1.0 10.5 Tf +<20666f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +132.4695 747.116 Td +/F1.0 10.5 Tf +[<696e636f6d696e67206d65737361676573207368616c6c206265207365742062> 20.0195 <79207468652073656e64696e67207061727479> 89.8438 <2e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +497.4299 747.116 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +518.4299 747.116 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 715.336 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 717.52 Td +/F3.0 10.5 Tf +<72656d6f74655f61646472657373> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2065 Tw + +BT +66.24 691.336 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 675.556 Td +/F1.0 10.5 Tf +<7573656420696e20736572766572206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 647.776 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 647.776 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 647.776 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 647.776 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 647.776 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 631.996 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +181.74 631.996 Td +/F1.0 10.5 Tf +<2066756e6374696f6e207265636569766573207468652072656d6f746520616e64206f7074696f6e616c6c7920746865206c6f63616c20616464726573732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 604.216 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 606.4 Td +/F3.0 10.5 Tf +<72656d6f74655f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4814 Tw + +BT +66.24 580.216 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 564.436 Td +/F1.0 10.5 Tf +<6e6f74207573656420696e20736572766572206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 536.656 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 536.656 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 536.656 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 536.656 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 536.656 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 520.876 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +181.74 520.876 Td +/F1.0 10.5 Tf +<2066756e6374696f6e207265636569766573207468652072656d6f746520616e64206f7074696f6e616c6c7920746865206c6f63616c20616464726573732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 493.096 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 495.28 Td +/F3.0 10.5 Tf +<6c6f63616c5f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6334 Tw + +BT +66.24 469.096 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520706f72742077686572652074686520736572766572206973206c697374656e696e6720666f7220636f6e6e656374696f6e732e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 453.316 Td +/F1.0 10.5 Tf +<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 425.536 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722073657276657320617320612064656661756c7420696620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +247.6693 425.536 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +347.4193 425.536 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +390.1858 425.536 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +416.4358 425.536 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 397.756 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 399.94 Td +/F3.0 10.5 Tf +<61695f66616d696c79> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.316 Tw + +BT +66.24 373.756 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792074686520616464726573732066616d696c7920746f20757365207768656e206f70656e696e67206c697374656e696e6720706f727473206f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +66.24 357.976 Td +/F1.0 10.5 Tf +<6372656174696e6720636c69656e7420636f6e6e656374696f6e732e204966206974732076616c75652069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.0646 Tw + +BT +301.9481 357.976 Td +/F5.0 10.5 Tf +<224950763422> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +333.4481 357.976 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.0646 Tw + +BT +350.0204 357.976 Td +/F5.0 10.5 Tf +<2241465f494e455422> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0646 Tw + +BT +397.2704 357.976 Td +/F1.0 10.5 Tf +<206f6e6c792049507634206164647265737365732061726520757365642e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +66.24 342.196 Td +/F1.0 10.5 Tf +<49662069742069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +129.6543 342.196 Td +/F5.0 10.5 Tf +<224950763622> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +161.1543 342.196 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +178.8593 342.196 Td +/F5.0 10.5 Tf +<2241465f494e45543622> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +231.3593 342.196 Td +/F1.0 10.5 Tf +<206f6e6c79204950763620636f6e6e656374696f6e732061726520616c6c6f7765642e205468652076616c75657320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.631 Tw + +BT +472.0795 342.196 Td +/F5.0 10.5 Tf +<6022554e535045432260> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.631 Tw + +BT +524.5795 342.196 Td +/F1.0 10.5 Tf +<20616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0174 Tw + +BT +66.24 326.416 Td +/F3.0 10.5 Tf +<2241465f554e5350454322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0174 Tw + +BT +123.99 326.416 Td +/F1.0 10.5 Tf +<2063616e20626520757365642069662074686520616464726573732066616d696c79206973206e6f74207370656369666965642e2054686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0174 Tw + +BT +406.9102 326.416 Td +/F5.0 10.5 Tf +<22554e5350454322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0174 Tw + +BT +448.9102 326.416 Td +/F1.0 10.5 Tf +<2076616c756520616c6c6f7773207573696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0689 Tw + +BT +66.24 310.636 Td +/F1.0 10.5 Tf +<4950763420616e64204950763620616464726573736573206174207468652073616d652074696d652e205468652073656c656374696f6e206973206d616465206175746f6d61746963616c6c7920646570656e64696e67206f6e20746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 294.856 Td +/F1.0 10.5 Tf +<61637475616c2076616c7565206f6620746865206c6f63616c20616e642072656d6f7465206164647265737365732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 267.076 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d65746572206973206f7074696f6e616c2e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +303.8968 267.076 Td +/F5.0 10.5 Tf +<2241465f554e5350454322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +361.6468 267.076 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 239.296 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 241.48 Td +/F3.0 10.5 Tf +<7365727665725f6261636b6c6f67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2175 Tw + +BT +66.24 215.296 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465722063616e206265207573656420746f207370656369667920746865206e756d626572206f6620616c6c6f7765642070656e64696e6720287175657565642920636f6e6e656374696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1006 Tw + +BT +66.24 199.516 Td +/F1.0 10.5 Tf +<7265717565737473206f6e2074686520706f72742074686520736572766572206c697374656e732e204974206973206f7074696f6e616c20696e20736572766572206d6f646520616e64206e6f74207573656420696e20636c69656e74206d6f64652e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 183.736 Td +/F1.0 10.5 Tf +<5468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +166.851 183.736 Td +/F5.0 10.5 Tf +<223122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +182.601 183.736 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 155.956 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 158.14 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2749 Tw + +BT +66.24 131.956 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f207370656369667920746865206d6178696d756d206e756d626572206f662074696d65732074686520636f6e6e656374696f6e206973>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 116.176 Td +/F1.0 10.5 Tf +[<617474656d7074656420746f2062652065737461626c697368656420696e2054> 20.0195 <4350207265636f6e6e656374206d6f64652e205468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +427.4398 116.176 Td +/F5.0 10.5 Tf +<223522> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +443.1898 116.176 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 88.396 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 88.396 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 88.396 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 88.396 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 88.396 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 72.616 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 72.616 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 56.836 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<37> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +68 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 67 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F5.0 59 0 R +/F2.0 19 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +69 0 obj +<< /Length 13835 +>> +stream +q + +-0.5 Tc +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +56.8805 793.926 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 796.11 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8156 Tw + +BT +66.24 769.926 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f2073706563696679207468652074696d652028696e207365636f6e64732920746865207465737420706f7274207761697473206265747765656e20746f2054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 754.146 Td +/F1.0 10.5 Tf +<7265636f6e6e656374696f6e20617474656d70742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +279.8625 754.146 Td +/F5.0 10.5 Tf +<223122> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +295.6125 754.146 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 726.366 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 726.366 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 726.366 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 726.366 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 726.366 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 710.586 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 710.586 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 694.806 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 667.026 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 669.21 Td +/F3.0 10.5 Tf +<636c69656e745f5443505f7265636f6e6e656374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3739 Tw + +BT +66.24 643.026 Td +/F1.0 10.5 Tf +[<496620746865207465737420706f727420697320696e20636c69656e74206d6f646520616e642074686520636f6e6e656374696f6e2077617320696e7465727275707465642062> 20.0195 <7920746865206f7468657220736964652c20697420747269657320746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 627.246 Td +/F1.0 10.5 Tf +<7265636f6e6e65637420616761696e2e205468652064656661756c742076616c75652069732060606e6f27272e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +66.24 599.466 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d6574657220686173206e6f206d65616e696e6720696620>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +274.7251 599.466 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +374.4751 599.466 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +6.5638 Tw + +BT +443.4969 599.466 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +6.5638 Tw + +BT +469.7469 599.466 Td +/F1.0 10.5 Tf +<2c206265636175736520746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1027 Tw + +BT +66.24 583.686 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1027 Tw + +BT +155.49 583.686 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063616c6c6564207768656e20746865206576656e742068617070656e732c20616e64206974d57320757020746f20746865207465737420706f7274206f72205454> 20.0195 <434e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 567.906 Td +/F1.0 10.5 Tf +<636f646520686f7720746f20636f6e74696e75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 540.126 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 542.31 Td +/F3.0 10.5 Tf +<7573655f6e6f6e5f626c6f636b696e675f736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5441 Tw + +BT +66.24 516.126 Td +/F1.0 10.5 Tf +[<5468697320706172> 20.0195 <616d657465722063616e206265207573656420746f20737065636966792077686574686572207468652054> 29.7852 <65737420506f7274207368616c6c2075736520626c6f636b696e67206f72206e6f6e2d626c6f636b696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3068 Tw + +BT +66.24 500.346 Td +/F1.0 10.5 Tf +[<54> 20.0195 <435020736f636b> 20.0195 <65742e205573696e67207468697320706172> 20.0195 <616d657465722c2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3068 Tw + +BT +255.033 500.346 Td +/F3.0 10.5 Tf +<73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3068 Tw + +BT +276.033 500.346 Td +/F1.0 10.5 Tf +[<205454> 20.0195 <434e2d33206f706572> 20.0195 <6174696f6e2077696c6c20626c6f636b20756e74696c2074686520646174612069732073656e742c20627574>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 484.566 Td +/F1.0 10.5 Tf +[<616e20616c676f726974686d20697320696d706c656d656e74656420746f2061766f69642054> 20.0195 <435020646561646c6f636b2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 456.786 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c207468652064656661756c742076616c756520697320>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +298.6993 456.786 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +319.6993 456.786 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 416.286 Td +/F2.0 13 Tf +[<41> 20.0195 <64646974696f6e616c204162737472> 20.0195 <61637420536f636b> 20.0195 <65742054> 29.7852 <65737420506f727420506172> 20.0195 <616d657465727320696e207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 398.606 Td +/F2.0 13 Tf +[<436f6e6669677572> 20.0195 <6174696f6e2046696c6520696620746865205472> 20.0195 <616e73706f7274204368616e6e656c2069732053534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 372.046 Td +/F1.0 10.5 Tf +[<546865736520706172> 20.0195 <616d657465727320617661696c61626c65206f6e6c7920696620>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +223.3168 372.046 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +275.8168 372.046 Td +/F1.0 10.5 Tf +<206d6163726f20697320646566696e656420647572696e6720636f6d70696c6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 344.266 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 346.45 Td +/F3.0 10.5 Tf +<73736c5f7573655f73736c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5944 Tw + +BT +66.24 320.266 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746f207573652053534c206f6e2074686520746f70206f66207468652054> 20.0195 <4350>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 304.486 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e206f72206e6f742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +260.595 304.486 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +281.595 304.486 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 276.706 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 278.89 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f6365727469666963617465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.642 Tw + +BT +66.24 252.706 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2074656c6c20746865207465737420706f7274207768657468657220746f20636865636b20746865206365727469666963617465>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.042 Tw + +BT +66.24 236.926 Td +/F1.0 10.5 Tf +<6f6620746865206f7468657220736964652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.042 Tw + +BT +232.9368 236.926 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.042 Tw + +BT +259.1868 236.926 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c20717565727920616e6420636865636b207468652063657274696669636174652e20496620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2606 Tw + +BT +66.24 221.146 Td +/F1.0 10.5 Tf +[<6365727469666963617465206973206e6f742076616c69642028692e652eca746865207075626c696320616e642070726976617465206b> 20.0195 <65797320646f206e6f74206d61746368292c2069742077696c6c206578697420776974682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.403 Tw + +BT +66.24 205.366 Td +/F1.0 10.5 Tf +<636f72726573706f6e64696e67206572726f72206d6573736167652e20496620697420697320646566696e656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.403 Tw + +BT +293.3095 205.366 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.403 Tw + +BT +314.3095 205.366 Td +/F1.0 10.5 Tf +<2c20746865207465737420706f72742077696c6c206e6f7420636865636b207468652076616c6964697479206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 189.586 Td +/F1.0 10.5 Tf +<63657274696669636174652e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +222.5745 189.586 Td +/F5.0 10.5 Tf +<226e6f22> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +243.5745 189.586 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 161.806 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 163.99 Td +/F3.0 10.5 Tf +<73736c5f7573655f73657373696f6e5f726573756d7074696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6276 Tw + +BT +66.24 137.806 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207768657468657220746f207573652f737570706f72742053534c2073657373696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 122.026 Td +/F1.0 10.5 Tf +<726573756d7074696f6e73206f72206e6f742e205468652064656661756c742076616c756520697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +268.0815 122.026 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +294.3315 122.026 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 94.246 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 96.43 Td +/F3.0 10.5 Tf +<73736c5f63657274696669636174655f636861696e5f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.2569 Tw + +BT +66.24 70.246 Td +/F1.0 10.5 Tf +<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520636572746966696361746520636861696e2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4658 Tw + +BT +66.24 54.466 Td +/F1.0 10.5 Tf +[<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e204e6f746520746861742074686520736572766572206d61> 20.0195 <79207265717569726520636c69656e74>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<38> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +70 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 69 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +71 0 obj +[70 0 R /XYZ 0 434.97 null] +endobj +72 0 obj +<< /Length 9906 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +66.24 794.676 Td +/F1.0 10.5 Tf +<61757468656e7469636174696f6e2e20496e20746869732063617365206e6f20636f6e6e656374696f6e2063616e2062652065737461626c697368656420776974686f7574206120636c69656e742063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 766.896 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 769.08 Td +/F3.0 10.5 Tf +<73736c5f707269766174655f6b65795f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4033 Tw + +BT +66.24 742.896 Td +/F1.0 10.5 Tf +[<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520736572766572> -29.7852 20.0195 <412070726976617465206b> 20.0195 <6579> 89.8438 <2e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 727.116 Td +/F1.0 10.5 Tf +<4d616e6461746f727920696e20736572766572206d6f646520616e64206f7074696f6e616c20696e20636c69656e74206d6f64652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 699.336 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 701.52 Td +/F3.0 10.5 Tf +<73736c5f707269766174655f6b65795f70617373776f7264> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9265 Tw + +BT +66.24 675.336 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f2073706563696679207468652070617373776f72642070726f74656374696e67207468652070726976617465206b> 20.0195 <6579>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 659.556 Td +/F1.0 10.5 Tf +<66696c652e204966206e6f7420646566696e65642c207468652053534c20746f6f6c6b69742077696c6c2061736b20666f722069742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 631.776 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 633.96 Td +/F3.0 10.5 Tf +<73736c5f7472757374656443416c6973745f66696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2628 Tw + +BT +66.24 607.776 Td +/F1.0 10.5 Tf +<49742073706563696669657320612050454d20656e636f6465642066696c65d5732070617468206f6e207468652066696c652073797374656d20636f6e7461696e696e672074686520636572746966696361746573206f66207468652074727573746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.4992 Tw + +BT +66.24 591.996 Td +/F1.0 10.5 Tf +<434120617574686f72697469657320746f207573652e204d616e6461746f727920696e20736572766572206d6f64652c20616e64206d616e6461746f727920696e20636c69656e74206d6f6465206966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 576.216 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f63657274696669636174653d2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +213.24 576.216 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 548.436 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 550.62 Td +/F3.0 10.5 Tf +<73736c5f616c6c6f7765645f636970686572735f6c697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.0022 Tw + +BT +66.24 524.436 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d65746572206973206f7074696f6e616c2c20616e642063616e206265207573656420746f20737065636966792074686520616c6c6f77656420636970686572206c6973742e205468652076616c756520697320706173736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 508.656 Td +/F1.0 10.5 Tf +<6469726563746c7920746f207468652053534c20746f6f6c6b69742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 480.876 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 480.876 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f53534c7632> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 465.096 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 465.096 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f53534c7633> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 449.316 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 449.316 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c537631> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 433.536 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 433.536 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c5376315f31> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 417.756 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 417.756 Td +/F3.0 10.5 Tf +<73736c5f64697361626c655f544c5376315f32> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1716 Tw + +BT +66.24 389.976 Td +/F1.0 10.5 Tf +[<546865207573616765206f6620612073706563696669632053534c2f544c532076657273696f6e2063616e2062652064697361626c65642062> 20.0195 <792073657474696e672074686520706172> 20.0195 <616d6574657220746f20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1716 Tw + +BT +483.8054 389.976 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1716 Tw + +BT +510.0554 389.976 Td +/F1.0 10.5 Tf +<2e20506c65617365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 374.196 Td +/F1.0 10.5 Tf +[<6e6f746520746861742074686520617661696c61626c652053534c2f544c532076657273696f6e732061726520646570656e6473206f66207468652075736564204f70656e53534c206c696272> 20.0195 <617279> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 324.084 Td +/F2.0 22 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +95.474 324.084 Td +/F3.0 22 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +249.474 324.084 Td +/F2.0 22 Tf +<20415049> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 294.896 Td +/F1.0 10.5 Tf +<496e207468652064657269766564207465737420706f72742074686520666f6c6c6f77696e672066756e6374696f6e732063616e20626520757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 255.056 Td +/F2.0 18 Tf +[<4d61702f556e6d6170207468652054> 29.7852 <65737420506f7274>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 227.036 Td +/F1.0 10.5 Tf +<496e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +80.2755 227.036 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +122.2755 227.036 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +146.8245 227.036 Td +/F3.0 10.5 Tf +<757365725f756e6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +199.3245 227.036 Td +/F1.0 10.5 Tf +<2066756e6374696f6e73206f66207468652064657269766564207465737420706f72742074686573652066756e6374696f6e732073686f756c642062652063616c6c65643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 211.22 m +543.04 211.22 l +545.2491 211.22 547.04 209.4291 547.04 207.22 c +547.04 149.0 l +547.04 146.7909 545.2491 145.0 543.04 145.0 c +52.24 145.0 l +50.0309 145.0 48.24 146.7909 48.24 149.0 c +48.24 207.22 l +48.24 209.4291 50.0309 211.22 52.24 211.22 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 211.22 m +543.04 211.22 l +545.2491 211.22 547.04 209.4291 547.04 207.22 c +547.04 149.0 l +547.04 146.7909 545.2491 145.0 543.04 145.0 c +52.24 145.0 l +50.0309 145.0 48.24 146.7909 48.24 149.0 c +48.24 207.22 l +48.24 209.4291 50.0309 211.22 52.24 211.22 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 188.395 Td +/F3.0 11 Tf +<766f6964206d61705f7573657228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 158.915 Td +/F3.0 11 Tf +<766f696420756e6d61705f7573657228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 108.976 Td +/F2.0 18 Tf +[<53657474696e672054> 29.7852 <65737420506f727420506172> 20.0195 <616d6574657273>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 92.92 m +543.04 92.92 l +545.2491 92.92 547.04 91.1291 547.04 88.92 c +547.04 60.18 l +547.04 57.9709 545.2491 56.18 543.04 56.18 c +52.24 56.18 l +50.0309 56.18 48.24 57.9709 48.24 60.18 c +48.24 88.92 l +48.24 91.1291 50.0309 92.92 52.24 92.92 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 92.92 m +543.04 92.92 l +545.2491 92.92 547.04 91.1291 547.04 88.92 c +547.04 60.18 l +547.04 57.9709 545.2491 56.18 543.04 56.18 c +52.24 56.18 l +50.0309 56.18 48.24 57.9709 48.24 60.18 c +48.24 88.92 l +48.24 91.1291 50.0309 92.92 52.24 92.92 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 70.095 Td +/F3.0 11 Tf +<626f6f6c20706172616d657465725f73657428636f6e73742063686172205f5f706172616d657465725f6e616d652c20636f6e73742063686172205f5f706172616d657465725f76616c7565293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +541.009 14.388 Td +/F1.0 9 Tf +<39> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +73 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 72 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +74 0 obj +[73 0 R /XYZ 0 352.38 null] +endobj +75 0 obj +[73 0 R /XYZ 0 279.08 null] +endobj +76 0 obj +[73 0 R /XYZ 0 133.0 null] +endobj +77 0 obj +<< /Length 14771 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +3.5652 Tw + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +<43616c6c20746869732066756e6374696f6e20696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +3.5652 Tw + +BT +185.3883 793.926 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5652 Tw + +BT +253.6383 793.926 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f66207468652064657269766564207465737420706f727420746f2073657420746865207465737420706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 778.146 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d6574657273206f66204162737472> 20.0195 <616374536f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 738.306 Td +/F2.0 18 Tf +<4f70656e2061204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 710.286 Td +/F1.0 10.5 Tf +[<54> 29.7852 <6f206f70656e20612073657276657220736f636b> 20.0195 <65742063616c6c2074686520666f6c6c6f77696e672066756e6374696f6e3a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 694.47 m +543.04 694.47 l +545.2491 694.47 547.04 692.6791 547.04 690.47 c +547.04 661.73 l +547.04 659.5209 545.2491 657.73 543.04 657.73 c +52.24 657.73 l +50.0309 657.73 48.24 659.5209 48.24 661.73 c +48.24 690.47 l +48.24 692.6791 50.0309 694.47 52.24 694.47 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 694.47 m +543.04 694.47 l +545.2491 694.47 547.04 692.6791 547.04 690.47 c +547.04 661.73 l +547.04 659.5209 545.2491 657.73 543.04 657.73 c +52.24 657.73 l +50.0309 657.73 48.24 659.5209 48.24 661.73 c +48.24 690.47 l +48.24 692.6791 50.0309 694.47 52.24 694.47 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 671.645 Td +/F3.0 11 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0253 Tw + +BT +48.24 633.766 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e20737570706f72747320626f7468204950763420616e642049507636206164647265737365732e2054686520706172> 20.0195 <616d6574657220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0253 Tw + +BT +402.3994 633.766 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0253 Tw + +BT +470.6494 633.766 Td +/F1.0 10.5 Tf +<2073686f756c642073706563696679> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3266 Tw + +BT +48.24 617.986 Td +/F1.0 10.5 Tf +[<746865206c6f63616c20686f73746e616d652e2049742063616e20626520746865206e616d65206f662074686520686f7374206f7220616e20495020616464726573732e2054686520706172> 20.0195 <616d6574657220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.3266 Tw + +BT +484.04 617.986 Td +/F3.0 10.5 Tf +<6c6f63616c53657276696365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3266 Tw + +BT +547.04 617.986 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1462 Tw + +BT +48.24 602.206 Td +/F1.0 10.5 Tf +[<73686f756c64206265206120737472696e6720636f6e7461696e696e672074686520706f7274206e756d6265722e204f6e65206f66207468652074776f20706172> 20.0195 <616d65746572732063616e20626520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1462 Tw + +BT +457.9595 602.206 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1462 Tw + +BT +478.9595 602.206 Td +/F1.0 10.5 Tf +<2c206d65616e696e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1462 Tw + +BT +531.29 602.206 Td +/F5.0 10.5 Tf +<414e59> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0393 Tw + +BT +48.24 586.426 Td +/F1.0 10.5 Tf +[<666f72207468617420706172> 20.0195 <616d657465722e2054686520616464726573732066616d696c79207573656420697320737065636966696564206569746865722062> 20.0195 <792074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.0393 Tw + +BT +419.3997 586.426 Td +/F3.0 10.5 Tf +<61695f66616d696c795f6e616d652829> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0393 Tw + +BT +503.3997 586.426 Td +/F1.0 10.5 Tf +<2074657374706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 570.646 Td +/F1.0 10.5 Tf +[<706172> 20.0195 <616d65746572206f72207365742062> 20.0195 <79207468652066756e6374696f6e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +212.8376 570.646 Td +/F3.0 10.5 Tf +<7365745f61695f66616d696c7928696e7429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +307.3376 570.646 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 542.866 Td +/F1.0 10.5 Tf +<54686520666f6c6c6f77696e672066756e6374696f6e206f6e6c7920737570706f72747320495076343a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 517.27 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e73742073747275637420736f636b616464725f696e2026206c6f63616c41646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 503.05 m +102.4695 463.49 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 479.196 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6899 Tw + +BT +114.4695 487.086 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e20697320646570726563617465642e204974206973206b> 20.0195 <65707420666f7220636f6d7061746962696c69747920776974682070726576696f75732076657273696f6e73206f66>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 471.306 Td +/F1.0 10.5 Tf +<7465737420706f72747320746861742075736520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +205.9245 471.306 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5416 Tw + +BT +48.24 439.526 Td +/F1.0 10.5 Tf +<41667465722063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5416 Tw + +BT +144.8777 439.526 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.5416 Tw + +BT +228.8777 439.526 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2c207468652066756e6374696f6e207669727475616c20766f696420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.5416 Tw + +BT +431.54 439.526 Td +/F3.0 10.5 Tf +<6c697374656e5f706f72745f6f70656e656428696e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.09 Tw + +BT +48.24 423.746 Td +/F3.0 10.5 Tf +<706f72745f6e756d62657229> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.09 Tw + +BT +111.24 423.746 Td +/F1.0 10.5 Tf +<2069732063616c6c6564206175746f6d61746963616c6c79207769746820746865206c697374656e696e6720706f7274206e756d6265722c206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.09 Tw + +BT +422.7383 423.746 Td +/F5.0 10.5 Tf +<2d31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.09 Tw + +BT +433.2383 423.746 Td +/F1.0 10.5 Tf +<20696620746865206f70656e696e67206f6620746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4982 Tw + +BT +48.24 407.966 Td +/F1.0 10.5 Tf +<6c697374656e696e6720706f7274206661696c65642e20546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f727420746f20696d706c656d656e74207370656369666963> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4061 Tw + +BT +48.24 392.186 Td +/F1.0 10.5 Tf +<6265686176696f7220646570656e64696e67206f6e20746865206c697374656e20726573756c742e20546869732063616e2c20666f72206578616d706c652cca63616c6c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4061 Tw + +BT +387.6289 392.186 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4061 Tw + +BT +471.6289 392.186 Td +/F1.0 10.5 Tf +[<20746f2067656e6572> 20.0195 <61746520616e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 376.406 Td +/F1.0 10.5 Tf +<696e636f6d696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +97.989 376.406 Td +/F3.0 10.5 Tf +<4c697374656e526573756c74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +160.989 376.406 Td +/F1.0 10.5 Tf +<206d65737361676520696e20746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6548 Tw + +BT +48.24 348.626 Td +/F1.0 10.5 Tf +<53756273657175656e742063616c6c73206f66207468652066756e6374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6548 Tw + +BT +214.0017 348.626 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6548 Tw + +BT +298.0017 348.626 Td +/F1.0 10.5 Tf +<20726573756c747320696e20636c6f73696e67207468652070726576696f7573206c697374656e696e6720706f727420616e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 332.846 Td +/F1.0 10.5 Tf +[<6f70656e696e672061206e6577206f6e652e2054686973206d65616e732074686174206f6e6c79206f6e652073657276657220706f727420697320737570706f727465642062> 20.0195 <7920>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +414.2173 332.846 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +487.7173 332.846 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4448 Tw + +BT +48.24 305.066 Td +/F1.0 10.5 Tf +<5768656e206120636c69656e7420636f6e6e6563747320746f20746865206c697374656e696e6720706f72742074686520666f6c6c6f77696e672066756e6374696f6e73206172652063616c6c656420746f206e6f74696679207468652064657269766564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 289.286 Td +/F1.0 10.5 Tf +<7465737420706f72742061626f757420746865206e657720636c69656e7420636f6e6e656374696f6e3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 273.47 m +543.04 273.47 l +545.2491 273.47 547.04 271.6791 547.04 269.47 c +547.04 225.99 l +547.04 223.7809 545.2491 221.99 543.04 221.99 c +52.24 221.99 l +50.0309 221.99 48.24 223.7809 48.24 225.99 c +48.24 269.47 l +48.24 271.6791 50.0309 273.47 52.24 273.47 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 273.47 m +543.04 273.47 l +545.2491 273.47 547.04 271.6791 547.04 269.47 c +547.04 225.99 l +547.04 223.7809 545.2491 221.99 543.04 221.99 c +52.24 221.99 l +50.0309 221.99 48.24 223.7809 48.24 225.99 c +48.24 269.47 l +48.24 271.6791 50.0309 273.47 52.24 273.47 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 250.645 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20636f6e73742063686172202a20686f73742c20636f6e737420696e7420706f727429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 235.905 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20736f636b616464725f696e262072656d6f74655f61646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8263 Tw + +BT +48.24 198.026 Td +/F1.0 10.5 Tf +<4f6e6c79206f6e65206f662074686573652066756e6374696f6e732073686f756c64206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e204e6f74652c207468617420746865207365636f6e64206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 182.246 Td +/F1.0 10.5 Tf +[<6f62736f6c6574652e204974206973206b> 20.0195 <65707420666f72206261636b7761726420636f6d7061746962696c697479206f6e6c79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 154.466 Td +/F1.0 10.5 Tf +<53696d696c61722066756e6374696f6e7320666f7220636c69656e7420646973636f6e6e656374733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 138.65 m +543.04 138.65 l +545.2491 138.65 547.04 136.8591 547.04 134.65 c +547.04 91.17 l +547.04 88.9609 545.2491 87.17 543.04 87.17 c +52.24 87.17 l +50.0309 87.17 48.24 88.9609 48.24 91.17 c +48.24 134.65 l +48.24 136.8591 50.0309 138.65 52.24 138.65 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 138.65 m +543.04 138.65 l +545.2491 138.65 547.04 136.8591 547.04 134.65 c +547.04 91.17 l +547.04 88.9609 545.2491 87.17 543.04 87.17 c +52.24 87.17 l +50.0309 87.17 48.24 88.9609 48.24 91.17 c +48.24 134.65 l +48.24 136.8591 50.0309 138.65 52.24 138.65 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 115.825 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f646973636f6e6e656374656428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 101.085 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f68616c665f636c6f73656428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +48.24 63.206 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.886 Tw + +BT +70.546 63.206 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +117.796 63.206 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722073706563696669657320776869636820636c69656e742068617320646973636f6e6e65637465642f68616c6620636c6f7365642e2054686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.886 Tw + +BT +463.04 63.206 Td +/F3.0 10.5 Tf +<706565725f68616c665f636c6f736564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.886 Tw + +BT +547.04 63.206 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3130> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +78 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 77 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +79 0 obj +[78 0 R /XYZ 0 762.33 null] +endobj +80 0 obj +<< /Length 11453 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.6303 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<66756e6374696f6e2069732063616c6c6564207768656e2074686520636c69656e7420636c6f7365732074686520736f636b> 20.0195 <657420666f722077726974696e672c207768696c6520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6303 Tw + +BT +411.3743 794.676 Td +/F3.0 10.5 Tf +<706565725f646973636f6e6e6563746564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6303 Tw + +BT +500.6243 794.676 Td +/F1.0 10.5 Tf +<2069732063616c6c6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +<7768656e2074686520636c69656e7420697320646973636f6e6e65637465642e20426f74682066756e6374696f6e732063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 739.056 Td +/F2.0 18 Tf +<436c6f736520746865204c697374656e696e6720506f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 713.22 Td +/F3.0 10.5 Tf +<766f696420636c6f73655f6c697374656e5f706f72742829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 687.036 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e20636c6f73657320746865206c697374656e696e6720706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 647.196 Td +/F2.0 18 Tf +<4f70656e206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 631.14 m +543.04 631.14 l +545.2491 631.14 547.04 629.3491 547.04 627.14 c +547.04 583.66 l +547.04 581.4509 545.2491 579.66 543.04 579.66 c +52.24 579.66 l +50.0309 579.66 48.24 581.4509 48.24 583.66 c +48.24 627.14 l +48.24 629.3491 50.0309 631.14 52.24 631.14 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 631.14 m +543.04 631.14 l +545.2491 631.14 547.04 629.3491 547.04 627.14 c +547.04 583.66 l +547.04 581.4509 545.2491 579.66 543.04 579.66 c +52.24 579.66 l +50.0309 579.66 48.24 581.4509 48.24 583.66 c +48.24 627.14 l +48.24 629.3491 50.0309 631.14 52.24 631.14 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 608.315 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e737420636861722a2072656d6f7465486f73746e616d652c20636f6e737420636861722a2072656d6f7465536572766963652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 593.575 Td +/F3.0 11 Tf +<636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3227 Tw + +BT +48.24 555.696 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e206372656174657320616e2049507634206f72204950763620636f6e6e656374696f6e2066726f6d20746865206c6f63616c206164647265737320> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3227 Tw + +BT +410.54 555.696 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d652f6c6f63616c53657276696365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3227 Tw + +BT +547.04 555.696 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 539.916 Td +/F1.0 10.5 Tf +<746f207468652072656d6f7465206164647265737320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +159.498 539.916 Td +/F3.0 10.5 Tf +<72656d6f7465486f73746e616d652f72656d6f746553657276696365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +306.498 539.916 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 512.136 Td +/F1.0 10.5 Tf +<496620> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +58.6875 512.136 Td +/F3.0 10.5 Tf +<6c6f63616c486f73746e616d65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +126.9375 512.136 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +143.3805 512.136 Td +/F3.0 10.5 Tf +<6c6f63616c53657276696365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +206.3805 512.136 Td +/F1.0 10.5 Tf +<20697320> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +219.9045 512.136 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +240.9045 512.136 Td +/F1.0 10.5 Tf +[<2c2069742077696c6c2062652061737369676e6564206175746f6d61746963616c6c79> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9131 Tw + +BT +48.24 484.356 Td +/F1.0 10.5 Tf +[<54686520706172> 20.0195 <616d657465727320666f72207468652072656d6f746520616464726573732063616e6e6f7420626520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9131 Tw + +BT +313.4236 484.356 Td +/F5.0 10.5 Tf +<4e554c4c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9131 Tw + +BT +334.4236 484.356 Td +/F1.0 10.5 Tf +[<2e20546865206c6f63616c206f722072656d6f7465207365727669636520706172> 20.0195 <616d6574657273>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8503 Tw + +BT +48.24 468.576 Td +/F1.0 10.5 Tf +<73686f756c64206265206e756d6265727320696e20737472696e6720666f726d61742c207768696c6520746865206164647265737365732073686f756c64206265206e616d6573206f722049502061646472657373657320696e2049507634> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 452.796 Td +/F1.0 10.5 Tf +<6f72204950763620666f726d61742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.016 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 425.016 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +185.16 425.016 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2061626f7665206d616b> 20.0195 <65732074686520666f6c6c6f77696e672066756e6374696f6e206f62736f6c6574653a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 409.2 m +543.04 409.2 l +545.2491 409.2 547.04 407.4091 547.04 405.2 c +547.04 361.72 l +547.04 359.5109 545.2491 357.72 543.04 357.72 c +52.24 357.72 l +50.0309 357.72 48.24 359.5109 48.24 361.72 c +48.24 405.2 l +48.24 407.4091 50.0309 409.2 52.24 409.2 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 409.2 m +543.04 409.2 l +545.2491 409.2 547.04 407.4091 547.04 405.2 c +547.04 361.72 l +547.04 359.5109 545.2491 357.72 543.04 357.72 c +52.24 357.72 l +50.0309 357.72 48.24 359.5109 48.24 361.72 c +48.24 405.2 l +48.24 407.4091 50.0309 409.2 52.24 409.2 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 386.375 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e73742073747275637420736f636b616464725f696e2026206e65775f72656d6f74655f616464722c20636f6e737420737472756374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 371.635 Td +/F3.0 11 Tf +<736f636b616464725f696e2026206e65775f6c6f63616c5f6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4779 Tw + +BT +48.24 333.756 Td +/F1.0 10.5 Tf +[<4974206973206b> 20.0195 <65707420666f72206261636b7761726420636f6d7061746962696c69747920666f722064657269766564207465737420706f72747320746861742077657265206e6f74206164617074656420746f207468652049507636>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 317.976 Td +/F1.0 10.5 Tf +<737570706f7274696e672066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7521 Tw + +BT +48.24 290.196 Td +/F1.0 10.5 Tf +<41667465722063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7521 Tw + +BT +136.5093 290.196 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7521 Tw + +BT +252.0093 290.196 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2c204162737472> 20.0195 <616374536f636b> 20.0195 <65742063616c6c73206175746f6d61746963616c6c79207468652066756e6374696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5712 Tw + +BT +48.24 274.416 Td +/F3.0 10.5 Tf +<7669727475616c20766f696420636c69656e745f636f6e6e656374696f6e5f6f70656e656428696e7420636c69656e745f696429> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5712 Tw + +BT +322.9535 274.416 Td +/F1.0 10.5 Tf +<20746f20696e666f726d20746865207465737420706f72742061626f75742074686520726573756c742e20546865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5586 Tw + +BT +48.24 258.636 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5586 Tw + +BT +95.49 258.636 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d657465722069732073657420746f20746865206964206f662074686520636c69656e742c206f7220>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5586 Tw + +BT +309.3453 258.636 Td +/F5.0 10.5 Tf +<2d31> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5586 Tw + +BT +319.8453 258.636 Td +/F1.0 10.5 Tf +<2069662074686520636f6e6e656374696f6e20636f756c64206e6f742062652065737461626c697368656420746f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 242.856 Td +/F1.0 10.5 Tf +<7468652072656d6f746520616464726573732e20546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 203.016 Td +/F2.0 18 Tf +<53656e64204d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 186.96 m +543.04 186.96 l +545.2491 186.96 547.04 185.1691 547.04 182.96 c +547.04 139.48 l +547.04 137.2709 545.2491 135.48 543.04 135.48 c +52.24 135.48 l +50.0309 135.48 48.24 137.2709 48.24 139.48 c +48.24 182.96 l +48.24 185.1691 50.0309 186.96 52.24 186.96 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 186.96 m +543.04 186.96 l +545.2491 186.96 547.04 185.1691 547.04 182.96 c +547.04 139.48 l +547.04 137.2709 545.2491 135.48 543.04 135.48 c +52.24 135.48 l +50.0309 135.48 48.24 137.2709 48.24 139.48 c +48.24 182.96 l +48.24 185.1691 50.0309 186.96 52.24 186.96 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 164.135 Td +/F3.0 11 Tf +<766f69642073656e645f6f7574676f696e6728636f6e737420756e7369676e656420636861722a206d6573736167655f6275666665722c20696e74206c656e6774682c20696e7420636c69656e745f6964203d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 149.395 Td +/F3.0 11 Tf +<2d31293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 111.516 Td +/F1.0 10.5 Tf +<5769746820746869732066756e6374696f6e2061206d6573736167652063616e2062652073656e7420746f207468652073706563696669656420636c69656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3131> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +81 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 80 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +82 0 obj +[81 0 R /XYZ 0 763.08 null] +endobj +83 0 obj +[81 0 R /XYZ 0 671.22 null] +endobj +84 0 obj +<< /Limits [(_parameter_accessor_functions) (_the_abstractsocket_api)] +/Names [(_parameter_accessor_functions) 93 0 R (_presumed_knowledge) 21 0 R (_references) 159 0 R (_send_message) 85 0 R (_server_mode) 34 0 R (_server_mode_2) 124 0 R (_setting_test_port_parameters) 76 0 R (_ssl_functionality) 43 0 R (_start_procedure) 30 0 R (_system_requirements) 24 0 R (_terminology) 154 0 R (_test_port_parameter_names) 90 0 R (_the_abstractsocket_api) 74 0 R] +>> +endobj +85 0 obj +[81 0 R /XYZ 0 227.04 null] +endobj +86 0 obj +<< /Length 8865 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 792.006 Td +/F2.0 13 Tf +[<54> 29.7852 <6f20526563656976652061204d657373616765>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 765.446 Td +/F1.0 10.5 Tf +<5768656e2061206d6573736167652069732072656365697665642c2074686520666f6c6c6f77696e672066756e6374696f6e2069732063616c6c6564206175746f6d61746963616c6c793a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 749.63 m +543.04 749.63 l +545.2491 749.63 547.04 747.8391 547.04 745.63 c +547.04 702.15 l +547.04 699.9409 545.2491 698.15 543.04 698.15 c +52.24 698.15 l +50.0309 698.15 48.24 699.9409 48.24 702.15 c +48.24 745.63 l +48.24 747.8391 50.0309 749.63 52.24 749.63 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 749.63 m +543.04 749.63 l +545.2491 749.63 547.04 747.8391 547.04 745.63 c +547.04 702.15 l +547.04 699.9409 545.2491 698.15 543.04 698.15 c +52.24 698.15 l +50.0309 698.15 48.24 699.9409 48.24 702.15 c +48.24 745.63 l +48.24 747.8391 50.0309 749.63 52.24 749.63 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 726.805 Td +/F3.0 11 Tf +<7669727475616c20766f6964206d6573736167655f696e636f6d696e6728636f6e737420756e7369676e656420636861722a206d6573736167655f6275666665722c20696e74206c656e6774682c20696e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 712.065 Td +/F3.0 11 Tf +<636c69656e745f6964203d202d3129> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1243 Tw + +BT +48.24 674.186 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e206d757374206265206f76657272696464656e20696e207468652064657269766564207465737420706f72742e2054> 29.7852 <6f2067656e6572> 20.0195 <61746520616e20696e636f6d696e67205454> 20.0195 <434e33206d6573736167652c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 658.406 Td +/F1.0 10.5 Tf +<746865207465737420706f7274207368616c6c2063616c6c2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +176.76 658.406 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +260.76 658.406 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206f662074686520546974616e204150492077697468696e20746869732066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5936 Tw + +BT +48.24 630.626 Td +/F1.0 10.5 Tf +[<496e206f72646572207468617420746869732066756e6374696f6e20636f756c642062652063616c6c6564206175746f6d61746963616c6c79> 89.8438 <2c207468652064657269766564207465737420706f7274207368616c6c20646566696e65207468657365>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 614.846 Td +/F1.0 10.5 Tf +<66756e6374696f6e733a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 599.03 m +543.04 599.03 l +545.2491 599.03 547.04 597.2391 547.04 595.03 c +547.04 536.81 l +547.04 534.6009 545.2491 532.81 543.04 532.81 c +52.24 532.81 l +50.0309 532.81 48.24 534.6009 48.24 536.81 c +48.24 595.03 l +48.24 597.2391 50.0309 599.03 52.24 599.03 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 599.03 m +543.04 599.03 l +545.2491 599.03 547.04 597.2391 547.04 595.03 c +547.04 536.81 l +547.04 534.6009 545.2491 532.81 543.04 532.81 c +52.24 532.81 l +50.0309 532.81 48.24 534.6009 48.24 536.81 c +48.24 595.03 l +48.24 597.2391 50.0309 599.03 52.24 599.03 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 576.205 Td +/F3.0 11 Tf +<7669727475616c20766f69642048616e646c65725f496e7374616c6c28636f6e73742066645f7365742a20726561645f6664732c20636f6e73742066645f7365742a2077726974655f6664732c20636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 561.465 Td +/F3.0 11 Tf +<66645f7365742a206572726f725f6664732c20646f75626c652063616c6c5f696e74657276616c293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 546.725 Td +/F3.0 11 Tf +<7669727475616c20766f69642048616e646c65725f556e696e7374616c6c28293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 508.846 Td +/F1.0 10.5 Tf +<496e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +61.5855 508.846 Td +/F3.0 10.5 Tf +<48616e646c65725f496e7374616c6c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +140.3355 508.846 Td +/F1.0 10.5 Tf +<2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +161.745 508.846 Td +/F3.0 10.5 Tf +<496e7374616c6c5f48616e646c6572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +240.495 508.846 Td +/F1.0 10.5 Tf +<20546974616e204150492066756e6374696f6e2069732063616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 481.066 Td +/F1.0 10.5 Tf +<416c736f20696e2074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +103.9425 481.066 Td +/F3.0 10.5 Tf +<4576656e745f48616e646c6572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +172.1925 481.066 Td +/F1.0 10.5 Tf +<20546974616e204150492066756e6374696f6e2c207468652066756e6374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 465.25 m +543.04 465.25 l +545.2491 465.25 547.04 463.4591 547.04 461.25 c +547.04 417.77 l +547.04 415.5609 545.2491 413.77 543.04 413.77 c +52.24 413.77 l +50.0309 413.77 48.24 415.5609 48.24 417.77 c +48.24 461.25 l +48.24 463.4591 50.0309 465.25 52.24 465.25 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 465.25 m +543.04 465.25 l +545.2491 465.25 547.04 463.4591 547.04 461.25 c +547.04 417.77 l +547.04 415.5609 545.2491 413.77 543.04 413.77 c +52.24 413.77 l +50.0309 413.77 48.24 415.5609 48.24 417.77 c +48.24 461.25 l +48.24 463.4591 50.0309 465.25 52.24 465.25 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 442.425 Td +/F3.0 11 Tf +<766f69642048616e646c655f4576656e7428636f6e73742066645f736574202a726561645f6664732c20636f6e73742066645f736574205f5f77726974655f6664732c20636f6e73742066645f736574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 427.685 Td +/F3.0 11 Tf +<5f5f6572726f725f6664732c20646f75626c652074696d655f73696e63655f6c6173745f63616c6c29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 389.806 Td +/F1.0 10.5 Tf +<69732063616c6c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 349.966 Td +/F2.0 18 Tf +<436c6f7365206120436c69656e7420436f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 333.91 m +543.04 333.91 l +545.2491 333.91 547.04 332.1191 547.04 329.91 c +547.04 286.43 l +547.04 284.2209 545.2491 282.43 543.04 282.43 c +52.24 282.43 l +50.0309 282.43 48.24 284.2209 48.24 286.43 c +48.24 329.91 l +48.24 332.1191 50.0309 333.91 52.24 333.91 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 333.91 m +543.04 333.91 l +545.2491 333.91 547.04 332.1191 547.04 329.91 c +547.04 286.43 l +547.04 284.2209 545.2491 282.43 543.04 282.43 c +52.24 282.43 l +50.0309 282.43 48.24 284.2209 48.24 286.43 c +48.24 329.91 l +48.24 332.1191 50.0309 333.91 52.24 333.91 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 311.085 Td +/F3.0 11 Tf +<7669727475616c20766f69642072656d6f76655f636c69656e7428696e7420636c69656e745f6964293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 296.345 Td +/F3.0 11 Tf +<7669727475616c20766f69642072656d6f76655f616c6c5f636c69656e747328293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4062 Tw + +BT +48.24 258.466 Td +/F1.0 10.5 Tf +<54686520666972737420636c6f7365732074686520636f6e6e656374696f6e20666f72206120676976656e20636c69656e7420746865207365636f6e642066756e6374696f6e20636c6f7365732074686520636f6e6e656374696f6e206f6620616c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 242.686 Td +/F1.0 10.5 Tf +<636c69656e74732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.846 Td +/F2.0 18 Tf +[<54> 29.7852 <65737420506f727420506172> 20.0195 <616d65746572204e616d6573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7461 Tw + +BT +48.24 174.826 Td +/F1.0 10.5 Tf +[<5468652064656661756c74204162737472> 20.0195 <616374536f636b> 20.0195 <6574207465737420706f727420706172> 20.0195 <616d65746572206e616d65732063616e206265207265646566696e656420696e207468652064657269766564207465737420706f72742062> 20.0195 <79>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 159.046 Td +/F1.0 10.5 Tf +<6f766572726964696e672074686520617070726f7072696174652066756e6374696f6e2062656c6f773a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3132> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +87 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 86 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +88 0 obj +[87 0 R /XYZ 0 841.89 null] +endobj +89 0 obj +[87 0 R /XYZ 0 373.99 null] +endobj +90 0 obj +[87 0 R /XYZ 0 226.87 null] +endobj +91 0 obj +<< /Length 9880 +>> +stream +q +q +/DeviceRGB cs +0.9608 0.9608 0.9608 scn +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 493.09 l +547.04 490.8809 545.2491 489.09 543.04 489.09 c +52.24 489.09 l +50.0309 489.09 48.24 490.8809 48.24 493.09 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +f +/DeviceRGB CS +0.8 0.8 0.8 SCN +0.75 w +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 493.09 l +547.04 490.8809 545.2491 489.09 543.04 489.09 c +52.24 489.09 l +50.0309 489.09 48.24 490.8809 48.24 493.09 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +S +Q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +59.24 783.065 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 768.325 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 753.585 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 738.845 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 724.105 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2061695f66616d696c795f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 709.365 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207573655f636f6e6e656374696f6e5f415350735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 694.625 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2068616c745f6f6e5f636f6e6e656374696f6e5f72657365745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 679.885 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a20636c69656e745f5443505f7265636f6e6e6563745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 665.145 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a205443505f7265636f6e6e6563745f617474656d7074735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 650.405 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a205443505f7265636f6e6e6563745f64656c61795f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 635.665 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207365727665725f6d6f64655f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 620.925 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a20736f636b65745f646562756767696e675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 606.185 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206e61676c696e675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 591.445 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207573655f6e6f6e5f626c6f636b696e675f736f636b65745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 576.705 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a207365727665725f6261636b6c6f675f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 561.965 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f53534c763228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 547.225 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f53534c763328293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 532.485 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c53763128293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 517.745 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c5376315f3128293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 503.005 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2073736c5f64697361626c655f544c5376315f3228293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 453.066 Td +/F2.0 18 Tf +[<506172> 20.0195 <616d657465722041> 20.0195 <63636573736f722046756e6374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 425.046 Td +/F1.0 10.5 Tf +[<54686520666f6c6c6f77696e672066756e6374696f6e732063616e2062652075736520746f206765742f73657420746865204162737472> 20.0195 <616374536f636b> 20.0195 <657420706172> 20.0195 <616d65746572733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 409.23 m +543.04 409.23 l +545.2491 409.23 547.04 407.4391 547.04 405.23 c +547.04 66.95 l +547.04 64.7409 545.2491 62.95 543.04 62.95 c +52.24 62.95 l +50.0309 62.95 48.24 64.7409 48.24 66.95 c +48.24 405.23 l +48.24 407.4391 50.0309 409.23 52.24 409.23 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 409.23 m +543.04 409.23 l +545.2491 409.23 547.04 407.4391 547.04 405.23 c +547.04 66.95 l +547.04 64.7409 545.2491 62.95 543.04 62.95 c +52.24 62.95 l +50.0309 62.95 48.24 64.7409 48.24 66.95 c +48.24 405.23 l +48.24 407.4391 50.0309 409.23 52.24 409.23 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 386.405 Td +/F3.0 11 Tf +<626f6f6c206765745f6e61676c696e67282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 371.665 Td +/F3.0 11 Tf +<626f6f6c206765745f7573655f6e6f6e5f626c6f636b696e675f736f636b6574282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 356.925 Td +/F3.0 11 Tf +<626f6f6c206765745f7365727665725f6d6f6465282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 342.185 Td +/F3.0 11 Tf +<626f6f6c206765745f736f636b65745f646562756767696e67282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 327.445 Td +/F3.0 11 Tf +<626f6f6c206765745f68616c745f6f6e5f636f6e6e656374696f6e5f7265736574282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 312.705 Td +/F3.0 11 Tf +<626f6f6c206765745f7573655f636f6e6e656374696f6e5f41535073282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 297.965 Td +/F3.0 11 Tf +<626f6f6c206765745f68616e646c655f68616c665f636c6f7365282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 283.225 Td +/F3.0 11 Tf +<696e74207365745f6e6f6e5f626c6f636b5f6d6f646528696e742066642c20626f6f6c20656e61626c655f6e6f6e626c6f636b293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 268.485 Td +/F3.0 11 Tf +<626f6f6c20696e6372656173655f73656e645f62756666657228696e742066642c20696e7420266f6c645f73697a652c20696e7426206e65775f73697a65293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 253.745 Td +/F3.0 11 Tf +<636f6e737420636861722a206765745f6c6f63616c5f686f73745f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 239.005 Td +/F3.0 11 Tf +<636f6e737420756e7369676e656420696e74206765745f6c6f63616c5f706f72745f6e756d6265722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 224.265 Td +/F3.0 11 Tf +<636f6e737420636861722a206765745f72656d6f74655f686f73745f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 209.525 Td +/F3.0 11 Tf +<636f6e737420756e7369676e656420696e74206765745f72656d6f74655f706f72745f6e756d6265722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 194.785 Td +/F3.0 11 Tf +<636f6e737420696e7426206765745f61695f66616d696c79282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 180.045 Td +/F3.0 11 Tf +<766f6964207365745f61695f66616d696c7928696e7420706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 165.305 Td +/F3.0 11 Tf +<626f6f6c206765745f7474636e5f6275666665725f75736572636f6e74726f6c282920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 150.565 Td +/F3.0 11 Tf +<766f6964207365745f6e61676c696e6728626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 135.825 Td +/F3.0 11 Tf +<766f6964207365745f7365727665725f6d6f646528626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 121.085 Td +/F3.0 11 Tf +<766f6964207365745f68616e646c655f68616c665f636c6f736528626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 106.345 Td +/F3.0 11 Tf +<766f6964207365745f736f636b65745f646562756767696e6728626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 91.605 Td +/F3.0 11 Tf +<766f6964207365745f68616c745f6f6e5f636f6e6e656374696f6e5f726573657428626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 76.865 Td +/F3.0 11 Tf +<766f6964207365745f7474636e5f6275666665725f75736572636f6e74726f6c28626f6f6c20706172616d657465725f76616c756529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3133> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +92 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 91 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F3.0 27 0 R +/F2.0 19 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +93 0 obj +[92 0 R /XYZ 0 477.09 null] +endobj +94 0 obj +<< /Length 12747 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<4c6f6767696e672046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<54686520666f6c6c6f77696e672066756e6374696f6e73206c6f67206120676976656e206d65737361676520696e20646966666572656e74207761> 20.0195 <79733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 742.83 m +543.04 742.83 l +545.2491 742.83 547.04 741.0391 547.04 738.83 c +547.04 665.87 l +547.04 663.6609 545.2491 661.87 543.04 661.87 c +52.24 661.87 l +50.0309 661.87 48.24 663.6609 48.24 665.87 c +48.24 738.83 l +48.24 741.0391 50.0309 742.83 52.24 742.83 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 742.83 m +543.04 742.83 l +545.2491 742.83 547.04 741.0391 547.04 738.83 c +547.04 665.87 l +547.04 663.6609 545.2491 661.87 543.04 661.87 c +52.24 661.87 l +50.0309 661.87 48.24 663.6609 48.24 665.87 c +48.24 738.83 l +48.24 741.0391 50.0309 742.83 52.24 742.83 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 720.005 Td +/F3.0 11 Tf +<766f6964206c6f675f646562756728636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +235.24 720.005 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 720.005 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 705.265 Td +/F3.0 11 Tf +<766f6964206c6f675f7761726e696e6728636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 705.265 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +257.24 705.265 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 690.525 Td +/F3.0 11 Tf +<766f6964206c6f675f6572726f7228636f6e73742063686172202a666d742c20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +235.24 690.525 Td +/F6.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +246.24 690.525 Td +/F3.0 11 Tf +<2920636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 675.785 Td +/F3.0 11 Tf +<766f6964206c6f675f68657828636f6e73742063686172205f5f70726f6d70742c20636f6e737420756e7369676e65642063686172205f5f6d73672c2073697a655f74206c656e6774682920636f6e73743b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 625.846 Td +/F2.0 18 Tf +<4572726f72205265706f7274696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 609.79 m +543.04 609.79 l +545.2491 609.79 547.04 607.9991 547.04 605.79 c +547.04 562.31 l +547.04 560.1009 545.2491 558.31 543.04 558.31 c +52.24 558.31 l +50.0309 558.31 48.24 560.1009 48.24 562.31 c +48.24 605.79 l +48.24 607.9991 50.0309 609.79 52.24 609.79 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 609.79 m +543.04 609.79 l +545.2491 609.79 547.04 607.9991 547.04 605.79 c +547.04 562.31 l +547.04 560.1009 545.2491 558.31 543.04 558.31 c +52.24 558.31 l +50.0309 558.31 48.24 560.1009 48.24 562.31 c +48.24 605.79 l +48.24 607.9991 50.0309 609.79 52.24 609.79 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 586.965 Td +/F3.0 11 Tf +<7669727475616c20766f6964207265706f72745f6572726f7228696e7420636c69656e745f69642c20696e74206d73675f6c656e6774682c20696e742073656e745f6c656e6774682c20636f6e7374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 572.225 Td +/F3.0 11 Tf +<756e7369676e656420636861722a206d73672c20636f6e737420636861722a206572726f725f74657874293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7049 Tw + +BT +48.24 534.346 Td +/F1.0 10.5 Tf +[<546869732066756e6374696f6e2069732063616c6c6564206175746f6d61746963616c6c7920696620616e206572726f72206f636375727320647572696e672073656e64206f706572> 20.0195 <6174696f6e20696e20>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.7049 Tw + +BT +470.915 534.346 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7049 Tw + +BT +544.415 534.346 Td +/F1.0 10.5 Tf +<2e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7792 Tw + +BT +48.24 518.566 Td +/F1.0 10.5 Tf +<546869732066756e6374696f6e2063616e206265206f76657272696464656e20696e207468652064657269766564207465737420706f727420746f206f76657272696465207468652064656661756c74206572726f72207265706f7274696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +48.24 502.786 Td +/F1.0 10.5 Tf +<6265686176696f72206f6620> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4386 Tw + +BT +109.5341 502.786 Td +/F3.0 10.5 Tf +<4162737472616374536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +183.0341 502.786 Td +/F1.0 10.5 Tf +<2c2077686963682069732063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.4386 Tw + +BT +289.723 502.786 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4386 Tw + +BT +336.973 502.786 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2e20546869732066756e6374696f6e2063616e20616c736f2062652063616c6c6564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 487.006 Td +/F1.0 10.5 Tf +[<62> 20.0195 <79207468652064657269766564207465737420706f727420746f20696e69746961746520746865206572726f72207265706f7274696e67206d656368616e69736d2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 437.554 Td +/F2.0 27 Tf +<5469707320616e6420547269636b73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.574 Td +/F2.0 22 Tf +<5573616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 361.386 Td +/F1.0 10.5 Tf +<496e206f7264657220746f206275696c642061207465737420706f7274206261736564206f6e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +233.9745 361.386 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +312.7245 361.386 Td +/F1.0 10.5 Tf +<2074686520666f6c6c6f77696e67207374657073206d75737420626520636f6d706c657465643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 333.606 Td +/F1.0 10.5 Tf +<312e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 333.606 Td +/F1.0 10.5 Tf +<4465726976696e6720746865207465737420706f727420636c617373202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +224.202 333.606 Td +/F1.0 10.5 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +360.7148 333.606 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 311.826 Td +/F1.0 10.5 Tf +<322e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 311.826 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865206c6f676765722066756e6374696f6e73206966206e6565646564202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +336.3315 311.826 Td +/F1.0 10.5 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +537.816 311.826 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 290.046 Td +/F1.0 10.5 Tf +<332e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 290.046 Td +/F1.0 10.5 Tf +[<46756e6374696f6e207472> 20.0195 <616e736c6174696f6e73202873656520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +198.2668 290.046 Td +/F1.0 10.5 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +307.9811 290.046 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 268.266 Td +/F1.0 10.5 Tf +<342e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7629 Tw + +BT +66.24 268.266 Td +/F1.0 10.5 Tf +<496e7374616c6c696e67207468652068616e646c657273202873656520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +1.7629 Tw + +BT +211.3034 268.266 Td +/F1.0 10.5 Tf +<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f722057686963682074686520506f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +66.24 252.486 Td +/F1.0 10.5 Tf +[<57> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +94.3821 252.486 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +52.6765 230.706 Td +/F1.0 10.5 Tf +<352e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 230.706 Td +/F1.0 10.5 Tf +<46696e616c207374657073202873656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +144.6855 230.706 Td +/F1.0 10.5 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +199.0545 230.706 Td +/F1.0 10.5 Tf +<29> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 202.926 Td +/F1.0 10.5 Tf +<5468657365207374657073206172652064697363757373656420696e2064657461696c20696e2074686520666f6c6c6f77696e672073756273656374696f6e732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 163.086 Td +/F2.0 18 Tf +[<4465726976696e67207468652054> 29.7852 <65737420506f727420436c617373>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0264 Tw + +BT +48.24 135.066 Td +/F1.0 10.5 Tf +<496e686572697420796f7572207465737420706f727420636c6173732062657369646520746865207465737420706f7274206261736520616c736f2066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.0264 Tw + +BT +388.532 135.066 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0264 Tw + +BT +467.282 135.066 Td +/F1.0 10.5 Tf +<20636c6173732c20696620796f7520646f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7049 Tw + +BT +48.24 119.286 Td +/F1.0 10.5 Tf +<6e6f742077616e7420746f207573652053534c20617420616c6c2e20496620796f7520706c616e20746f207573652053534c2c20696e686572697420746865207465737420706f72742066726f6d2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7049 Tw + +BT +450.6472 119.286 Td +/F3.0 10.5 Tf +<53534c5f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7049 Tw + +BT +503.1472 119.286 Td +/F1.0 10.5 Tf +<20636c6173732e20496e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9214 Tw + +BT +48.24 103.506 Td +/F1.0 10.5 Tf +[<6361736520796f75722053534c20696d706c656d656e746174696f6e206973206a757374206f7074696f6e616c2c20796f75206861766520746f206d616b> 20.0195 <652073757265207468617420697420697320706f737369626c6520746f2064697361626c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5492 Tw + +BT +48.24 87.726 Td +/F1.0 10.5 Tf +<53534c2072656c6174656420636f646520706172747320617420636f6d70696c652074696d652e20496e207468652041532069662074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.5492 Tw + +BT +339.3578 87.726 Td +/F3.0 10.5 Tf +<41535f5553455f53534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5492 Tw + +BT +391.8578 87.726 Td +/F1.0 10.5 Tf +<206d6163726f20697320646566696e65642c207468656e2053534c206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 71.946 Td +/F1.0 10.5 Tf +<656e61626c65642c206f74686572776973652064697361626c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3134> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +95 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 94 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +/Annots [101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R] +>> +endobj +96 0 obj +[95 0 R /XYZ 0 841.89 null] +endobj +97 0 obj +<< /Type /Font +/BaseFont /781c87+mplus-1p-regular +/Subtype /TrueType +/FontDescriptor 375 0 R +/FirstChar 32 +/LastChar 255 +/Widths 377 0 R +/ToUnicode 376 0 R +>> +endobj +98 0 obj +[95 0 R /XYZ 0 649.87 null] +endobj +99 0 obj +[95 0 R /XYZ 0 471.19 null] +endobj +100 0 obj +[95 0 R /XYZ 0 418.87 null] +endobj +101 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [224.202 330.54 360.7148 344.82] +/Type /Annot +>> +endobj +102 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [336.3315 308.76 537.816 323.04] +/Type /Annot +>> +endobj +103 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [198.2668 286.98 307.9811 301.26] +/Type /Annot +>> +endobj +104 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [211.3034 265.2 547.04 279.48] +/Type /Annot +>> +endobj +105 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [66.24 249.42 94.3821 263.7] +/Type /Annot +>> +endobj +106 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [144.6855 227.64 199.0545 241.92] +/Type /Annot +>> +endobj +107 0 obj +[95 0 R /XYZ 0 187.11 null] +endobj +108 0 obj +<< /Length 19936 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 778.86 m +543.04 778.86 l +545.2491 778.86 547.04 777.0691 547.04 774.86 c +547.04 687.16 l +547.04 684.9509 545.2491 683.16 543.04 683.16 c +52.24 683.16 l +50.0309 683.16 48.24 684.9509 48.24 687.16 c +48.24 774.86 l +48.24 777.0691 50.0309 778.86 52.24 778.86 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 778.86 m +543.04 778.86 l +545.2491 778.86 547.04 777.0691 547.04 774.86 c +547.04 687.16 l +547.04 684.9509 545.2491 683.16 543.04 683.16 c +52.24 683.16 l +50.0309 683.16 48.24 684.9509 48.24 687.16 c +48.24 774.86 l +48.24 777.0691 50.0309 778.86 52.24 778.86 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 756.035 Td +/F3.0 11 Tf +<2369666465662041535f5553455f53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 741.295 Td +/F3.0 11 Tf +<636c617373206d79706f72745f5f5054203a207075626c69632053534c5f536f636b65742c207075626c6963206d79706f72745f5f50545f42415345207b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 726.555 Td +/F3.0 11 Tf +<23656c7365> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 711.815 Td +/F3.0 11 Tf +<636c617373206d79706f72745f5f5054203a207075626c69632041627374726163745f536f636b65742c207075626c6963206d79706f72745f5f50545f42415345207b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 697.075 Td +/F3.0 11 Tf +<23656e646966> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 647.136 Td +/F2.0 18 Tf +<496d706c656d656e746174696f6e206f6620746865204c6f676765722046756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +48.24 619.116 Td +/F1.0 10.5 Tf +<496d706c656d656e742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +128.6416 619.116 Td +/F3.0 10.5 Tf +<6c6f675f6465627567> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +175.8916 619.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +183.1959 619.116 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +230.4459 619.116 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +237.7502 619.116 Td +/F3.0 10.5 Tf +<6c6f675f7761726e696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +295.5002 619.116 Td +/F1.0 10.5 Tf +<20616e6420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.9598 Tw + +BT +323.9688 619.116 Td +/F3.0 10.5 Tf +<6c6f675f686578> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.9598 Tw + +BT +360.7188 619.116 Td +/F1.0 10.5 Tf +<207669727475616c2066756e6374696f6e7320696620796f75206e656564206f74686572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 603.336 Td +/F1.0 10.5 Tf +<696d706c656d656e746174696f6e207468616e207468652064656661756c742e2028746865792063616e20626520656d70747920696d706c656d656e746174696f6e73206966206c6f6767696e67206973206e6f74206e656564656429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 567.24 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 567.24 399.04 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 546.96 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 546.96 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 526.68 99.76 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +148.0 526.68 399.04 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 506.4 99.76 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +148.0 506.4 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 486.12 99.76 20.28 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +148.0 486.12 399.04 20.28 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 587.52 m +148.0 587.52 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 567.24 m +148.0 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 587.77 m +48.24 566.615 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.77 m +148.0 566.615 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 573.306 Td +/F2.0 10.5 Tf +<46756e6374696f6e> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.52 m +547.04 587.52 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +148.0 567.24 m +547.04 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 587.77 m +148.0 566.615 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 587.77 m +547.04 566.615 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 573.306 Td +/F2.0 10.5 Tf +<4465736372697074696f6e> Tj +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 567.24 m +148.0 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 546.96 m +148.0 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 567.865 m +48.24 546.71 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 567.865 m +148.0 546.71 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 555.21 Td +/F3.0 10.5 Tf +<6c6f675f6465627567> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +148.0 567.24 m +547.04 567.24 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 546.96 m +547.04 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 567.865 m +148.0 546.71 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 567.865 m +547.04 546.71 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 553.026 Td +/F1.0 10.5 Tf +<646f6573207468652064656275672d6c6f6767696e67> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 546.96 m +148.0 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.68 m +148.0 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 547.21 m +48.24 526.43 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 547.21 m +148.0 526.43 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 534.93 Td +/F3.0 10.5 Tf +<6c6f675f686578> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 546.96 m +547.04 546.96 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.68 m +547.04 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 547.21 m +148.0 526.43 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 547.21 m +547.04 526.43 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 532.746 Td +/F1.0 10.5 Tf +<646f657320746865206c6f6767696e67206f6620746865206d65737361676520636f6e74656e7420696e2068657820666f726d6174> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.68 m +148.0 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.4 m +148.0 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 526.93 m +48.24 506.15 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.93 m +148.0 506.15 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 514.65 Td +/F3.0 10.5 Tf +<6c6f675f7761726e696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.68 m +547.04 526.68 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.4 m +547.04 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 526.93 m +148.0 506.15 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 526.93 m +547.04 506.15 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 512.466 Td +/F1.0 10.5 Tf +<646f657320746865206c6f6767696e67206f66207761726e696e67206d65737361676573> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.4 m +148.0 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 486.12 m +148.0 486.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 506.65 m +48.24 485.87 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.65 m +148.0 485.87 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 494.37 Td +/F3.0 10.5 Tf +<6c6f675f6572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.4 m +547.04 506.4 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 486.12 m +547.04 486.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +148.0 506.65 m +148.0 485.87 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 506.65 m +547.04 485.87 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +151.0 492.186 Td +/F1.0 10.5 Tf +[<697320657870656374696e6720746865207465737420706f727420746f2073746f7020776974682061205454> 20.0195 <434e5f455252> 20.0195 <4f52>] TJ +ET + +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.4445 Tw + +BT +48.24 462.156 Td +/F1.0 10.5 Tf +[<59> 69.8242 <6f752063616e2075736520746865206c6f676765722066756e6374696f6e7320696d706c656d656e74656420696e207468652041532e20496e2074686973206361736520796f75206861766520746f2063616c6c20746865204153>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1842 Tw + +BT +48.24 446.376 Td +/F1.0 10.5 Tf +[<636f6e7374727563746f72207769746820796f7572207465737420706f7274207479706520616e64206e616d652e20496e2074686973207761> 20.0195 <79207468652041532077696c6c206c6f67206d6573736167657320616374696e67206c696b> 20.0195 <6520796f7572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 430.596 Td +/F1.0 10.5 Tf +<7465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 390.756 Td +/F2.0 18 Tf +[<46756e6374696f6e205472> 20.0195 <616e736c6174696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4647 Tw + +BT +48.24 362.736 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e736c6174652074686520706f7274d5732066756e6374696f6e7320746f2074686520736f636b> 20.0195 <6574d5732066756e6374696f6e732e2042> 20.0195 <79207472> 20.0195 <616e736c6174696e67207765206d65616e20612066756e6374696f6e2063616c6c2077697468>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 346.956 Td +/F1.0 10.5 Tf +[<756e6368616e67656420706172> 20.0195 <616d6574657273206c696b> 20.0195 <6520746869733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 331.14 m +543.04 331.14 l +545.2491 331.14 547.04 329.3491 547.04 327.14 c +547.04 254.18 l +547.04 251.9709 545.2491 250.18 543.04 250.18 c +52.24 250.18 l +50.0309 250.18 48.24 251.9709 48.24 254.18 c +48.24 327.14 l +48.24 329.3491 50.0309 331.14 52.24 331.14 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 331.14 m +543.04 331.14 l +545.2491 331.14 547.04 329.3491 547.04 327.14 c +547.04 254.18 l +547.04 251.9709 545.2491 250.18 543.04 250.18 c +52.24 250.18 l +50.0309 250.18 48.24 251.9709 48.24 254.18 c +48.24 327.14 l +48.24 329.3491 50.0309 331.14 52.24 331.14 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 308.315 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a7365745f706172616d6574657228636f6e73742063686172202a706172616d657465725f6e616d652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 293.575 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 278.835 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 264.095 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 226.216 Td +/F1.0 10.5 Tf +[<546865206c697374206f662066756e6374696f6e7320746f206265207472> 20.0195 <616e736c617465643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 190.12 249.4 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 190.12 249.4 20.28 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 172.675 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 172.675 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 155.23 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +297.64 155.23 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 137.785 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 137.785 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +48.24 120.34 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.9765 0.9765 0.9765 scn +297.64 120.34 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +48.24 102.895 249.4 17.445 re +f +0.0 0.0 0.0 scn +1.0 1.0 1.0 scn +297.64 102.895 249.4 17.445 re +f +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 210.4 m +297.64 210.4 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 190.12 m +297.64 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 210.65 m +48.24 189.495 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.65 m +297.64 189.495 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +51.24 196.186 Td +/F2.0 10.5 Tf +<506f72742066756e6374696f6e733a> Tj +ET + +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.4 m +547.04 210.4 l +S +[] 0 d +1.25 w +0.8667 0.8667 0.8667 SCN +297.64 190.12 m +547.04 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 210.65 m +297.64 189.495 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 210.65 m +547.04 189.495 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn + +BT +300.64 196.186 Td +/F2.0 10.5 Tf +[<536f636b> 20.0195 <65742066756e6374696f6e733a>] TJ +ET + +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +48.24 190.12 m +297.64 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.675 m +297.64 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 190.745 m +48.24 172.425 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 190.745 m +297.64 172.425 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 178.09 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +1.25 w +0.8667 0.8667 0.8667 SCN +297.64 190.12 m +547.04 190.12 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.675 m +547.04 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 190.745 m +297.64 172.425 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 190.745 m +547.04 172.425 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 178.09 Td +/F3.0 10.5 Tf +<706172616d657465725f736574> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.675 m +297.64 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.23 m +297.64 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 172.925 m +48.24 154.98 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.925 m +297.64 154.98 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 160.645 Td +/F3.0 10.5 Tf +<48616e646c655f46645f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.675 m +547.04 172.675 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.23 m +547.04 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 172.925 m +297.64 154.98 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 172.925 m +547.04 154.98 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 160.645 Td +/F3.0 10.5 Tf +<48616e646c655f536f636b65745f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.23 m +297.64 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 137.785 m +297.64 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 155.48 m +48.24 137.535 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.48 m +297.64 137.535 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 143.2 Td +/F3.0 10.5 Tf +<48616e646c655f54696d656f7574> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.23 m +547.04 155.23 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 137.785 m +547.04 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 155.48 m +297.64 137.535 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 155.48 m +547.04 137.535 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 143.2 Td +/F3.0 10.5 Tf +<48616e646c655f54696d656f75745f4576656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 137.785 m +297.64 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.34 m +297.64 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 138.035 m +48.24 120.09 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 138.035 m +297.64 120.09 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 125.755 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 137.785 m +547.04 137.785 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.34 m +547.04 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 138.035 m +297.64 120.09 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 138.035 m +547.04 120.09 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 125.755 Td +/F3.0 10.5 Tf +<6d61705f75736572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.34 m +297.64 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 102.895 m +297.64 102.895 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +48.24 120.59 m +48.24 102.645 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.59 m +297.64 102.645 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +51.24 108.31 Td +/F3.0 10.5 Tf +<757365725f756e6d6170> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.34 m +547.04 120.34 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 102.895 m +547.04 102.895 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +297.64 120.59 m +297.64 102.645 l +S +[] 0 d +0.5 w +0.8667 0.8667 0.8667 SCN +547.04 120.59 m +547.04 102.645 l +S +[] 0 d +1 w +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +300.64 108.31 Td +/F3.0 10.5 Tf +<756e6d61705f75736572> Tj +ET + +0.0 0.0 0.0 SCN +0.2 0.2 0.2 scn +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +48.24 78.931 Td +/F1.0 10.5 Tf +<496620796f75206d69676874206e656564206f746865722066756e6374696f6e7320616c736f20746f20626520706572666f726d656420647572696e6720> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +367.7224 78.931 Td +/F3.0 10.5 Tf +<6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +383.4724 78.931 Td +/F1.0 10.5 Tf +<2c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +389.3648 78.931 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +415.6148 78.931 Td +/F1.0 10.5 Tf +<206f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5478 Tw + +BT +433.1534 78.931 Td +/F3.0 10.5 Tf +<7365745f706172616d65746572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5478 Tw + +BT +501.4034 78.931 Td +/F1.0 10.5 Tf +<2c20796f752063616e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 63.151 Td +/F1.0 10.5 Tf +[<616464207468656d2072696768742061667465722074686520736f636b> 20.0195 <6574d5732066756e6374696f6e2063616c6c732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3135> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +109 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 108 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +110 0 obj +[109 0 R /XYZ 0 671.16 null] +endobj +111 0 obj +[109 0 R /XYZ 0 414.78 null] +endobj +112 0 obj +<< /Length 9550 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 778.11 m +543.04 778.11 l +545.2491 778.11 547.04 776.3191 547.04 774.11 c +547.04 597.97 l +547.04 595.7609 545.2491 593.97 543.04 593.97 c +52.24 593.97 l +50.0309 593.97 48.24 595.7609 48.24 597.97 c +48.24 774.11 l +48.24 776.3191 50.0309 778.11 52.24 778.11 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 778.11 m +543.04 778.11 l +545.2491 778.11 547.04 776.3191 547.04 774.11 c +547.04 597.97 l +547.04 595.7609 545.2491 593.97 543.04 593.97 c +52.24 593.97 l +50.0309 593.97 48.24 595.7609 48.24 597.97 c +48.24 774.11 l +48.24 776.3191 50.0309 778.11 52.24 778.11 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 755.285 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a7365745f706172616d6574657228636f6e73742063686172202a706172616d657465725f6e616d652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 740.545 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 725.805 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 711.065 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 696.325 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 681.585 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 666.845 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 652.105 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 637.365 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 622.625 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 607.885 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +48.24 570.006 Td +/F1.0 10.5 Tf +[<546865207472> 20.0195 <616e736c6174696f6e206f662074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6989 Tw + +BT +165.3904 570.006 Td +/F3.0 10.5 Tf +<6f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +233.6404 570.006 Td +/F1.0 10.5 Tf +<20746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.6989 Tw + +BT +252.2317 570.006 Td +/F3.0 10.5 Tf +<73656e645f6f7574676f696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6989 Tw + +BT +320.4817 570.006 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e206e6565647320736f6d6520706172> 20.0195 <616d6574657220666f726d617474696e67>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +7.4527 Tw + +BT +48.24 554.226 Td +/F1.0 10.5 Tf +<73696e63652074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +7.4527 Tw + +BT +110.1959 554.226 Td +/F3.0 10.5 Tf +<6f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +7.4527 Tw + +BT +178.4459 554.226 Td +/F1.0 10.5 Tf +[<2068617320706172> 20.0195 <616d657465727320696e686572697465642066726f6d20796f7572205454> 20.0195 <434e2d3320737472756374757265732c207768696c65>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +48.24 538.446 Td +/F3.0 10.5 Tf +<41627374726163745f536f636b6574> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +126.99 538.446 Td +/F6.0 10.5 Tf + Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +130.014 538.446 Td +/F3.0 10.5 Tf +<7320606f7574676f696e675f73656e64> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.1356 Tw + +BT +218.1496 538.446 Td +/F1.0 10.5 Tf +[<2068617320706172> 20.0195 <616d657465727320617320>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.1356 Tw + +BT +330.9977 538.446 Td +/F3.0 10.5 Tf +<28636861722a206d6573736167652c20696e74206d6573736167654c656e6774682c20696e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 522.666 Td +/F3.0 10.5 Tf +<636c69656e745f696429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +100.74 522.666 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.7831 Tw + +BT +48.24 494.886 Td +/F1.0 10.5 Tf +<5468652073616d65206170706c69657320666f722074686520696e636f6d696e672066756e6374696f6e2063616c6c7320776865726520796f75206861766520746f20777269746520796f7572206f776e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 479.106 Td +/F3.0 10.5 Tf +<6d6573736167655f696e636f6d696e67> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +132.24 479.106 Td +/F1.0 10.5 Tf +<20746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +147.4335 479.106 Td +/F3.0 10.5 Tf +<696e636f6d696e675f6d657373616765> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +231.4335 479.106 Td +/F1.0 10.5 Tf +[<207472> 20.0195 <616e736c6174696f6e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 451.326 Td +/F1.0 10.5 Tf +<4578616d706c653a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 435.51 m +543.04 435.51 l +545.2491 435.51 547.04 433.7191 547.04 431.51 c +547.04 270.11 l +547.04 267.9009 545.2491 266.11 543.04 266.11 c +52.24 266.11 l +50.0309 266.11 48.24 267.9009 48.24 270.11 c +48.24 431.51 l +48.24 433.7191 50.0309 435.51 52.24 435.51 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 435.51 m +543.04 435.51 l +545.2491 435.51 547.04 433.7191 547.04 431.51 c +547.04 270.11 l +547.04 267.9009 545.2491 266.11 543.04 266.11 c +52.24 266.11 l +50.0309 266.11 48.24 267.9009 48.24 270.11 c +48.24 431.51 l +48.24 433.7191 50.0309 435.51 52.24 435.51 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 412.685 Td +/F3.0 11 Tf +<766f6964206d79706f72745f5f50543a3a6f7574676f696e675f73656e6428636f6e7374205454434e335f5f537472756374757265262073656e645f70617229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 397.945 Td +/F3.0 11 Tf +<7b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 383.205 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 368.465 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 353.725 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 338.985 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 324.245 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 309.505 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 294.765 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 280.025 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 230.086 Td +/F2.0 18 Tf +<46756e6374696f6e7320666f72204d616e6970756c6174696e672074686520536574206f66204576656e747320666f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 205.606 Td +/F2.0 18 Tf +[<57686963682074686520506f72742057> 49.8047 <61697473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 177.586 Td +/F1.0 10.5 Tf +[<41> 20.0195 <64642074686520666f6c6c6f77696e6720287669727475616c29206d656d6265722066756e6374696f6e7320746f20796f757220706f72742028636c61737320646566696e6974696f6e2920756e6368616e6765643a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3136> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +113 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 112 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +114 0 obj +[113 0 R /XYZ 0 254.11 null] +endobj +115 0 obj +<< /Limits [(_the_test_port) (warning_messages_in_case_SSL_connections_are_used)] +/Names [(_the_test_port) 52 0 R (_tips_and_tricks) 99 0 R (_to_receive_a_message) 88 0 R (_usage) 100 0 R (_using_ssl_on_top_of_a_tcp_connection) 121 0 R (_warning_messages) 145 0 R (_warning_messages_in_case_tcp_connections_are_used) 146 0 R (abstract-socket-test-port-parameters-in-the-test-port-configuration-file-if-the-transport-channel-is-tcp-ip) 66 0 R (deriving_the_test_port_class) 107 0 R (final_steps) 118 0 R (function_translations) 111 0 R (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) 114 0 R (implementation_of_the_logger_functions) 110 0 R (map-unmap-the-test-port) 75 0 R (sending-receiving-messages) 36 0 R (using-ttcn-buffer-in-test-ports) 119 0 R (warning_messages_in_case_SSL_connections_are_used) 151 0 R] +>> +endobj +116 0 obj +<< /Length 12325 +>> +stream +q +q +/DeviceRGB cs +0.9608 0.9608 0.9608 scn +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 640.49 l +547.04 638.2809 545.2491 636.49 543.04 636.49 c +52.24 636.49 l +50.0309 636.49 48.24 638.2809 48.24 640.49 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +f +/DeviceRGB CS +0.8 0.8 0.8 SCN +0.75 w +52.24 805.89 m +543.04 805.89 l +545.2491 805.89 547.04 804.0991 547.04 801.89 c +547.04 640.49 l +547.04 638.2809 545.2491 636.49 543.04 636.49 c +52.24 636.49 l +50.0309 636.49 48.24 638.2809 48.24 640.49 c +48.24 801.89 l +48.24 804.0991 50.0309 805.89 52.24 805.89 c +h +S +Q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +59.24 783.065 Td +/F3.0 11 Tf +<766f6964204164645f46645f526561645f48616e646c657228696e7420666429207b2048616e646c65725f4164645f46645f52656164286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 768.325 Td +/F3.0 11 Tf +<766f6964204164645f46645f57726974655f48616e646c657228696e7420666429207b2048616e646c65725f4164645f46645f5772697465286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 753.585 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f526561645f48616e646c657228696e7420666429207b2048616e646c65725f52656d6f76655f46645f52656164286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 738.845 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f57726974655f48616e646c657228696e7420666429207b2048616e646c65725f52656d6f76655f46645f5772697465286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 724.105 Td +/F3.0 11 Tf +<766f69642052656d6f76655f46645f416c6c5f48616e646c65727328696e7420666429207b2048616e646c65725f52656d6f76655f4664286664293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 709.365 Td +/F3.0 11 Tf +<766f69642048616e646c65725f556e696e7374616c6c2829207b20556e696e7374616c6c5f48616e646c657228293b207d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 694.625 Td +/F3.0 11 Tf +<766f69642054696d65725f5365745f48616e646c657228646f75626c652063616c6c5f696e74657276616c2c20626f6f6c65616e2069735f74696d656f7574203d20545255452c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 679.885 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 665.145 Td +/F3.0 11 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 650.405 Td +/F3.0 11 Tf +<7d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.5 w +0.9333 0.9333 0.9333 SCN +102.4695 624.49 m +102.4695 553.37 l +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +60.3451 584.856 Td +/F2.0 10.5 Tf +[<4e4f> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.5694 Tw + +BT +114.4695 608.526 Td +/F1.0 10.5 Tf +[<5468657365206d656d6265722066756e6374696f6e732061726520726571756972656420616e6420757365642062> 20.0195 <79204162737472> 20.0195 <61637420536f636b> 20.0195 <65742e205468657920617265>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6658 Tw + +BT +114.4695 592.746 Td +/F1.0 10.5 Tf +[<646566696e656420696e204162737472> 20.0195 <61637420536f636b> 20.0195 <6574206173207669727475616c20616e642061726520746f206265206f76657272696464656e20696e207468652064657363656e64616e74>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4769 Tw + +BT +114.4695 576.966 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420506f727420636c6173732e20546865792061726520696d706c656d656e74656420696e20746865202854> 29.7852 <65737420506f72742920636c61737320646566696e6974696f6e206f6e6c7920666f7220746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +114.4695 561.186 Td +/F1.0 10.5 Tf +[<73616b> 20.0195 <65206f662073696d706c6963697479> 89.8438 <2e29>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 517.346 Td +/F2.0 18 Tf +<46696e616c205374657073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8102 Tw + +BT +48.24 489.326 Td +/F1.0 10.5 Tf +[<46696e616c6c79> 89.8438 <2c207468652066756e6374696f6e20646566696e6974696f6e73206d75737420626520616464656420746f20746865206865616465722066696c65206163636f7264696e676c79> 89.8438 <2e205468656e2c20796f7520617265207265616479>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 473.546 Td +/F1.0 10.5 Tf +<746f20676f20616865616420616e6420646576656c6f7020796f7572207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 429.434 Td +/F2.0 22 Tf +<5573696e6720> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +115.802 429.434 Td +/F3.0 22 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +236.802 429.434 Td +/F2.0 22 Tf +[<20696e2054> 29.7852 <65737420506f727473>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +48.24 400.246 Td +/F1.0 10.5 Tf +[<546865204162737472> 20.0195 <61637420536f636b> 20.0195 <65742075736573206120>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.79 Tw + +BT +186.0646 400.246 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +243.8146 400.246 Td +/F1.0 10.5 Tf +<20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +0.79 Tw + +BT +247.3241 400.246 Td +/F1.0 10.5 Tf +<5b325d> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.79 Tw + +BT +260.7326 400.246 Td +/F1.0 10.5 Tf +<20746f2073746f726520696e636f6d696e67206d65737361676520706f7274696f6e732e20496620746865207465737420706f727420616c736f> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 384.466 Td +/F1.0 10.5 Tf +[<776f756c64206c696b> 20.0195 <6520746f2073746f726520696e636f6d696e67206d657373616765732c20686572652069732061206465736372697074696f6e20686f7720746f20646f20746861743a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +48.24 356.686 Td +/F1.0 10.5 Tf +<546865207465737420706f72742063616e206163636573732074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2799 Tw + +BT +188.9497 356.686 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +246.6997 356.686 Td +/F1.0 10.5 Tf +<207769746820> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.2799 Tw + +BT +275.4415 356.686 Td +/F3.0 10.5 Tf +<6765745f627566666572> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2799 Tw + +BT +327.9415 356.686 Td +/F1.0 10.5 Tf +[<282920616e642063616e206f706572> 20.0195 <617465206f6e2069742e20496620746865207465737420706f72742075736573>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +48.24 340.906 Td +/F1.0 10.5 Tf +<7468652062756666657220746f2073746f726520646174612c206974206d757374207365742074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5545 Tw + +BT +246.5145 340.906 Td +/F3.0 10.5 Tf +<7474636e5f6275666665725f75736572636f6e74726f6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +367.2645 340.906 Td +/F1.0 10.5 Tf +<207661726961626c6520746f20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5545 Tw + +BT +428.3265 340.906 Td +/F5.0 10.5 Tf +<74727565> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5545 Tw + +BT +449.3265 340.906 Td +/F1.0 10.5 Tf +<2c20736f2074686174207468652041532077696c6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 325.126 Td +/F1.0 10.5 Tf +<6e6f7420636c656172207468652062756666657220636f6e74656e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 297.346 Td +/F1.0 10.5 Tf +[<496e2074686973206361736520746865207465737420706f72742063616e20757365207468652062756666657220696e2074686520666f6c6c6f77696e67207761> 20.0195 <79733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 269.566 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +66.24 269.566 Td +/F3.0 10.5 Tf +<6765745f627566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +118.74 269.566 Td +/F1.0 10.5 Tf +<282920746f2066657463682074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +187.62 269.566 Td +/F3.0 10.5 Tf +<5454434e5f427566666572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +245.37 269.566 Td +/F1.0 10.5 Tf +<206173736f63696174656420776974682074686520636c69656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 247.786 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 247.786 Td +/F1.0 10.5 Tf +[<4f7074696f6e616c6c79206d6f6469667920636f6e74656e743b206f72207761697420666f7220636f6d706c65746520544c> 49.8047 <56>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 226.006 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2893 Tw + +BT +66.24 226.006 Td +/F1.0 10.5 Tf +[<4f6e63652061206d65737361676520706f7274696f6e2069732073656e7420746f20746865205454> 20.0195 <434e2d3320746573742073756974652c20637574207468652073656e74206d6573736167652066726f6d2074686520627566666572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4943 Tw + +BT +66.24 210.226 Td +/F1.0 10.5 Tf +<62656361757365207468652041532077696c6c206e6f7420646f20746861742e20496e206361736520746865207465737420706f72742073696d706c792070617373656420746865206d65737361676520746f207468652074657374207375697465> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.234 Tw + +BT +66.24 194.446 Td +/F1.0 10.5 Tf +[<616e642075736573206e6f2073746f72> 20.0195 <616765206f662069742028652e672eca54> 20.0195 <43502054> 29.7852 <65737420506f7274292c2069742063616e206c6561766520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.234 Tw + +BT +349.421 194.446 Td +/F3.0 10.5 Tf +<7474636e5f6275666665725f75736572636f6e74726f6c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.234 Tw + +BT +470.171 194.446 Td +/F1.0 10.5 Tf +<20696e2066616c736520287768696368> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 178.666 Td +/F1.0 10.5 Tf +[<6973207468652064656661756c742076616c75652920736f2074686174207468652041532077696c6c2074616b> 20.0195 <652063617265206f662062756666657220636c65616e7570732e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 134.554 Td +/F2.0 22 Tf +[<5573696e672053534c206f6e2054> 29.7852 <6f70206f6620612054> 20.0195 <435020436f6e6e656374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1766 Tw + +BT +48.24 105.366 Td +/F1.0 10.5 Tf +[<53534c2063616e2062652075736564206f6e20746f70206f66207468652054> 20.0195 <435020636f6e6e656374696f6e2e205468652061757468656e7469636174696f6e206d6f64652063616e20626520636f6e666967757265642076696120612074657374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 89.586 Td +/F1.0 10.5 Tf +[<706f727420706172> 20.0195 <616d657465722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3137> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +117 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 116 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F3.0 27 0 R +/F2.0 19 0 R +/F1.0 8 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [120 0 R] +>> +endobj +118 0 obj +[117 0 R /XYZ 0 541.37 null] +endobj +119 0 obj +[117 0 R /XYZ 0 457.73 null] +endobj +120 0 obj +<< /Border [0 0 0] +/Dest (_2) +/Subtype /Link +/Rect [247.3241 397.18 260.7326 411.46] +/Type /Annot +>> +endobj +121 0 obj +[117 0 R /XYZ 0 162.85 null] +endobj +122 0 obj +<< /Length 13988 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 786.666 Td +/F2.0 18 Tf +<536572766572204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1326 Tw + +BT +48.24 758.646 Td +/F1.0 10.5 Tf +[<496e20736572766572206d6f64652c20666972737420612054> 20.0195 <435020736f636b> 20.0195 <657420697320637265617465642e20546865207365727665722073746172747320746f206c697374656e206f6e207468697320706f7274202875706f6e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3173 Tw + +BT +48.24 742.866 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3173 Tw + +BT +90.24 742.866 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e206f7220696e2063617365206f6620636f6e6e656374696f6e20415350732c2063616c6c696e672074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.3173 Tw + +BT +360.5324 742.866 Td +/F3.0 10.5 Tf +<6f70656e5f6c697374656e5f706f7274> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3173 Tw + +BT +444.5324 742.866 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e292e204f6e63652061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6174 Tw + +BT +48.24 727.086 Td +/F1.0 10.5 Tf +[<54> 20.0195 <435020636f6e6e65637420726571756573742069732072656365697665642c207468652054> 20.0195 <435020636f6e6e656374696f6e206973207365742075702e2041667465722074686973207468652053534c2068616e647368616b> 20.0195 <6520626567696e732e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3796 Tw + +BT +48.24 711.306 Td +/F1.0 10.5 Tf +[<5468652053534c206973206d617070656420746f207468652066696c652064657363726970746f72206f66207468652054> 20.0195 <435020736f636b> 20.0195 <65742e205468652042494f2c20776869636820697320616e20492f4f206162737472> 20.0195 <616374696f6e2074686174>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6741 Tw + +BT +48.24 695.526 Td +/F1.0 10.5 Tf +[<6869646573206d616e> 20.0195 <79206f662074686520756e6465726c79696e6720492f4f2064657461696c732066726f6d20616e206170706c69636174696f6e2c206973206175746f6d61746963616c6c7920637265617465642062> 20.0195 <79204f70656e53534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3726 Tw + +BT +48.24 679.746 Td +/F1.0 10.5 Tf +[<696e6865726974696e67207468652063686172> 20.0195 <6163746572697374696373206f662074686520736f636b> 20.0195 <657420286e6f6e2d626c6f636b696e67206d6f6465292e205468652042494f20697320636f6d706c6574656c79207472> 20.0195 <616e73706172656e742e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7048 Tw + +BT +48.24 663.966 Td +/F1.0 10.5 Tf +[<5468652073657276657220616c7761> 20.0195 <79732073656e64732069747320636572746966696361746520746f2074686520636c69656e742e20496620636f6e6669677572656420736f2c20746865207365727665722077696c6c207265717565737420746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8587 Tw + +BT +48.24 648.186 Td +/F1.0 10.5 Tf +<6365727469666963617465206f662074686520636c69656e7420616e6420636865636b20696620697420697320612076616c69642063657274696669636174652e204966206e6f742c207468652053534c20636f6e6e656374696f6e20697320726566757365642e204966> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3686 Tw + +BT +48.24 632.406 Td +/F1.0 10.5 Tf +<636f6e66696775726564206e6f7420746f20766572696679207468652063657274696669636174652c20746865207365727665722077696c6c206e6f7420726571756573742069742066726f6d2074686520636c69656e7420616e64207468652053534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6836 Tw + +BT +48.24 616.626 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2069732061636365707465642e204966207573616765206f66207468652053534c2073657373696f6e20726573756d7074696f6e20697320656e61626c656420616e642074686520636c69656e742072656665727320746f2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5616 Tw + +BT +48.24 600.846 Td +/F1.0 10.5 Tf +<70726576696f75732053534c2073657373696f6e2c20746865207365727665722077696c6c206163636570742069742c20756e6c657373206974206973206e6f7420666f756e6420696e207468652053534c20636f6e746578742063616368652e204f6e6365> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.795 Tw + +BT +48.24 585.066 Td +/F1.0 10.5 Tf +<74686520636f6e6e656374696f6e206973206e65676f7469617465642c20646174612063616e2062652073656e742f72656365697665642e205468652053534c20636f6e6e656374696f6e206973207368757420646f776e207573696e6720616e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.2702 Tw + +BT +48.24 569.286 Td +/F3.0 10.5 Tf +<756e6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2702 Tw + +BT +74.49 569.286 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e2e205468652073687574646f776e2070726f6365737320646f6573206e6f7420666f6c6c6f7720746865207374616e646172643a20746865207365727665722073696d706c79207368757473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 553.506 Td +/F1.0 10.5 Tf +[<646f776e20616e6420646f6573206e6f742065787065637420616e> 20.0195 <792061636b6e6f776c656467656d656e742066726f6d2074686520636c69656e742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.9681 Tw + +BT +48.24 525.726 Td +/F1.0 10.5 Tf +<436c69656e747320636f6e6e656374656420746f2074686520736572766572206172652064697374696e6775697368656420776974682074686569722066696c652064657363726970746f72206e756d626572732e205768656e2061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 509.946 Td +/F1.0 10.5 Tf +<6d6573736167652069732072656365697665642c207468652066696c652064657363726970746f72206e756d62657220697320616c736f207061737365642c20736f2074686520636c69656e742063616e206265206964656e7469666965642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 470.106 Td +/F2.0 18 Tf +<436c69656e74204d6f6465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1444 Tw + +BT +48.24 442.086 Td +/F1.0 10.5 Tf +[<496e20636c69656e74206d6f64652c20666972737420612054> 20.0195 <435020636f6e6e656374696f6e2069732072657175657374656420746f2074686520736572766572202875706f6e2074686520>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1444 Tw + +BT +419.431 442.086 Td +/F3.0 10.5 Tf +<757365725f6d6170> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1444 Tw + +BT +461.431 442.086 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e206f7220696e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1412 Tw + +BT +48.24 426.306 Td +/F1.0 10.5 Tf +<63617365206f6620636f6e6e656374696f6e20415350732c2063616c6c696e672074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1412 Tw + +BT +228.3115 426.306 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1412 Tw + +BT +343.8115 426.306 Td +/F1.0 10.5 Tf +[<2829206f706572> 20.0195 <6174696f6e292e204f6e63652069742069732061636365707465642c207468652053534c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.5224 Tw + +BT +48.24 410.526 Td +/F1.0 10.5 Tf +<656e64706f696e7420697320637265617465642e20496620636f6e6669677572656420736f2c2074686520636c69656e7420747269657320746f20757365207468652053534c2073657373696f6e2049642066726f6d207468652070726576696f7573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.2135 Tw + +BT +48.24 394.746 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e2c20696620617661696c61626c652028652e672eca6974206973206e6f742074686520666972737420636f6e6e656374696f6e292e204966206e6f2053534c2073657373696f6e20496420697320617661696c61626c652c206f7220746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0185 Tw + +BT +48.24 378.966 Td +/F1.0 10.5 Tf +[<73657276657220646f6573206e6f74206163636570742069742c20612066756c6c2068616e647368616b> 20.0195 <6520697320706572666f726d65642e20496620636f6e6669677572656420736f2c20746865206365727469666963617465206f6620746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0631 Tw + +BT +48.24 363.186 Td +/F1.0 10.5 Tf +[<7365727665722069732076657269666965642e2049662074686520766572696669636174696f6e206661696c732c207468652053534c20636f6e6e656374696f6e20697320696e7465727275707465642062> 20.0195 <792074686520636c69656e742e204966206e6f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4371 Tw + +BT +48.24 347.406 Td +/F1.0 10.5 Tf +<766572696669636174696f6e2072657175697265642c20746865207265636569766564206365727469666963617465206973207374696c6c2076657269666965642c20686f77657665722074686520726573756c7420646f6573206e6f742061666665637420746865> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 331.626 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e206576656e2074686f756768206974206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 291.786 Td +/F2.0 18 Tf +[<41> 20.0195 <757468656e7469636174696f6e20466c6f77>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.766 Td +/F1.0 10.5 Tf +[<496e2073756d6d617279> 89.8438 <2c207468652061757468656e7469636174696f6e20697320646f6e65206163636f7264696e6720746f207468697320666c6f773a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 235.986 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 235.986 Td +/F1.0 10.5 Tf +[<73736c2068616e647368616b> 20.0195 <6520626567696e7320286e657720636c69656e7420747269657320746f20636f6e6e65637429>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 214.206 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.61 Tw + +BT +66.24 214.206 Td +/F3.0 10.5 Tf +<7669727475616c20696e742073736c5f7665726966795f6365727469666963617465735f61745f68616e647368616b6528696e74207072657665726966795f6f6b2c20583530395f53544f52455f435458202a73736c5f63747829> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.61 Tw + +BT +547.04 214.206 Td +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 198.426 Td +/F1.0 10.5 Tf +[<69732063616c6c65642e20447572696e6720746869732068616e647368616b> 20.0195 <6520796f752063616e20706572666f726d206164646974696f6e616c2061757468656e7469636174696f6e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +-0.5 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +56.8805 176.646 Td +/F1.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn + +0.0 Tc +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.6971 Tw + +BT +66.24 176.646 Td +/F1.0 10.5 Tf +[<49662074686520636f6e6e656374696f6e2069732061636365707465642c207468652053534c2068616e647368616b> 20.0195 <652069732066696e697368656420616e642053534c2069732065737461626c69736865642e204e6f7720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.7308 Tw + +BT +66.24 160.866 Td +/F1.0 10.5 Tf +<66756e6374696f6e207669727475616c20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +4.7308 Tw + +BT +157.3705 160.866 Td +/F3.0 10.5 Tf +<626f6f6c2073736c5f7665726966795f636572746966696361746573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +4.7308 Tw + +BT +309.1013 160.866 Td +/F1.0 10.5 Tf +[<28292069732063616c6c656420776865726520796f75206d61> 20.0195 <7920706572666f726d206f74686572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +66.24 145.086 Td +/F1.0 10.5 Tf +<61757468656e7469636174696f6e20696620796f752077616e742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5779 Tw + +BT +48.24 117.306 Td +/F3.0 10.5 Tf +<73736c5f7665726966795f636572746966696361746573> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5779 Tw + +BT +168.99 117.306 Td +/F1.0 10.5 Tf +[<28292069732061207669727475616c2066756e6374696f6e2e2049742069732063616c6c6564206166746572207468652053534c20636f6e6e656374696f6e2069732075702e2054> 29.7852 <65737420706f727473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.496 Tw + +BT +48.24 101.526 Td +/F1.0 10.5 Tf +[<6d61> 20.0195 <792075736520697420746f20636865636b206f746865722070656572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1331 Tw + +BT +48.24 85.746 Td +/F1.0 10.5 Tf +<636f6e6e656374696f6e20697320636c6f7365642e20496e2063617365206f6620636c69656e74206d6f64652c20746865207465737420706f7274206578697473207769746820616e206572726f722028> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.1331 Tw + +BT +432.8034 85.746 Td +/F7.0 10.5 Tf +<766572696669636174696f6e5f6572726f72> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1331 Tw + +BT +527.3034 85.746 Td +/F1.0 10.5 Tf +<292e20496e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 69.966 Td +/F1.0 10.5 Tf +[<736572766572206d6f646520746865207465737420706f7274206a7573742072656d6f76657320636c69656e7420646174612c20627574206b> 20.0195 <656570732072756e6e696e672e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3138> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +123 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 122 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F7.0 127 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +124 0 obj +[123 0 R /XYZ 0 841.89 null] +endobj +125 0 obj +[123 0 R /XYZ 0 494.13 null] +endobj +126 0 obj +[123 0 R /XYZ 0 315.81 null] +endobj +127 0 obj +<< /Type /Font +/BaseFont /d420e1+mplus1mn-bold +/Subtype /TrueType +/FontDescriptor 379 0 R +/FirstChar 32 +/LastChar 255 +/Widths 381 0 R +/ToUnicode 380 0 R +>> +endobj +128 0 obj +<< /Length 10422 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 782.394 Td +/F2.0 22 Tf +[<41> 20.0195 <64617074696e6720446572697665642054> 29.7852 <65737420506f72747320746f20537570706f72742049507636>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 753.206 Td +/F1.0 10.5 Tf +[<44657269766564207465737420706f7274732073686f756c64206265207570646174656420696e2074686520666f6c6c6f77696e67207761> 20.0195 <7920746f20737570706f7274204950763420616e6420495076363a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 725.426 Td +/F1.0 10.5 Tf +<416c6c2063616c6c73206f662066756e6374696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 709.61 m +543.04 709.61 l +545.2491 709.61 547.04 707.8191 547.04 705.61 c +547.04 662.13 l +547.04 659.9209 545.2491 658.13 543.04 658.13 c +52.24 658.13 l +50.0309 658.13 48.24 659.9209 48.24 662.13 c +48.24 705.61 l +48.24 707.8191 50.0309 709.61 52.24 709.61 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 709.61 m +543.04 709.61 l +545.2491 709.61 547.04 707.8191 547.04 705.61 c +547.04 662.13 l +547.04 659.9209 545.2491 658.13 543.04 658.13 c +52.24 658.13 l +50.0309 658.13 48.24 659.9209 48.24 662.13 c +48.24 705.61 l +48.24 707.8191 50.0309 709.61 52.24 709.61 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 686.785 Td +/F3.0 11 Tf +<636f6e73742073747275637420736f636b616464725f696e2026206765745f72656d6f74655f616464722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 672.045 Td +/F3.0 11 Tf +<636f6e73742073747275637420736f636b616464725f696e2026206765745f6c6f63616c5f616464722829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 634.166 Td +/F1.0 10.5 Tf +[<73686f756c642062652072656d6f7665642e20546865792063616e206265207265706c616365642062> 20.0195 <792063616c6c696e672074686573652066756e6374696f6e733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 618.35 m +543.04 618.35 l +545.2491 618.35 547.04 616.5591 547.04 614.35 c +547.04 541.39 l +547.04 539.1809 545.2491 537.39 543.04 537.39 c +52.24 537.39 l +50.0309 537.39 48.24 539.1809 48.24 541.39 c +48.24 614.35 l +48.24 616.5591 50.0309 618.35 52.24 618.35 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 618.35 m +543.04 618.35 l +545.2491 618.35 547.04 616.5591 547.04 614.35 c +547.04 541.39 l +547.04 539.1809 545.2491 537.39 543.04 537.39 c +52.24 537.39 l +50.0309 537.39 48.24 539.1809 48.24 541.39 c +48.24 614.35 l +48.24 616.5591 50.0309 618.35 52.24 618.35 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 595.525 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 580.785 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a206c6f63616c5f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 566.045 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f706f72745f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 551.305 Td +/F3.0 11 Tf +<7669727475616c20636f6e737420636861722a2072656d6f74655f616464726573735f6e616d6528293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7796 Tw + +BT +48.24 513.426 Td +/F1.0 10.5 Tf +<5468652066756e6374696f6e20> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.7796 Tw + +BT +116.2853 513.426 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e73742073747275637420736f636b616464725f696e2026206c6f63616c41646472293b> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7796 Tw + +BT +429.9335 513.426 Td +/F1.0 10.5 Tf +<20646f6573206e6f7420737570706f727420495076362e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 497.646 Td +/F1.0 10.5 Tf +<5468652066756e6374696f6e2062656c6f772073686f756c64206265207573656420696e73746561643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 472.05 Td +/F3.0 10.5 Tf +<696e74206f70656e5f6c697374656e5f706f727428636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c536572766963656e616d65293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 445.866 Td +/F1.0 10.5 Tf +<5468652073616d652068617320746f20626520646f6e6520666f722074686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +209.6985 445.866 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +325.1985 445.866 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2e205265706c61636520616e> 20.0195 <792063616c6c206f66207468652066756e6374696f6e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 430.05 m +543.04 430.05 l +545.2491 430.05 547.04 428.2591 547.04 426.05 c +547.04 382.57 l +547.04 380.3609 545.2491 378.57 543.04 378.57 c +52.24 378.57 l +50.0309 378.57 48.24 380.3609 48.24 382.57 c +48.24 426.05 l +48.24 428.2591 50.0309 430.05 52.24 430.05 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 430.05 m +543.04 430.05 l +545.2491 430.05 547.04 428.2591 547.04 426.05 c +547.04 382.57 l +547.04 380.3609 545.2491 378.57 543.04 378.57 c +52.24 378.57 l +50.0309 378.57 48.24 380.3609 48.24 382.57 c +48.24 426.05 l +48.24 428.2591 50.0309 430.05 52.24 430.05 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 407.225 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e73742073747275637420736f636b616464725f696e2026206e65775f72656d6f74655f616464722c20636f6e737420737472756374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 392.485 Td +/F3.0 11 Tf +<736f636b616464725f696e2026206e65775f6c6f63616c5f6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 354.606 Td +/F1.0 10.5 Tf +<77697468207468652066756e6374696f6e3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 338.79 m +543.04 338.79 l +545.2491 338.79 547.04 336.9991 547.04 334.79 c +547.04 291.31 l +547.04 289.1009 545.2491 287.31 543.04 287.31 c +52.24 287.31 l +50.0309 287.31 48.24 289.1009 48.24 291.31 c +48.24 334.79 l +48.24 336.9991 50.0309 338.79 52.24 338.79 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 338.79 m +543.04 338.79 l +545.2491 338.79 547.04 336.9991 547.04 334.79 c +547.04 291.31 l +547.04 289.1009 545.2491 287.31 543.04 287.31 c +52.24 287.31 l +50.0309 287.31 48.24 289.1009 48.24 291.31 c +48.24 334.79 l +48.24 336.9991 50.0309 338.79 52.24 338.79 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 315.965 Td +/F3.0 11 Tf +<696e74206f70656e5f636c69656e745f636f6e6e656374696f6e28636f6e737420636861722a2072656d6f7465486f73746e616d652c20636f6e737420636861722a2072656d6f7465536572766963652c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 301.225 Td +/F3.0 11 Tf +<636f6e737420636861722a206c6f63616c486f73746e616d652c20636f6e737420636861722a206c6f63616c53657276696365293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 263.346 Td +/F1.0 10.5 Tf +<49662074686520666f6c6c6f77696e672063616c6c6261636b2066756e6374696f6e206973206f76657272696464656e20696e207468652064657269766564207465737420706f72743a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 247.53 m +543.04 247.53 l +545.2491 247.53 547.04 245.7391 547.04 243.53 c +547.04 214.79 l +547.04 212.5809 545.2491 210.79 543.04 210.79 c +52.24 210.79 l +50.0309 210.79 48.24 212.5809 48.24 214.79 c +48.24 243.53 l +48.24 245.7391 50.0309 247.53 52.24 247.53 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 247.53 m +543.04 247.53 l +545.2491 247.53 547.04 245.7391 547.04 243.53 c +547.04 214.79 l +547.04 212.5809 545.2491 210.79 543.04 210.79 c +52.24 210.79 l +50.0309 210.79 48.24 212.5809 48.24 214.79 c +48.24 243.53 l +48.24 245.7391 50.0309 247.53 52.24 247.53 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 224.705 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20736f636b616464725f696e262072656d6f74655f61646472293b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 186.826 Td +/F1.0 10.5 Tf +<69742073686f756c642062652072656d6f76656420616e642074686520666f6c6c6f77696e672066756e6374696f6e2073686f756c64206265206f76657272696464656e20696e73746561643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 171.01 m +543.04 171.01 l +545.2491 171.01 547.04 169.2191 547.04 167.01 c +547.04 138.27 l +547.04 136.0609 545.2491 134.27 543.04 134.27 c +52.24 134.27 l +50.0309 134.27 48.24 136.0609 48.24 138.27 c +48.24 167.01 l +48.24 169.2191 50.0309 171.01 52.24 171.01 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 171.01 m +543.04 171.01 l +545.2491 171.01 547.04 169.2191 547.04 167.01 c +547.04 138.27 l +547.04 136.0609 545.2491 134.27 543.04 134.27 c +52.24 134.27 l +50.0309 134.27 48.24 136.0609 48.24 138.27 c +48.24 167.01 l +48.24 169.2191 50.0309 171.01 52.24 171.01 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 148.185 Td +/F3.0 11 Tf +<7669727475616c20766f696420706565725f636f6e6e656374656428696e7420636c69656e745f69642c20636f6e73742063686172202a20686f73742c20636f6e737420696e7420706f727429> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 110.306 Td +/F1.0 10.5 Tf +<54686520666f6c6c6f77696e672066756e6374696f6e2073686f756c64206e6f7420626520757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 84.71 Td +/F3.0 10.5 Tf +<766f6964206765745f686f73745f696428636f6e737420636861722a20686f73744e616d652c2073747275637420736f636b616464725f696e202a6164647229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 58.526 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <6574204150492066756e6374696f6e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +168.9583 58.526 Td +/F3.0 10.5 Tf +<67657461646472696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +226.7083 58.526 Td +/F1.0 10.5 Tf +<2073686f756c64206265207573656420696e73746561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3139> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +129 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 128 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +130 0 obj +[129 0 R /XYZ 0 841.89 null] +endobj +131 0 obj +<< /Length 11030 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 777.054 Td +/F2.0 27 Tf +<4572726f72204d65737361676573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 730.074 Td +/F2.0 22 Tf +[<4572726f72204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e7320417265>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 700.154 Td +/F2.0 22 Tf +<55736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 673.15 Td +/F7.0 10.5 Tf +<506172616d657465722076616c7565203c76616c75653e206e6f74207265636f676e697a656420666f7220706172616d65746572203c6e616d653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 646.966 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +116.9625 646.966 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +153.7125 646.966 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206973206e6f74207265636f676e697a656420666f722074686520706172> 20.0195 <616d65746572203c6e616d653e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 621.37 Td +/F7.0 10.5 Tf +<496e76616c696420696e707574206173205443505f7265636f6e6e6563745f617474656d70747320636f756e74657220676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 595.186 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +116.9625 595.186 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +153.7125 595.186 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374206265206120706f7369746976652077686f6c65206e756d6265722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 569.59 Td +/F7.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473206d7573742062652067726561746572207468616e20302c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +48.24 543.406 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9291 Tw + +BT +118.8206 543.406 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +155.5706 543.406 Td +/F1.0 10.5 Tf +<20666f7220> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.9291 Tw + +BT +177.7462 543.406 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f617474656d707473> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9291 Tw + +BT +293.2462 543.406 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d7573742062652067726561746572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 527.626 Td +/F1.0 10.5 Tf +<7468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +73.986 527.626 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +79.236 527.626 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 502.03 Td +/F7.0 10.5 Tf +<496e76616c696420696e707574206173205443505f7265636f6e6e6563745f64656c617920676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +48.24 475.846 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +118.0612 475.846 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +154.8112 475.846 Td +/F1.0 10.5 Tf +<20666f722074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +195.4666 475.846 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +295.2166 475.846 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d6574657220696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 460.066 Td +/F1.0 10.5 Tf +<626520612077686f6c65206e756d626572206e6f74206c657373207468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +214.098 460.066 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +219.348 460.066 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 434.47 Td +/F7.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179206d757374206e6f74206265206c657373207468616e20302c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +48.24 408.286 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +118.0612 408.286 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +154.8112 408.286 Td +/F1.0 10.5 Tf +<20666f722074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.5493 Tw + +BT +195.4666 408.286 Td +/F3.0 10.5 Tf +<5443505f7265636f6e6e6563745f64656c6179> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5493 Tw + +BT +295.2166 408.286 Td +/F1.0 10.5 Tf +[<20706172> 20.0195 <616d6574657220696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c65206d757374>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 392.506 Td +/F1.0 10.5 Tf +<626520612077686f6c65206e756d626572206e6f74206c657373207468616e20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +214.098 392.506 Td +/F5.0 10.5 Tf +<30> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +219.348 392.506 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 366.91 Td +/F7.0 10.5 Tf +<496e76616c696420696e70757420617320706f7274206e756d62657220676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +48.24 340.726 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1642 Tw + +BT +121.291 340.726 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +158.041 340.726 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 324.946 Td +/F1.0 10.5 Tf +<6e756d6265722028652e672eca737472696e6720697320676976656e292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 299.35 Td +/F7.0 10.5 Tf +<506f7274206e756d626572206d757374206265206265747765656e203020616e642036353533352c203c76616c75653e20697320676976656e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +48.24 273.166 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.1642 Tw + +BT +121.291 273.166 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.1642 Tw + +BT +158.041 273.166 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420706f7274>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 257.386 Td +/F1.0 10.5 Tf +[<6e756d6265722e20506f7274206e756d62657273206d75737420626520696e207468652072> 20.0195 <616e676520302e2e36353533352e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 231.79 Td +/F7.0 10.5 Tf +<496e76616c696420696e70757420617320736572766572206261636b6c6f6720676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4439 Tw + +BT +48.24 205.606 Td +/F1.0 10.5 Tf +<5468652073706563696669656420> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.4439 Tw + +BT +119.8504 205.606 Td +/F3.0 10.5 Tf +<3c76616c75653e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4439 Tw + +BT +156.6004 205.606 Td +/F1.0 10.5 Tf +[<20696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652069732063616e6e6f7420626520696e74657270726574656420617320612076616c696420736572766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 189.826 Td +/F1.0 10.5 Tf +<6261636b6c6f67206e756d6265722028652e672eca737472696e6720697320676976656e292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 164.23 Td +/F7.0 10.5 Tf +<43616e6e6f742061636365707420636f6e6e656374696f6e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 138.046 Td +/F1.0 10.5 Tf +[<436f6e6e656374696f6e20636f756c64206e6f74206265206163636570746564206f6e2054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 112.45 Td +/F7.0 10.5 Tf +<4572726f72207768656e2072656164696e67207468652072656365697665642054435020504455> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 86.266 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d206572726f72206f6363757272656420647572696e672072656164696e672066726f6d207468652054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 60.67 Td +/F7.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3230> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +132 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 131 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +133 0 obj +[132 0 R /XYZ 0 841.89 null] +endobj +134 0 obj +[132 0 R /XYZ 0 758.37 null] +endobj +135 0 obj +<< /Limits [(_close_the_listening_port) (_fundamental_concepts)] +/Names [(_close_the_listening_port) 82 0 R (_closing_down) 41 0 R (_compilation) 44 0 R (_configuration) 60 0 R (_connection_asps) 33 0 R (_error_handling) 38 0 R (_error_messages) 133 0 R (_error_messages_in_case_tcp_connections_are_used) 134 0 R (_error_reporting) 98 0 R (_functionality) 23 0 R (_fundamental_concepts) 26 0 R] +>> +endobj +136 0 obj +<< /Length 8000 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F1.0 10.5 Tf +[<4372656174696f6e206f6620746865206c697374656e657220736f636b> 20.0195 <6574206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 768.33 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 742.146 Td +/F1.0 10.5 Tf +[<53657474696e67206f6620736f636b> 20.0195 <6574206f7074696f6e73206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 716.55 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 690.366 Td +/F1.0 10.5 Tf +[<42696e64696e67206f66206120736f636b> 20.0195 <657420746f206120706f7274206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 664.77 Td +/F7.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 638.586 Td +/F1.0 10.5 Tf +[<4c697374656e206f6e20746865206c697374656e657220736f636b> 20.0195 <6574206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 612.99 Td +/F7.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 586.806 Td +/F1.0 10.5 Tf +<546865207175657279206f6620746865206c697374656e696e6720706f7274206e756d626572206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 561.21 Td +/F7.0 10.5 Tf +<4162737472616374536f636b65743a206765746e616d65696e666f3a203c6572726f723e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 535.026 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 535.026 Td +/F3.0 10.5 Tf +<6765746e616d65696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +127.41 535.026 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2072657475726e656420616e206572726f722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 509.43 Td +/F7.0 10.5 Tf +<67657461646472696e666f3a203c6572726f72746578743e20666f7220686f7374203c686f73743e2073657276696365203c736572766963653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 483.246 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 483.246 Td +/F3.0 10.5 Tf +<67657461646472696e666f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +127.41 483.246 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2072657475726e656420616e206572726f722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 457.65 Td +/F7.0 10.5 Tf +<4d616c666f726d6564206d6573736167653a20696e76616c6964206c656e6774683a203c6c656e6774683e2e20546865206c656e6774682073686f756c64206265206174206c65617374203c6c656e6768743e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 431.466 Td +/F1.0 10.5 Tf +<546865206d65737361676520726563656976656420636f6e7461696e7320696e76616c6964206c656e67746820696e666f726d6174696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 405.87 Td +/F7.0 10.5 Tf +<416c7265616479207472696564203c76616c75653e2074696d65732c20676976696e67207570> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.7015 Tw + +BT +48.24 379.686 Td +/F1.0 10.5 Tf +<54686520646561646c6f636b20636f756e746572206578636565647320746865206861726420636f646564206c696d6974207768656e20747279696e6720746f20636f6e6e65637420746f20612073657276657220696e20636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0722 Tw + +BT +48.24 363.906 Td +/F1.0 10.5 Tf +[<6d6f64652e205768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c76657320746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0942 Tw + +BT +48.24 348.126 Td +/F1.0 10.5 Tf +<70726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e6563742061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 332.346 Td +/F1.0 10.5 Tf +<776f726b61726f756e642e20546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 304.566 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 288.786 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 263.19 Td +/F7.0 10.5 Tf +<43616e6e6f7420636f6e6e65637420746f20736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 237.006 Td +/F1.0 10.5 Tf +[<436f6e6e656374696f6e20746f206120736572766572206f6e2054> 20.0195 <4350206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 211.41 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 185.226 Td +/F1.0 10.5 Tf +[<5468652054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e2077617320726566757365642062> 20.0195 <7920746865206f7468657220706565722c206f722062726f6b> 20.0195 <656e2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 159.63 Td +/F7.0 10.5 Tf +<436c69656e74204964206e6f742073706563696669656420616c74686f756768206e6f74206f6e6c79203120636c69656e7420657869737473> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 133.446 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 107.85 Td +/F7.0 10.5 Tf +<5468657265206973206e6f20636f6e6e656374696f6e20616c6976652c207573652074686520604153505f5443505f436f6e6e65637427206265666f72652073656e64696e6720616e797468696e672e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.6289 Tw + +BT +48.24 81.666 Td +/F1.0 10.5 Tf +[<416e20617474656d707420776173206d6164652062> 20.0195 <7920746865207465737420706f727420746f2073656e642064617461206265666f72652073657474696e6720757020616e> 20.0195 <7920636f6e6e656374696f6e2e20546865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 65.886 Td +/F3.0 10.5 Tf +<6f70656e5f636c69656e745f636f6e6e656374696f6e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +163.74 65.886 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2068617320746f2062652063616c6c6564206265666f72652073656e64696e6720616e> 20.0195 <7920646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3231> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +137 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 136 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F7.0 127 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +138 0 obj +<< /Length 6355 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a205468657265206973206e6f20636c69656e7420636f6e6e656374656420746f207468652054435020736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<412073656e64206f706572> 20.0195 <6174696f6e20697320706572666f726d656420746f2061206e6f6e2d6578697374696e6720636c69656e742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 745.08 Td +/F7.0 10.5 Tf +<53656e642073797374656d2063616c6c206661696c65643a203c76616c75653e20627974657320776572652073656e7420696e7374656164206f66203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 718.896 Td +/F1.0 10.5 Tf +[<5468652073656e64206f706572> 20.0195 <6174696f6e206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 693.3 Td +/F7.0 10.5 Tf +<3c6e616d653e206973206e6f7420646566696e656420696e2074686520636f6e66696775726174696f6e2066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.6864 Tw + +BT +48.24 667.116 Td +/F1.0 10.5 Tf +[<546865207465737420706f727420706172> 20.0195 <616d65746572203c6e616d653e206973206e6f7420646566696e656420696e207468652072756e74696d6520636f6e6669677572> 20.0195 <6174696f6e2066696c652c20616c74686f75676820697473>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 651.336 Td +/F1.0 10.5 Tf +<70726573656e6365206973206d616e6461746f727920286f7220636f6e646974696f6e616c20616e642074686520636f6e646974696f6e2069732074727565292e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 625.74 Td +/F7.0 10.5 Tf +<54686520686f7374206e616d65203c6e616d653e206973206e6f742076616c696420696e2074686520636f6e66696775726174696f6e2066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 599.556 Td +/F1.0 10.5 Tf +[<54686520686f7374206e616d652073706563696669656420696e2074686520636f6e6669677572> 20.0195 <6174696f6e2066696c6520636f756c64206e6f74206265207265736f6c7665642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 573.96 Td +/F7.0 10.5 Tf +<4e756d626572206f6620636c69656e74733c3e30206275742063616e6e6f742067657420666972737420636c69656e742c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 547.776 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 522.18 Td +/F7.0 10.5 Tf +<496e646578203c76616c75653e2065786365656473206c656e677468206f662070656572206c697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 495.996 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 470.4 Td +/F7.0 10.5 Tf +<41627374726163745f536f636b65743a3a6765745f706565723a20436c69656e74203c76616c75653e20646f6573206e6f74206578697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 444.216 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 418.62 Td +/F7.0 10.5 Tf +<496e76616c696420436c69656e7420496420697320676976656e3a203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 392.436 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 366.84 Td +/F7.0 10.5 Tf +<50656572203c76616c75653e20646f6573206e6f74206578697374> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 340.656 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 315.06 Td +/F7.0 10.5 Tf +<53657420626c6f636b696e67206d6f6465206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 288.876 Td +/F1.0 10.5 Tf +[<54> 29.7852 <65737420706f727420636f756c64206e6f742073657420736f636b> 20.0195 <6574206f7074696f6e3a20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +233.2941 288.876 Td +/F3.0 10.5 Tf +<4f5f4e4f4e424c4f434b> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 244.764 Td +/F2.0 22 Tf +[<41> 20.0195 <64646974696f6e616c204572726f72204d6573736167657320496e20436173652053534c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 214.844 Td +/F2.0 22 Tf +<436f6e6e656374696f6e73204172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6193 Tw + +BT +48.24 185.656 Td +/F1.0 10.5 Tf +<41706172742066726f6d207468652070726576696f75736c79206d656e74696f6e6564206572726f72206d657373616765732c2074686520666f6c6c6f77696e67206d6573736167657320617265207573656420696e20636173652053534c> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 169.876 Td +/F1.0 10.5 Tf +<697320757365643a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 144.28 Td +/F7.0 10.5 Tf +<4e6f2053534c2043545820666f756e642c2053534c206e6f7420696e697469616c697a6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 118.096 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 92.5 Td +/F7.0 10.5 Tf +<4372656174696f6e206f662053534c206f626a656374206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 66.316 Td +/F1.0 10.5 Tf +<4372656174696f6e206f66207468652053534c206f626a656374206973206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3232> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +139 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 138 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F2.0 19 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +140 0 obj +[139 0 R /XYZ 0 273.06 null] +endobj +141 0 obj +<< /Length 7793 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<42696e64696e67206f662053534c206f626a65637420746f20736f636b6574206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<5468652053534c206f626a65637420636f756c64206e6f7420626520626f756e6420746f207468652054> 20.0195 <435020736f636b> 20.0195 <65742e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 745.08 Td +/F7.0 10.5 Tf +<53534c206572726f72206f63637572726564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7782 Tw + +BT +48.24 718.896 Td +/F1.0 10.5 Tf +[<412067656e6572> 20.0195 <616c2053534c206572726f72206f636375727265642e20436865636b20746865207465737420706f7274206c6f677320746f207365652070726576696f7573206572726f72206d657373616765732073686f77696e6720746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.116 Td +/F1.0 10.5 Tf +<7265616c2070726f626c656d2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 677.52 Td +/F7.0 10.5 Tf +<3c6e616d653e206973206e6f7420646566696e656420696e2074686520636f6e66696775726174696f6e2066696c6520616c74686f756768203c76616c75653e3d796573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.9608 0.9608 0.9608 scn +52.24 663.3 m +543.04 663.3 l +545.2491 663.3 547.04 661.5091 547.04 659.3 c +547.04 630.56 l +547.04 628.3509 545.2491 626.56 543.04 626.56 c +52.24 626.56 l +50.0309 626.56 48.24 628.3509 48.24 630.56 c +48.24 659.3 l +48.24 661.5091 50.0309 663.3 52.24 663.3 c +h +f +0.8 0.8 0.8 SCN +0.75 w +52.24 663.3 m +543.04 663.3 l +545.2491 663.3 547.04 661.5091 547.04 659.3 c +547.04 630.56 l +547.04 628.3509 545.2491 626.56 543.04 626.56 c +52.24 626.56 l +50.0309 626.56 48.24 628.3509 48.24 630.56 c +48.24 659.3 l +48.24 661.5091 50.0309 663.3 52.24 663.3 c +h +S +Q +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +59.24 640.475 Td +/F3.0 11 Tf +<3c6e616d653e3a2073736c5f7472757374656443416c6973745f66696c655f6e616d6528292c203c76616c75653e3a2073736c5f76657269667963657274696669636174655f6e616d652829> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 604.78 Td +/F7.0 10.5 Tf +<4e6f2053534c206461746120617661696c61626c6520666f7220636c69656e74203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 578.596 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 553.0 Td +/F7.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f7572616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 526.816 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 501.22 Td +/F7.0 10.5 Tf +<436f756c64206e6f7420726561642066726f6d202f6465762f72616e646f6d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 475.036 Td +/F1.0 10.5 Tf +[<5468652072656164206f706572> 20.0195 <6174696f6e206f6e2074686520696e7374616c6c65642072> 20.0195 <616e646f6d20646576696365206973206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 449.44 Td +/F7.0 10.5 Tf +<436f756c64206e6f742073656564207468652050736575646f2052616e646f6d204e756d6265722047656e657261746f72207769746820656e6f7567682064617461> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 423.256 Td +/F1.0 10.5 Tf +[<4173206e6f2072> 20.0195 <616e646f6d206465766963657320666f756e642c206120776f726b61726f756e64206973207573656420746f2073656564207468652053534c2050524e472e205468652073656564696e67206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 397.66 Td +/F7.0 10.5 Tf +<53534c206d6574686f64206372656174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 371.476 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c206d6574686f64206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 345.88 Td +/F7.0 10.5 Tf +<53534c20636f6e74657874206372656174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 319.696 Td +/F1.0 10.5 Tf +<546865206372656174696f6e206f66207468652053534c20636f6e74657874206f626a656374206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 294.1 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 294.1 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 294.1 Td +/F7.0 10.5 Tf +<7420726561642063657274696669636174652066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 267.916 Td +/F1.0 10.5 Tf +<546865207370656369666965642063657274696669636174652066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 242.32 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 242.32 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 242.32 Td +/F7.0 10.5 Tf +<742072656164206b65792066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 216.136 Td +/F1.0 10.5 Tf +[<546865207370656369666965642070726976617465206b> 20.0195 <65792066696c6520636f756c64206e6f7420626520726561642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 190.54 Td +/F7.0 10.5 Tf +<43616e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +63.99 190.54 Td +/F6.0 10.5 Tf + Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +67.014 190.54 Td +/F7.0 10.5 Tf +<742072656164207472757374656443416c6973742066696c65> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 164.356 Td +/F1.0 10.5 Tf +<54686520737065636966696564206365727469666963617465206f66207468652074727573746564204341732066696c6520636f756c64206e6f7420626520726561642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 138.76 Td +/F7.0 10.5 Tf +<436970686572206c697374207265737472696374696f6e206661696c656420666f72203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 112.576 Td +/F1.0 10.5 Tf +<5468652073706563696669656420636970686572207265737472696374696f6e206c69737420636f756c64206e6f74206265207365742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 86.98 Td +/F7.0 10.5 Tf +<41637469766174696f6e206f662053534c2073657373696f6e20726573756d7074696f6e206661696c6564206f6e20736572766572> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 60.796 Td +/F1.0 10.5 Tf +<5468652061637469766174696f6e206f66207468652053534c2073657373696f6e20726573756d7074696f6e206f6e2074686520736572766572206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3233> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +142 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 141 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +/F6.0 97 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +143 0 obj +<< /Length 9230 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.11 Td +/F7.0 10.5 Tf +<556e6b6e6f776e2053534c206572726f7220636f6465203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 769.926 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 720.474 Td +/F2.0 27 Tf +[<57> 49.8047 <61726e696e67204d65737361676573>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 673.494 Td +/F2.0 22 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652054> 20.0195 <435020436f6e6e656374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 643.574 Td +/F2.0 22 Tf +<4172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 616.57 Td +/F7.0 10.5 Tf +<4572726f72207768656e2072656164696e67207468652072656365697665642054435020504455> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 590.386 Td +/F1.0 10.5 Tf +[<5468652072656365697665642054> 20.0195 <4350205044552063616e6e6f7420626520726561642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +2.4269 Tw + +BT +48.24 564.79 Td +/F7.0 10.5 Tf +<636f6e6e65637428292072657475726e6564206572726f7220636f6465204541444452494e5553452e205065726861707320746869732069732061206b65726e656c206275672e20547279696e6720746f20636f6e6e656374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 551.845 Td +/F7.0 10.5 Tf +<616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.2714 Tw + +BT +48.24 525.661 Td +/F1.0 10.5 Tf +[<5768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c766573207468652070726f626c656d>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5668 Tw + +BT +48.24 509.881 Td +/F1.0 10.5 Tf +<616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e656374206173206120776f726b61726f756e642e> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 494.101 Td +/F1.0 10.5 Tf +<546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 466.321 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 450.541 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 424.945 Td +/F7.0 10.5 Tf +<436f6e6e65637428292072657475726e6564206572726f7220636f6465203c76616c75653e2c20747279696e6720746f20636f6e6e65637420616761696e2028544350207265636f6e6e656374206d6f646529> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5521 Tw + +BT +48.24 398.761 Td +/F1.0 10.5 Tf +[<5768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c20616e642074686520676976656e206572726f7220636f6465207761732072657475726e65642e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.8496 Tw + +BT +48.24 382.981 Td +/F1.0 10.5 Tf +<546865206e6578742074727920757375616c6c7920736f6c766573207468652070726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e205468652074657374> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 367.201 Td +/F1.0 10.5 Tf +<706f7274207265747269657320746f20636f6e6e656374206173206120776f726b61726f756e642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 341.605 Td +/F7.0 10.5 Tf +<54435020636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f7468657220736964652c20747279696e6720746f207265636f6e6e65637420616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1251 Tw + +BT +48.24 315.421 Td +/F1.0 10.5 Tf +[<5468652054> 20.0195 <4350206f722053534c20636f6e6e656374696f6e2077617320726566757365642062> 20.0195 <7920746865206f7468657220706565722c206f72206974207761732062726f6b> 20.0195 <656e2e20546865207465737420706f727420747269657320746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 299.641 Td +/F1.0 10.5 Tf +<7265636f6e6e65637420616761696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 274.045 Td +/F7.0 10.5 Tf +<544350207265636f6e6e656374207375636365737366756c6c792066696e69736865642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 247.861 Td +/F1.0 10.5 Tf +<54686973207761726e696e67206d65737361676520697320676976656e20696620746865207265636f6e6e656374696f6e20776173207375636365737366756c2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 222.265 Td +/F7.0 10.5 Tf +<506172616d65746572203c6e616d653e20686173206e6f206d65616e696e67206966207573655f636f6e6e656374696f6e5f4153507320697320757365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 196.081 Td +/F1.0 10.5 Tf +[<5468657265206973206e6f20656666656374206f662073657474696e67207468697320706172> 20.0195 <616d65746572207768656e20>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +293.4778 196.081 Td +/F3.0 10.5 Tf +<7573655f636f6e6e656374696f6e5f41535073> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +393.2278 196.081 Td +/F1.0 10.5 Tf +<2069732073657420746f20> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +435.9943 196.081 Td +/F5.0 10.5 Tf +<2279657322> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +462.2443 196.081 Td +/F1.0 10.5 Tf +<2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 170.485 Td +/F7.0 10.5 Tf +<41627374726163745f536f636b65743a3a72656d6f76655f636c69656e743a203c76616c75653e2069732074686520736572766572206c697374656e696e6720706f72742c2063616e206e6f742062652072656d6f76656421> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +48.24 144.301 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6111 Tw + +BT +70.2711 144.301 Td +/F3.0 10.5 Tf +<636c69656e745f6964> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +117.5211 144.301 Td +/F1.0 10.5 Tf +<20676976656e20696e2074686520> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.6111 Tw + +BT +184.4039 144.301 Td +/F3.0 10.5 Tf +<72656d6f76655f636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.6111 Tw + +BT +252.6539 144.301 Td +/F1.0 10.5 Tf +[<2066756e6374696f6e2069732063757272656e746c7920757365642061732074686520736572766572> -29.7852 ] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 128.521 Td +/F1.0 10.5 Tf +[<63616e206e6f742062652072656d6f7665642e2054> 29.7852 <6f20636c6f73652074686520736572766572206c697374656e696e6720706f72742c207573652074686520>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +359.4413 128.521 Td +/F3.0 10.5 Tf +<636c6f73655f6c697374656e5f706f7274> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +448.6913 128.521 Td +/F1.0 10.5 Tf +<2066756e6374696f6e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 102.925 Td +/F7.0 10.5 Tf +<436c69656e74203c76616c75653e20686173206e6f74206265656e2072656d6f7665642c2070726f6772616d6d696e67206572726f72> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 76.741 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8792 Tw + +BT +48.24 51.145 Td +/F7.0 10.5 Tf +<53656e64696e672064617461206f6e2066696c652064657363726970746f72203c76616c75653e2e5468652073656e64696e67206f7065726174696f6e20776f756c6420626c6f636b20657865637574696f6e2e205468652073697a65> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3234> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +144 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 143 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F2.0 19 0 R +/F3.0 27 0 R +/F5.0 59 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +145 0 obj +[144 0 R /XYZ 0 754.11 null] +endobj +146 0 obj +[144 0 R /XYZ 0 701.79 null] +endobj +147 0 obj +<< /Length 8421 +>> +stream +q +/DeviceRGB cs +0.6941 0.1294 0.2745 scn +/DeviceRGB CS +0.6941 0.1294 0.2745 SCN + +BT +48.24 796.86 Td +/F7.0 10.5 Tf +<6f6620746865206f7574676f696e67206275666665722077617320696e637265617365642066726f6d203c6f6c645f76616c75653e20746f203c6e65775f76616c75653e2062797465732e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0536 Tw + +BT +48.24 770.676 Td +/F1.0 10.5 Tf +[<5768656e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320757365642077697468206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c206966207468652073656e64696e67206f706572> 20.0195 <6174696f6e20776f756c6420626c6f636b2c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9731 Tw + +BT +48.24 754.896 Td +/F1.0 10.5 Tf +[<6669727374207468652073697a65206f66207468652073656e64696e672062756666657220697320696e637265617365642e205468697320697320746865206669727374207374657020746f2061766f69642054> 20.0195 <435020646561646c6f636b2e20496e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 739.116 Td +/F1.0 10.5 Tf +[<7365636f6e642073746570207468652054> 29.7852 <65737420506f72742077696c6c2074727920746f207265636569766520736f6d6520646174612e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +0.8115 Tw + +BT +48.24 713.52 Td +/F7.0 10.5 Tf +<53656e64696e672064617461206f6e2066696c652064657363726970746f72203c76616c75653e2e5468652073656e64696e67206f7065726174696f6e20776f756c6420626c6f636b20657865637574696f6e20616e64206974206973> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.1286 Tw + +BT +48.24 700.575 Td +/F7.0 10.5 Tf +<6e6f7420706f737369626c6520746f206675727468657220696e637265617365207468652073697a65206f6620746865206f7574676f696e67206275666665722e20547279696e6720746f2070726f6365737320696e636f6d696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 687.63 Td +/F7.0 10.5 Tf +<6461746120746f2061766f696420646561646c6f636b2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0536 Tw + +BT +48.24 661.446 Td +/F1.0 10.5 Tf +[<5768656e20746865204162737472> 20.0195 <61637420536f636b> 20.0195 <657420697320757365642077697468206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c206966207468652073656e64696e67206f706572> 20.0195 <6174696f6e20776f756c6420626c6f636b2c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7353 Tw + +BT +48.24 645.666 Td +/F1.0 10.5 Tf +[<616e64207468652073697a65206f6620746865206f7574676f696e67206275666665722063616e6e6f7420626520696e637265617365642c207468652054> 29.7852 <65737420506f727420747269657320746f207265636569766520736f6d65206461746120746f>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.886 Td +/F1.0 10.5 Tf +<61766f696420646561646c6f636b2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 604.29 Td +/F7.0 10.5 Tf +<53797374656d2063616c6c2066636e746c28465f474554464c29206661696c6564206f6e2066696c652064657363726970746f722025642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 580.29 Td +/F7.0 10.5 Tf +<53797374656d2063616c6c2066636e746c28465f534554464c29206661696c6564206f6e2066696c652064657363726970746f722025642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 556.29 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 530.106 Td +/F1.0 10.5 Tf +<54686520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +69.66 530.106 Td +/F3.0 10.5 Tf +<736574736f636b6f7074> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +122.16 530.106 Td +/F1.0 10.5 Tf +<2066756e6374696f6e206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 504.51 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 478.326 Td +/F1.0 10.5 Tf +<5468652062696e642073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 452.73 Td +/F7.0 10.5 Tf +<43616e6e6f74206c697374656e20617420706f7274207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a203c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 426.546 Td +/F1.0 10.5 Tf +<546865206c697374656e2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8786 Tw + +BT +48.24 400.95 Td +/F7.0 10.5 Tf +<676574736f636b6e616d6528292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 388.005 Td +/F7.0 10.5 Tf +<3c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 361.821 Td +/F1.0 10.5 Tf +<54686520676574736f636b6e616d652073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 336.225 Td +/F7.0 10.5 Tf +<67657461646472696e666f3a203c6572726f72746578723e20666f7220686f7374203c686f73743e2073657276696365203c736572766963653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 310.041 Td +/F1.0 10.5 Tf +<5468652067657461646472696e666f2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +1.8786 Tw + +BT +48.24 284.445 Td +/F7.0 10.5 Tf +<6765746e616d65696e666f28292073797374656d2063616c6c206661696c6564206f6e207468652073657276657220736f636b6574207768656e20747279696e6720746f206f70656e20746865206c697374656e20706f72743a> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 271.5 Td +/F7.0 10.5 Tf +<3c706f72743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 245.316 Td +/F1.0 10.5 Tf +<546865206765746e616d65696e666f2073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 219.72 Td +/F7.0 10.5 Tf +<43616e6e6f74206f70656e20736f636b6574207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 193.536 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <65742073797374656d2063616c6c206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 167.94 Td +/F7.0 10.5 Tf +<536574736f636b6f7074206661696c6564207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f726d6573736167653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 141.756 Td +/F1.0 10.5 Tf +[<54686520736574736f636b> 20.0195 <6f70742073797374656d2063616c6c206661696c65642e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 116.16 Td +/F7.0 10.5 Tf +<43616e6e6f742062696e6420746f20706f7274207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 89.976 Td +/F1.0 10.5 Tf +<5468652062696e642073797374656d2063616c6c206661696c65642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 64.38 Td +/F7.0 10.5 Tf +<416c7265616479207472696564203c6e3e2074696d65732c20676976696e67207570207768656e20747279696e6720746f206f70656e20636c69656e7420636f6e6e656374696f6e3a203c6572726f72746578743e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3235> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +148 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 147 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F7.0 127 0 R +/F1.0 8 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +>> +endobj +149 0 obj +<< /Length 7665 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +1.7015 Tw + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +<54686520646561646c6f636b20636f756e746572206578636565647320746865206861726420636f646564206c696d6974207768656e20747279696e6720746f20636f6e6e65637420746f20612073657276657220696e20636c69656e74> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.0722 Tw + +BT +48.24 778.896 Td +/F1.0 10.5 Tf +[<6d6f64652e205768656e20636f6e6e656374696e67206f6e206120736f636b> 20.0195 <65742c20736f6d6574696d657320697420697320756e7375636365737366756c2e20546865206e6578742074727920757375616c6c7920736f6c76657320746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.0942 Tw + +BT +48.24 763.116 Td +/F1.0 10.5 Tf +<70726f626c656d20616e642074686520636f6e6e656374696f6e2077696c6c206265207375636365737366756c6c792061636365707465642e20546865207465737420706f7274207265747269657320746f20636f6e6e6563742061732061> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 747.336 Td +/F1.0 10.5 Tf +<776f726b61726f756e642e20546865206e756d626572206f6620747269657320686f7765766572206c696d6974656420746f2061766f69642068616e67696e6720746865207465737420706f72742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.3914 Tw + +BT +48.24 719.556 Td +/F1.0 10.5 Tf +[<446966666572656e74206f706572> 20.0195 <6174696e672073797374656d732062656861766520696e206120646966666572656e74207761> 20.0195 <79> 89.8438 <2e20546869732070726f626c656d2069732072> 20.0195 <617265206f6e20536f6c617269732c20556e697820616e64>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 703.776 Td +/F1.0 10.5 Tf +<4c696e75782073797374656d732c20627574206d756368206d6f7265206f6674656e206f6e2043796777696e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 659.664 Td +/F2.0 22 Tf +[<57> 49.8047 <61726e696e67204d6573736167657320496e20436173652053534c20436f6e6e656374696f6e73>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 629.744 Td +/F2.0 22 Tf +<4172652055736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 602.74 Td +/F7.0 10.5 Tf +<5761726e696e673a207261636520636f6e646974696f6e207768696c652073657474696e672063757272656e7420636c69656e74206f626a65637420706f696e7465722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 576.556 Td +/F1.0 10.5 Tf +<5468652063757272656e7420636c69656e74206f626a65637420706f696e74657220697320616c7265616479207365742e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 550.96 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e2066726f6d20636c69656e74203c76616c75653e2069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 524.776 Td +/F1.0 10.5 Tf +<54686520636f6e6e656374696f6e2066726f6d206120636c69656e74206973207265667573656420696e20746865207365727665722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 499.18 Td +/F7.0 10.5 Tf +<436f6e6e656374696f6e20746f207365727665722069732072656675736564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 472.996 Td +/F1.0 10.5 Tf +[<54686520636f6e6e656374696f6e2066726f6d2074686520636c69656e7420697320726566757365642062> 20.0195 <7920746865207365727665722e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 447.4 Td +/F7.0 10.5 Tf +<53657276657220646964206e6f742073656e6420612073657373696f6e204944> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 421.216 Td +/F1.0 10.5 Tf +<5468652053534c2073657276657220646964206e6f742073656e6420612073657373696f6e2049442e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 395.62 Td +/F7.0 10.5 Tf +<566572696669636174696f6e206661696c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 369.436 Td +/F1.0 10.5 Tf +<54686520766572696669636174696f6e206f6620746865206f746865722073696465206973206661696c65642e2054686520636f6e6e656374696f6e2077696c6c206265207368757420646f776e2e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 343.84 Td +/F7.0 10.5 Tf +<53534c206f626a656374206e6f7420666f756e6420666f7220636c69656e74203c76616c75653e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 317.656 Td +/F1.0 10.5 Tf +<49742073686f756c64206e657665722073686f772075702e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 292.06 Td +/F7.0 10.5 Tf +<53534c5f536f636b65743a3a726563656976655f6d6573736167655f6f6e5f66643a2053534c20636f6e6e656374696f6e2077617320696e74657272757074656420627920746865206f746865722073696465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.7244 Tw + +BT +48.24 265.876 Td +/F1.0 10.5 Tf +<54686520544c532f53534c20636f6e6e656374696f6e20686173206265656e20636c6f7365642e204966207468652070726f746f636f6c2076657273696f6e2069732053534c20332e30206f7220544c5320312e302c2074686973207761726e696e67> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1929 Tw + +BT +48.24 250.096 Td +/F1.0 10.5 Tf +<61707065617273206f6e6c79206966206120636c6f7375726520616c65727420686173206f6363757272656420696e207468652070726f746f636f6c2c20692e652eca69662074686520636f6e6e656374696f6e20686173206265656e20636c6f736564> Tj +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.1041 Tw + +BT +48.24 234.316 Td +/F1.0 10.5 Tf +[<636c65616e6c79> 89.8438 <2e204e6f7465207468617420696e2074686973206361736520697420646f6573206e6f74206e65636573736172696c7920696e64696361746520746861742074686520756e6465726c79696e67207472> 20.0195 <616e73706f727420686173206265656e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 218.536 Td +/F1.0 10.5 Tf +<636c6f7365642e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 192.94 Td +/F7.0 10.5 Tf +<4f74686572207369646520646f6573206e6f742068617665206365727469666963617465> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 166.756 Td +/F1.0 10.5 Tf +<546865206f746865722073696465206f66207468652053534c20636f6e6e656374696f6e20646f6573206e6f74206861766520612063657274696669636174652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 141.16 Td +/F7.0 10.5 Tf +<536f6c61726973207061746368657320746f2070726f766964652072616e646f6d2067656e65726174696f6e206465766963657320617265206e6f7420696e7374616c6c6564> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.3944 Tw + +BT +48.24 114.976 Td +/F1.0 10.5 Tf +[<536f6c61726973207061746368657320746f2070726f766964652072> 20.0195 <616e646f6d2067656e6572> 20.0195 <6174696f6e206465766963657320617265206e6f7420696e7374616c6c65642e204120776f726b61726f756e642077696c6c2062652075736564>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 99.196 Td +/F1.0 10.5 Tf +<746f2073656564207468652050524e472e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +48.24 73.6 Td +/F7.0 10.5 Tf +<50726976617465206b657920646f6573206e6f74206d6174636820746865206365727469666963617465207075626c6963206b6579> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3236> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +150 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 149 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +/F7.0 127 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +>> +endobj +151 0 obj +[150 0 R /XYZ 0 687.96 null] +endobj +152 0 obj +<< /Length 7686 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 794.676 Td +/F1.0 10.5 Tf +[<5468652070726976617465206b> 20.0195 <65792073706563696669656420666f7220746865207465737420706f727420646f6573206e6f74206d61746368207769746820746865207075626c6963206b> 20.0195 <6579> 89.8438 <2e>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 745.224 Td +/F2.0 27 Tf +[<54> 29.7852 <65726d696e6f6c6f6779>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 714.576 Td +/F2.0 10.5 Tf +[<536f636b> 20.0195 <6574733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4108 Tw + +BT +48.24 698.796 Td +/F1.0 10.5 Tf +[<54686520736f636b> 20.0195 <65742069732061206d6574686f6420666f7220636f6d6d756e69636174696f6e206265747765656e206120636c69656e742070726f6772> 20.0195 <616d20616e642061207365727665722070726f6772> 20.0195 <616d20696e2061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.4106 Tw + +BT +48.24 683.016 Td +/F1.0 10.5 Tf +[<6e6574776f726b2e204120736f636b> 20.0195 <657420697320646566696e6564206173202274686520656e64706f696e7420696e206120636f6e6e656374696f6e> 40.0391 <222e20536f636b> 20.0195 <65747320617265206372656174656420616e64207573656420776974682061>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +5.2202 Tw + +BT +48.24 667.236 Td +/F1.0 10.5 Tf +[<736574206f662070726f6772> 20.0195 <616d6d696e67207265717565737473206f72202266756e6374696f6e2063616c6c732220736f6d6574696d65732063616c6c65642074686520736f636b> 20.0195 <657473206170706c69636174696f6e>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +3.0739 Tw + +BT +48.24 651.456 Td +/F1.0 10.5 Tf +[<70726f6772> 20.0195 <616d6d696e6720696e746572666163652028415049292e20546865206d6f737420636f6d6d6f6e20736f636b> 20.0195 <65742041504920697320746865204265726b> 20.0195 <656c657920554e49582043206c616e6775616765>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.658 Tw + +BT +48.24 635.676 Td +/F1.0 10.5 Tf +[<696e7465726661636520666f7220736f636b> 20.0195 <6574732e20536f636b> 20.0195 <6574732063616e20616c736f206265207573656420666f7220636f6d6d756e69636174696f6e206265747765656e2070726f6365737365732077697468696e20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 619.896 Td +/F1.0 10.5 Tf +<73616d6520636f6d70757465722e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 592.116 Td +/F2.0 10.5 Tf +[<426c6f636b696e6720616e64206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <6574733a>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.5219 Tw + +BT +48.24 576.336 Td +/F1.0 10.5 Tf +[<5573696e67206120626c6f636b696e6720736f636b> 20.0195 <65742c20736f6d6520736f636b> 20.0195 <6574206f706572> 20.0195 <6174696f6e73202873656e642c20726563656976652c20636f6e6e6563742c20616363657074292077696c6c20626c6f636b20756e74696c20746865>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.1886 Tw + +BT +48.24 560.556 Td +/F1.0 10.5 Tf +[<6f706572> 20.0195 <6174696f6e2069732066696e6973686564206f7220616e206572726f72206f63637572732e205573696e672061206e6f6e2d626c6f636b696e6720736f636b> 20.0195 <65742c207468657365206f706572> 20.0195 <6174696f6e732077696c6c206e65766572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 544.776 Td +/F1.0 10.5 Tf +<626c6f636b206275742072657475726e207769746820616e206572726f7220616e642073657420> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.6941 0.1294 0.2745 scn +0.6941 0.1294 0.2745 SCN + +BT +241.5555 544.776 Td +/F3.0 10.5 Tf +<6572726e6f> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +267.8055 544.776 Td +/F1.0 10.5 Tf +<20746f2074686520617070726f7072696174652076616c75652e> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 516.996 Td +/F2.0 10.5 Tf +<4f70656e53534c3a> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +0.9081 Tw + +BT +48.24 501.216 Td +/F1.0 10.5 Tf +[<546865204f70656e53534c2050726f6a656374206973206120636f6c6c61626f72> 20.0195 <6174697665206566666f727420746f20646576656c6f70206120726f627573742c20636f6d6d65726369616c2d6772> 20.0195 <6164652c2066756c6c2d66656174757265642c>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +1.4408 Tw + +BT +48.24 485.436 Td +/F1.0 10.5 Tf +[<616e64206f70656e20736f7572636520746f6f6c6b697420696d706c656d656e74696e67207468652053656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572202853534c2076322f76332920616e64205472> 20.0195 <616e73706f7274204c61> 20.0195 <796572>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +2.2266 Tw + +BT +48.24 469.656 Td +/F1.0 10.5 Tf +[<53656375726974792028544c53207631292070726f746f636f6c732061732077656c6c20617320612066756c6c2d737472656e6774682067656e6572> 20.0195 <616c20707572706f73652063727970746f6772> 20.0195 <617068> 20.0195 <79206c696272> 20.0195 <617279> 89.8438 <2e2046> 40.0391 <6f72>] TJ +ET + + +0.0 Tw +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 453.876 Td +/F1.0 10.5 Tf +<6d6f726520696e666f726d6174696f6e206f6e20746865204f70656e53534c2070726f6a6563742073656520> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +278.8935 453.876 Td +/F1.0 10.5 Tf +<5b335d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 404.424 Td +/F2.0 27 Tf +<416262726576696174696f6e73> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 373.776 Td +/F2.0 10.5 Tf +<4153> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 354.996 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <61637420536f636b> 20.0195 <6574>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 327.216 Td +/F2.0 10.5 Tf +<415350> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 308.436 Td +/F1.0 10.5 Tf +[<4162737472> 20.0195 <6163742053657276696365205072696d6974697665>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 280.656 Td +/F2.0 10.5 Tf +<49507634> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 261.876 Td +/F1.0 10.5 Tf +<496e7465726e65742050726f746f636f6c2076657273696f6e2034> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 234.096 Td +/F2.0 10.5 Tf +<49507636> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 215.316 Td +/F1.0 10.5 Tf +<496e7465726e65742050726f746f636f6c2076657273696f6e2036> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 187.536 Td +/F2.0 10.5 Tf +<50454d> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 168.756 Td +/F1.0 10.5 Tf +<5072697661637920456e68616e636564204d61696c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 140.976 Td +/F2.0 10.5 Tf +[<52> 20.0195 <5445>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 122.196 Td +/F1.0 10.5 Tf +<52756e2d54696d6520456e7669726f6e6d656e74> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 94.416 Td +/F2.0 10.5 Tf +<53534c> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 75.636 Td +/F1.0 10.5 Tf +[<53656375726520536f636b> 20.0195 <657473204c61> 20.0195 <796572>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp1 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +535.978 14.388 Td +/F1.0 9 Tf +<3237> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +153 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 152 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F1.0 8 0 R +/F2.0 19 0 R +/F3.0 27 0 R +>> +/XObject << /Stamp1 288 0 R +>> +>> +/Annots [155 0 R] +>> +endobj +154 0 obj +[153 0 R /XYZ 0 778.86 null] +endobj +155 0 obj +<< /Border [0 0 0] +/Dest (_3) +/Subtype /Link +/Rect [278.8935 450.81 292.302 465.09] +/Type /Annot +>> +endobj +156 0 obj +[153 0 R /XYZ 0 438.06 null] +endobj +157 0 obj +<< /Length 2665 +>> +stream +q +/DeviceRGB cs +0.2 0.2 0.2 scn +/DeviceRGB CS +0.2 0.2 0.2 SCN + +BT +48.24 793.926 Td +/F2.0 10.5 Tf +<535554> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 775.146 Td +/F1.0 10.5 Tf +[<53> 20.0195 <797374656d20556e6465722054> 29.7852 <657374>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 747.366 Td +/F2.0 10.5 Tf +[<54> 20.0195 <4350>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 728.586 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e736d697373696f6e20436f6e74726f6c2050726f746f636f6c>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 700.806 Td +/F2.0 10.5 Tf +<544c53> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 682.026 Td +/F1.0 10.5 Tf +[<5472> 20.0195 <616e73706f7274204c61> 20.0195 <796572205365637572697479>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 654.246 Td +/F2.0 10.5 Tf +[<5454> 20.0195 <434e2d33>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +63.24 635.466 Td +/F1.0 10.5 Tf +[<54> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e2033>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 586.014 Td +/F2.0 27 Tf +<5265666572656e636573> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 555.366 Td +/F1.0 10.5 Tf +<5b315d204554534920455320323031203837332d3120283230303229> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 539.586 Td +/F1.0 10.5 Tf +[<5468652054> 29.7852 <657374696e6720616e642054> 29.7852 <65737420436f6e74726f6c204e6f746174696f6e2076657273696f6e20332e205061727420313a20436f7265204c616e6775616765>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 511.806 Td +/F1.0 10.5 Tf +[<5b325d205573657220477569646520666f7220544954> 60.0586 <414e205454> 20.0195 <434ed0332054> 29.7852 <657374204578656375746f72>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 484.026 Td +/F1.0 10.5 Tf +<5b335d204f70656e53534c20746f6f6c6b6974> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +48.24 468.246 Td +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +0.2588 0.5451 0.7922 scn +0.2588 0.5451 0.7922 SCN + +BT +48.24 468.246 Td +/F1.0 10.5 Tf +[<687474703a2f2f777777> 69.8242 <2e6f70656e73736c2e6f7267>] TJ +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +q +0.0 0.0 0.0 scn +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +/Stamp2 Do +0.2 0.2 0.2 scn +0.2 0.2 0.2 SCN + +BT +49.24 14.388 Td +/F1.0 9 Tf +<3238> Tj +ET + +0.0 0.0 0.0 SCN +0.0 0.0 0.0 scn +Q +Q + +endstream +endobj +158 0 obj +<< /Type /Page +/Parent 3 0 R +/MediaBox [0 0 595.28 841.89] +/CropBox [0 0 595.28 841.89] +/BleedBox [0 0 595.28 841.89] +/TrimBox [0 0 595.28 841.89] +/ArtBox [0 0 595.28 841.89] +/Contents 157 0 R +/Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] +/Font << /F2.0 19 0 R +/F1.0 8 0 R +>> +/XObject << /Stamp2 289 0 R +>> +>> +/Annots [163 0 R] +>> +endobj +159 0 obj +[158 0 R /XYZ 0 619.65 null] +endobj +160 0 obj +[158 0 R /XYZ 0 567.33 null] +endobj +161 0 obj +[158 0 R /XYZ 0 523.77 null] +endobj +162 0 obj +[158 0 R /XYZ 0 495.99 null] +endobj +163 0 obj +<< /Border [0 0 0] +/A << /Type /Action +/S /URI +/URI (http://www.openssl.org) +>> +/Subtype /Link +/Rect [48.24 465.18 163.6788 479.46] +/Type /Annot +>> +endobj +164 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [48.24 748.79 156.6105 763.07] +/Type /Annot +>> +endobj +165 0 obj +<< /Border [0 0 0] +/Dest (_about_this_document) +/Subtype /Link +/Rect [541.1705 748.79 547.04 763.07] +/Type /Annot +>> +endobj +166 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [60.24 730.31 201.801 744.59] +/Type /Annot +>> +endobj +167 0 obj +<< /Border [0 0 0] +/Dest (_how_to_read_this_document) +/Subtype /Link +/Rect [541.1705 730.31 547.04 744.59] +/Type /Annot +>> +endobj +168 0 obj +<< /Border [0 0 0] +/Dest (_presumed_knowledge) +/Subtype /Link +/Rect [60.24 711.83 169.02 726.11] +/Type /Annot +>> +endobj +169 0 obj +<< /Border [0 0 0] +/Dest (_presumed_knowledge) +/Subtype /Link +/Rect [541.1705 711.83 547.04 726.11] +/Type /Annot +>> +endobj +170 0 obj +<< /Border [0 0 0] +/Dest (_functionality) +/Subtype /Link +/Rect [48.24 693.35 115.02 707.63] +/Type /Annot +>> +endobj +171 0 obj +<< /Border [0 0 0] +/Dest (_functionality) +/Subtype /Link +/Rect [541.1705 693.35 547.04 707.63] +/Type /Annot +>> +endobj +172 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [60.24 674.87 168.5683 689.15] +/Type /Annot +>> +endobj +173 0 obj +<< /Border [0 0 0] +/Dest (_system_requirements) +/Subtype /Link +/Rect [541.1705 674.87 547.04 689.15] +/Type /Annot +>> +endobj +174 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [60.24 656.39 174.984 670.67] +/Type /Annot +>> +endobj +175 0 obj +<< /Border [0 0 0] +/Dest (_fundamental_concepts) +/Subtype /Link +/Rect [541.1705 656.39 547.04 670.67] +/Type /Annot +>> +endobj +176 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [72.24 637.91 159.9045 652.19] +/Type /Annot +>> +endobj +177 0 obj +<< /Border [0 0 0] +/Dest (_module_structure) +/Subtype /Link +/Rect [541.1705 637.91 547.04 652.19] +/Type /Annot +>> +endobj +178 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [60.24 619.43 138.6855 633.71] +/Type /Annot +>> +endobj +179 0 obj +<< /Border [0 0 0] +/Dest (_start_procedure) +/Subtype /Link +/Rect [541.1705 619.43 547.04 633.71] +/Type /Annot +>> +endobj +180 0 obj +<< /Border [0 0 0] +/Dest (_connection_asps) +/Subtype /Link +/Rect [72.24 600.95 155.841 615.23] +/Type /Annot +>> +endobj +181 0 obj +<< /Border [0 0 0] +/Dest (_connection_asps) +/Subtype /Link +/Rect [541.1705 600.95 547.04 615.23] +/Type /Annot +>> +endobj +182 0 obj +<< /Border [0 0 0] +/Dest (_server_mode) +/Subtype /Link +/Rect [72.24 582.47 135.8175 596.75] +/Type /Annot +>> +endobj +183 0 obj +<< /Border [0 0 0] +/Dest (_server_mode) +/Subtype /Link +/Rect [541.1705 582.47 547.04 596.75] +/Type /Annot +>> +endobj +184 0 obj +<< /Border [0 0 0] +/Dest (_client_mode) +/Subtype /Link +/Rect [72.24 563.99 132.0375 578.27] +/Type /Annot +>> +endobj +185 0 obj +<< /Border [0 0 0] +/Dest (_client_mode) +/Subtype /Link +/Rect [541.1705 563.99 547.04 578.27] +/Type /Annot +>> +endobj +186 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-messages) +/Subtype /Link +/Rect [60.24 545.51 201.591 559.79] +/Type /Annot +>> +endobj +187 0 obj +<< /Border [0 0 0] +/Dest (sending-receiving-messages) +/Subtype /Link +/Rect [541.1705 545.51 547.04 559.79] +/Type /Annot +>> +endobj +188 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [60.24 527.03 99.909 541.31] +/Type /Annot +>> +endobj +189 0 obj +<< /Border [0 0 0] +/Dest (_logging) +/Subtype /Link +/Rect [541.1705 527.03 547.04 541.31] +/Type /Annot +>> +endobj +190 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [60.24 508.55 136.848 522.83] +/Type /Annot +>> +endobj +191 0 obj +<< /Border [0 0 0] +/Dest (_error_handling) +/Subtype /Link +/Rect [541.1705 508.55 547.04 522.83] +/Type /Annot +>> +endobj +192 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [60.24 490.07 128.721 504.35] +/Type /Annot +>> +endobj +193 0 obj +<< /Border [0 0 0] +/Dest (_closing_down) +/Subtype /Link +/Rect [541.1705 490.07 547.04 504.35] +/Type /Annot +>> +endobj +194 0 obj +<< /Border [0 0 0] +/Dest (_ipv6_support) +/Subtype /Link +/Rect [60.24 471.59 125.0355 485.87] +/Type /Annot +>> +endobj +195 0 obj +<< /Border [0 0 0] +/Dest (_ipv6_support) +/Subtype /Link +/Rect [541.1705 471.59 547.04 485.87] +/Type /Annot +>> +endobj +196 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [60.24 453.11 147.684 467.39] +/Type /Annot +>> +endobj +197 0 obj +<< /Border [0 0 0] +/Dest (_ssl_functionality) +/Subtype /Link +/Rect [541.1705 453.11 547.04 467.39] +/Type /Annot +>> +endobj +198 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [72.24 434.63 133.4655 448.91] +/Type /Annot +>> +endobj +199 0 obj +<< /Border [0 0 0] +/Dest (_compilation) +/Subtype /Link +/Rect [541.1705 434.63 547.04 448.91] +/Type /Annot +>> +endobj +200 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [72.24 416.15 146.8213 430.43] +/Type /Annot +>> +endobj +201 0 obj +<< /Border [0 0 0] +/Dest (_authentication) +/Subtype /Link +/Rect [541.1705 416.15 547.04 430.43] +/Type /Annot +>> +endobj +202 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [72.24 397.67 146.6006 411.95] +/Type /Annot +>> +endobj +203 0 obj +<< /Border [0 0 0] +/Dest (_other_features) +/Subtype /Link +/Rect [541.1705 397.67 547.04 411.95] +/Type /Annot +>> +endobj +204 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [72.24 379.19 129.6015 393.47] +/Type /Annot +>> +endobj +205 0 obj +<< /Border [0 0 0] +/Dest (_limitations) +/Subtype /Link +/Rect [541.1705 379.19 547.04 393.47] +/Type /Annot +>> +endobj +206 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [48.24 360.71 113.5838 374.99] +/Type /Annot +>> +endobj +207 0 obj +<< /Border [0 0 0] +/Dest (_the_test_port) +/Subtype /Link +/Rect [541.1705 360.71 547.04 374.99] +/Type /Annot +>> +endobj +208 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [60.24 342.23 108.7605 356.51] +/Type /Annot +>> +endobj +209 0 obj +<< /Border [0 0 0] +/Dest (_overview) +/Subtype /Link +/Rect [541.1705 342.23 547.04 356.51] +/Type /Annot +>> +endobj +210 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [60.24 323.75 117.486 338.03] +/Type /Annot +>> +endobj +211 0 obj +<< /Border [0 0 0] +/Dest (_installation) +/Subtype /Link +/Rect [541.1705 323.75 547.04 338.03] +/Type /Annot +>> +endobj +212 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [60.24 305.27 129.5503 319.55] +/Type /Annot +>> +endobj +213 0 obj +<< /Border [0 0 0] +/Dest (_configuration) +/Subtype /Link +/Rect [541.1705 305.27 547.04 319.55] +/Type /Annot +>> +endobj +214 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [72.24 286.79 426.9862 301.07] +/Type /Annot +>> +endobj +215 0 obj +<< /Border [0 0 0] +/Dest (Abstract_Socket_Test_Port_Parameters_in_the_Test_Port_Configuration_File) +/Subtype /Link +/Rect [541.1705 286.79 547.04 301.07] +/Type /Annot +>> +endobj +216 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [60.24 268.31 81.66 282.59] +/Type /Annot +>> +endobj +217 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [81.66 269.906 155.16 280.406] +/Type /Annot +>> +endobj +218 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [155.16 268.31 175.4775 282.59] +/Type /Annot +>> +endobj +219 0 obj +<< /Border [0 0 0] +/Dest (_the_abstractsocket_api) +/Subtype /Link +/Rect [541.1705 268.31 547.04 282.59] +/Type /Annot +>> +endobj +220 0 obj +<< /Border [0 0 0] +/Dest (map-unmap-the-test-port) +/Subtype /Link +/Rect [72.24 249.83 199.3133 264.11] +/Type /Annot +>> +endobj +221 0 obj +<< /Border [0 0 0] +/Dest (map-unmap-the-test-port) +/Subtype /Link +/Rect [541.1705 249.83 547.04 264.11] +/Type /Annot +>> +endobj +222 0 obj +<< /Border [0 0 0] +/Dest (_setting_test_port_parameters) +/Subtype /Link +/Rect [72.24 231.35 213.4881 245.63] +/Type /Annot +>> +endobj +223 0 obj +<< /Border [0 0 0] +/Dest (_setting_test_port_parameters) +/Subtype /Link +/Rect [541.1705 231.35 547.04 245.63] +/Type /Annot +>> +endobj +224 0 obj +<< /Border [0 0 0] +/Dest (_open_a_listening_port) +/Subtype /Link +/Rect [72.24 212.87 180.4425 227.15] +/Type /Annot +>> +endobj +225 0 obj +<< /Border [0 0 0] +/Dest (_open_a_listening_port) +/Subtype /Link +/Rect [535.301 212.87 547.04 227.15] +/Type /Annot +>> +endobj +226 0 obj +<< /Border [0 0 0] +/Dest (_close_the_listening_port) +/Subtype /Link +/Rect [72.24 194.39 189.9975 208.67] +/Type /Annot +>> +endobj +227 0 obj +<< /Border [0 0 0] +/Dest (_close_the_listening_port) +/Subtype /Link +/Rect [535.301 194.39 547.04 208.67] +/Type /Annot +>> +endobj +228 0 obj +<< /Border [0 0 0] +/Dest (_open_a_client_connection) +/Subtype /Link +/Rect [72.24 175.91 198.744 190.19] +/Type /Annot +>> +endobj +229 0 obj +<< /Border [0 0 0] +/Dest (_open_a_client_connection) +/Subtype /Link +/Rect [535.301 175.91 547.04 190.19] +/Type /Annot +>> +endobj +230 0 obj +<< /Border [0 0 0] +/Dest (_send_message) +/Subtype /Link +/Rect [72.24 157.43 141.582 171.71] +/Type /Annot +>> +endobj +231 0 obj +<< /Border [0 0 0] +/Dest (_send_message) +/Subtype /Link +/Rect [535.301 157.43 547.04 171.71] +/Type /Annot +>> +endobj +232 0 obj +<< /Border [0 0 0] +/Dest (_close_a_client_connection) +/Subtype /Link +/Rect [72.24 138.95 198.2295 153.23] +/Type /Annot +>> +endobj +233 0 obj +<< /Border [0 0 0] +/Dest (_close_a_client_connection) +/Subtype /Link +/Rect [535.301 138.95 547.04 153.23] +/Type /Annot +>> +endobj +234 0 obj +<< /Border [0 0 0] +/Dest (_test_port_parameter_names) +/Subtype /Link +/Rect [72.24 120.47 208.4481 134.75] +/Type /Annot +>> +endobj +235 0 obj +<< /Border [0 0 0] +/Dest (_test_port_parameter_names) +/Subtype /Link +/Rect [535.301 120.47 547.04 134.75] +/Type /Annot +>> +endobj +236 0 obj +<< /Border [0 0 0] +/Dest (_parameter_accessor_functions) +/Subtype /Link +/Rect [72.24 101.99 223.3556 116.27] +/Type /Annot +>> +endobj +237 0 obj +<< /Border [0 0 0] +/Dest (_parameter_accessor_functions) +/Subtype /Link +/Rect [535.301 101.99 547.04 116.27] +/Type /Annot +>> +endobj +238 0 obj +<< /Border [0 0 0] +/Dest (_logging_functions) +/Subtype /Link +/Rect [72.24 83.51 164.0205 97.79] +/Type /Annot +>> +endobj +239 0 obj +<< /Border [0 0 0] +/Dest (_logging_functions) +/Subtype /Link +/Rect [535.301 83.51 547.04 97.79] +/Type /Annot +>> +endobj +240 0 obj +<< /Border [0 0 0] +/Dest (_error_reporting) +/Subtype /Link +/Rect [72.24 65.03 151.7985 79.31] +/Type /Annot +>> +endobj +241 0 obj +<< /Border [0 0 0] +/Dest (_error_reporting) +/Subtype /Link +/Rect [535.301 65.03 547.04 79.31] +/Type /Annot +>> +endobj +242 0 obj +<< /Border [0 0 0] +/Dest (_tips_and_tricks) +/Subtype /Link +/Rect [48.24 791.61 124.491 805.89] +/Type /Annot +>> +endobj +243 0 obj +<< /Border [0 0 0] +/Dest (_tips_and_tricks) +/Subtype /Link +/Rect [535.301 791.61 547.04 805.89] +/Type /Annot +>> +endobj +244 0 obj +<< /Border [0 0 0] +/Dest (_usage) +/Subtype /Link +/Rect [60.24 773.13 89.661 787.41] +/Type /Annot +>> +endobj +245 0 obj +<< /Border [0 0 0] +/Dest (_usage) +/Subtype /Link +/Rect [535.301 773.13 547.04 787.41] +/Type /Annot +>> +endobj +246 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [72.24 754.65 208.7528 768.93] +/Type /Annot +>> +endobj +247 0 obj +<< /Border [0 0 0] +/Dest (deriving_the_test_port_class) +/Subtype /Link +/Rect [535.301 754.65 547.04 768.93] +/Type /Annot +>> +endobj +248 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [72.24 736.17 273.7245 750.45] +/Type /Annot +>> +endobj +249 0 obj +<< /Border [0 0 0] +/Dest (implementation_of_the_logger_functions) +/Subtype /Link +/Rect [535.301 736.17 547.04 750.45] +/Type /Annot +>> +endobj +250 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [72.24 717.69 181.9543 731.97] +/Type /Annot +>> +endobj +251 0 obj +<< /Border [0 0 0] +/Dest (function_translations) +/Subtype /Link +/Rect [535.301 717.69 547.04 731.97] +/Type /Annot +>> +endobj +252 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [72.24 699.21 421.2096 713.49] +/Type /Annot +>> +endobj +253 0 obj +<< /Border [0 0 0] +/Dest (functions_for_manipulating_the_set_of_events_for_which_the_port_waits) +/Subtype /Link +/Rect [535.301 699.21 547.04 713.49] +/Type /Annot +>> +endobj +254 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [72.24 680.73 126.609 695.01] +/Type /Annot +>> +endobj +255 0 obj +<< /Border [0 0 0] +/Dest (final_steps) +/Subtype /Link +/Rect [535.301 680.73 547.04 695.01] +/Type /Annot +>> +endobj +256 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [60.24 662.25 90.984 676.53] +/Type /Annot +>> +endobj +257 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [90.984 663.846 148.734 674.346] +/Type /Annot +>> +endobj +258 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [148.734 662.25 212.9543 676.53] +/Type /Annot +>> +endobj +259 0 obj +<< /Border [0 0 0] +/Dest (using-ttcn-buffer-in-test-ports) +/Subtype /Link +/Rect [535.301 662.25 547.04 676.53] +/Type /Annot +>> +endobj +260 0 obj +<< /Border [0 0 0] +/Dest (_using_ssl_on_top_of_a_tcp_connection) +/Subtype /Link +/Rect [60.24 643.77 248.2131 658.05] +/Type /Annot +>> +endobj +261 0 obj +<< /Border [0 0 0] +/Dest (_using_ssl_on_top_of_a_tcp_connection) +/Subtype /Link +/Rect [535.301 643.77 547.04 658.05] +/Type /Annot +>> +endobj +262 0 obj +<< /Border [0 0 0] +/Dest (_server_mode_2) +/Subtype /Link +/Rect [72.24 625.29 135.8175 639.57] +/Type /Annot +>> +endobj +263 0 obj +<< /Border [0 0 0] +/Dest (_server_mode_2) +/Subtype /Link +/Rect [535.301 625.29 547.04 639.57] +/Type /Annot +>> +endobj +264 0 obj +<< /Border [0 0 0] +/Dest (_client_mode_2) +/Subtype /Link +/Rect [72.24 606.81 132.0375 621.09] +/Type /Annot +>> +endobj +265 0 obj +<< /Border [0 0 0] +/Dest (_client_mode_2) +/Subtype /Link +/Rect [535.301 606.81 547.04 621.09] +/Type /Annot +>> +endobj +266 0 obj +<< /Border [0 0 0] +/Dest (_authentication_flow) +/Subtype /Link +/Rect [72.24 588.33 174.0793 602.61] +/Type /Annot +>> +endobj +267 0 obj +<< /Border [0 0 0] +/Dest (_authentication_flow) +/Subtype /Link +/Rect [535.301 588.33 547.04 602.61] +/Type /Annot +>> +endobj +268 0 obj +<< /Border [0 0 0] +/Dest (_adapting_derived_test_ports_to_support_ipv6) +/Subtype /Link +/Rect [60.24 569.85 279.4401 584.13] +/Type /Annot +>> +endobj +269 0 obj +<< /Border [0 0 0] +/Dest (_adapting_derived_test_ports_to_support_ipv6) +/Subtype /Link +/Rect [535.301 569.85 547.04 584.13] +/Type /Annot +>> +endobj +270 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [48.24 551.37 125.226 565.65] +/Type /Annot +>> +endobj +271 0 obj +<< /Border [0 0 0] +/Dest (_error_messages) +/Subtype /Link +/Rect [535.301 551.37 547.04 565.65] +/Type /Annot +>> +endobj +272 0 obj +<< /Border [0 0 0] +/Dest (_error_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [60.24 532.89 309.5623 547.17] +/Type /Annot +>> +endobj +273 0 obj +<< /Border [0 0 0] +/Dest (_error_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [535.301 532.89 547.04 547.17] +/Type /Annot +>> +endobj +274 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [60.24 514.41 363.6793 528.69] +/Type /Annot +>> +endobj +275 0 obj +<< /Border [0 0 0] +/Dest (_additional_error_messages_in_case_ssl_connections_are_used) +/Subtype /Link +/Rect [535.301 514.41 547.04 528.69] +/Type /Annot +>> +endobj +276 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [48.24 495.93 141.6396 510.21] +/Type /Annot +>> +endobj +277 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages) +/Subtype /Link +/Rect [535.301 495.93 547.04 510.21] +/Type /Annot +>> +endobj +278 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [60.24 477.45 325.9758 491.73] +/Type /Annot +>> +endobj +279 0 obj +<< /Border [0 0 0] +/Dest (_warning_messages_in_case_tcp_connections_are_used) +/Subtype /Link +/Rect [535.301 477.45 547.04 491.73] +/Type /Annot +>> +endobj +280 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [60.24 458.97 324.9261 473.25] +/Type /Annot +>> +endobj +281 0 obj +<< /Border [0 0 0] +/Dest (warning_messages_in_case_SSL_connections_are_used) +/Subtype /Link +/Rect [535.301 458.97 547.04 473.25] +/Type /Annot +>> +endobj +282 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [48.24 440.49 111.8933 454.77] +/Type /Annot +>> +endobj +283 0 obj +<< /Border [0 0 0] +/Dest (_terminology) +/Subtype /Link +/Rect [535.301 440.49 547.04 454.77] +/Type /Annot +>> +endobj +284 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [48.24 422.01 119.0205 436.29] +/Type /Annot +>> +endobj +285 0 obj +<< /Border [0 0 0] +/Dest (_abbreviations) +/Subtype /Link +/Rect [535.301 422.01 547.04 436.29] +/Type /Annot +>> +endobj +286 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [48.24 403.53 103.0815 417.81] +/Type /Annot +>> +endobj +287 0 obj +<< /Border [0 0 0] +/Dest (_references) +/Subtype /Link +/Rect [535.301 403.53 547.04 417.81] +/Type /Annot +>> +endobj +288 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +289 0 obj +<< /Type /XObject +/Subtype /Form +/BBox [0 0 595.28 841.89] +/Length 162 +>> +stream +q +/DeviceRGB cs +0.0 0.0 0.0 scn +/DeviceRGB CS +0.0 0.0 0.0 SCN +1 w +0 J +0 j +[] 0 d +q +0.25 w +/DeviceRGB CS +0.8667 0.8667 0.8667 SCN +48.24 30.0 m +547.04 30.0 l +S +Q +Q + +endstream +endobj +290 0 obj +<< /Type /Outlines +/Count 62 +/First 291 0 R +/Last 352 0 R +>> +endobj +291 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 292 0 R +/Dest [7 0 R /XYZ 0 841.89 null] +>> +endobj +292 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 293 0 R +/Prev 291 0 R +/Dest [10 0 R /XYZ 0 841.89 null] +>> +endobj +293 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 294 0 R +/Last 295 0 R +/Next 296 0 R +/Prev 292 0 R +/Dest [14 0 R /XYZ 0 841.89 null] +>> +endobj +294 0 obj +<< /Title +/Parent 293 0 R +/Count 0 +/Next 295 0 R +/Dest [14 0 R /XYZ 0 765.17 null] +>> +endobj +295 0 obj +<< /Title +/Parent 293 0 R +/Count 0 +/Prev 294 0 R +/Dest [14 0 R /XYZ 0 681.53 null] +>> +endobj +296 0 obj +<< /Title +/Parent 290 0 R +/Count 17 +/First 297 0 R +/Last 309 0 R +/Next 314 0 R +/Prev 293 0 R +/Dest [14 0 R /XYZ 0 613.67 null] +>> +endobj +297 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 298 0 R +/Dest [14 0 R /XYZ 0 561.35 null] +>> +endobj +298 0 obj +<< /Title +/Parent 296 0 R +/Count 1 +/First 299 0 R +/Last 299 0 R +/Next 300 0 R +/Prev 297 0 R +/Dest [14 0 R /XYZ 0 359.15 null] +>> +endobj +299 0 obj +<< /Title +/Parent 298 0 R +/Count 0 +/Dest [14 0 R /XYZ 0 254.29 null] +>> +endobj +300 0 obj +<< /Title +/Parent 296 0 R +/Count 3 +/First 301 0 R +/Last 303 0 R +/Next 304 0 R +/Prev 298 0 R +/Dest [14 0 R /XYZ 0 136.87 null] +>> +endobj +301 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Next 302 0 R +/Dest [32 0 R /XYZ 0 841.89 null] +>> +endobj +302 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Next 303 0 R +/Prev 301 0 R +/Dest [32 0 R /XYZ 0 727.05 null] +>> +endobj +303 0 obj +<< /Title +/Parent 300 0 R +/Count 0 +/Prev 302 0 R +/Dest [32 0 R /XYZ 0 627.63 null] +>> +endobj +304 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 305 0 R +/Prev 300 0 R +/Dest [32 0 R /XYZ 0 484.65 null] +>> +endobj +305 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 306 0 R +/Prev 304 0 R +/Dest [32 0 R /XYZ 0 364.01 null] +>> +endobj +306 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 307 0 R +/Prev 305 0 R +/Dest [32 0 R /XYZ 0 211.81 null] +>> +endobj +307 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 308 0 R +/Prev 306 0 R +/Dest [40 0 R /XYZ 0 841.89 null] +>> +endobj +308 0 obj +<< /Title +/Parent 296 0 R +/Count 0 +/Next 309 0 R +/Prev 307 0 R +/Dest [40 0 R /XYZ 0 721.61 null] +>> +endobj +309 0 obj +<< /Title +/Parent 296 0 R +/Count 4 +/First 310 0 R +/Last 313 0 R +/Prev 308 0 R +/Dest [40 0 R /XYZ 0 616.75 null] +>> +endobj +310 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 311 0 R +/Dest [40 0 R /XYZ 0 484.11 null] +>> +endobj +311 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 312 0 R +/Prev 310 0 R +/Dest [40 0 R /XYZ 0 309.57 null] +>> +endobj +312 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Next 313 0 R +/Prev 311 0 R +/Dest [47 0 R /XYZ 0 644.4 null] +>> +endobj +313 0 obj +<< /Title +/Parent 309 0 R +/Count 0 +/Prev 312 0 R +/Dest [47 0 R /XYZ 0 505.2 null] +>> +endobj +314 0 obj +<< /Title +/Parent 290 0 R +/Count 16 +/First 315 0 R +/Last 319 0 R +/Next 331 0 R +/Prev 296 0 R +/Dest [47 0 R /XYZ 0 399.78 null] +>> +endobj +315 0 obj +<< /Title +/Parent 314 0 R +/Count 0 +/Next 316 0 R +/Dest [47 0 R /XYZ 0 347.46 null] +>> +endobj +316 0 obj +<< /Title +/Parent 314 0 R +/Count 0 +/Next 317 0 R +/Prev 315 0 R +/Dest [56 0 R /XYZ 0 609.39 null] +>> +endobj +317 0 obj +<< /Title +/Parent 314 0 R +/Count 1 +/First 318 0 R +/Last 318 0 R +/Next 319 0 R +/Prev 316 0 R +/Dest [56 0 R /XYZ 0 286.95 null] +>> +endobj +318 0 obj +<< /Title +/Parent 317 0 R +/Count 0 +/Dest [64 0 R /XYZ 0 841.89 null] +>> +endobj +319 0 obj +<< /Title +/Parent 314 0 R +/Count 11 +/First 320 0 R +/Last 330 0 R +/Prev 317 0 R +/Dest [73 0 R /XYZ 0 352.38 null] +>> +endobj +320 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 321 0 R +/Dest [73 0 R /XYZ 0 279.08 null] +>> +endobj +321 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 322 0 R +/Prev 320 0 R +/Dest [73 0 R /XYZ 0 133.0 null] +>> +endobj +322 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 323 0 R +/Prev 321 0 R +/Dest [78 0 R /XYZ 0 762.33 null] +>> +endobj +323 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 324 0 R +/Prev 322 0 R +/Dest [81 0 R /XYZ 0 763.08 null] +>> +endobj +324 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 325 0 R +/Prev 323 0 R +/Dest [81 0 R /XYZ 0 671.22 null] +>> +endobj +325 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 326 0 R +/Prev 324 0 R +/Dest [81 0 R /XYZ 0 227.04 null] +>> +endobj +326 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 327 0 R +/Prev 325 0 R +/Dest [87 0 R /XYZ 0 373.99 null] +>> +endobj +327 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 328 0 R +/Prev 326 0 R +/Dest [87 0 R /XYZ 0 226.87 null] +>> +endobj +328 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 329 0 R +/Prev 327 0 R +/Dest [92 0 R /XYZ 0 477.09 null] +>> +endobj +329 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Next 330 0 R +/Prev 328 0 R +/Dest [95 0 R /XYZ 0 841.89 null] +>> +endobj +330 0 obj +<< /Title +/Parent 319 0 R +/Count 0 +/Prev 329 0 R +/Dest [95 0 R /XYZ 0 649.87 null] +>> +endobj +331 0 obj +<< /Title +/Parent 290 0 R +/Count 12 +/First 332 0 R +/Last 343 0 R +/Next 344 0 R +/Prev 314 0 R +/Dest [95 0 R /XYZ 0 471.19 null] +>> +endobj +332 0 obj +<< /Title +/Parent 331 0 R +/Count 5 +/First 333 0 R +/Last 337 0 R +/Next 338 0 R +/Dest [95 0 R /XYZ 0 418.87 null] +>> +endobj +333 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 334 0 R +/Dest [95 0 R /XYZ 0 187.11 null] +>> +endobj +334 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 335 0 R +/Prev 333 0 R +/Dest [109 0 R /XYZ 0 671.16 null] +>> +endobj +335 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 336 0 R +/Prev 334 0 R +/Dest [109 0 R /XYZ 0 414.78 null] +>> +endobj +336 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Next 337 0 R +/Prev 335 0 R +/Dest [113 0 R /XYZ 0 254.11 null] +>> +endobj +337 0 obj +<< /Title +/Parent 332 0 R +/Count 0 +/Prev 336 0 R +/Dest [117 0 R /XYZ 0 541.37 null] +>> +endobj +338 0 obj +<< /Title +/Parent 331 0 R +/Count 0 +/Next 339 0 R +/Prev 332 0 R +/Dest [117 0 R /XYZ 0 457.73 null] +>> +endobj +339 0 obj +<< /Title +/Parent 331 0 R +/Count 3 +/First 340 0 R +/Last 342 0 R +/Next 343 0 R +/Prev 338 0 R +/Dest [117 0 R /XYZ 0 162.85 null] +>> +endobj +340 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Next 341 0 R +/Dest [123 0 R /XYZ 0 841.89 null] +>> +endobj +341 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Next 342 0 R +/Prev 340 0 R +/Dest [123 0 R /XYZ 0 494.13 null] +>> +endobj +342 0 obj +<< /Title +/Parent 339 0 R +/Count 0 +/Prev 341 0 R +/Dest [123 0 R /XYZ 0 315.81 null] +>> +endobj +343 0 obj +<< /Title +/Parent 331 0 R +/Count 0 +/Prev 339 0 R +/Dest [129 0 R /XYZ 0 841.89 null] +>> +endobj +344 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 345 0 R +/Last 346 0 R +/Next 347 0 R +/Prev 331 0 R +/Dest [132 0 R /XYZ 0 841.89 null] +>> +endobj +345 0 obj +<< /Title +/Parent 344 0 R +/Count 0 +/Next 346 0 R +/Dest [132 0 R /XYZ 0 758.37 null] +>> +endobj +346 0 obj +<< /Title +/Parent 344 0 R +/Count 0 +/Prev 345 0 R +/Dest [139 0 R /XYZ 0 273.06 null] +>> +endobj +347 0 obj +<< /Title +/Parent 290 0 R +/Count 2 +/First 348 0 R +/Last 349 0 R +/Next 350 0 R +/Prev 344 0 R +/Dest [144 0 R /XYZ 0 754.11 null] +>> +endobj +348 0 obj +<< /Title +/Parent 347 0 R +/Count 0 +/Next 349 0 R +/Dest [144 0 R /XYZ 0 701.79 null] +>> +endobj +349 0 obj +<< /Title +/Parent 347 0 R +/Count 0 +/Prev 348 0 R +/Dest [150 0 R /XYZ 0 687.96 null] +>> +endobj +350 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 351 0 R +/Prev 347 0 R +/Dest [153 0 R /XYZ 0 778.86 null] +>> +endobj +351 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Next 352 0 R +/Prev 350 0 R +/Dest [153 0 R /XYZ 0 438.06 null] +>> +endobj +352 0 obj +<< /Title +/Parent 290 0 R +/Count 0 +/Prev 351 0 R +/Dest [158 0 R /XYZ 0 619.65 null] +>> +endobj +353 0 obj +<< /Nums [0 << /P (i) +>> 1 << /P (ii) +>> 2 << /P (iii) +>> 3 << /P (1) +>> 4 << /P (2) +>> 5 << /P (3) +>> 6 << /P (4) +>> 7 << /P (5) +>> 8 << /P (6) +>> 9 << /P (7) +>> 10 << /P (8) +>> 11 << /P (9) +>> 12 << /P (10) +>> 13 << /P (11) +>> 14 << /P (12) +>> 15 << /P (13) +>> 16 << /P (14) +>> 17 << /P (15) +>> 18 << /P (16) +>> 19 << /P (17) +>> 20 << /P (18) +>> 21 << /P (19) +>> 22 << /P (20) +>> 23 << /P (21) +>> 24 << /P (22) +>> 25 << /P (23) +>> 26 << /P (24) +>> 27 << /P (25) +>> 28 << /P (26) +>> 29 << /P (27) +>> 30 << /P (28) +>>] +>> +endobj +354 0 obj +<< /Length1 13108 +/Length 8295 +/Filter [/FlateDecode] +>> +stream +xœz X[eºÿ÷s² @Y !@I€°/e+[ÃZJØ)K(‹-ÅZ;µV¬UgÔªµ·vlåv´Óq¼µUÇ¿ÏŒuÿïØqª×¿Ó;«Ë­þgz½>-œÞ÷œçääûÎ9ïûûÞý{sF qÐDï˜"&ßtfÎ „Ń£³Ñ%føþBÆwG½þ{~úà)„LÂ=§‡Æ¦w '®§åÃ=5CCýþØw¹ÇJ¿®'ùwM < +c ‡4››¬Y_½ùÀNÿ_wO¦¦‹$ö#”‘ã_ûÇúßê›nñ"BÈõ‰|'kÊ‚1rƒ¡(øÊEÿð#‚9‘!.!ˆŒŠÆÄŠÄ©,ÉŠOP(“Tj ÒêôɆdL5¥¥g˜-È +2É̲g;œ®œÜ"!©×¥€6 +°]ÌÝXvq^ï1+å…•9O]PÑdx¿ÂâÑ÷ùê<•m«ËQ{2ùrƒÃ°ýfº-O-ð1´‡€ö`mVfe ¬ú@•Ô:°—\^ Ä艕„}RU‚}³³¼%Kl(´)íýGzýGGs©™Êû:ÚFïS¤¹Túø|hÛ‘{ËÝÛÊ YÍãž(µÝèî¯2e¶ÝÅ®u'Èš}¾„«òc„Æ3J´½ÑBêµ$k´+Þ±,³ F6gd4NV8jÝ’ÌbâŒÀÇ'#ãMzʨžéè}þ®Š’½çg&kM.(V{¶öéøvÕùѱ|!q™~Û§– hodœsôäèЙ¹cþ&]naFKÃÊeè6t›†òªŽ ½dÆ¡¼Tp‚«Ü$ƒ[·8Ù)Ä#GG&x*·du=1’çÞqrxà…½•Iy­;´ûö6›êk%¥³©UENa,ïóŒOíá ÑïЗeÆ$qÞ豞їöUny«áeáþœäü:“»0«¥È°tZ¦M—}ÿþÂç_ùþ F†³ ?9ÈP€ku1X/ÑÊ0>€ÿ°ôçñ0xòQšÏ‰À“î%Q¬M k3¢\&£HõZȵvJ.˜ҌQÈZ^¶l&p{É.kódI^O¹1kû÷îè>2èL­ðÖìiÏ,¿ûÜÄÔ 3nüAÉXmZŠo¾×?©/¶W[Qn[¾¥yÕb¨ +´”k´µc…÷ x]ûjKŠÔÉÝ%þ'·»ò‡¿kªìsg·5mNÏ^˜.ª6Qk{Eº¡¨Ýáj­,Ð$y6µsÔЭÉEVoƪÄ&ú¬8!‡¹ŸKEJ¼¤Ë†¦ã²kûÍsÏâÜÕζÇFÜù;N½pw…2·mîDoËTIbŠ\hr×Ü›ÕTh©å~÷ØNU~[;¶ále–Qž=tl(pá@uýizñ¥‘KçžxÔY…š”l¾ÆmVXiÎ×RrWþëÿÖ¼«FÏâ]€\pšjÆëõÙ@´n¼°>;ü£lAN­Nh…B­“åÙyîEà)Gégºulñ‹·e>úúzÖçB²ò6@WÉëÔÄer#–E`Ù2°TOœ%ÎWâ+óô!ú¡ùu÷¹n=@œ]ª'Wçñ<3O+ÙõÀçÄ°d63ðC[‰b.lÇ*24ç´bÒ‚B’GjññºAI™•Ž2ªÒtj ~ëþUT‚.C¥\ºd‹à7žÒ8DÝd¡é/—Ž+ô‹Biñè„ 0µÔõÓ–]5:Õ¦]ío?ؾ«R­«™m™§*ˆêb~TÞÖ½ o]dc0ù™Ù¥Šðýà¦_S1ÙXG]Ê€¦d{Uu¿W¬Ç œ +åÕeµ‡¹9+E }PKÜá§íJ[QJBnGÉô3ÛÐwwTOµ–(DqŽÑ…É'ÿú/õÍÏ~Éy[ïmÎÔ: R[WµuËÉÏÎÿñd{’­@™¢66§CQ÷½,}kœÕ%ÈÃä#2,×/Úµòb¼3±0q:›nüëÒá0éLÿêùö%Çî—w{þþ÷—ˆOÓÿÿÿ † Âÿ +ýÅâ‡M'>ygââ›ñŒ }-_ðBÃjY±†q('‰´2-þÊ,³(8ÂáÍs +Ç¢dêÅlPòô" }_£Å ¢Vú¨/"Ñe&¯±i‘>ÚÊÜ¿ôQß2ßnàˬ–¡, +ÏÀëXW ÉdàÒ¥ý,SvÁA¦ñæR§~él]̾,Ë/ÙK&_‡tÍyt rÖ%§0Êt&Û7ÔºÓµÌ^ÆNŠ„˜t¼HÿÏ÷}ÿ†£~0ù½9*{Yj"Äão½<íÜýãÜtŸò“²Sâß—®ªw½uíTóÍÌ}OON>Ý›‘Ñû/““'úÍk÷ƒ²7GF.†ï??åóú-Çsê¬_l·YA(ê¤/Ë…\M~uaÎZ°ïõ;=¹ßú÷'ö1ãÒÏƶÞÓld’Ý¡ðµ»Çû:Nï«¥X§$Ž[æýLµ½‚ƒS8ØllsýÆJÑPllËÇìž"nR÷œÏ£§?}ŽUƇ12YÙáuÒó/çãC7}ÂÔÊ<|‰ng…›ÌÅ·çÚóÅÖÔú]õS›´`/=°'úÄç&>w<¡m€ /Ò¹áÁZ¬×ñ¾'³k+Hmñ@åýOiªfÛ·=Øe)ÙuÊßù`½¥Jîl-ro-Ôiªw·µîÉ®¸çiZõH¡·¦ðŽvç=9¾M%cÛؽͭ÷oËJ)l2—ضn²h=>‡gkuI²¡±Ïf¦(glÛªqôL¹Fˆ .v+Â&®tL\a Úº´ßʈëM³Ç(¡"!iíc2—4ÅkùéÇ«þDí`³&eJÖÔ`ÇÇ—#$—Û£ë†AWHš}ã@yxH³wì©nÛ·Åœ#ع¢½¯Iíïï!•«þ³xµmO]²mËL9i ›½‹‰©;SãÛÌ2Y¾°•ˆ“KTXîÅ. SW§¬âab€.T0&a·z=ü«ê Ql†î?ù‚’R+þ»Q•®W‰èVêº&-äaµCu¹4Øñ|UÕB7q(Á"rX}¾(½7ëf‹AŒŸé³å Ädƒ Sr-S}„ÄñQÇ0J2 cŒ‰/‘|.‡Ápݨ2'«bè…óô‹ôODÏ tÀ› xÜ×QŒIyszq~àÕŠª“½Ä®(•JÁâÒyí7 ¨¹›Öâß±õ‡Uõ?ê%Á˜ rsæš`Ïni(Ÿ+u°÷H,$×ÔòØ‚WÕ˾C-úŠ()5ž‹ß«2-™IÛfÍõFÅÒ{‘»9B¥ìí?DˆcE¥\:>Úà²Z±~Á°Õ¢$Ò¹z‹B@ +$¢ ?–'r by4ÇçêsÒèæ¥gò3}¾ÒÈ8U†—Óg£µÉ†X}’Ï£s¦âOƒ.GÄÆEEJ•ÉJú26ê½ßúÖÆ…µyWk—UÑ3˜C²' ðzÛ"\Î: }@¤Ò¦*„½&Q/å%D=žœ%ŠPj“Åû¥¢Bw>¾gLMWЧ!7él¬çàýÄw’LŠ(°Tq|tR^}­`Îçôi>Õ$˜Í€Þà±,}—>LQ]¢oG¸R$‚½˜hmz¼„Þ¦ æ>]}ƒ,Žnœ_éÇÕÀ³Òгk£§¨†-8™òªÿŒ¾Á>É©dŸüêψ‘ý!yî–éab­CKž[,$ß ?œ…!ž§®r®EÃ@o!rR^gên¯’|›nËŠ£®$6µ6(eº††š$&¾ÀÆDu!!9±4.ØÀâ I Û†KY œËáÞ¨_î 8 ˜Í/Í [¼ý)û[f*Õ_¹7™„[Úòúï­éz Ë*TeBqð©F¤É¯ì(,Ùbûë§ÏE¥VcS÷¶ÔªíE \J_ÐI<¢Ío´åU8ª¬q†æƒ=Kÿ•ž£úΦWf'æšOçqç\[K €×xgAvfTܲÙHÏ[—†DR.˳›O8lCÆ ¦f]Ûõ»»kÝqÑÉôùXVä ¬Xá>}GšÍn­q$•ú-èeôT`äÔDnîij£c'G¡žÝ ³i9?m☽CpÃH”œ¹³¬lî_ý…{ +;;b%Ùîm¥Éß~vÛƒúiFË·¤÷]~üÔ‡÷æ$dovTäÙ|E†ŒÑsóïÿ¶¾ *5Q_žì“_ê"+¯‚Õl³ªÃ +¹=ÅhÁžå ‚Ã;±Ò8*ŠŽˆ~6Ž/w%ãt˜E’Å^dz´©~¤Ä5ÚPÒíI¼ã*+›óÖjV*,K.+#¥Z|š½v£#(©@^Þij#ïÿ.ˆ—¼ +râ3’Â:.OËv k¬˜š„µ*2lgMØ'ç"ñ{ñÙ[ ì.úìýÞããî%aªØäè¨Ê 2Ú’_\x±áÞî웋Õ¿s«±Î;÷òl×Äw‡2ãSí‰Ü…º"?•ñMHÐä~® e‚´VÓ²ÃÞå[Ö` n<íÄÙ¥ƒì¦éÕW³ºîm®/Q%˜=†hu¶1õôGL"÷…ªNäè| ;S–’­ILOŠQ»-‰º’ž¢Yÿb\éƒXi)å æQ E»C–βåòVZ +„‘ óŒJWšN¬¿²MIgXkRòƒ0HgœBôwfg¤ãRŽh…)‘£)Ò¤z³¥ãÐV&Añ¥ÉÊX‰ÎªükçÝ †¢{/úí»ivYªFZXžQfM°u?ì7Tz2cbR³Ü:µY³x"> nü¡fÒQgÿyzCAÊΖެ² Is_ïJgLEÅË¢£¢ÓgZköu90&± ^•"OP‰8–†Å­ö:Îo/LˆP¥9µž¶4qAC·½ížìHI|t¬Q'J2ÞŒ7×åh ÅN«G/ŒI«!»÷ïVyý%÷ßs0˜3 Pk}öŸ®ÏµA¹&¾‰– ?¨Øš¥+ëム󖃶ø´<ˆmÇâ>oáVŠ¹!¤ßå¨àMô(TI¯XýO ÓÁ½ ñ“’¡Jƒµe®š®gªÚ`m…ÀÏìv\k†ÊCɺÖbÕrùÌÅãÁ=Ï+ bMZB|šZ"Q§Å'¤iÄlj#æ‹À·øt°Nä&ÛTQQ*[2œ££U°¹ ný…–âç€S‘a»µX#©õÜññüÑÇÚ´1.Ÿ[Í‚øŽXŸÎðfÏbªêæÂý/Yü†–o’»Y ¸æ6ÞAýœÞùÁ:ly{Aòdn/‚* ÛÍsyÄ9,r —q“Ú¦šËÓ/=κ]kiÓ‚L;~³b¾žx„iôù"M›KqÑÄ…à#Lu‹Ÿ$¶¤Ù8Þ“¦QÄø|}A{‚ªšèfuõ5šr,óU`ö·9ÅÒ«á”o\*‚¡• {pĺ– lSÊ]Ëçísƒí^º¢Ôç¥ÉYóÄEJº´v‹-«½Ö#©+Úluwú,!Û•ÛÝ…-NyØ°¤#'>Ì”‰½¬êr7™ ëTØ™ómöœÙ<î¥ Â&œ»ŠW œ]'õ¬3çÖù Ë-K”‹«•MÅæ¶Ì†½mV9€æÑO1þW¾-/ák@ßv ¶`~4¶f7†cƒ?—SÍm¿øšÿû³ÀÙ¹¢¿_c>—ª’‘ÚÚíÅIªbö¬"ŒôGôŸË|ïaH0ñe‡/?<ùÂL~þÌ ““g¦òò¦Î0ü”×gŸ„ùõs}a²ZÏÄÁÎ4 oèË#^ZWœà}+e ìþÖ»‚ÈV«òƒõu +]³œ¤‰)9‰ÿ¦Ù•l2RÛY¡^9¬ì`-a-Ù¨œ­Fƒµ#d§ë¶õ¦F^_a\\zª”,¿n/2 ¸RÄ6ý˜BcibM™AKY|g™,k}±q‚½vóƒà¬«6Û,…d»k€|¿þ†  ã‚2¤ +¡'YúwÕ(ÝF4ÍÓ^:1&³TfÛòSòÍj Ÿ¹–nŽo[<úº +Ó(ÛR^Ñéï6Ò¯¯øH'Ô=ÅT'SÕ®Ô‡a–±¾…‘²¾ƒñBížV›ÒhÇeoñºšsUòÜžªÍ35)®[6MÔ¤ÔVléȆ ¥´aº:9oûcR¥«Áiri¢]&ef™)ÅeËÒè‹jü%壛RTö²”œ’ÁÉøŒüdc®Íœ¨+®ë)¬ßÕ +x·>#žá”3}[T­²¾¡T‚ìí2¶6Š#Ô¯&:-Ó_7Q©?fhÓéÓc»p}}K+ŸÛΊàh«v·gUú”áÍ‹3KuÃ=@ß +~ù'ªŠ­ÃÖW­á1wÆ(«úUˆzÕÍY wùÌAd™MÞRŠÙZAÎüˆ ù y•¦KÏÃøSVEK&BØZvWá›{¥ɇøu °Xƒï¤¬´HÆBnïU0==Ÿ@ +¯‡Ï?˜ ¥xy’Zøˆ ¢¤4¿œÀþjFÿèUúå(¦§A^÷ùlv‘^NïIni®VÄÕÖðCLÓ"ô«Ùâò ó«Y÷€‡Ù±QlÐ1Ñ“Æ º!Èä¯.E)ã¥nDªz€YR&Äçª ½*†þêÔuýÿž¡¯³Ð¸ø†Òãäv â$±°AÉÑ—©Ò¥ï¶4U)ìõâ*…›…¥÷ÚÏï\<ÄêóÁÆÛ&§OZ[jŠ²Íb„ÅË ŽþJ¦†™\ÛÆ°2ÛÐojcÄ©1˜).°{Ö,õo°ÙÜ¢\ú\0Ç«âçŠÆ +òʸt¼Ä“•¥ÂM›·X”Ÿma$Èn—'’ç rr‰Ù&ú/ôH°}!WghÎÿ,J£Ó³Í‹(•=×ánGŽÏ!Š‹’™4çŸÔ{Cöqð¬‡yã!$}!p²¿¢n¤0uQ¸LëJLÿ<¹°¼iûýâ¡#c›èB…6Äÿ×ëáEª•q7Ò¨˜âRUA³8Õ{d¤<-Öï}ÄGîÕ˜‚eKzDßÔP©0ï«Z¶#À æLžœòà{#¡7€´Ë=G&Î'[ÕžÀ'X|h¤ßHÍÖÊ" Ÿ”-™I´x´Vú¥Fr¿,Íkâc}óâ^Xþ­[ÁW+Ö!;B±j¬Ê¥Ÿ%öQó¾Öú +²ÏTÙ——ÓS•–VÕ““×Wi"®4O–©Te“ÍÍ;ÊUªòL¯L ˆžå^%¸ù%ÅϲSø0ç³üO½sÆ¡¾æ¥3ŒRWHi¨oÞa‡`ÆÓãƒòLkzì’ªöm¦:êzRMCƒN¦lhmJ\~³/%CŸ@GÐ)ô&úw,Æ…ø>ü ‘JÜAü‚ø#ÙH>Gþ‘J¦r¨°÷Ï8YœqÎsœÿäfsä¾Æ‹çUñŽòÞç+ø]ü#øÞˆû"~!H|GðI$?2%2;².r!ŠˆòF‰úm´"úua¬°^ø ðÏ1Q1wÇü2–;ûK‘X´]tTô{qªø>ñ’RÉ„äNÉ1øNòkÉ'|¦Ä‘‚ÖKÑ þ š!.²G11‡ìpÞK0¿4Ì¢N8Â1ÇN8ôpì€c³pt1׈*´G|?ÀœS­Ü¨ŽúÍpÞó"çÓWᶢ:â ø~48ÏÛ‡ê¸J¦¨Ëp.€ùv õd⼆Ԝ„øÝHÌ©D±tëKâ*ºG yæÖ—Ôq†£í ®#U‡¬)2!+1pë/Ô ð})y¡\Ž åRÇÙû•Ì3äETJCÄ;ÈÏX©gŸû'DP'€:€ø”ù>ÄŸP#7ŠÁ²þ™¾5ÿðÒi„Ít ]ñUèM×Õ¿&v¦ ½€bÑkˆ³î:cŠú? Wç(|«‚gò×hÿ@D$‡ 8AP¿‡mY!Úu žcˆ©Ø¼¹"}+ˆ˜hÕ üôGïÊ*7Bšå—iÁ'ÐÀ†ï¢6±ïXp G¢(¨yc‘‰Á?™÷@™×mãQRÀ'%!äv-X¸¥ #Ji(v¨¡7oQx»9‘ êú\ˆ}nØÃyc1*ªª j +ˆð›ÀCªQ ªEuh3ªG ¨P4£-ZP+jCí¨u¢­hĽˆ^F‡y3ãÃ6[lQîY‘£•E)¦bê‚QpžÉ'‡CóVòxhž@<ô|hž@B œ'amo„æIÀýahžB,ÍSHŠµ¡yŠÁŽÐ<©pihž‹bW°ñO†îá¡Rühhždøw¡y>JÃÿš@Rb™WJ%ÒCó°á¦Ð¼uß +ÍG"ñûÐ|$Ê'è•·¬Ud^h> +å“­¡ùhd! ÍG£NòÇ¡y!J£T¡y!j¦*K³“ÃCÓš,[f–¦"í×lïµhŠFG5Ì¥)McÿTÿäý}PmÞ,šu ¢!4 f—2 (<ÿƒhõÃhG½`.(jGá_ª_~jŠõùhÝŸ}ÈR˜hšú'‡ÀXpWîjbïFýƒ3£þIö±A4ýh²60˜žÈcþÁáñAYF¥(Œ³”fuÓ<6ôÆáSƒÌplÀ뛑øú'§†ãšL‹-[33–Ì\˜‚K ; Ã"Ɇo3hÈî·õç8ÓŠ,A–ôð”Ư™žô÷õù'G4pɇ±få‡c8øAHýì&ÑÌÀË¿Fè·É…%üå±þñÒþ©áÁqÍt¿lƒ§KY 2:g!ö­±Rÿ´_33>4<> ¢Ðߧé™Õ¬í #[ +M³kœ2C,”é A¬cÁÌiP°×l¦o#0CÓÓyVko ¯ß2ÈŠØÒ³NXHÀÊšâ4<ŸÑÄ + °T,@cU¦v~ ®OÀ1Ò5DyçΖ±Ð²XÒSÓ3}Ãu”w²ÿ ²õ*í)˜›î`C5ýýãS ±™ñ¾þIÍôP¿¦hÂß §Ð• ͲfYl[‡J?Ð +Iˆ‘ck“Œ†Xé??Ü­}&fÖÛpcÃakô³,ÉAëhÅ”µfSIY]S™™A±ñzýa\-@ydj©†sŸ‚™0¼Èuàdeà”,wü­ <›òî¾°-&ÿ¿‰H>Æ~scáwËgÈÅ(â+~mCÿ ²@ýê +endstream +endobj +355 0 obj +<< /Type /FontDescriptor +/FontName /3a0e86+NotoSerif +/FontFile2 354 0 R +/FontBBox [-212 -250 1246 1047] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +356 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +357 0 obj +[259 1000 408 1000 1000 1000 1000 220 346 346 1000 1000 250 310 250 288 559 559 559 559 559 559 559 559 559 559 286 286 559 1000 559 1000 1000 705 653 613 727 623 589 713 792 367 1000 700 623 937 763 742 604 1000 655 543 612 716 674 1046 660 625 1000 359 1000 359 1000 458 577 562 613 492 613 535 369 538 634 319 299 584 310 944 645 577 613 613 471 451 352 634 579 861 578 564 511 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 562 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 361 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 259 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +358 0 obj +<< /Length1 9744 +/Length 6315 +/Filter [/FlateDecode] +>> +stream +xœ½Z{xו¿wf$˲-[²¶dËz˲¬‡%[²dËòCÆOüF0Æ–X²ü$a Éæ„yÑPB I³h6¥M·ßn’MÒ6Ù„¤””Ð|Û¥_ZÚ¯e»ÙìaÏŒd°’ô¯µ¿ñÌ=sçžßýsÏ9wÆ#„øÈŽ8h¼?ç·Èc y!,Šlœx~x®ÿ!ÅÑH¬?ô솧fÊŽNßù·šäAûh¿=< [¹GR€¶.ºs5âihŸ¶ªµÓæøÛŸ÷< í Ý7›šæTq~‹P^)´·…¢áW»ÿ÷´A7 †~ðl!=ÓßF ^„Rá’‹¾õ/lˆ„¿1&Åe¼d~Jj¤£ ¡(S,ARYV6’ß|F‘“«ÌS©5Z¤ÓŒù¦s¡Åj³£¢o×ýÿôƒ‘¿NÔ™Ùe–¨%NB‚_?>~Ýà-\1sOfÄÎýûñO÷^#’úçÆJÁù + ÄÑX‰’â +Â)VNG\[ 3.‰_´!ÑØ%! ˆ$%ÉœðÕéçF9v¿V_½¶Ô±f™ÉÔ¾qù=Û«×Wª‚]îZƒàòL>?}isµ½k²¦âÞ µßyKœXe7–›ÄUë«Õ9™î²õuù÷˜Ûb5ãw»VO–¯êu­«Ë/ ÞÕV;ÝS+K)꺻{Ë C…Ìœ¤#vp^AYH Óä2,Q³`}X]‚ÕB§»Ü2 «É- +K…F>çðh}ÅÜψZœ{ŽF\¿ÐaM¥¯àãxË»7òó¼ö-[ȟ̶lÇ\ý~_VתÖLÚÍê쮊€«BT:¤ +rž ­ÆŠ&Q¾)úH Ë’Óá‰}塺®ÄU»²xíã£Þò;NÍL¾ºµ±n߯ô?4ʽk©Ê’±œ +- k}í¶Ö5œŽú‡~vŸ@!MóF Œýó}õ/bîžÇ†ï6øÛ ó¼…rko³}î´0G+ÚÿË+¿{êØ“qŽöÜø3¾Dõ LdDȽÀp–.iï‘[*´ŸU¡°ú4Ú +‹|i{¿ÍoÈÈ0ømÖ +ƒPh¨ ;o +üŒÀÏêäÁšå‚]LÌJÅI‚Ŧqc5V’7›@Š “VÒV"Õø§e°Î[7³ÂFLÿz.Ò%3æ…¹FiÄ:l˜[ÿ` ¯\‘åí­ÛÕR¿Î“¥(ï«m¤ªá†b_ä_sgÓÏߊ&ç’çLÎœ”ÈË×7+k"-M±zÝ¥`Ù²^o6»v'n\ápÁçlÿ•8n0ñ6—n¡·±Kè&›fzjå™ÖÈéûOÓ_œì^} +'ŸØøÒ´W]ÕW!- V†¶µë +×Ú£-]¦IuÈÍëÚŠ#obéóÇ°øÍ1}åJ‡¡Ê®p†;œOÿîÀO÷70¶ex; ¼É‘žaàRZõb¾”TÄÉ€K!#æœîù!ý—Ìõe†œŒŒ\ƒ4H}§½ÚO;vfjäð¨‹øâ8ýùÛ±8Ÿ˜ŠäÉ‘U§è/O`=V^_¶òèçLŒ‚µþ%è­z5ŒëÇNr‰âL­ÑŠµj¡Z¢†õ0¯P•ÉÉx8ýz[PjÈÍÈÈ1È‚ÔoŸW×iùYGÓGoò²‹òÉO ‹s’#ôöPS6£„Nf®Lt¹9´p¡/ßÒMiùüV?ýcf\aN¾ôž9q\-3c*Ƨ|ýíõsg7Ñ!FM4®ò2;Wz{\· tÕ 4?ôר’°&†»‹Ûñ¾ä¾nFëÜ烴{ÎÇbæ$Aâu¸“#$d ¢nâõ „½£—YÞñÏiWk…dñkzï¼ugV›_”Í‹¢?Ä,`ÎCÈy[ŒqLž¸éþA­ÔÈ\¥qµä †¶²×h~lÎ%r® ™Ü£2‘49< \QFœô‘›ÔEj±Ÿ04Õ/ÓÑWñ¥»Ô«áµl\Ui7fÒWÖ0¶ +&xŠ{'@ÌÏRÕZOQ¡D#ß°An¯Î§ÏÏ=k‡På‹ó +JTø|}ì+†Œ°tiæñ³þúµÜ¨.Ƈ“#‚·Ô·‰ÔSéq~>d½2’,/2]?¹fåA6 ÅÇO€ñ]·ükñíéHÆ‹ B«ŠTtÿNºUb,Õ¥ÒÔ‚ù·à.¼Œ¨ ‹ Å˲詴ëbêÊ,÷+“žÕ’Ù‰ÏZâæ‹û²°AšV $¼„ êäìg£$8÷ù-—ÅoÆ}WÆz+5<ûÐGŠY‚”ÜbÿzÄ(&^~Ây7žóâ1jA¬dÂÓ‚ê†ÑÏùdÍ)úÆs/Ñ×_ ÿ sNÃøäšë2tm]×·µC¯ïx`]߶.qñyú÷oF JÊ^xKÞýwúßßù™®®g.ï‡sgç3—ãy—±ÿE6vØãÙÅü5L@ì^_¨‹•{/[&RæK¶@¹3gþ`g`®×Ѽ¡&OQ¶®¶¢z^¸o9}†]Ž )Ÿ8Lû ÷õtlj5Îcáœ,väƒ`Irc‹¸Ìù5EIí<ΰ< ÿ¸-` N··ÿU^TTœË«éÙ1Ô¤úï™»qbªn';§¼/[è'¯ý¨ýîÞ* ÝSè7eF¦z~Ž°è‰«†¦‰¦–Hm^Ü·}Pc5B¾«½}=j´’ +Ð…YO¯F‰Ü‡ÎÄlƪNKA㯼·ZS°âÞàèþÕÆæmg"GG‹óüëü²âÎ2S£[•ÓtÿðÈuæ–GÞw :Jê­âî­«,šòv[q{­_W¸6rwSï/“uV¹¹Ei–½Îjnnh(0¯ÚÜÔÿ½Õ,v1`ÖÇs†~±½ŒéX›Éæ)ÒŒI?kYˆ=Œ•Z+Œ™”à¡j–¿#Ê4VX^½åìTXïÒ܃wÓS÷h\z1«K ~~t•@#±¾ãuÜmâð"«s.t3ë©lËkÛ¶}øÈr& t¯±kÌÜ6¾,0¶¼ ƒµu§‘]ÚŸ ô9ÇOÝM¦ßZk³Ÿgêò´“-¤–•&¶Y¼€©!&RË*Hw&¿oÂIÂÚdU ¬„+Ke™LWìÆÔ9¬åÉÅžH"KI\Ò°R£ÒªËЯ}N§/ÐôŽd¹Ö¢T/Ú*|i¼)ÙR%P‹°€s|öª½u³B¿º¸ÿ8U•§à•F"©Ú +çõ ùo³~ꢪ ›‰ØªÚh\³6¨®ž*'£7ëûÔ ?³n¥ñÍD’€Ì\²÷™_%F­€d9/†xθ'>XZ^XçTôøºÒWŒ%ª´‡vÖL=¹2òÝQWZŽ]ãï7‹4åÞÀÌJÇ]>Γ;qQw·>*?È%ÕÞ.ânuY»½¢©´Í!Ówlí›û¢ ŠÙÝ&_~f~ç–ÏNâN8ƒÀ«¼ga_gž¯bÙE¬MZe„bn7Éß™àÄj‰oI¨³î ‡Ëú–—I3=ôfAni¡B^X¦æáÏ8$E +÷O<9â¢)_›],¶wø«W¦G?Ú]Ã$ÆÃQ¾²ÔFi K”ü}D4XlÍÝ5;ÏcsøІð¡Q÷Çïœ}õ×¾WÈ+À­eÁºþÊ"fO”¸DÏÄ«Û—o?³¡ÿ‰ÁYÙP[šÒi´¹“÷–¬möˆ²³¬¡ÇÄÞm:öé6ÚÛjQûíÊ’¾z³yøÄýïÿG¶Å§MwæÛªLÀU/¬1peCU·Vç-ûÅÑÈœXž><Ÿ¨¤ G­Ï±ùÀ„SžLYÙò¾ò§FÝî û½k›¼Ea’Ä +K¹&ÿqî _{‘X\Ôîs6X$+gm¥J~ôpAµ-»fç¯ö¸°»6Û\®ó8$…FeòDS΋\›˜çÌ94¬ gTpÆCÌ~“›¤f·”·ðæb5³¹Τ,e}Á0¯}Ù÷½µ-¸ï_6ÅNßU="µý•%«Ü"·}àqòÒ G[î +ZgÓš÷žÝ¶÷ãGüwù‡‘¡}V†3å²ÂÖrc3È äE®‘Ù{Ì×1Úç-Óqç-8nÇF‹ÔiÎ}å•¢¡§#ý´¨·ÜÃÏ2æfëd|,§/çšÒ>6ªïìj^÷èKfr©j+³½µ¢¬70¾k®8Q ’ˆ¢ÅÔõêDëÑÆ„‡³¹‰7¬¿ àRZ†onea™ºÜñ4Áž\N‡Tߨ³kÚÅ$@¹¤ &jOAš4']hL‘èEƒO¦h4y¼4…$­Äüåàµ~ÿ¥'®þñáí9®¹Â^“oYîVý¤a‹Uh*®4êÝúÌÙ­›7¾|´£óOy•%šéW>Ì0M v™ò]j¥•™U™•4EÀ“• ËïïsaLâ$‰\%Ò¨Ìm3 @‹{ß®±™”•Å«ÓxKl² OÛ`ÅËoéå"“Fš©*¸vmEûp¸ª8Eã#ïs­¬Ð¨ý«ÜžµÕzC —]oƒ8jðwÈúìnaa ø5ñ\ÛÈÕB£ßâ ˜Dƒ[ÃÛIi½æ¬ÜB§4+Dyµ-+í­w¯´ +5ÅZ.q¤zh™¾x唟Þd.ÎeR—²ÔJ™Š¼ýR~ÑZè­V'[û¦õv¬6æNâ×õTŒ™KÞI‹a&ÀŸTØüzm¥=7×^©ÕûmŠx\Z®¹Xš57ÃyÌXª +µ¥FC©N$Ò•^›cnŒÁ=Ï® ždÀ“xŠ×@I’o` Wàùý7c%.ÃYîøcmù¯t$tg-€C$ Äí$¨ºí÷â ×XQ_×àÇy¾c r¼‡%jö÷9 jc>V,éòÜ¡¡Î5ûé í-qœÀ“eAw[VʾJ‘¯}š˜2Œe‚ýà ˆ+ßî2Ö-¤²%Þm=oë-£KÃÅ'|ÖU&ëEy kæ}FÃ¥= «í³øˆ`®‡ñtüö5ÌßDy`¯­m´ŒŽÎû;7ŽæVú÷ÎíÛ\~ñ$¾Å߉^öú‘%@±|;àJgß(d 5Æáú—îH¨íô_è¿m~cGNǼͯïh˜“ÉœeeíN){îpH }‰þmÝÃíÅj,_öðù½ÑcãÏø±èØ÷ÆÜî±ï±ïH!~þŒêEõiæm§˜F­T¦Ä¹xž&ÌÉùÂÚÉx–DïÌà}úd)¤¾²ÁCÜ®‘'f)„ÄGr˜°n™ §‡V­ +û:˜Z¡¾—u¿úxî˯¶Ëkvôèó»jV5Ù,† jwÜ#1ýÞÙw>v +o84ìdp÷ÒbŽp»Ð2à*ñN— ç.÷W¶{ñö³%å<›DŸ^SnQ0‰Š‰·i­·ÿà·{ô©r¨yd™&|ˆ§ñÙr˜´­Ÿ3­\9”HÜ´8 +µYÁcÉJ£YRäÕ–›³kv}t`ÿ¯vÖdÛª â¥ÏõÓLêŽrN½wöÝs®‘ï ÆgðC*ƒZÏ|#XúR1±¦nåO*ž87×ÅÕz dqŸ{ÚÄÛkÖø7M>xW²Ì˜«+ÖÉÒ(©¡DY;¦&:,nerô°µÖ*[ÑÞ;\PY Õyꪳè§-îœäùýùà¨ú;öS€Ç°d7…/Äõ[ŒeÕ +•·ÝQ²¼(+Ûªï¼g¥Å?}¤?ô`0?4¾f•ÚgQdû#]©NkÙä1±®²ÛéðiR*ë R£3GSb³dçVuŽÖvüC{¾ÚÐÖÖNd¨l*u±Íž›åk W­ØÖSxÍ€WÌ©GJæ}§Ë-IØ +h¹ÜN [iH‰ûóTî†WíxKÁÁêá<Þ ˜K_óïKámå‰Òùêå›W{FŠ5Õ;è]sÛÖãv):PK525M¢ü3,Š¥ÎÛWr§…ŸWß±Æ~øûš=…ßJו[Šê,’¬|—’‹ÏJt¥p_I•6õÍ÷ð/,¥ªÔèÜxõ†&“¹}ªï°+’¢³G-NyR4±O¢.sbï–kØJjîˆp|ó„›'ê‚I¢ÎSŠèóôUúdJ®Ñ©!6óôiÜÙz>G$J'wòÓ,Ú2üy‘ŸWV4{†Ü ;LX^jU¶]HßUõ@qV¥ÏÁÇßÉñäh²7®!Äýp0_3•ÎE:ç7l)·Ý°ÁvÂIþõíli—“œ–‘ºš—RS+ÀçäÊB2ƒþòâoþp‰þ[Š\S¨äÝŠ +_ +·™/ÊH£¸Éyò³”îhãAnu”°Y^.,¶G£©Z¿cöuâø\79¡*ÈâG£Z§Ð.£¿Ð·4VËÑf¢.þ= âÚÀ]Å|ùa@ +È$²_âLÆ‘Ð…ûPm u$ÏfPeèZZ[õºÊºàäãaíècÃ5ÙôžT¥&_FÔ—× +¸"£^“–.NãDª@@n§`+ÚRG5FZyð—ç>ìl¬Þ,º£¸o[;¹5W#âlŠæY„¶ts8Ü«3úf‰ÄiÓóð>¾"GžlÓFç¿Ô PºÆ|Àá+„ƒ#ŽŸ’¥ä ù&ù  Þä¤r8¯q¾äVsp¯%µ%íMú=¯€·!™—Ü“üTòŸùRþü÷Sø)ƒ)o§¦¦¤HýUšäát£ ®Î¸ÿ%òpw#YíKp”!OÒÓ k£Mp ;ýN"ôs®!5oŒý ÔÃ)BZÊúàÜKíC}d52R›Å "-qi9²ø9é?‘ d&êwÐׄô·!ù;ä#}È ÷J¨ à‘n\£ŽÄíÌÛ=w!þfº™náO-þ ?Vâ@'Pzq–Ü' MqʈŸÀÄ9ÈÀŒ•ñ3ù>ÄW D¤ðŠCõDܨDwÞ€çLÌÃu­­uH…øô8Þn¢[…ð3—Îì9¯@h‚öçÆ ¼íwYbö1H„¤H†²Q.Ò!=2ÀÎ*ô˜¡æµB$b¾$;•@ÆsCåâET ¹¯Õ£ÔˆšP3jA­¨ µ£¨ÚºÐ +D+Q7Z…V£VS.^sþ6V+¦˜ Ð -œøFÌG»ræ]Õã 9(ôý„œù~÷RBN" úaBN¢ 9…ÒqnBN!%.LÈ9 oLÈ9 _•s‘ß‘¸NB¼+Ñ' ð‰„œ}®&ä°Û%’òd$&Šòd”OÔ&ä|d#¢ 9õO%ä)HI\KÈSP9™uó?”dWBž +òÉ„< YÉ yê! PUš Pµ¾&6¾irdhxZå°9Tu±ØP$¬jë·ªª"UskJÕž +On XQ Š¡q´ M¢4„†Ñ4¸‹#ah6¿C(‚ÂÐj@c¨A-¿*0òüSSl+ ç0Œµþ kKl:¦ê OŽ ‚[Ä W zu²=FÐ`u,2_ FX‹Mo¤ÑÐÐÈØÊ¢ºõ°Ší¹zŽ±£lÄq¼vì£ù3äVÄŸâ1š7Ÿ¶þPå$ +endstream +endobj +359 0 obj +<< /Type /FontDescriptor +/FontName /ace878+NotoSerif-Bold +/FontFile2 358 0 R +/FontBBox [-212 -250 1306 1058] +/Flags 6 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +360 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +361 0 obj +[259 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 310 1000 288 1000 1000 1000 559 559 1000 559 1000 1000 1000 304 1000 1000 1000 1000 1000 1000 752 671 667 767 652 621 1000 818 400 1000 733 653 952 788 787 638 1000 707 585 652 747 1000 1066 1000 1000 1000 1000 1000 1000 1000 1000 1000 599 648 526 648 570 407 560 666 352 1000 636 352 985 666 612 645 647 522 487 404 666 605 855 1000 579 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +362 0 obj +<< /Length1 7188 +/Length 4926 +/Filter [/FlateDecode] +>> +stream +xœY t”U–~ïU¥ª !ImYH(ªò'•@ª²T¥²T*•¤²T–¢R •Å@H…,f3 DdTÄHš˜ƒt+´2(b Œg”CÓŽ=ÑAÚF†¡mtÇ9}ÔÁHþÌ}ÿÿ£íLÏ™ÊyÿÛî»÷¾{¿{ßûÿ ŒZ„²P:ØÞ×6¸õãIF®"„½÷¯‹{)þ)hßBHÑ;ÐÞ¶?ðìI„w€f_WßÈØä êBÊI 1tuu´É6¯Rù侶±AÜZ¡úÚÚºL“½òý½©ÅÐoq|j ô[ ¦¿­¯ã£¬A(&!Q<° †'>¿¡x;Ì[‡:CMWAúë;û¢Nf†þA„HGûú-®«C(QóP0¢ûãÚX‚þî#"BHŒÂ$R$[°0…ßœ“­S‡AÉÇ›8Ò\®K.dzx¾ÉóTZ€©%ÅRÄQUb–róž'?Èÿ3(¦Ã²W,$ ¥YÉ|GVŠ<“å?< ²SÎKä + ‹âÜvþØYŠäHøâ¬9Ð’*ç=*UkðþÉ_[Ò½Eùé‰8íc¯Çã}·Àš[]¾ÿ—NG©5?œÍ»ª"o«Nø#Ix‡6C1 Gf,\ÜDC¾Ró¥i ò)Ö6±šs +Ç6o)\Ad“â=ûØß--ÿí¹Sÿ¨¢{¤x~ø„SNT[žÓS"(ó”JWäY¶ªU§Âù[wº‹‹Ým)Ï™ØòÂ#áìµ^¦Ê½:AÃÀ^ÔZ\f…Ø’ëÔG¾øâ[ê1²ïs'û'¹âÚÕ- @)g€Š'üØùÅ'¸Ý DŸ;é>óáqJà)7ÃÃýíºì÷_ö’+ìØ0£Ç½ì$Ðpqý<ý2°ºœ€"x?{ft;GG]¤Áåšy‘Òzàñ>ÐFÐSšEàbÊÛ|€¼wÏ_®ßóGâ÷ãÝ€´ç]ì> Ä(kh\†qúÀþNÁÞÀû].ªFx Ï_DÜåMQƒ‡ImCQzÓú+ÈÊÖ4?™dsðù™^؆Ÿ¥ÂÈ-ðçG•Qr›þèr–x½$kæH»µž?7Áç9¼EѬ-IÒG+LÖh}’$z×Õ`ðjðÉ……; +ÉõÃìšÃ‡ñÁ™ïÅ->ÊâÖSP¼F@f@‚ÏÎëRrš'ðúF–¦ù=ÞÑ^_iezbbº§³[ï c¿$Týc 5áìÙp/åçæö)Q"ÇòãR̤fàtÌóÅB“â³…öÌ%… y +«9 xÌ^Îj©|2=‘Ä®Ž'ÉÁK—‹²Á¶Tì?8ªçqïΑ¥ô§Ù*–¦.!5rS8Åq¤­Ð=à·¹´¢eÄTк²£µ¶ÊMž+°˜\1Ù÷6œ6ú +6ÙÊ—ß[U¿Zã5ðùAnàÎ9ð\xïxšìÔtñ:ðgÙz_C´T\^¦ ÜòV‹?ǾÂì]Ø$ú™›µEN/QÌ\ òk).þ“LJ‘Y¹×å-$Ù5žq{=þŒƒøÒÌÛäY€7ËpúÛt½ gaý¢y˜ˆ‰Ìß“¾†É©–>Ò˜šl‚<˜Ä>Ã>†³ÙÅp;šÍÂZp]÷pýqÿñ&JÅ–³Áa +hwÁ]dÝ4ïÒ@¦1´ã…¦§É¹;ŸØEOP~ý@ÓÅÓ(¹P3Ëû§§_ çìw†ì" 'Ó4ggÒ{A,XÓ„wï²Ûa|;QàVÑrG˜kN nu7å¥ÅŽ_LyéQ@>)|VËR=¨cÔÒ.iGÊZ›»¾Ñ%¯¨ñùjºÊ|ºUU9™É*ͪš“ñEËtŚʑ¢¼‚lkyàý&¹ ˜¹‹y³šÇü]È¿¹®³µÌ—™Ñ¶ÖwŸ=%93¿‹woÑ+·TÛ&ÞÓ±¿ˆj›»ì=çåaN'>GÓ<¼ß¥*­®)Ya±çõŽ~\’ƒ׋:;»º‹ây ÃÅt²qû½ ¾N)&›X§TË`XÊ‹3“Sì÷îYÛ–‘é+k]×™…ûuï ´]˜Ø¦º5£×lEs¼N€N +(£÷Nyg7•4ÅLõ|\\Z˜ï©t} 67ößÿ$Zm·Ý\­päĶMR•ãpå\ž<Ÿ5àç¹ðb’"ñL‘ÁÈ=cŽš CŠžIŸœôá×îÕž…Å‹¢­®4[‰_ÎçÙÅÛp2&P4˜¬xN­X¹J"R™ù}K6wm0fý¾»¿®üù¨ñS\ÅŸ:;Q*4ûÈF›²ñIüÝï–â&i3šÓïØîs4ÉPŒH¤4wr>Å'j–Ùó¢}¾®Ú*ìgb窼8%ÛHnNkšA/8R±›Üæï#”c75vûwŽtÙÌm|Î7N–—{O¹‰Ò{·’I¥!·áóŸ~ºúŸï<‘M³½y“Üd þ,Ü5¨í¸|’ÂÙÊbÆKÇ?ÿÈá ¿r yq© VÑÉù¬ËÜ­©q8¿ÉñNu¢NUCÞ5ö%ˬ•f¼;5AÎÎU_1ññ–jvPÈ•ÜY¢ ¹ÆÌçtõã}¾ò{îóyÍÎì$üYZE»wåe&ð~2~κŸž)9p¦¨ž:×Þ~®}|“ÕºÉJ[ÙO¶nÅö7M7ššnp±• ±¥€ØRÓ»/• 1Û\l=ãó4uuWgß{€ôUrAóàOnUM¿ÁN,åtïçîè +.ÿ¨yCàC÷ßë{‚(Š–²5øš‰ß£—»×*øó€?æß”t,èL³t–·7ûËj]¶åyÍ•ÍÕ5øƒ­>*±|—GS̤¥§ä‹ËrKÊUE±wïûÇén”Ôó‚›úÒbþ¯ãÇ5Y™éV¿+ôá¯ìµ\ý¢â…Eõx¹ã4OŽ‡ŒËý|$Ï6¼ +qo×PÅ“V¾–^5†˜»¹^Fm`ã +ÈÖþ©àTƒî ·‰Œ·O•ýÜ™²»¢ªˆd•»×9I¹×íK âCÜã6>Æú@`ËgžŒ?SlôLI¥]*­×¿gOSéiس'€­Ù;싱‹é:#øú}X'£Ø¦Bm"3¼lm¬¿UWóÊÊ~¼&ñSÌ¢»qshé½F§q¯]J ãÅþÛ·Ù£·a/v=q8ð8áãÎ#p¶¤Ð»¤ }aWƒé +ðÜ;´¬Ü˜f%¿7¦é¦êŠÒt£ÅbL/­¨69ti8Ÿ¨J +&ÊõÖ²Ú)W^~žkª¶Ìª/Ÿ((A‚oFð ^ÎÀw™ÇÜÈ1ÿA  gÿ¬ #ÎÿŸ©æ¾ˆÄ@DnGûÐ1t]EŸ¡oá=;Wáü,~O“’D줊¬!É1r‘ÜEŠ’D¹"¯¨G´Q´_t\tQ4-^.n÷ŠÇÅ/ŠÿEü‘øV ‹ Ó„U… …M…½v]"“äHü’ÉvɤäŒäªdZª‘š¤k¥KJOJ?Þ’Id™O¶C¶Ctvý5W†¡¤AÑ@Ù ¥Ê2(SBûu(YPò¡ÔAñB)‚Ò$Œ†² ŠMèÓ90FûõPV óMÂ\Péä{„¶{¯((&ŽÊèúÛ¾¡¶ Å#¬£uÏ<]ç䘄¹þysa\%ð0þdŽb‰ÍìÔ$â>YÁÿä‹—‡ñÀ;ˆDøÑÀÝ æ(0þï¦w2NÞ€þ.¾Æ×P6&²$$q¿Ù‡ég¿Åy¸wÓ0ÐkD`D:ýÚ(ÞJÈjÐ1îëKà$ZŠ´ðÞš ñ G©( -Cô‹cÊDY(¸›‘Y!cØQ.ʃ·3håBŨ•ºËýúX òªP ª…¨_‰|¨Þ Ð*@`›fÔ‚îA­h ÆÒÑþ¢,ÐNÉ]3%qÚb1ýV=~ƒöë„q {èÆéýsL'(mÆEh9šÆEÈ~+Œ‹Q$ÆÅ(Ç ãah¶ãah1v ã‹[„v8Òáa&¹ð¤0$ø’0"ðU®-çÚs8‘#)àˆ§‘ƒß 4Ð& ŠïêîìIk_¦5eeçhÁãîÚÖë«­,-öƒÐ º ¡nÔ‰ºÐx§ü£¯Pßä@«¼¥?Ô‚õý`w-xÀ½JðN1òÏì¾~*õ¡~_GçhoÛuÓQ0jrô¸†:;´¦Œ,m®–_¦âiaÀd5šŒTK5GõW‡N PH ÑÎõÐ|)… àd„§qn?–ö¿qhèîè×fgdY쀰˜ë p¤ÙœdÏ6eÃ9Þ7Ø;: œ箑‘ÁÜÌLnظ¶<œ1<0:ÔÞ±Žn=£g³ñØ<П + ‚ØQ`òÛÃÐÉí Ý]3dÀ­rðoí=¿=·Ã[åÇ=>ï ùoÍX•ÿ Jçóϧ<ýC=»XtCDÿ·!›Ë§ðì#!<> +endobj +364 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +365 0 obj +[500 1000 500 500 1000 1000 500 1000 500 500 500 1000 500 500 500 500 500 500 500 500 1000 500 1000 1000 1000 500 500 500 500 500 500 1000 1000 500 500 500 500 500 500 1000 500 500 1000 500 500 500 500 500 500 1000 500 500 500 500 1000 500 500 500 1000 500 1000 500 1000 500 500 500 500 500 500 500 500 500 500 500 1000 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +366 0 obj +<< /Length1 4412 +/Length 2871 +/Filter [/FlateDecode] +>> +stream +xœµV{XTe¿sÎÌpQ.3”$œaRd™'ñŠÜ ÅG"< 3ÊÌfÃX3µT¤b7}ì²t7b»hjÙ…Ö'+ÖJÛ"Û\Ÿ4£ÍK›ë–k)‡}Ï™ƒ¢ñ<=ý±3Ϲ|¿ïû~ïý;/ƒtP€×îæ¼úùF3"=DÝÐØR?õµ†|@ÕÓÈÛ9­A]Úˆk&;ݕ啾†nÃÛB§ÓÁEÝ£ŒÂñ·8žàæVz! þ…Æà˜-)3f\|g³ ÇSp¼ÄËûT4õ)Ž7ã¸Èùã?ØëÃñçÊ)HWõŸ'‹¢œŸ†Q_ä#Jø?òKˆñNKwf¢¥*BÃÂÇŒ…ˆH´,Z­ù­bÿ¿?–¡sd ƒP€¸$‹yš)#F«|¥­pv[aÔê|Ûê‚Eâ:j¨ š§ØãanS)c´3ˆJg5eL³“&È#‹ÙHè䥊֑mw¦øÒ£etŠµhÕ×µ?,cV|ôà'QéŒ.+‘26%‡È©#9†"›mzóö¥±sÓl6çä›ȇ_,å÷ $‡Ž`þœCÙiA‰¢'#UÐL³˜S‰U§!:•> ¥'™íjåâ¼èÓƒZÏ{¡§@__q$ßÉÇ/P‘>͸Z[dHg¼Æ–5—Éûù¤bü¥wR#Jm¶‚,úB²¦Ôv©‰é°ÝZpY+DŸE eÜŠƒp3€F‹ò-æ䱘'˜2bc´zs2ê£K 1ZFŸ”Œ~íyæŽç¸ÇŸj#cv~ºÛǯz¤¬ûñáëÁ/ÜNzíݲŠ[GÍûw½|´•Û²róæå‹ÛìÕûV<ùt[þ¢ ò„ctâMÌ5¢³êhæò¼qt¯p¬3±uÚÆTÃ8˜ˆ³zJ”ºŒ8«It†)çÔc€5¨%ŽÕVêìØγ«7‘BorTÎÛœY9±sK×}ÆÆ¿[S|±{¼LÆ‘¯ŠÌƒÞv›Ó2sUwu¢HÈ>ó1ì+ÀŠrS”Zˆƒ$«JOäHÐJ•I-º•HJA'©-f”¬ê¯šG"ÕѲ¶6ƶõøªB— tÆÌæv~»ÆÛo™Á\,¿a‰M0Û{ÈÄ7ö'…ñO’w/ôµsm¥$[ ¿•Ã¶JïfÉÀ(Sm‰ùË»þA*IHûcö²ò¢Žþ»ŒM.íøêCz½å³KÝë„ò…ÓRŽK¼‘÷FÑ–ë™™T’”¢‰‰q ñ wwÏþ¤Wk˜/ +´»Ï¬@åGˆj培@Ý”)œ&}ió}?NZz@9 X1ZtÑ'¥Xc¥TÖÏ¡Ôº`¡ŒHb¢}ÓoùàõÌYSªÝ—vdߘ±dÖÚuÝÎ[Ënˆ?I÷_Žÿï@tuD÷!úŸE©^—å®ëm½{-žJC¯ +Z¦yRÁY(K*p‘Y…@/š¤M$ Ú§c£ÍÓ¬b®Š7@;e3c´š”¤LeÐë¸Ö†–é7ÏJ„OŒê]ïÙÂqáG!k×õ·5uÅgk…³Íí+Û{/²s)ѽò&3þê¶"ãÜêá3#Ï“tº·Ÿ„{NHÿÝœŠÌìÿLâ7œÚ¸ã̽;f’¯l约õb¬+1¿v`~M¿)¢î‘äj:£žsÈ´`bÑ#SéþøèDK|ÁŒ‚‰ë‹)Æ„jß¿YO/ ÓÜ¥&- '¤ÑD{2«ëüUµÆ™OuõÞO[³[„¾‡`ÎWª1ïÝÑ#åEÛÐYªT‡g¤­+§¤$j¤.Ò1¤'ýÙ·øs…»Ô„ß”˜3£bâ– ÅÕ†ÕjEœ7«¤)¯P8fôt.ËÉS^õ Y©‹±m=Ïô¡­¢‘ɪS%EM¬I•”œB´RQ{¶Þ¡&4+þöÚë%kÔÝ]Öuûʯšç™J«×ÎN´Ùz»…e=¶’{Hþraé°]ƒ—å=„vÕ¡¼X<ÇF·åš¬ýN¶¡¨&íÙ±÷+Þ²]zêÁÛDÝmÜ Z=+q‰\;̬pˆAj¹îÅâÑ`åGI%IíÛ}XØ)œ{í0¹­ä¹¾÷Ÿýˆ©þâ#á{!ÿø{DKö^:OøŒ<„o¤:¯ÄîCÎ8È1>èiÓl"N,­é7Íïíó$)KScJ»–î -OÏ +›hët=gþ¾÷žöGD>ÖwSÉ"ßð=\æTñ,>ʧIG95À-®ZV¿ì·o?¼·ð–;ùcÕMŽ£/m}ŽŽohµÏÏYbôÞºoõÒy¹mío:Ìy¬]ÿ¼·´MÒ¿ýû³"OÔbðôÅê¶fhL*“Jt7åÔoÜø¥võ#š÷›ª-o¼Øz£»l{qí÷ók¨¥$ñróà«Ë3½Ãßk-”Âvø ¾&,ž:ëÉäµzz—è ôz9ýý@ˆ”¶`Q<5Ô®Z3t„©„ºg(y*˜6°ÒPAŸ‡ +jÖ£èUæ TR<´1íÒó!fο•ô0Qç¡]l~BÚw`o•7xa°;ôÔ‰qñÓJ ’~}N#ö>׶K4Žæ$¹g@±]]I>éÃPOÎS@…+(FÁ„RÌql7æÂÊ!Ü7IÜœ_R’ûÄ¡ !íT äO_b_Àa_€Ý!ΣÁC?àUõ£ö:Z¼¢±{IÇ^pä@.äABÜ +Å°Jз‹À‹¥ÕãIíŒA ì‘ GDîÂÐ3Aœ ûV§@ ÏË8…½æË2N£ì7eœFÉ'dœh2IÆH"™2®€HR%ã +H Ëd\ qä>ù]…ë»ä5*È!ûe<b(¥Œ‡Àd*^ÆCAKåÊx(ÜLÝ.ãa`¤ÖÈxTS/Éx8$Ð23é)W:èÚ)ãc_/ãcÁ@ï—ñ±PEŸ“ñ˜ÌËx”3˳yo‹ÏÕà °éS3Ø|žoht°…»ÍjldKÅ)?[êð;|ËuȼÐ>pA8!€!ÏÀPNÅ; ù8Ë#Þ‚ì`À·,DñYze—_9ðé@®åx¯Ã>À³eŸ«Ó€ÇU<®*“V¸ ¾0À5ºìÈÙ\`ŸÏ{ø@‹õus .O›Æ^¥`åõó‘Å#±µ æA½ÜÈЀ ¼³Øβ£É“V^‘õKâ_Ýbsøü.ÞÃN5¤›Ùf'¦´¸ÌS¢F,úÌ€ž3ã[38§OåÌö[RE1’”´ I¬ËÏrlÀÇÕ9ÜœoË׌Ó=\’[9¼(ˆC—:$S}° 1^ÒoÔý‘ñ¯{îúí9¿«ÁÃœ{”Ý9R¼Å ðH*:ËÃ8¶Ùãty˜_2ƒ£Ž­ma¯ÐÖ ÍÁMÉÆf¤qJª‚ésc¡ų£(S7š2Î@À›i4Úù:‡¡Ar±Áλ^#*崀 àþL<{Œh8/±ãªO îÆy/^96F™yÅŠ·l–Dí4×¹øë˜WH²\«õUn?bÍ(S©Øewxüè±fOÃÇœ6ËËÙñ!ÏLa‡1ÃŽ',f&ry¤Ò«“ýX'¥¦è§ä,”ÇáºàèÚ=S¹>•3ÄTa#'i`à} ÆÆ ~cqavÜ4Q‹ÑíåFH5 ³}j ÖÒé~DŠ1ñ²ñ»±+/ËW’.p$lÖî3a55‘3¤ÂC¤#ï“ŸŸù|ø9xA€ÐS!µø=þýiMæ +endstream +endobj +367 0 obj +<< /Type /FontDescriptor +/FontName /91a4c8+NotoSerif-Italic +/FontFile2 366 0 R +/FontBBox [-254 -250 1238 1047] +/Flags 70 +/StemV 0 +/ItalicAngle -12.0 +/Ascent 1068 +/Descent -292 +/CapHeight 1462 +/XHeight 1098 +>> +endobj +368 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +369 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 250 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 705 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 937 1000 1000 1000 1000 1000 543 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 458 1000 579 562 486 1000 493 317 556 599 304 1000 568 304 1000 1000 574 1000 1000 467 463 368 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +370 0 obj +<< /Length1 4388 +/Length 3021 +/Filter [/FlateDecode] +>> +stream +xœ½kP\åõ;ßå°/ Ùîra ìØ' Ëky…@»„<XX—<¢IAcCºFÖ:Ñ1j˜Ž5mnÒŒ%ÑfÒŒÓv¬Î¨µé4¦£É8™V§uäÒóÝ»`tú£¿ºÌùç;ïs¾s?BÖ’bKžï N>4àuÄÜ ÔC£ûöÄûqý! dt¢?˜[•“LH"î‰7<6so]ïšJBÖ”âþh8 +&ÜCÿˆû+¸Ï Þ; [ˆ÷7qÏ·uÙJ›ßé$$)÷]“Ó3\6w÷½¸Ž….¦Ô¿o†‡ÖØBT™xŽv Ì?y qäøÁ·KJ‡vÆÆÅ£ïÑ_"YC’’YÄH +IMSµF«C|º|šÁÔ’u+Äëõ„lؘ•Íbø_tÿ_~”£ æ’ GâÑ_;'p`®X³éç\²ô ÄHß0Z ã +G i‰ÆiÐC&¤šLìŒ#Þå/à—ô&JQôTmKO‹Ë1¦éÁ(ä¤P6# ì¶*êÈ?y©»ûRwùͬ­ÍF­.ÍÏædzóŒ4ræ <)=õéëçªJpþC«¬» ½Î¬4¨òãn» +’é…_Ûé‹0d^2¢/›æ*ÒÄTBòT§3Øu‚Npœ`½i==é6$”þNI{8Ó+¯˜àß²ü>´ÿ4ò¢í€1pÙmé:mœ“ïL·Û\Nº/h püã$jªðùB»j<5•MU›ó‹×ÂFzVºmŸ}`˜/ÎëØ°À˜ßm(Wĸ¬#ù(9'âíU°"Üèt°M†ÎÈald%q(ÈqTÆÐŒ&“Ï×åßÝUÒÝPátvoØ”§)¯ô4ÆÆUÑ‹E ÷X¦çf_zŒ"ýR8­°«:¼û®þ©nÌGê]D½Xm˜/Yc¼ŽL­Ëí´NÅ56=#N§µÛœŽ¯}=ž²‡÷6Ö–yvnŸ÷lþÁ–ÒcDèÍ@[ÕîuÔý“½ýý{†ôt]°ª- ]0ÞWQ=_µ£¼ð؉Ë>g¡§×ä\%b×Ø5B¾¯ÁºÊzµæUWÙ²ºßõQz}Éxë¨á19þUhï3h¯–EI•f·¹u •ÃÅÂ#8áB¹Û½åæ섧Ün ‹Ò%élvñz˜»´˜qù$»Òûʸδ‚AeÐEž‘>–!Iº‚5tVú¼P:gB:Æ3åI”y°\T‚̱üå—Np)ÄG¢´8Wäk Hiלv•0æ¹9é½¹9zÝ´4g2Ñ‘viÏ m,ÒÊf<ÉÒtz;Ó ¤ÏO)²ì*Œ‘ +q‚ª½ü#j+ýˆE'B÷-"rLmŸ«ŸTÌ(!x¥´Y”Ý'+¨ñš¹ðºÁF¯Í”žn²)“öÝ={ÞÝC/êëÞX¨×+Ó’ÿe8ñòËRX–éG® Ì5L¦FµZè±rác Ø-8V`îÙî ˜!鮃ÃQ륿~šØ +ú/î‹—> ïhÆey>”÷&ÊÓ(O¹B©ž B¾L 4«WÉWÛp÷Ø!(Í®tnÖ”»·;ž°¿Ão.@a}Ò#7Þ¯sJgàþ¦®ö¥{·G{ŒÕH«Ù,øî%Í—‹Z¾Q³Ùëö n îìjØÚé©/o lÝëkmi¦kJË[ùâÁŽž=EβF¯g{náPsKO¶=_és8,*½FÎ3þUÀÜ)Ç)–àíô,£QúÝuÖi4*m:jÇ ÊwKu òh¥ {æðŸ×룆¥?ýþ 5!ß&9Fr½éóΡtnïÓôi×¢uJÁ„Ô#½ 8-Ûâ^> ¿Y~‰õÜ ì¹n82o4"þ$5B+WÈê Œùöô Ènu6˜+©ñ¾# óJo¯CÏP5Q³¯°lÄX^¹Zñ+`Ç!Ëþ ½[[<õ ž7z7áw²Ú]ë¡ê¹HJìT8ˬ‡”c|6Ùݫćåù4ÊM]É2ú gU%øý¡6[YSe±>ÉkÞ)ýÆêÜzÉÎìQz’ãšúíBms9Œ9qÚ§®îÚuu×ìãÕÕWSõ!é£C‡`½ôhø«pø+Ô¹u¾ óbîãåÚ„ï³?üܤÍpÓªØÖƒ:N!]6óË@émwÖÉj™m©m¬»§¸zWÓÎÎm[ëºêv4tSµÎ”0Ú5ú&OM#oÉ Z]ÚuÞ²ª:&ŸÅôzžàw^cwÚu¬chÓ£1Åä uã¶Ë—óÊJòÌÖöŠq¸}ùrôÛjÓZsRUÔ)ñ“{]ÂJí 3ÖŽÂþ ³ÖcµÕõîÞJ¤Gj™ð¶¤ÉkôÃÔj]&°(µ#pwÿˆu<ëy©óàý¥¯ð”ÕL.üW «tnnä ú¸sÙÑ!"e3¼²´áSøBy¤“\Ò‰}ðA"’¡ê`“p^ƒ÷@¢FÚE#ôºHߦ7è§ÜzÎÅuraîw‰»Æýƒ=Þ¸[hÙmr =&^„.„M}Û*²ªzFÚl~_t_•Ãd¸N"ÔEÏÙÙ>„žïáÜìÁc—®f‘l×O8ù—#crä7®rK!ýŽ·Àm8ÎNÑë×pL™áCR4!‘&Å&RÊQÿ!¡Ë# KÿD5cl5ñ<ŠY#-s½Ë3¤'Æžûà/QMòoù0±ý×·XB,IÃî©Å~œ‰wV™1bÇ( fRDJÏNœÄ…~–b-ÔZÒH¶ãmܯ£nìæ"_P¬«K«îäȯ3ˆÁ~Cê¢Þ3gã0ã +ð=<ÅSÄßÅSÄßÅshE$ŠçðÛu>Š!kFñ1d=¤Fñ±ˆ/ˆâcïŠâãH:´G×IÄ+6$‘X¨˜Ü?5<žÙÔ_ÀÛŠK<Ʀ#äÀU+1áè%mdÖu®Û1Fm¤™Ô#'Ê,R•12Þ4î'M(-ˆ‘&ýÞ‰ñïÄÔPˆ·Y‹ùr^ááG™q¸µ¹,6 3µLqäcóZ’-±¢-<)_µEÖ‚óèªÕÊ© siÁѲb}TOÔ ï2ßa^Whjzxbœ/±;K1÷!Ô=2a‰¬ßIJÝe¡âÒ>ÓØäèì4Šµ ËbÃ33“åEE2Ö2ˆŽN[§'f§úCƒÌaëȤlà †¹‹®µO¢ÖYT`Á’QÜFÓ¸žEÅý¨~pÕ}+Az9Ãò×ráìé=©Ÿ“rÿôõKO};/¯çnq½Xg +wc–(ÂäELh÷Ÿx$pÎgòÄ´@‹¨õáâ``£gêõD-þã!³H4-ba»_lÞ‰°%ý•7àßAcÍ´ˆ`毋É&‹HÍ->½0XDÎ<œÉ‹žvë XÄ3c5†þ¿éß +è‘ο¤ÿ$  b¬É/z÷äƒ@åÅš×ööXÄ8ó¹8ŠÚù£½½z‘ ˜xó¹\åYE%˜Õ*¾¬È"&šùy¦äuË\^“À‹1Æf‘´û#¡Hg‹R½ÁÐGäOÙ1…këÒôi”˜dæß•ÝI6óEb<„çop„÷ó}ŠF·–iFÕ|„oˆxƒB„²: =H‰þ1„è ± ò¤Èš*¯e zþZÀLMhÍŽ¨m™,Õ,ð×¢ÊÞßÒ¡7ˆðGС&!"𑦈d + ›,bKƒíV1ØBý="l‚#{ïô„±jÌèDd…­y@ˆÄ‹|»¿BO´æ_xjj e1 ëQñ?}~¡­jô8Pƒ‘÷øüçñ¦Ôöלpù~q]hÊ.YD,Æ ëÙ¹ØðÕf ûÿÝÙµ +endstream +endobj +371 0 obj +<< /Type /FontDescriptor +/FontName /79e08b+mplus1mn-italic +/FontFile2 370 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +372 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +373 0 obj +[1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 1000 500 500 1000 1000 500 500 500 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 500 1000 500 1000 500 500 1000 1000 500 1000 1000 500 1000 500 500 500 1000 500 500 500 500 1000 1000 1000 500 1000 1000 1000 1000 1000 500 500 1000 1000 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 500 500 1000 1000 500 500 500 500 500 1000 1000 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +374 0 obj +<< /Length1 2328 +/Length 1338 +/Filter [/FlateDecode] +>> +stream +xœÝU_lSUÿνý7ö‡®8©$çî"zo»vü™b³AÉ6aµ˽d*¥»ÝÛõ¦íƒ` ÆHnÀ˜ â!øàƒÆœ¡‰<å7ãƒÆˆñA‚F  „ÍïÜž-›ÑD_m{Ïù~¿óýù}_Ï: Ðà…K¹bÖBÖ#ó- fó¡åi´ï"÷l¡”ËBlv#L«ÇwáÄ{7LLXÙº‹äâ4âMÅìq›Äá:â*b:8K$OÜ?ø<â»T©B'ü„øÄ[¦³EëöÅ— r+>*¦ xÞ:àëÂóvÙ²Ùï<óÙˆ£y{¼¸öÃØ;ˆ/a+w¬J}sÒC€ºž7áC€÷‡ÚÐôÁÿçEVØÒŠ”á8i—mò>Z~¨ÇT;:×)â‘C/,âÒ~Ö}ñJ)©îÉúC‹_Ýuo¬¯O–<ùð>Èw0íÌK!Å•y:®ÁaïùŹG{¼'Wi­) îz Ö ýŸõ+š"ä6yo$HŽô1⳵܂8‘>©Þ+I’,Iþ`ÍâÔþGq!x B)$‘¼-.Vá°§“$„ȧß?X9©ÅW!ñ³x>Âu‘–å´×4{êpß‹ˆˆo ò‚'°*‚—pªç/áxŒ¼$ìzPÈiáS=ämÁÁK~|ÖŸ]»Ùµÿ>Íà' §š$¯ðávKoÉž-OŽOT·ä¶ÒDG|;ÅɦÑtf°_ï0ôB l˜…2LÂ8L@¶@{¤8ÛˆÃv´@ø„ƒ0 Ch§±óAè‡}?Œ9ã6-[ã3…lY8Ç1)Ť&d¡œ™•dª4]M•ÊãMD;h7]• qb§žÐ¹r,_‚i”Ç÷2&°\‰QI¡{YäßÔç Ø :®úRcÿRöˆU®L–¦i<Ú±£ F𨌗dÒUø‚е«+žëÚ)Ú…™Š·u‘w¢Zµ»c±Çf+ÑJi¦œ³ò¼éè”펼Še»!†ï"Z,]AyÑqkTОÁÊ9¬Ÿ_ž@¦ÀvûX¡ÙZjmõ4V#÷‘¦¯Ï·¼÷âÚÝ÷!¾øæòÈÒ¾8·pË{ÒÓ‰0°ô·w•,¾ÆÈ9`´1OÈæ|Ê14XkWÌÌ5LÖ` 1h`ÛÒë?f2PŸiÃccér§Lú#-Ñ6Þd IÚ@ÆاšŠÎdm²²dÓ&My4ª¨Ê ã»ðçfýŒGá_Í°ª0oÄ`©c¦{`š˜Ï«5ŽÖ™O›o'g°:=3:f€iüÚü&—J.S-ÔLŸŠé¬N£§x‘똆2ùÉ>•2Ïæ~iñœ,åFWXQÌ°ã¢L ñ‚kjê‚á ‚ë5ú¥ÛNƒFcÌ¡t¿šÊNQƒŽ­¥à~¼2–¦Ý爐ªCÕ-§òä,‰žØ'XÒâcšÜJ{n´)J˜Þpp Ô‡j mŠë¶VSé Q\¥ÆÀPXaÄ4l¨OuTêô9j–ÔBø¦³ ÿB¨»™7ÀÐ_pø¦f§Ž¬ì„‡¶hØ„ó:[ÿ˜êøM»Ã×ð¤Uû’$ÙÓC®ñ.»+w>dð5c¨GQ½Úƨ=8ùdƸ‚·¹7×s…P‚£9ö¸õÄR­uCç‚‹Îÿ'lŸî€tSú iàOÒ°¶‹ +endstream +endobj +375 0 obj +<< /Type /FontDescriptor +/FontName /781c87+mplus-1p-regular +/FontFile2 374 0 R +/FontBBox [-109 -288 1403 1075] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +376 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +377 0 obj +[1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 288 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +378 0 obj +<< /Length1 6468 +/Length 4546 +/Filter [/FlateDecode] +>> +stream +xœ½XyTTWš¿ß­¢ +¡vA_Õƒ¤Š¥VD €‚²‹Uˆ K(JãÞ¶±ÕfÐ1=Ì´Ñ´c2š“T´Ç1™¶Û¶s:=v:“8¶I3™´“m2vŽ'É1NxÌwß{štNŸÓÿ p—wßwßz¿û=Bæ“|EŽöŽt‡K´6Š+ïºáÍýÅ)ËöáüSBlã½Ý[…MÕ„hSfÏàÈĦ]ïi +ñù¤‰ vG?B?&Dw +ߧto +CbÝ[øÌ54ç9–l¼2ŽÏˆGÚ£ãªÇUÿFˆ1ÉñP÷HðƒŸ˜‡ÏøžnB¸¾ØÔê'Ä4ˆï=á±`8r'Ç€ÏGñ9·?<0’ð“¼øŒø4Ø»q‚ƒº¨fB’P&‡ ÓOœƒŠüÕ`º+ˆ2 +iÕ$z^L, D£Õ¡`£iAbYHHrJjÚ"™-|z†UÚž™•½8ÇfÏÍË/p8]n·,)ZZ\RúPYù_gþÿóCÉYÔ³”ΠžjTÈ©àÕn§ñì>Í fÔÿ==Í袈aî ¸F¯#],Ñ“dÂã>#¸••Áäð¸¨<ê,V—Ça2Py„‹B–äšL¹¦Kbÿë]µµ»jçÄž.lŸ#íÙÙ}øïˆÃìNßaŸï0tˆúë4\ƒ +Eò¥;}0­E'\!Ì›¡¹ <® „ňÆëTi5 xkèbð¿^_yEøX¸õÊ+Œ¶ i÷H´ Qó­&Ói‚=÷‰˜Ø¤Ý;·:ÉIÔš,à=|£+[ÿdή¿üÈãVá{”ɉÖ:uôäIq={î]øhK2x€ß?ï†r:󕀌qÕ6¼ˆ6Œ%F²ãÞ‘šx°ä‚Æ“ ¹À[âÁhXNG)¸]™ÿ<Õ’—׺¥ÏÇZSÌ™‰ ±Yi8(èõòÂ'ÊËO@Ú áÈ^Ìçî7Ÿpdã°ÄÆd©ÁneA¯:µ™j·×©½KO½4J7ÀºžþY+£)By^Ey8´ŸÃd4¨Øñ–L·Éép»¬9àv:‹üñl¯vzœ£A%c#¦Ay½ŽýAM­ÿ88¶ª¢²|©Çš•i^Ut÷¥¤w…Óº¬•mM•Y°[ŒU&ïk(o"IGT‹J„5‰¸¹h°R4Ü£U!ã«Œd–FÑ‚¥í¾uÁªf›£«¡¢ØÓ›—•aϵeÓým[rB»¦7þ`çÑWk ])³?_l/«lê­ù½„\*i¾|6ÐÓ +l/=ñÄ°çäIa zˆƒÄÀ9ZÏ( ÊeÌpgÀ9á_¡RØ{àÖyz¾ïãÐÇÒYó’Çà<¼~ÏlŒÂæ…="é¤ÏwÝçã¨1/J˜z7‚º3ÜÅ"U%Übh}穈ÇòØMÑDZèe½SÏgòjvJâ^ØõÂdÆ© ÏÔrJgf­.àY]MX –¢ ßD& Í„d0k%ï¨i fn×¢÷]oÞlóÕ·þ¾ÔU´jxÙŠl“yÛ™Ôå…R—ß3Ð_Ζ´Í‡ØÁªê +á‹hð– D3ìÈçEä£gžÒjœ¯ÝÄ& Œ¼Û +¶ÇŽ:—.©š½W[üp<ƃú»EIð]1}pX)ÙË…ï"F 1¡%,j­;zC<Èb›.' IMÕ+Ï…;ڪ맷Ðýófßž·óù'· +·~p²’Éø4íZÝ)´W,‹I£ÓÈkF³Ö §n_¿~[8ôÑ·Z…/W#‰Hï—éç= çõõ™™0´ˆ´Çð-å|]ŒK•v¨­–w;µLc—GŒJ(ðÕ×Tš“wü±¾ãÞÞ½åÅåtú;O>µ/T­B?Û.œ6µ'J|±{F’3Ï B™™¬ðŒp*ŒœÃáÕÔ¶zõì1¯awi1WéEuþý ôùvQ `–ƒ÷qšÀtPˆ¿z§øËC-é*¢Ú^ëîZ¼Ýú0Jáâì1ñçÁÛRŽ(–ñY„iq›ÅQðÚâ‰ÃŠõáÃ,ºnSݬÛmÑgih‹«h 5ó<±¨4x+h(Ëq¥Àò +<›<ø—q¨³  “utÿVáìÖ­P3{}ùqXx|ùòãÂã «y¿)úÎÄœ!†€WÌ$hÐS\jN4¦—o˜4ñšWo +Á§Í5ÑÂoÕ«nŠºGß2ŒKùC´‹ÉTœÀ´øÌ\Àˆ—°¢ä&¸†ìÔ‡&Š²²2ÃÍ«®e®*+.±$Ò˜¿µS~í—½VámÄ^ÿyqõò‡¢™­äüŽ¹¤„ÉüAFeÈ™,O±€€ëê +ÇÚÞé^Y×î(Ìqô7¯ï4ОWnK†s¸õ×ùƒå^wAibÞP]{_šx¦°{]ÊéLbà?‡è£³Û飫W³|$Ê ú[i±ºÑ]ì^G^]»!«'k$¦c˜¦ÌÞ­+ôÖÓèÙëÃߌÄö²¢pêgÇFŸÞõôĆ>º<3;Åèb°»%á'ƒHN)¬“<õÜ4£¯|—C±t/¾ÙßÁAM7ÌZá–`ÏŠUôé V™Ò~…^ŠIÅ;hÇøôÍ8L˜Æ¼ ‰Â!aÒ…÷`úÅœ„×ç^`÷ëÔ݇ž¬®fu0¢XÌÎðVv¯t­+{r1ž:Âò.Úä ÕI·.»éØÁ´¢#–‚äm·GÏß?¸wCu¾µ=oÞ’²È]Ý8’R]îʳpT׸Q¸ÄùÛÖh—f¤·q‡+'o>‹«rñüßÆ|ÌâT N<Š, Ô_-¼>4Ö½2dwt® åØ\‹RÓÝ.PþÝVŽ¾{Ç´ãà@«E83¿Ü¿—£¼Ì'˜+ˆfÅf)ŽÆi +ËjÊÜK––mØv«ºjÆëÖ¥ú’öíx“Ë.ê}[:?˜“d¨L1¥üdezê"—-ÇulM§ÃZÙ=6´|>ÔYZ†Ú.Üaº3›Åm•òq>â]@¹4 ÏËêQ$x «3œ¬„Q‹*-)ª®]vãòºN*|x‹“\Ûû¾Êäæ$šòýÑ\½¯²BÊs˱‹àyaÙÝé–%«‚RAJ¶üòPe«×nÉY´0ö±ÇFBðYQcœ/^ã*æš„µð´$—cn!æ(Ñb]Š‘áð”ÀƒÌ«5¨§¬ûøàhvÞ…á-þêçGºr¸”äbï–ö¦™ûþF“`Ûq¾|q”ªêEù°L‡óh?-Ž,jx­äNvoxÀÒTóð"{5òR]k·ð ”5d ƒôö½4I.–›[è]ŒKV¡:™B^¬ º>ݳa7ž¼»ð/¯mßNäÚf!t m Á éöИQVr|ò½Ï…÷Ûý†Ý©p¨I0 _µ´ÐWÄ’ŒWEPcÀ. +­®¾õÖw‡BÏÒè{Â?¤·…êË"½»3Ò9Ïìv‚}Ï{¾hj¢ßo’ü‚Áƒµ¾ŽYSÏl(VYßÐ^ ¥ K8›w•7¨1$Ç÷iŒ ã×Ã'Ö¤¤%ÍX«L1Ä õp0Ùˆ!_ß%:–;ôßÂ,® niÎòd¦†àæâš!¼{ÝY&¡Ù& ãî ܧf;u“Fe±jtøµaůŽƒW¯ ²Û‡ìT·S¸¾s'¤gffØ2—Ž5£=`|PCà¡_ ùú¹‘ÊÙºœG/äe‡ê;Æ×Ã…Xá¹çZ*Ü1Ü orÛQö±Љ¹×(ZÁ§&Gž¢ºæT¡ÞwÉ1-Ö½:VSƒÏšx¨þÒ€5ÁúH8üŠß$¦MMX(=øb6`uÖI&È9DŽã×ó'D´Á8 +gá¼w©ÖÓô=F/ÑkôS…F‘¥¨WlTW\UÜT*•‰ÊBe›²G9¦<¦¼¤¼eŠ*ê‰:õbÔkQ×¢îªbT•OVýPõ¬jFõ•:QmS¯Rªw¨ŸÀþ&Jý™ØÎb3`; s#é¶Û)lÙØØj°a«—Ç—äu/¶blqØJ±Ù±¹d:?6[£Œi’iÓdÚ"ùÙ.c±÷1جòZHÆ/—iÙZ>¶å2}¹Œ[$Ͻ² 3KæÑ#ÓßÇaë 2“ÝûDé.vfÑ.ð­ÿnTˆ+ÄÆ*1Ë6v«Þ§øŒþ”½¥S82-pžGc±Q¥êk„Î ­˜er:¶±.‡ãðŒÇsŠŽ¹ Ò®tBY™~ü‡wdNâÏÜ£ø}ø—~*Äo1%Fi aÿUJÀ;F‡u©¥K$IXŸ.Bt3~çf`Å”‰§.›,F=òH>)@L'qæòB²«Ú¥ˆ· oÓJREV eVâ×-YEêð‹§㵉øH3i%md5~ÓH;YC:ÈZQ’òêsXD©@‰·¢Yäu *Ò/¯Ê:,¯S”“¼NQ“mòºeÝ-¯+ó òº5“ו31òz™œ¼E‚]^WaL¬ç±Ä kdšXRÛ–†7­œÈêÍæù.=RÕPßÒÌ5új*—µ EFI˜l&cd= ƒxf³H/ÊÆ¡ý˜]8«#9ØW¡•êI ÚˆCkùð©m¹Œ´ fÁHH¦* #$T1:܇ÖE+ôU†&ªFÇ‚œ#7Ÿ+â$jn$Ø·~rŸ»ÃÎdC£$„°q … ŠB䢺û&Gð} +=‰3é½mÇÞ~_t™•(ÍŸo–ek Ž¯ q¹ùîBt|ùŽ#æ¨HT òv“Â>—#?X3žG@{NL„‹òòÄ5{?ê8ž;>:9Öìgºæ…E[N m‹0óo9N"¼ãDRtŒã|Ùö"óþŠç’!¤g^…øßï9ò\WBñç$G:Ãÿqï¹}=Î-TÜTt môýótæ¾ý¤6Ýèà@àå*UŽßÑj#NvR#ªœ bÈ!$Bl¢¯,nôGj6"„(_ûKâÚöw%úÜD{lÜL$.Ç¡¶ZŸ¿’˜í…m}")kDز€=¢´±­fÞ¼Åÿ_É¿ $#6ùɼ9•ãTm ˆ/Ä‹²Íïh·GT¶—-°¹sû::’#aÔ¶—ÓÅ¥²KÑ6–[’g̳qۓ׆‹(2Vò\Di­‰FÿTpª›c“Âd³9<%>ù¤'Æ0F’N“¬1#b¬»,ªgãò"j4ǭૺ‡8?××#A0ºùŒ3²æ¦¸SUÝü7Å‹ìx)CJÔ-DÊ‚ì÷Ä‹œJ®&šÍÉÜÕ)4nZ‰Ò´Ê²™E²Ï]•™óœ¿¶9Ù€ +ZÉOñÜÔÊ)¾›m¶°ÁÑ07èPn-S€MtßR`Š |÷кoj¶êm¨ÄÔ^f¶š>~JáýÅÉðÁv†”AYEÔžÓ`8Š=#nõ³Þçç{Pz¾"à+Ðòe>ÿi<&Ëz+N8D¸ÞHR0å>/£-‚«hìì,ϧc:ŒÆªÚL7ÿ»Ï +endstream +endobj +379 0 obj +<< /Type /FontDescriptor +/FontName /d420e1+mplus1mn-bold +/FontFile2 378 0 R +/FontBBox [0 -230 1000 860] +/Flags 4 +/StemV 0 +/ItalicAngle 0.0 +/Ascent 860 +/Descent -140 +/CapHeight 860 +/XHeight 0 +>> +endobj +380 0 obj +<< /Length 1286 +/Filter [/FlateDecode] +>> +stream +xœe×ËnÛF†á½®BËtHs&Ã@‘n¼èu{stÔ’ + ß}ù½¤i Æ/‰œy¾_Ã!uøôôÓÓùtß~»]ês¿ïÇéÜnýíòåVû¾ô—Óygì¾êýë+þÖ×|ݶ“Ÿßßîýõé<.û‡‡Ýá÷í÷ûí}ÿáÇv)ý‡Ýá×[ë·ÓùeÿáÏOÏÛëç/×ë_ýµŸïûãîñqßúØú9_ɯ}à´Omûütÿ¸óϼ_ûÞòÚLL½´þv͵ßòù¥ïŽÇLJ1wýÜþó‘9ç)eÔÏù6=nÿ·ÒP•–Òªt”N¥§ô*eP)£ÊD™T.”‹Ê•rU™)³ÊBYTVʪ²Q6•²«”[¢ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^ƒ×Èkðy ^#¯Ákä5x¼¯‘×à5ò¼F^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‹×ÊkñZy-^+¯Åkåµx­¼¯•×âµòZ¼V^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^‡×Éëð:y^'¯Ãëäux¼¯“×áuò:¼N^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^^×Ëëñzy=^/¯Çëåõx½¼¯—×ãõòz¼^Þ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞ€7ÈðyÞ oÀä xƒ¼o7à ò¼AÞˆ7ÊñFy#Þ(oÄ»ýÕnóuWùß.I•$’$*I$IT’H’¨$‘$QI"I¢’D’D%‰$‰JI•$’$*I$IT’H’¨$‰$III’’$’$%I$Iê|›äMx“¼ o’7áMò&¼IÞ„7É›ð&yÞ$o›äMx“¼ o’7áMò.xy¼U†oÕÄ ÞªÙ¼M¼MÈoÓl ÞÎx;ãâí +¿àíJ¼àíê·31ÞÎÄx;ãí +¿âíJ¼âíJ¼â특âíâ¬x»¯x»¯x‡+Þ!Êw¹âB®x‡b®x‡+ÞïrÅ;àà2äÍkçÎœñJ¼Y³e¼Y†Œ7+|œÆx‹ oSŠŒ7+[Æ›ețךyÞ¢oVûòæµ– -ã­Œ‹·é€"¯åþR¦W*–Ó4Xq”êC™^Jú[(£à®^ƒ1»¢y]•¡Èk¹}¼YM-x ¥úëÈVæz·ÌþÊ[YEãV¼Y³ÕÙ_}/7×*¯Y%«ê¯eã­Ó«q+ýÝ:÷Ý.â¿7™Jã‹ÈÛE¡/‰3Y(Y™*AˆW RõÝVJSƒª‚¶á:(u@c¡ðD±]a*Õíf)¤9J­ñæ)¥o,#Ú\ØZ>MU¡Û\ØjPSã {HSãçMª•ôj»ˆ·’{fk”Œ°yGá‰m[z*EïsaëÝ>Š&îÓ«Óúôj%u¼Üî; ¥2^ÆWÃ[Õßήòvú[¾Ïþ2î쯲uú[•¢³Pš:ÙçÂVÌ¡§Õ…> ¼M†ÁBi2 .Ħ‰ÇÜèÔ‡!¯áñdÈk¹`†¼–=oÌ ‘qWÞ•wdJF(”L164ÞU Ñ)™x0Eú~êñZ?¾=¶×/·ÛöÄίÕõ~:÷o?$®—«ÎÒÿ¿ç†óO +endstream +endobj +381 0 obj +[500 500 1000 1000 1000 500 1000 500 500 500 1000 1000 500 1000 500 500 500 500 1000 500 1000 500 500 1000 1000 1000 500 1000 500 500 500 1000 1000 500 500 500 500 500 500 500 1000 500 1000 1000 500 500 500 500 500 1000 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 500 1000 500 500 500 500 500 500 500 500 500 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000 1000] +endobj +xref +0 382 +0000000000 65535 f +0000000015 00000 n +0000000381 00000 n +0000000585 00000 n +0000000867 00000 n +0000000918 00000 n +0000001190 00000 n +0000002075 00000 n +0000002371 00000 n +0000002538 00000 n +0000030543 00000 n +0000031500 00000 n +0000047488 00000 n +0000048177 00000 n +0000055172 00000 n +0000055564 00000 n +0000055608 00000 n +0000055657 00000 n +0000055724 00000 n +0000055768 00000 n +0000055941 00000 n +0000055985 00000 n +0000056029 00000 n +0000056145 00000 n +0000056189 00000 n +0000056233 00000 n +0000056347 00000 n +0000056391 00000 n +0000056566 00000 n +0000056610 00000 n +0000056785 00000 n +0000056829 00000 n +0000066050 00000 n +0000066405 00000 n +0000066449 00000 n +0000066493 00000 n +0000066537 00000 n +0000066581 00000 n +0000066625 00000 n +0000066669 00000 n +0000077465 00000 n +0000077833 00000 n +0000077877 00000 n +0000077921 00000 n +0000077965 00000 n +0000078009 00000 n +0000078053 00000 n +0000085568 00000 n +0000085910 00000 n +0000085953 00000 n +0000086686 00000 n +0000087056 00000 n +0000087099 00000 n +0000087143 00000 n +0000087187 00000 n +0000092378 00000 n +0000104537 00000 n +0000104960 00000 n +0000105004 00000 n +0000105168 00000 n +0000105342 00000 n +0000105386 00000 n +0000105499 00000 n +0000105685 00000 n +0000124188 00000 n +0000124556 00000 n +0000124600 00000 n +0000124644 00000 n +0000141253 00000 n +0000141621 00000 n +0000155510 00000 n +0000155878 00000 n +0000155922 00000 n +0000165881 00000 n +0000166249 00000 n +0000166293 00000 n +0000166337 00000 n +0000166380 00000 n +0000181205 00000 n +0000181573 00000 n +0000181617 00000 n +0000193124 00000 n +0000193492 00000 n +0000193536 00000 n +0000193580 00000 n +0000194054 00000 n +0000194098 00000 n +0000203016 00000 n +0000203371 00000 n +0000203415 00000 n +0000203459 00000 n +0000203503 00000 n +0000213436 00000 n +0000213791 00000 n +0000213835 00000 n +0000226636 00000 n +0000227062 00000 n +0000227106 00000 n +0000227281 00000 n +0000227325 00000 n +0000227369 00000 n +0000227414 00000 n +0000227557 00000 n +0000227710 00000 n +0000227847 00000 n +0000228029 00000 n +0000228209 00000 n +0000228336 00000 n +0000228381 00000 n +0000248372 00000 n +0000248729 00000 n +0000248775 00000 n +0000248821 00000 n +0000258425 00000 n +0000258795 00000 n +0000258841 00000 n +0000259697 00000 n +0000272077 00000 n +0000272465 00000 n +0000272511 00000 n +0000272557 00000 n +0000272675 00000 n +0000272721 00000 n +0000286764 00000 n +0000287135 00000 n +0000287181 00000 n +0000287227 00000 n +0000287273 00000 n +0000287446 00000 n +0000297923 00000 n +0000298280 00000 n +0000298326 00000 n +0000309411 00000 n +0000309795 00000 n +0000309841 00000 n +0000309887 00000 n +0000310302 00000 n +0000318356 00000 n +0000318714 00000 n +0000325123 00000 n +0000325494 00000 n +0000325540 00000 n +0000333387 00000 n +0000333758 00000 n +0000343042 00000 n +0000343426 00000 n +0000343472 00000 n +0000343518 00000 n +0000351993 00000 n +0000352351 00000 n +0000360070 00000 n +0000360428 00000 n +0000360474 00000 n +0000368214 00000 n +0000368589 00000 n +0000368635 00000 n +0000368752 00000 n +0000368798 00000 n +0000371517 00000 n +0000371879 00000 n +0000371925 00000 n +0000371971 00000 n +0000372017 00000 n +0000372063 00000 n +0000372228 00000 n +0000372361 00000 n +0000372495 00000 n +0000372633 00000 n +0000372773 00000 n +0000372903 00000 n +0000373036 00000 n +0000373161 00000 n +0000373289 00000 n +0000373422 00000 n +0000373556 00000 n +0000373689 00000 n +0000373824 00000 n +0000373954 00000 n +0000374085 00000 n +0000374214 00000 n +0000374344 00000 n +0000374472 00000 n +0000374602 00000 n +0000374727 00000 n +0000374853 00000 n +0000374978 00000 n +0000375104 00000 n +0000375242 00000 n +0000375382 00000 n +0000375501 00000 n +0000375623 00000 n +0000375750 00000 n +0000375879 00000 n +0000376004 00000 n +0000376131 00000 n +0000376257 00000 n +0000376384 00000 n +0000376514 00000 n +0000376646 00000 n +0000376771 00000 n +0000376897 00000 n +0000377025 00000 n +0000377154 00000 n +0000377282 00000 n +0000377411 00000 n +0000377536 00000 n +0000377662 00000 n +0000377789 00000 n +0000377917 00000 n +0000378039 00000 n +0000378162 00000 n +0000378287 00000 n +0000378414 00000 n +0000378541 00000 n +0000378669 00000 n +0000378854 00000 n +0000379040 00000 n +0000379173 00000 n +0000379309 00000 n +0000379446 00000 n +0000379583 00000 n +0000379719 00000 n +0000379856 00000 n +0000379998 00000 n +0000380141 00000 n +0000380276 00000 n +0000380411 00000 n +0000380549 00000 n +0000380687 00000 n +0000380824 00000 n +0000380962 00000 n +0000381087 00000 n +0000381213 00000 n +0000381352 00000 n +0000381491 00000 n +0000381630 00000 n +0000381769 00000 n +0000381911 00000 n +0000382053 00000 n +0000382182 00000 n +0000382311 00000 n +0000382438 00000 n +0000382565 00000 n +0000382693 00000 n +0000382822 00000 n +0000382939 00000 n +0000383058 00000 n +0000383199 00000 n +0000383340 00000 n +0000383491 00000 n +0000383642 00000 n +0000383776 00000 n +0000383910 00000 n +0000384092 00000 n +0000384274 00000 n +0000384397 00000 n +0000384521 00000 n +0000384663 00000 n +0000384809 00000 n +0000384955 00000 n +0000385099 00000 n +0000385249 00000 n +0000385399 00000 n +0000385526 00000 n +0000385653 00000 n +0000385780 00000 n +0000385907 00000 n +0000386040 00000 n +0000386173 00000 n +0000386330 00000 n +0000386487 00000 n +0000386614 00000 n +0000386742 00000 n +0000386903 00000 n +0000387064 00000 n +0000387236 00000 n +0000387408 00000 n +0000387538 00000 n +0000387668 00000 n +0000387831 00000 n +0000387994 00000 n +0000388156 00000 n +0000388318 00000 n +0000388443 00000 n +0000388568 00000 n +0000388695 00000 n +0000388822 00000 n +0000388946 00000 n +0000389070 00000 n +0000389341 00000 n +0000389612 00000 n +0000389690 00000 n +0000390071 00000 n +0000390263 00000 n +0000390492 00000 n +0000390702 00000 n +0000390884 00000 n +0000391090 00000 n +0000391276 00000 n +0000391509 00000 n +0000391669 00000 n +0000391882 00000 n +0000392052 00000 n +0000392220 00000 n +0000392374 00000 n +0000392602 00000 n +0000392754 00000 n +0000392934 00000 n +0000393106 00000 n +0000393278 00000 n +0000393485 00000 n +0000393639 00000 n +0000393819 00000 n +0000393998 00000 n +0000394151 00000 n +0000394357 00000 n +0000394499 00000 n +0000394671 00000 n +0000394876 00000 n +0000395260 00000 n +0000395488 00000 n +0000395690 00000 n +0000395925 00000 n +0000396133 00000 n +0000396353 00000 n +0000396573 00000 n +0000396745 00000 n +0000396969 00000 n +0000397193 00000 n +0000397429 00000 n +0000397621 00000 n +0000397791 00000 n +0000398005 00000 n +0000398164 00000 n +0000398386 00000 n +0000398663 00000 n +0000398872 00000 n +0000399273 00000 n +0000399428 00000 n +0000399677 00000 n +0000399975 00000 n +0000400130 00000 n +0000400299 00000 n +0000400486 00000 n +0000400769 00000 n +0000400979 00000 n +0000401278 00000 n +0000401621 00000 n +0000401839 00000 n +0000402146 00000 n +0000402453 00000 n +0000402622 00000 n +0000402799 00000 n +0000402950 00000 n +0000403489 00000 n +0000411876 00000 n +0000412092 00000 n +0000413455 00000 n +0000414514 00000 n +0000420920 00000 n +0000421141 00000 n +0000422504 00000 n +0000423595 00000 n +0000428612 00000 n +0000428826 00000 n +0000430189 00000 n +0000431254 00000 n +0000434216 00000 n +0000434442 00000 n +0000435805 00000 n +0000436925 00000 n +0000440037 00000 n +0000440250 00000 n +0000441613 00000 n +0000442719 00000 n +0000444148 00000 n +0000444366 00000 n +0000445729 00000 n +0000446867 00000 n +0000451504 00000 n +0000451715 00000 n +0000453078 00000 n +trailer +<< /Size 382 +/Root 2 0 R +/Info 1 0 R +>> +startxref +454152 +%%EOF diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/Abstract_Socket_CNL113384_PRI.doc new file mode 100644 index 0000000000000000000000000000000000000000..c03c6eecc4ba9b02ca29734c9029be87a83712f2 GIT binary patch literal 92672 zcmeFa2V4}#|Np;7FCHCxIRU{&?{+{C6cG`-q6ZvBY0{Lav0?1J8)NLf$KGP^y<@LY zV~HI#D*xAe_x5h@xC4?;zF$7S|2NCy$?neVyr;cq<~_6J&YiWqyKrOGdyLxFjL~Jj z6&W)I0(Tu8Z{W`@7-kcWMc`XeQ4u+>1M2}!|K0u{DS_up_cLAZ8tXC4N2_0{5*Y?H zi_M5(V(l2ljEU_N+o${S?#EeIm4C*16&d$F4CBApqz5s&66ak&ilSjFDl%8NYCGmH z*v1|-s?VL%ev>bET+-f#4~{)m0G%F@hZFAo;QkHno3Y=7lN7;qhbJ;jP2`}aKf_$t zN4Yd(m@Du<(;WXa>~#VdCKshOAdF!KA>6w*4ATP5q9x=|L4;sWTUquFxbDGZhS`dM zbEYxOXzcqSye%t1^&ejjBO+AY`7=rvZTz0Uj^C49;l|73_k4c&Yv|ky`5J<772!Cz z3+JQ0C;1t=%KGBvsLQ4D5pKL3p<7vw`TS^;M{=*D96d%d%yz1fe`p&tmJ`J1kJmRh z%giFDSr<@J+{U}VZO<^x5dZI^7^V^LiM<=jf%J9;_HNi8mY0jeXol&6>ub;CE_RP* z7#~Qb^K3Zr@pHa^|3As;f#7^Ryd=K9uEDeH(&m%e!H?QjuaUq9fyI?fkie~%Ab z!k*;NroQL(k>7JyY5$+t5qgMpmA0wJ!=Llz%L46*U(RW#tQ#wMEQ67?=JyELqjob){>U(f+C~ZMFvMjca_*h zCugU~>?A$vOWFoUwF(Yt7u7Z(T4ECro0Xj@jmwsFNRR6)%a+8Yr)H$5$j-%lIXDLfQW{Y$jtQk9EgdM9B6 z(jXvJnvG*yu{bC_EgM3!kgDi*L6RQn5<7QiPb4Qv(&IacjkP4SE7BPr7STr1BSm7@ zD>^;S%h$)p%h%1z$4(-$aW__vz}Q+68PF;?DmX-&p;EhP!bDOv=2yOm9#J1@}FxK(C)PDV*0-ODD@gBR&#+%i2bClzYLYLVugdwY~k zDs&B6zgQ(zHYwQr#~H z4PIMm_>@g5+q68`l9r`rQ2Q@Uu)LL(Rvc_A^KkJpj)tbircin_sB6+v$ns`ZnpC!# zK`M$lEHxvAEo3y{vc(~9cBRDO!!|pL!^1ctJzMgZG+AsT^h7C;EDtTR8gqlTpYfo3%8k!H= z&^)18Q9jybm90_vu#L*o#T&8$wU(E>DS4ON0r;>@$c)IvOR!gnvlDCagWcjjf!_&pzILcRR+55`%zcg8#{=2xlvBI<{n6F&% zOB2Q`J~ZD~YfbvfHNP}ra?N*#>icS~N?*C^mnKZE`tHzuU#;cuE7$$fgvoW^9m?+; ztgSMA<;q{0FuC%(L;HP0G`DZxvgy9BT=(6f{JyQUh$@@v`^r_{9lGxqphc8i^L;&v(Vk_`F0CoLy6R+ibwI4B}q;_mJ#@${nz0>lxr{))Mg=4%4QsqI> z*HV@hmzm6(bc#zP5zK0|$(E%t%wBFTDR%evc6Sz(tfZqX&Dc0V ztkIU|t49*Sijg>yHSS`pu!`6OdwRMC1$2?PyLn4I-MsuHQSJf8#_5<4WM!p@H5l@6 z(_(^)BQRZd5v!TdNSeCwE5A_9uoUy>nVc~z$&|&(l5=5!=A>mOr%2Rh@hzp<8Yb}` zZtlL$Zl2C=zP2vn60A#cbd)4H-dJHk2PY)R;U~OYHr8+}(ZA;mT6eb7kyO zKynH@&ye(&W~L>lC1M#MGd)$3m7Xe-m^M(d>Do*9o+O0v@> zK~a*n(a{~+y1BV~_fCry*2r={ef zTqs%bf)yIoB(U{`s+DC@hG5-LU4*vrclUDlQI<$T@&H+UBS}hf7S?WhCB#dbN}S!5 z-fV$LqzRBhna|9V#HFNX$?7VuuP5ox<}@`q3yGnaVEV8zMR@qS`wGe)6$iaXB`PjL zwmZh63FIisUs2zgn4_j=a@WHA;RO14yL)&k)23RPWLb&>bCS_try!*%Xk?_}@tiiJ z3-5!-CGqm^4fA&wzDIR26_Z^G#XNtS#GMAD%{xNCHH2fjf- zdHe#o4nmfh%`K9kvq+M~^`#c6ArF#(xa=Hh3R+Au>OVO?Z7NnZ(=+>$q#$IDT@vN> zf>tszxg`?Fk~ecrLR&_3z=c`qDLL%0i581?o|29wmP|>SOh)U2v`9osm@SipMY5&M z_Q2dAfW%S)T8cxc0m4^;29$&1rS;Y%X-Yy6wKEq9b%j}68re9odP^Ss&_P`XUClZ| z1UksRY3cn_Wbui(h84zn#pbcyOg1g{#z`R=kq3)|*(NQQ4^2Rd<8v~pAhWP;M*D1N z2ix&xQRSdk)6k44a0pBqRwPMdd$CMuS{9o_R!~+$ghixW=SgYoB~PTFzNNY8$?=kw z(ZQqzq0!Ni5;lP(MNF1eWG2_+(iM&Xk~<6zht`dSdy1vDi>;AQvo; z+ey?{Ig{(~(w@cAE|0Xh znBeHpRskKl6$?PAD}J@W@KY}x-gqt^D6p7tMUIPKjKs9@Kyk6Rl;r>Z`|pAMpH3m3 zT+svizyKHlW8e&2z*H~|%m+V%U%+Ot1#ATuz(sHgTn1ObRqz-*0Z)OhG2#IFzyKHm zBVY_nfGKbSbwNE)A2Q!(jQ>zj;QYd@x=k*G53e-#xEe@mlboF_aO zE8RY%4k~WOiZch>q|u`9<+9qf)@9lQY3qtiYABxa2bC+!Ym*Iy8Psxw5fMdQ{O8siXfvtu2r;Jjz$qqBdeEZAHPct@2n@0|i!tv03tp zF}7h$92wIPhB43oXdD9=5uS7tRbiN5hUptm5mj^$RdNu8B|s$^otY_&(G@p(I;^hE zZ70UDER&_u{en8-=)W8^eu&txuy*GSN+8q#y9lqzaP9 zCWK2x3{DseYFF(+6zBk=K}XODP(616T|o}W1^vMQFc1s^W5GBu9xMaP!3wYvtOBb6 z>B?HL4x9id!6|SWTmTorZEy$N1)ss6;0yQ)z5zUn%Icd4`u6$7gU=7H9K5n~>&|6Y z<{g~(`N8K&3YQ^Qb{^abmrTwDp%|{UAI7sn>aCq?m7$!EhL*;KJc)`@52?M4M{rkb zkjA&$;%&Wb{fhP;K~t~ArTskD2P%3n>f@CC8Pkx;QwP)pwSWZF29Cf9xB@re4%&cl z&=y31b|4Z^9}opPfOL=n`hiT)9}ED)!3dBK=7XQX0CuoNr<2f#sa2pk3{ zz)5fo6oBjC9VmQT_~1(6!NR?p_b%VOcQdpCF0 zK>knVh44hhr;H~mqE$}*W6@T+km30C`|Mm;fe% z6<{S;1y+MKU@aiMTn{#YQ{e5>hfl8_y1HxIuH{#MI`q@Srw=D9T!voVb!Zn{vUnHy z2(TPOr+T~OT26h=M?=fuTJ&1O;vuz<0B+pX8l-7$hs=N411S3vO+5{li(j}NPdFAh zQ(2w{XTVu-0bB&n!3*#b7@;391}4B1Q~+W?{e(HN01bgNZ~?Bs19*Z!5CmF+7|;v! z22v0U;sEtEGLQg81N&Q2Yv$EK;h%-g+~hyY(KDi`+@D(k6tfaUN}qc zGFIX8o!mv(DsarzIcarC{r`{9e9hWIW2NSheEo9ey%08wx&%$NqpZ9CR13JAIdJi6 z(7$4qhclJscCZ8N1iQd)Kz;vS@GH0hZh~9jHn<1wgV*276J&vGkOOi7jX?uI9+&}U0%0G(wfMPwi{CX?-Ukd; zxTq~2Ur3tU=5ss3vdN)z#Vu1 zvMIcPH)s!{KnD;FI)g5tCx`*PKpyzxe!-D~{oD4h+O~h&{Ui4amKDsDyNpq|R^pR;u z<@p^L2nK<{;Cn!J-cT?M`~>EMpTPpK7%TxR!78vC90o_gQE&_#2PXj8il@M7@D%(G zo`L7!5AX`S2OmHoute!v0c&6bY(Ygp_GV>J1$YA=@K3b=zOYHvYl$nhm#|(-(vW_f zzXlC?2OC&(NM1vV*WrKK^DD;?O*+PDWPdJQ!W6quIr;)W&=@oU0U!_rfu0}+^a8zs z6vP6u{o{cQ3%_O!v?SsoCasWS#Svj zPdFXd*#4{&=LfL5J2<7 zP!I-WAOR$TB+wV6fPNqoWPu4_BA5gwgDGGtptbC>uuOZ|WysoKPw|EUHUWa9?d+jx?)FMqf#-+F`mo8z7U8o#?0h_@#upR6H zd%>@u09*$*z)f%q+y*qyzYFexuizUf0t|XZJ)jRvfGMZ|9Dx(43+jRTpaGz@0%za? zT7xzq9JB@PK@{i=x`3`A3;Yx9e{U6Sb;Olb0Ov0(D|!1rR9Ra{zIHhYt+?w{BxtG| zWzCgM2a4;CcCFwv`2?rq8rwgWXEw+Ixu8E70BHT@J1`K;0<*y!Fc-`RKZ7M;DOd*f zf&JhBI0z1b!+_R+j)G(0A$SCS1CPNo@Ep7bZ@^n1MqgzH%z*{41Xh67k!*l1a0edX zpJ@NCcy$$RRi&1=QrlEbTRn62>&^LV2)VtgwvfDr6tBaw)xGwbR%($Z9ph5mm`j&1 z#V%Bip1=$E0e{d8GzTp}H_#pQ06jqr=mls^PYPne_h1MZ3WkA^;0G`Uj0NMsQm_mx z2P?ozunN$+;2N+N90w=BNpK3B1Lwgda2Z?yufRXi{uk8LR!3Y}*>nEFvXZy|Ww`NE za_`PbsK;HWB0*E#C~K~4I#679v}*;Y$!j@9M5n6z$h>pi~(c8 zI4~Ye029F~up0am?ccICTbnAi#Fg4~iMD#?>bDZ-uOZ~zTG~REZ~L#orAwG%7piBf zBP!pkzz%kAD%cKmVJ}30NDvG9fQeue*bh#FyWlPO0;<9yssn;RdyoLKfy(mx|KLfX zaI*hic=A?w@=|#6RCuCt*<+#4BdsTQwffu;`dks7sEEEK^f@m);f{6983P9qBf`xc zJ#!{8eqa`sAN6!qjykpdie(p=>LT3AWUmS~UL`*Y`Q8ogxG5>Ztw0f~TX-*^GPR>M zU@h1PHi0dGZa;4W=fMSV5nKY7!4*Kdat#!K_uvC41Ruc{@D|? zTZgSpm0IHZ|6I;TL#c7~`^iCD$U&TshLF656d%LOHuh^D>6KQ5CLQBaTvS}AU8o%G zfdi-u>Vby98MuH@5C&R4ak6M`(8AE_O$tv#*LakV$^_X^RrWvvy)@z$57vh(zJ?o#r)DXi8{cF zNo>~$S9Y&(WjjZ>vU@xYMZVnAPpNoXi+y4Xz8CsNvl3_1T}zx-38T9x6_Xl!Wa91@ zcRiltGU1M5TGLY=+;Oqzu(;BG;fO2LW)_<2Mp<)Z(}Ci;qg^XFP0rv_qCp=S2P$tG zr?bFXupR6G$G~xL0$czW!By}CJO#glXF!CxWkpaKIDk693j~4;kOOkT955ej2WP-p z@CLjEU%@v}1gc}!{H5^A+b@rAo_~Dv_|3h?x2{{c^rw|GmwuT#?90?IgEJB{q!~TG zu%-Vn;(M$za8JY0Q+N!@hBSiH3)V$ZHcEFq0z+P?z13NBFcR4&T@T-kF!VpNwH}`3 zGsd%gdPbxf+1S&S)h(K^ddBD_<4XF^nA;}B)V(Y}YgV70%46N3E3}6Tu25bN-7({} z&IDR#qDN2W*|^Ztgl}~xBUZU9uA;Om&J|ZhL^RUiN>A}AuC2sNBv+(>_dwd%mLk_< zF12)x1KDR(-&DVReNr7#{dEFVhg5$*0II{E!Fs@;o~W)oz*w*f>;uO^0f0TC+&(K0 zVJ!$xUI|a0X+60m^wDltsraazs3b?lN5$egD~v}a%&$V9ox&59%T!Lb2rt9%C4$Y? zy+4K()_S9=w=l;8g?b`9Fle4X*v2w{;QJWtdt;v%&vrx#d(PKrz1*H7H6?q_OvD&E zh|KeKO)T^8e~!VvH};9~^9KgVuVmFxPY1DbM`S&c67d!#>_uCu!`i?eP+bOqF@Uer z^*G)L_`1D@W2)a?SRZr6dV(A92Q9!{@GE!*tg2y*0PR2|=nn>g`CvI%2M&WX;4*j) zOfXNi0}db=%mH)37Z6ed>qsC7^YYIhKL7FTkH^@3cyRODr4Q$hpL=|G|DGLtc5Kv_o^2QKZx$cRp1WG*v3s`v zufvZPG-d?W7g4v*J??9)mytxWsgpoxe#D_3sbUh_FTs`HC%La=WfsM8vcsa0Bls_t z9%1+2TJ&P~^Smyxy-cN~*^om2=_-ED8uB&6|C8{7S`Zrl;Mv0V}C#vWNypL!CstO;8m33Rp zPYwuAwrf4vD)jjuJfUbrz?g=7Ly?8K2#;9FM|rkBsG}B}b8iyVRJrCve>_mcY6Evf zBf8S9sAE6)k{fqKwVYGytK5w{A~zZUjdUPiWEw)22scPjyfAEd?2X zuk$fDraB)FsLm$=s`IIU>U;*631)%W;2<~zj)G(0I5+`5fI?s-L2&>RU<%xU2M7VJ zKq&b1{`LD8PaoZWboJ~>?(gWq9cvb^Sv-3R{*PX>I4?aTXo$&xSHXw7WmM!@t8r-dqSKP5<#;|&V?O2ZFT!xcTx?FV2V(54I4@^ z?@)#%cU-GTCtcfwOD9I=!I3lAahtbC=shFl%#zL!7HOf1*EYJdV?JcD%7Hzr5ZLp! z533B2G0i>(GRW0Qz1|L^UXB2&GpaAD8>)vekPM(#%I#0(A*=!6iAw*jax%GWm#Ksq zB@Cl-BJ}tNj*TrCT?ZY!tHZq_BX!W}PA~BEL5-`vz|#sZ@PshBw5FMDf8U8Qr~*w< z+YCCxz*gG~(y)xHy0NeIRQ{lAig$a^&Y2>fYO1HzRZnZEp32|#X+`h)v|SzK(piPwzUM$+<}gu6X*=Of^Hxl$Up)}1f&N)f_dO4a0na* z*FXWd4sHO`+Gst%0n`CbpbZEIZ9y*R52k||U?!La_JFLKDuO1`cCu!=Zno(W$0kZ&Kr&NE77{NAAaLlNjv=jO?5uTKGY(;8mrE}L}Uv0g% z#_lH8rXNfxjP;VbO5JTst?#p&dh0{W^AZ_O?^Gmzi>`(ZHNmPj1|oE!fHrn-aLAfJ z=Uj15g5IK&H#Z|VvdyimuhNBZ%`3r6WKd0+%AS&kA?ccYVB}$En0i&n~K)bO|jxy%a;eQ zy}Z^M{hb#;m0D|Lq1wI}L%u(zzV|4gK9%}U>MQg3RL~wqrgHl`C(6+OyGQDI{()L+ zWe+X2Lw!mnzG2S1Gpk`^TJ>xV>RH~IQ9bZ=!R`&5^!anj4(Ik9;glQab_hm-+Gb#F zLN3DaeEpIUKnkHS0{G)S#BgK^?@2}mAQnxf(i9N7w|FZwIo4PGjgKzW@~36yR%6iUFmu}V;K{mXwmK%pLgtN!Ii zB1SQ$0@*>O)i?bP%$JYs-#eAryIKMNd-~s00;+RGSgGucQedspjMJFfGu7|=|E8q> zo0k8H6412rBywd8+(eF%#!RgZBU~gKjt11;uw2h>gRhSLD_Bs_t!sn5NJn?8wf_}eMkHd*3mW~{?~M$`LCgOzUqk8=g6_NP+mQpH&d>WW5!l~IWO19Jg4I8!`d$@9qyd2FaZ>C%$FIO|F93%HBPaCeBBQHlY%BMVSI3K1Q&8TvYyd2Fa zAEsO*FGn+q7KX}gNcCaL(TpnR$ji}&qvgPItn+d-qkPKKfb=O(Gpd{;FIO|F93!VS z_i}4$Y;K>cqnoD3J#W`a@Vp)Sz7qG)T^0F5 zcb&~~uA_^~6_4Giz5}=h&&jo9;$gti#y)J$9pb;0p-l8d_et?r6BJi)2j-04D|)MI zlb*>ddhCuqLPw&47}Hmkai|wS57iG7S>n?>zv9q>DZ+oc(&80eifyv2rnclUly?O;V^(*O@1G3-YC6sS?BjFR? zK*R&^b;nvVuX1#my||wFHelY;S$UD29@`#qZ9F?k+|5$db@K$z^V=`$d3T$YbaSlj z^s#*}C0%lS;deRY*^;oMV^S}K-)R21Rl@Y(9u`-t9v!-9w8_eDi1TI z=Dv%+>|dAFbn}+fInDZvyYy_~y!(T!t3TZQEikNkC%dk<&2wuOb-OX*i-*^Wxb8z{ z-&wvY_3QqKXMKtqH#p>a(7*9dvOgw2{;B=#s2VSvFZPSq`FZ((^xwVy5dU;<&pOXN z{*6wabf^+vHOzimL9-aoJ??W~PPpWizWv*=YDe-8W_!$eD88KO+xp~9qo&V)=<8n4 z?!%_N7bjfO*)}4rU*kUWtF84h1pS zVZe%Bx0ByG+bYS>zDhcuG>(m9(i#Hcnmfdg_8P zR?Cg8)-(+rpWmmm@x?P%>&}Me|IlWML72_eG55b~|J|gU9^;o7UtR6k<=N?=OH~3U zBp+ygYSs#$$L;&>ZLz1`QQNEvz2-#q@U4^NVR$}e?7ca5L-Si(E(&$>AMKK9bZe>J z#>~o19~#{c8$P|+e#>|73JyJPa%f7;sVDt+JgM(LAY#+`DJ`d16pS8~VBc^@o3yzp zUXvR*R;tvt=9xKzqUWq#;id1FY|>tudq2NmLR^CD#JPh%j{orO@VxzLS^5J{_k8ZV zFW~c_n=Sh;9do(9_4>!*?e-*Dz5m&9PU7T6;wBIJE}3$(&*GI6J_JX98NIIGZ|>ij z9=F;w@5}i1JpwvS@gD!%u7`s|vTNAyoIj{;)A!rPKWr58rfEn&=fxk*7JoE-x}dq! zNnAg=q2%qc>L1QNycT|Dj!W&iwI?n+85DnP@F|ONKaUQWxw-ecn+J7vj60lJ?c@^U z^pnnOCWow<`ePS+-$CEM*Zbpy_m_~W8)DYo585$)(j%R3brWAZt=w0u@~27hwZ3;6 zcZdJ7>j+FD$8O{iw;+-N)X$X02a+v+&N%UoF4pb^4n3 zz3z%7`!9rbSh{-R^e#189d0XKv&=ogv+}PEtwyK+>G5dR_sc5e9JwCTXi9h;&y=xe zwjOVE$MI=3pZ2q^>kYnf^c0F+KmpbU^Ov#1$!TG8Ce)-Vs+5W1j_FH~@v83PTdQ-N(Uo>HGQs3s+n~dJN z{K6#5cTRVE{TZ?9cJr0n=Cz(b&~{~=S(V2%STd~Nj)1Q>7k*#i!KHBVE&Ki}#yDO$ z*5&qskag|bi66G<^P9((4y{%lyVIrl@ed{w8=uLOS+yMMkvBB%{yo2(cm8khdwFMv zyj(E1>Z-**{JwHwgG*;SUutu(gV%|x+ntJr&uFv#?Cyb**)X zvEIXLI%f*TpS*O?|M$gH8`X2F^RUAe)0MMQpWg_46K3{)YO9}8mPVMYoYM5v*RPja zSk_xu^F*k>e^~wFUAK153Kt)}5@nw=Z{Yl`^OiST^{B$p=zDrO?d@{>T8>>g!S463 zOo9FTYZ1+TF8=R$jdsBy<&zg<7YIkJeboZ5#VO_Sk z{yzB2idKyqbdP#Byj}kH_p_>PY4-Tln6uIzuZ}<17Ctm;>YBAnnk*Z9<y4XhRpOI_G$OMif=1cZyV#jYx0Tic^g*lGySdM z-t<+I!|#WU|J3++P@6VG9a59G9lbSZ(&BlS-}M=B)^W{mX2U*T+?>Ar_P2Zi_oTGnXiIK^wd)2~hs zKJ_f<`OEGzD4;b0^(r3SP{V{@8uu zphBC>Tb{>q`yQ*)te3RA?w{+VqXt?J8~p29!*<^f{C0JO*PRi6_)kljzHCbN-i4m2 z+Y<^Rf06|a_(kto^=eD9)-E2mX1~>KNt@@g+cq7$#J78p(|zKO-E9-zr2Z@&mlrqa z2jdUSkxkXp%%!8954QNT^X_9mF8Fz^)77rN1LiyvKlp6F{c7E63)g4fd403U+hdB} z^W>isSME)0I5q?d37_&erB`3!{5%F!LTO{Y_+9!TWUOz>#9FZRf6f zMY&H1tv$wJ;-QZ%pIqGRI<4l{aaCUYbacRavuV4#g}?7J`DI7Elkc=+tL}gpM_Hcl`Kz5x(Co>K zD{`Z!ugIzPGJc?z8`kzNB{wzYxlz0msw{OR6tBPV8F7?nJ(Gf$IT7G5Z{PHD7%N7^WZ~=4WJq(H9&5u> zF_#7(qNIHWih!r2>ooaM{QsNVUybjtT<=Czij6N*?(E!<_USxC>s< z{1l3B0VKc;v;dKyH^=}(!DOH<9LcQ<{kw){^#n+8?cb5}e?6QZ%B~Ce2=Em#{CXn3 zr31bPlfeS80qg_kz))}(yaEjB(E><-8)yOk_50r|7aK&?D^#S%eb|`$$i+E;TeQCRc!pn>gy2hUg+R%quFZCX8MS_fkXC zvxyZLJ%rXZ4bekrU0uo7Y?d@ZaC}vo!uwF+RAqV?4eMz% zOp2p$)GEmfFHs)daTViAr96FD2awmUH9qqWAdtR)+Zwh4No!rAG`fW<#+6EG23R4a zlI6uoaU6;9kYq)cD2txY7voB$EJLOu!)8+{j?HUjCXg{^B?gu#k?yyNaivnC5#;k< z_-)Aq^nO#cklF=$JZ`IqGZ~Wroz6kK$cFAl;y4o|vi~!fB)Em3?WDn%woXiPi?>C; zU|&J;RgemJZCT31LV^retF|-=Ll$(U59lB{JC8pw(M_SZs;Mo~1fwp~SMsiCKlb#g z8g4UWWl2!O$xId-zYa8uwgXHc+d2>6oJ$u>Oq5bO+F%~i5RH@!fDg6KTuw z;GeDV`Nv>iau3smsYU&is0-Q( zzZoc6vJ9!E+N5ua88Pff#qfn}dkuXSgHO9N^wEE|-^#%kAG`s*S)QIfnKDBXIB(#CJ#p>36=gi0@+1m>IT>mmTgM3qoEtwtme@&zBRr&{?VAEJJQGEi+AwFvb2+F#%j_|LCextk(!JChwa9T z4Ef5nK?OHE63x{bjV1rw7M%cDMU;bD{CJ>kh(e3AM%wK}v5F>>p+jkJhr1axHsQA@ za0i0@RN`$X6Z8BwV$1xsUt+NDjeXg4$&s;X(OzUHa?}_HjWasvweZC?#}=DeAon>b)b{T*orDkZ{IT z^15h|2xEsl4W!4)enyOvW9!@+o$2P%Y=tgtS~sb*w+d|E)qx?)AO(MM=t*Vx->G)mgpg`yILFXg6-4Ib1uA6_l7}~#Vl69z`DQ*vbYB!9h{IZA4R&OEUFz{tSj$R=m`#|Ph#6n% z0=m?eVNrQ73q@~4Zi2EfP}G@(z4?!izHs$sL&epHaYrrd==2eUFcpM|V0)5S)C={9 zHPB|*I@d?U$)=Y1lfF^i$Kbd(j!Ur@y^!1eXeVBRxGJE(;zq7a>|+sIHuhA;q~*2o zKZa?96x!*;2ttXqq>#&@n6cwhNhVFHni<2`LH--Wqo=Ti4N=ch=%q3(R?tSSmItsl z7xg~&Fhgxh9S@-S=%oX7x(L!=0X9S?a>-c`sf=n%bzo!S`+p0>pbs-lznJ~qo0S}; z(_0|fOfBUSSPPv|qVcG~dMHgRrVgZ6*0)~5=cBSdnNpf9e2isCd#sLdEVB`mJ@qtk z(1|R>K-NBI-6%EG7=0eAFSvVL@<>03jVV)SkRUIbVv0wpE0kuJ-PcKjmCSF#zB3SdO(U-iJssC~)_?`i)|(l0C=NaR4D|4% zLviTgXOz~%cVgVAFV*QJh)+102;;+7;4vRzo`EnZV@ zTr4mTN{%Ikjm1hgMG%Xy4^oZA10|-a^J3VOY<|qkQa6n-nu-`Z-A01BrkI^a(hMXG z{T$7?l=Czi4?SQf(8r!#U?(KA?6v3YSW-el;>I%m% zW7t>R%vXYOgqsax;?4MTv$9Hzp~fXB-o$fvVEi1IPzN-LkH$vq@Fo zC`AhKsaYlr^+>bwOtiB&>^aNE1EVoFN9zn9nwxRfl@8MgZ9UGg{{k8u)*g{!vW0u&9KT-xOGw1L(G3;E zY@sn`swHJ?W=wNvUXqBDmW1{djd{vzT^+q>fh1aQQeR1-RUplI;L6s7X~CwIOJ5Xp zM#Na@2{pz_qf}w~I7v2Gv!OI9Ybpk3l+q56X{VCXvdE;mGeg|Md@JkF10^D2JoG#S z`6mmR^pGDdsl^6Si?u+Dg&pmOxrvAg)bkVcZWVAvI@TqGD-&Exq`s}Cyl-dP6g$Mw zuC)Q$umM&84WRkmAv04?*itMIn=`v6o{aoTP`=5qbJN(=8wO0N5{!d}ir$02&tQd=ndjd` z+jGFG(M|LZ4p4wb=mkp-ODi{4X#3{*+eKX1?IJ#Gg;K&&i?YHhlX?Dh9WLy29X_nM zl(4kIV})Lu#&0fchAto0tdy`c_FJLPrm>t08?MKPH7_MB*#TB)Sv0P5Ve9JiVJ%7t zOE!TOS_h5sTv$B=KCERaVaYzQg8tBW&xO6K2un{XlvKZDD_Aid5q7sB7k0NH7jFx+ z4~$%TEd)J;SVcEf?^KbVcY;3Qz6b7ikfzg9`{)n!(T5=xZWFGiaCO`nar>dHXMc;q zzBl&N7kDA$aIGP^8t#IS3sBM&asf)33+auJQ?-WV>bEOG8X>69o z6WHF`ZGB3+G1HB+S7~t);r$SPQyIfk4vf)Xvi2@5S|YqZ!XGGOc*=({(}N3NnZgI6 z_eOo`3;QNv`uUYNT4~5ZFF_+#Pn3gjqz*w}CSvaEhX`uSTrf{im%)vuW?1_%&p)Tb zjrepQI|P5Q9sYtGDo-}}k_RD$IpGEd|i-9+Zr)@U?QzrVc-y#;IxgH-};GDB?K_)GWyXnw}`BAgAM zh|!Dd503rm5Rb>YM0MEzj_iLY_P=vW#zJ9-FhzPy1a4ok&$fw}cFMy@g^jm86BfMLw zZkwB6jzw)J2GA_39m4Biuk10oRB&@yzO1MXCnC!_u%;MT#oZ8UkpX&YdA*P|8Hw7K z!aq%=R&}sqUEB_EgN;G)3fH|&FdET4O5-grjXVSsZ#1aUzY~3QfXD0eR66G1AWqMN-V7MDG{W9W_bL)AVS{T)NI{fIwql*UZJ2uCm;_+*nmUsNKF#JMv z;0j5_l!gVKh4ULf$lO!QaLd8j^Om<>|0b}3!?S9wdM>@=+pb`3r!m8-R&F9)YCikj z&b_eJHfC2h>7DC1^y^Tw(>d*LR(>{Sir<6d zL02E?ZrxC$OVgK+KFxNxKY8=c<~|W?S_c`8_+{VJOV3w)3OQae(B;Gqr}r*P8jM+Z zy6b`HPgOQNiII7q_g-;Z^2T($)xixF#`HRyD5>K7+pmr1k9mIMO4pR#w$-Gukn7^X%)PoplI*J8sP^neyQ2msyNvRe{86~F>9=*` zKHZ!CSWGzE?nXIpu?WYD`cxK)jYRl`=={kk(J^Z?VC5V;s|7L zET|5$lVqtfSHb_b(llwJER!^(!l||<2PGCQ?hRhpe{z9u+^)L8v71h=+x3A7npZX8 z=zwG?chvT`rvoY< z-#o$kPS~-m_Ji#&Pae5;%Pq;3Ee$T${-fcom>mv%nvQGL`N_q?diR5$HE=Z1@zb36 zRZ(^B9KovNIM^Iy8Vi!mWx<`2{k&_>aW_J22D`p%ZnUTIx2az?9;%j7aAs>k+rZ~b z9`;L_wD$N!uMp4M6O4yVZBo%>Y4Xz`-NDa-lBx^6)FCORBsPN33f$PuI2%EM3=A;!_`PLC#Zf1;|WwLI>gWA=m47iYyUbt(=+-DiX z?prQuctqTP;*No`!h_~6i)&ckH)`Cw*4rAFGJOx-dPv@gtc$an>#lFHa!9)Fofifc!8opW`_8_BFe}uc>G5S&^L8~>j$Tk> zyjS1jrn6s7sD1qCy@UDT!3V!q-o3Nx!_y~g-Pt|p<-8`}^?UPV*0iIO+SU9zuaU=^ z50OpIuZDww*a=^96FQvh6q{8g|Js7QX^XlnFrK(EJY2ziaV> z@q?6x^L8Cdt{p25`?L=4162E;z6SxEtWaW_E_$DVBU?CG=~i_&QGtlh%zyDW7^pkdUq`>>fY6` z_Tcv~I-FePvTA{^b?lzSAFjj?s+QJsx9-gG#|~e8=`;7Rulr4xAH~o2WdAxVt#F9z zts5^N_jkS4V1mJ?ncWX(uU_Z#^8A&-f6k7)Zk;u@aL4tXSx>?jyHsf1`2DG|zdYWa zY&7ak#1F<5ZaM^Qj=*&g>yuUfwhuQDq2*Q#4T&m7QboY}Ry zgL^nve6%>Ze$DD*E)Up$_Q<{VK}(*r&UtS%b4TYCr{CM>g|)c8S8SZ>F|B1m;G&(? zrw2rt|7PK3YP@Ar{{xHCr0u7@oVD_LZ_%YqYxZ3^K1|&C;QOX-BKrZ00&OP6&%Y4u z`pfF6pIkimIL{8z-`6a*t7vuj)jC(#o}9M2O`8`L=JTKYH)U2MpmR?%m6twWS5f{3hUvcHzgu{7R;@oG~Tg3IOm-M{4@6FZ)qo!6_lzgzp z!MNttLprRe;j(S_=!mi~a3hHS)CH)bZ(ren)F3v#}<}U01F?#3KI@|VM+PP(L;FUU(yIsFD>{(br z9I$xn+*1o2tE8XUaOwHs6$OoFnl>4Ez3bfkWuIp(y|HDxtm%P9H7d+s{dUBy?=BxW zH(0y@&3|$hZ*AS!7s-hUMp&KreSSy zVZi?M?*fjSXO5hE=XjoM{p8i3PG_!r`sbtAqplUNue}hI)X;AH*zZ4|UTV62(UU>1 z9|ccHA2fK(%=8;B;;z#Ze}C3G#e253OK0@$JiO1Y8)jd+?fLUu&P1DQeP`;fzp(OA{lk)Dc{7GD>9zXts+g6R-mN;_ z?P%X-JyPO&KUz7cVXWw0$KAQ~#(wc(TYP@<&s#C#Rf8`*do3LKI9r8v5e(jP+oi3^ z0XLic!r}dm($g>Qw3y;}YxKFbmvr+VdW(IUJG6iPLcFe_k;^FQ-Z{y;X8m;BI?m&^ zd(x_^Mvb1%=r?zN>h|XoTSQfi7*o(Venao!6VrWP*d|VCQ@5?7LsVTC_t}|dPOYcS zJ2y7^)6jK(izjt@Xt#J-z_DHDLJM;SFL?cTuk}_Zwn32LtP%nOUN$RGHQqmPol2}7VU52_6C}o_(!yLlYl%Nuk zZP-`Y@I<6O(-XNrNw-~?Ce2|uNpfYGS;^^XP3_!W-0UQ>w7B&6Q7niU7rQkvzG zo*_$vUqX6jsx%v?nTf9PnbQ6coSNe5;pXP!nkr3Bvy;Rox;M2;$#%DsWDmemd|w>J zCVG&Y2f5)WzAuiXadDW);0pNx?*f0$MRAQM@8Zc{~M z)A}Muw6l{Wq^E>(4*ZdwYcndnSlFXjM(abz^!gy}adRIE%z@g$oRWinDvMTRE`Upb zs{b0e0ci5(i;G35lXu`0rXt%Aa3&rS$wNRNOiSN`O<3W`!V@$eSo?bgR%42nXoHnC zTl_LO4CCrpw+*U^*{g*6W$joyT1lXpBYo8aKOhHaX_uD%X!))hpvgcDfM9qIkzpjD zHn0Z{pbl^ZbwNYm0%&cO(%c?t{eTFv5qALu_lLlv5JtadpDf{ift-HXmVVt-3Mf4^ zDK&;1{qNTmnyk9`u=B*fa#jpdO$Z zT@;809YJT%AB+Rb!Ah_StO2LM9q=ch8OS$)Wfn#P+(0;p0PR3~&<~6NKZAu}5m*8a zfdcRz6oQZ7GpGus@CNNc2M`T9fm|>FtOTpU8n6zW0WSc(8)OP905jkMf_1oj@kY205TVm<9HN>)*h1!87mySYhSc2H1j1z!wC97|2!2nSt2Hpm72K^~X`mV*7@AUFh$fZxCyV1{;L0W1Oi=&&bf4!VP$AO`dX zL%~?E46Fbv!D>K#^=0rHyam)pd;k^EPe?!$&B@$7z@UOHDD{a04{;c z;3_BtBJ?*kKrJ8vb|4UhgCx)g^aZJ40+xB~{Q z1@vUYP%s><1be}La0;9O=K&tDWNrf+^w3Q}B%oe?1ega7ftR2HdR;T%4Vr@HAP%H~ z3@{ta1@pjRa1zi+Y~68&9-Fd!`TyEBMYcn&tFr$|JK-M9{zskQnETJUbN{{Ij$FNJ zfmC8tdL_Ys5&9E!=QO0SAb~2!Ets0G>E;DzK@>4VhYn>5(PiLc06MQi;UQs+xDS8f zm_|c$M)wsBlJsG)y4Z^t<5wg=eZ$L?Y&Z&oKAZyRyrNOmLLg9t5#lckL>LlC2?)gA zN*)o(!fj66e=&VU76tb;vXhiy`8Ub*bkQL)&2@1j4tvX26o8J3irV475uPHV=gBkK z=K|=t6GQgNe7eKOJ$)v8jq$4BY+@aT)w{;*Bla4$)$@G1VYq}oFHmJrGpc3dyq z6`=PG=~o9m5gWzh4z$VhD?wgKe*Rj+QOw$MMkS!#kDe6cf2dWptkh$p=Po@V%N=|5 za^(EHP|hAD#^zZ4!QoN3oe-EhWV#EHibP+S@c~s8R=2!>Q`Lx}UH-)%}EJ zrtYV`Tu8gMr$u|Y(D%=^htpmzzR)&p;Ydrh`)SuR`ckp>aN5g-p8L}tj-F@YtPj{n zOnb~oh*&wBu;tT(c3$-*UTj_g8A@?p6#EvQ_{-os>-y}vG>7&1r>nTfC;*FM>;h-&u0JKrrO#@Qs7LhE6^lqP=Q`r9r z98h49e4$anfsS(0u^$O$%UOp#Pc`Tdu@YSSi(JR`xBnv5QMp8GIq}$gL*IS|hXAcy zRzhWW1cSh0a00vrVpM(#_z4t&FzDS0&X);F(rnQg` z383jTEr=cjv;bNKqG`bs--KotI8S3w3!2X88)yM@1fT`Wn}8N5JE?&34j*-HUV1T`vz!1uMPSk zTELqPXu<9gpanV)^i8xNHw4fE+zCJnZnjtyqXo9!fELtN16n})0BFH10L4iQWa9xX zh+PG=0A`1#N()}?z-e#?>_D?U22Owr;30Sn8ljm609pw92HK-(bOXb{SnvT&;u8o% zQ-}t4&=j5kF`7X|uo3J6qtGNqgRx*7m;fe%$zTeY2Bw2q;1D3_E ziC`X}1^w%w4pb%_%m6dN5pWa~f{(x+!+-;b2E73_977BQhVuV(^xujhZhshJz~Z1| zf>O&LYuf9;Umal%Dd(l-9t{N>)bii<_7Aome2n`$S|=QOv~*!x zvhbgX83Vs&cO^qzh0g4;i20NJ;@>=@mnW#~lzGJXP_v$n%gt`L>k3>se+$NP&@G*Y z`X9e@(%`qeN1T4uUhBr!*Wh^ z7dCB==;H>RAwF!uy|_uE1ifZMo3@bLOQLMZ1^NiNfPGoCEFtIP1>)J?*pTye5pq6W zB%b|E84?{{vCXuE)V6Ca!t3%PCcQ2ayX_SvSi1<#$^J_sxEE{L^!w4rL%0`g|B{GU ze8grZR|K)95D|+H+06X*mqhf2i2tv>D}j%y$kYFHP9%^62th>}kVB4;5JW)GoRB~W zAqlrfnxrLxkibcAKb@nrcS zE5`_#@2h&R`*r9}hqUW&e%O_KU9alB`l{;xs_NChUcD+qie;oI1I2b<6q4b63zMN( zhNBA<*Ltgyvhukf~L$99GYw!Lm%t4DQNgC*F%N%HuPwFeF{2G)-dR0dKtQXg-OBKi&r>w zORa`Zf8kQlRr3yuAsLIItG%!(P^(mU}J0WL*p*t&1sx+lDfrLyF%xGd!g|gUQWM zrJYYQ9nyblf5Q<6JmQxZZpCFzjS0aIJl$DP`uJ_uRVN2fN%j5AaeLPf!-EIx`toT}QJu-3&E z-70K~LLu6OH7~YYw0?6LY9VxksKj+;wGh40DKHHeZldX>Itqtk*(%-9d?>a}ALHIi zUbHcfj|`*d)j}U_Op-o|WP6+@*&e4!JZl`FOj(I)Rq^cYgGi^QGEoy%CTgN+^!}pR z`?HcfrTc+?NyhckB;$Gok)@bqO%jtFWR`w+wI=%A)j?!wPhU;4r*9BhT4~oLEA2sM zDQ}=A${QFkOS;3M%M3eyG`g4KyFCiEL0U#vVjHA$=Jl&}Ki@^cm&(-S6pShGpVGVHuXu6yczF2Ws^LU#S$lL$&%HsMQaA1qz?TGm1tJ z&zLC+PmTc1nfDW#KhrdQJ^;;`_sif04c>?<#gzj@9OdE2jWI}|$<)}5nYM6r8{(Qz zevr^SPm_Io3}h!iD1#ehn3CXwjCwqc`esobS$^4D&5?XPBbs(zTmq7$-cL ztEwM6p3pq*FY4-nA0pag$IIYGw5*>@vv(dCEe8Tjm7aH56MM#Z!joe_Jn+MW=CbpO zc+;OjJn+LZxIv6*5dnxzt>2vAV#%4&wR#tgUO!z1-i-zMyJ-CS=_0fMSKqEO9ns`( zD987+l!JNtE`fTeT{$=a?smRy8fn*zK5Xdabmlg-#-7AzeCbj+KhKhpG zF!`-4e``g7x8K(*65SnIX(;L|4Mp95cc_U(-bQza@(dL{&rs0=b%&a~N$Apjhh#%d zPd3zacR$42f4A23w(PG@POp{8#%)bvheX|AEB z&o$Ka_Ih}JvozFD(T5r;dZ)8=c90hE*+BtyedGNL@37m1#vb|p^;`XR!dGh)()-;t zM6@hIdOsziWziwMU-w@1uSb~X=wj#{XuuBTmGy>0Vme(E&F};@hN=EJOyu=ee2>%Pqda|mSgJTFXDBxp^LxB*Uc~Db+dn6T&tU2 zJX#k&{0XLmX!ZHzr=U6f38sYv(8Uei)yk%I@k5^>Tbk_P36LH74B2X57dI-aR)#H% z;mJ|RJ@h0951uH48wv`?n*3|oUZj_(?gvh~Rrj-}KziWh*QC0iJ>^#2 z%T9y%?5VF&bw7ty_6^nj94Bp^!)p5>)!kBJ^gNX-tL^gNarXTf3%#_r76^TOg}pH2 zT4kKpYt888x;f?48lKZ=t!_>Ywz@f8*6QXIV5^%`QLS!HNw&HgF_FtD94=t!_@!wz@f`+v?`jaI2fs$gOVc z{pcbWyK`E!^*pB-Tiu-EY;{}1(;xKTnBlXt1q-gwo{3KeXeWO8QdipeB2T$Xo1anV z@kO3;CrQC#p65-Yoh&bPy)?lf>y&A2#qxSSOrpfE|8;90tQL0-5C`}=PL$L|M~?V9 zV-1lgE!%A6fv>`XLlNOXB;fBD`$66jdnz#3^64*x2j+V7OngG1tGEu)zIXrA6*$iI zU#^`W_^OV?nJAkd8@xL(*WUk2!R`=^@G|F8#J4-ab=SZ650F^VE$kv%Gx{!-;Qv)rXFMGETh#d#oKR zT&~8N1M6%uG$mU8ZAgrai0C4H^1I01nO)@con559<|=8dze={x>MD*oUFF|b#LB}X z;^a?B2{ND%yL|WVC2NN#$t@_at43Ze`K8y&mV)bKtIaOsZ?wyV0=sN3v#Y%%_RbqD z+1Cz}Zi9!(V`;->NA_^}Y2*k=TsTT5uT7QOiDRV3F;)`8#>u3_@v5709R9y(@8bvGi{&mSJfn^5&9KdF<9%SZ86jtXnou62{M$N2bk}iy3#y<{KPx zzSbePR4kN7E6Qck+H$cE!cHS&G0_aWQalv7SneISSnB63mWfLi%d11G<@n5MdAqSj zT4&uYH;;D7>G8{D*Yf4^+ME?KDsh!`%~~a`<*Vf7C95TAY@<|WHp+tHM%i}D8u_4h zjcg2CD?L-z${!2Y%A#@W%#7lo#XG3z9pOGSmkC}ckO*x zyx{v%K6i_J5#A!>3tFV|t`=ES^q~BoY?rRrZkOJb+huS4!{VCus3eB(ls$cS%fkMT z%Qd-=%kKQgrT>5@WM1hLQq=fk8NYasRHi*Gxm})-K?(b$s(PRNeDF`?rkH<_;RE)| z#k&3S*?0EK^ZlNaBeR~9N7A2{|1Nkz)@QybgKsz>M`C{_b@P8F(PMuuw+;S<%pCno zNf_`e`Q@aS<=3PCS$=xmE0R6w6?ww(imaY+NVW`nRT^_%lflbhm;9_ZRZTKKqN9UPo7RljCfXije3{_!kk5zM%$m*x7Y}jujSN0m z888~#w$)%8Q*Ms90>AXdt6;a$SMh4TS=Env>oMPPPr0rIR5n{wcw|JREj*%im>kVq zDF^lYZ-g~cSc(mAxb0-U*s&Of6Y<$mRk#_Y12JR42=Le>GBV5-79C|XUv;au%4T|+ zcu;~ZYL?1Egsg@uJw?UdH7deJqhinY5ql;Un5#le40DqX6Bo$<*i;l#@{hIdlMFM( zJB<`)tLv)}7sFyXknSyE_e9(9iab1wMvste8H&&Gl?hV~A5+Mjazi5K>%IjgGq7~X zB$dwS@Gdr6q%Fd4I=MX>7sKNwLoT6N=xZz>-B2g69y5hlz2b1eC=55 zgj+qK0h0lcM_SDN$#U{AI=y;&Y<2O>Df=gsOnLUW4ePXW_QYw3aVz>)Q4)zP;9KB$ zF6!&;OCOs4;o@`ELwz>%+r9*T6m>BA1uUc7B#C3ZuiStlOwhbEd(5r+=< z57olcnyths!Zf>#YN2MFi4Scv&vfbD^)s9WN*w)df2Rt}nTHU6r?R^PGvN~+BTJos}7J}jyyt%*(EDXhz>1Un;$J5oFW2+v6bZ5eC zN4uMckg6i+B4_z+z;P6yl}B!o7K>+aEGCD=q8h}aRgcB_ShS(BV2s70Td|l%7K=r< zV%1+a{B{T8fOsGQNCbKSJ%L_863`n+2KoRY^NmU1BDz#j=$^*zDxw z7+giLIrFd%Hk-lkz-A%X2%E!9TVeBk!!Fo-nXm^o`wshIb426-Z2YUH`#RWs=w~jh zZ*V!v8|)>u@(ClX7)L?t_t{P0P@M~^RzPf^U$PW{l0uXOdTJ(W`Ex$Z|dW`xQ~WxdsB6W zS>{+C*?FVQZXNBA2}vL%fsh135(r5kB!Q3wLJ|l`AS8j11isA@@TdP%pSHdAA8+kQ zxhDPx+o1oCIQNqr_(ity+XLOc0-&A_OX>jX=p5ptj(0!6v4E`r^|BoRzqor6;B19` z0CoNs0P6I=0I1Xd3&4@!*8y@L0jNjjA`+&J!?e^Lm7lAsyuM!R<4Vt~4paIbhwJI) zfIe*wEo(h6PQ?i?zxH)V4D;gzzLBwnSVYK-F;f&&X;nkDQze(lkZK4GE1W8G7{Byf zg6kQi9zV=iD+Wm@^J{PeDD#_PlWGoZj=wa*=J?CKusQy+4K~MJq7gOk0l(FzJcq-k z%s0U1xXWJHxKw@v8~^eKes~W*h0U>`R@l5}aq#5W#6Z}bnKBAC@8Qj`d9P={rmnxh za5L?U@6Mw9oICRh@(ZVxsC+Qa5@-1`S5?ER>}p4Sy~-6+o>N<{mLq5Gn1dphv(Dji zR;X+;tGs|)H|f*nppD8k!)I4IF&b2%!g_>E84$(JyPPg;Lh4k~U>rG)2B%6Q15b0V zTERgHiiYCKtgCa?E_YVoO*d0a?^5SdEP3AGREea>C@#};w%+Vi`SD_;b=gvkNU0Ut zArh6U0!PiFWsXHoC0J&0a#gjn$k9-#B+OLiIUN-x4XaQ%C~L~kIwVE8Q?4tOv`T?q(8pjlf zx$Tqph9TqBHV0O|k8v&CG_)_5Z;TPnOy623Jl50Z~>imds4CrG}uHhjMg zk}uWGm!#79T2Or4gvHFS=KI$m`8Z6d<)`^x4wCPtHheDy$v3tQ-}6E8-Pnfj*&z8m z^+U_=sUZ10^+WUR4wBDPKQ!MDgXHtn56$;rkbIu{(OZ?nEkW^d(<`$)YraiE@_Fiq z=Gzb?pQnCkzBNJedFqGeTM;Cmr+#R@yMyHO)DO+KBuG9_{m^{QAo)D?L-XAkB%h~# zXuf$t@_Fh?iU0L__=X`Y+t@&O5){ z?kN~PPyNv8Gu@!=RQf#iL-UOaGJT%OkkqAA9@W>0^BehL81wT5(Sx*HHEG8ot5ls&P~s=aOL; z70<|-m0fBt&Yf+~%Ph=+LdmM`3G3&TIi_d%eYI_dr&^t5a8Vb`EzO&fSu$U7SHk^` z3=vr3N95C3?#&^P(Wz-SjZ94+nF`_4uL$`6ng)RENO7mR5)A}oQvUdR5ifM zou}NIMb%aHm9wT9ew6!U2WDtkuJI_tIvn|FC<7j|E}Jqk5P-*9Q z0V^m4#>&c(5e}hHC>(;|r~?}Xjx})Lg37%)xWUFJ5$FN%hV}xI05)>0lzjkB9pe{7 ztY~aZc|$m0UVYT zUSK1z3D^wW2iy;QANV_93(x{Q0Q^1h17IugAn*{d4cHDm3_Jq-5TLvsh5Z>c@p5K54CEtZ?2j+>{2BL zLhYbQ!sxmgV>rS@b+M_C2X%N>CAWz`yQYsQEdt%TaszX$mKB zchp>s_$l#7pri4VJB^JBOr-iiWU2a4gZDlkvFpj<{B*;dxUH}C^*gi^^4~$Cc+D1h zNzVDfO2^YP4)I5Tig~BetnL3kiPJrM=xf5z^7Av5I<)8uRZH7`*tTaA@$}R&>)*EL z{khp@e_f_C@tbk8?1tJ+s|3GY$6>hp;aBPU)3)ulqilHQ<#Ix#Tm!Z$GlM*t2lM?tVb9b*! literal 0 HcmV?d00001 diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/doc/images/Abstract socket.png new file mode 100644 index 0000000000000000000000000000000000000000..d862a0e0c83fbc824c812ea63bf9ef0a7d1052f1 GIT binary patch literal 5335 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 literal 0 HcmV?d00001 diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc new file mode 100644 index 0000000..fcff30b --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.cc @@ -0,0 +1,2821 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Zoltan Bibo - initial implementation and initial documentation +* Gergely Futo +* Oliver Ferenc Czerman +* Balasko Jeno +* Zoltan Bibo +* Eduard Czimbalmos +* Kulcsár Endre +* Gabor Szalai +* Jozsef Gyurusi +* Csöndes Tibor +* Zoltan Jasz +******************************************************************************/ +// +// File: Abstract_Socket.cc +// Description: Abstract_Socket implementation file +// Rev: R9B +// Prodnr: CNL 113 384 +// + +#include "Abstract_Socket.hh" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if defined SOLARIS8 +# include +#endif + + +#define AS_TCP_CHUNCK_SIZE 4096 +#define AS_SSL_CHUNCK_SIZE 16384 +// Used for the 'address already in use' bug workaround +#define AS_DEADLOCK_COUNTER 16 +// character buffer length to store temporary SSL informations, 256 is usually enough +#define SSL_CHARBUF_LENGTH 256 +// number of bytes to read from the random devices +#define SSL_PRNG_LENGTH 1024 + +#ifndef NI_MAXHOST +#define NI_MAXHOST 1024 +#endif +#ifndef NI_MAXSERV +#define NI_MAXSERV 32 +#endif + +/******************************** + ** PacketHeaderDescr + ** used for fragmentation and concatenation + ** of fixed format messages + *********************************/ + +unsigned long PacketHeaderDescr::Get_Message_Length(const unsigned char* buff) const +{ + unsigned long m_length = 0; + for (unsigned long i = 0; i < nr_bytes_in_length; i++) { + unsigned long shift_count = + byte_order == Header_MSB ? nr_bytes_in_length - 1 - i : i; + m_length |= buff[length_offset + i] << (8 * shift_count); + } + m_length *= length_multiplier; + if (value_offset < 0 && (long)m_length < -value_offset) return 0; + else return m_length + value_offset; +} + + +//////////////////////////////////////////////////////////////////////// +///// Default log functions +//////////////////////////////////////////////////////////////////////// +void Abstract_Socket::log_debug(const char *fmt, ...) const +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: "); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); + } +} + +void Abstract_Socket::log_warning(const char *fmt, ...) const +{ + TTCN_Logger::begin_event(TTCN_WARNING); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): warning: ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: warning: "); + va_list args; + va_start(args, fmt); + TTCN_Logger::log_event_va_list(fmt, args); + va_end(args); + TTCN_Logger::end_event(); +} + + +void Abstract_Socket::log_error(const char *fmt, ...) const +{ + va_list args; + va_start(args, fmt); + char *error_str = mprintf_va_list(fmt, args); + va_end(args); + try { + if (test_port_type != NULL && test_port_name != NULL) + TTCN_error("%s test port (%s): %s", test_port_type, test_port_name, + error_str); + else TTCN_error("Abstract socket: %s", error_str); + } catch (...) { + Free(error_str); + throw; + } + Free(error_str); +} + +void Abstract_Socket::log_hex(const char *prompt, const unsigned char *msg, + size_t length) const +{ + if (socket_debugging) { + TTCN_Logger::begin_event(TTCN_DEBUG); + if (test_port_type != NULL && test_port_name != NULL) + TTCN_Logger::log_event("%s test port (%s): ", test_port_type, + test_port_name); + else TTCN_Logger::log_event_str("Abstract socket: "); + if (prompt != NULL) TTCN_Logger::log_event_str(prompt); + TTCN_Logger::log_event("Size: %lu, Msg:", (unsigned long)length); + for (size_t i = 0; i < length; i++) TTCN_Logger::log_event(" %02x", msg[i]); + TTCN_Logger::end_event(); + } +} + + +/******************************** + ** Abstract_Socket + ** abstract base type for TCP socket handling + *********************************/ + +Abstract_Socket::Abstract_Socket() { + server_mode=false; + socket_debugging=false; + nagling=false; + use_non_blocking_socket=false; + halt_on_connection_reset=true; + halt_on_connection_reset_set=false; + client_TCP_reconnect=false; + TCP_reconnect_attempts=5; + TCP_reconnect_delay=1; + listen_fd=-1; + memset(&remoteAddr, 0, sizeof(remoteAddr)); + memset(&localAddr, 0, sizeof(localAddr)); + server_backlog=1; + peer_list_length=0; + local_host_name = NULL; + local_port_number = 0; + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto + test_port_type=NULL; + test_port_name=NULL; + ttcn_buffer_usercontrol=false; + use_connection_ASPs=false; + handle_half_close = false; + peer_list_root = NULL; +} + +Abstract_Socket::Abstract_Socket(const char *tp_type, const char *tp_name) { + server_mode=false; + socket_debugging=false; + nagling=false; + use_non_blocking_socket=false; + halt_on_connection_reset=true; + halt_on_connection_reset_set=false; + client_TCP_reconnect=false; + TCP_reconnect_attempts=5; + TCP_reconnect_delay=1; + listen_fd=-1; + memset(&remoteAddr, 0, sizeof(remoteAddr)); + memset(&localAddr, 0, sizeof(localAddr)); + server_backlog=1; + peer_list_length=0; + local_host_name = NULL; + local_port_number = 0; + remote_host_name = NULL; + remote_port_number = 0; + ai_family = AF_UNSPEC; // default: Auto + test_port_type=tp_type; + test_port_name=tp_name; + ttcn_buffer_usercontrol=false; + use_connection_ASPs=false; + handle_half_close = false; + peer_list_root = NULL; +} + +Abstract_Socket::~Abstract_Socket() { + peer_list_reset_peer(); + Free(local_host_name); + Free(remote_host_name); +} + +bool Abstract_Socket::parameter_set(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + + if (strcmp(parameter_name, socket_debugging_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) socket_debugging = true; + else if (strcasecmp(parameter_value,"no")==0) socket_debugging = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, socket_debugging_name()); + } else if (strcmp(parameter_name, server_mode_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) server_mode = true; + else if (strcasecmp(parameter_value,"no")==0) server_mode = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, server_mode_name()); + } else if (strcmp(parameter_name, use_connection_ASPs_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) use_connection_ASPs = true; + else if (strcasecmp(parameter_value,"no")==0) use_connection_ASPs = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, use_connection_ASPs_name()); + } else if (strcmp(parameter_name, halt_on_connection_reset_name()) == 0) { + halt_on_connection_reset_set=true; + if (strcasecmp(parameter_value,"yes")==0) halt_on_connection_reset = true; + else if (strcasecmp(parameter_value,"no")==0) halt_on_connection_reset = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, halt_on_connection_reset_name()); + } else if (strcmp(parameter_name, client_TCP_reconnect_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) client_TCP_reconnect = true; + else if (strcasecmp(parameter_value,"no")==0) client_TCP_reconnect = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, client_TCP_reconnect_name()); + } else if (strcmp(parameter_name, TCP_reconnect_attempts_name()) == 0) { + if (sscanf(parameter_value, "%d", &TCP_reconnect_attempts)!=1) log_error("Invalid input as TCP_reconnect_attempts counter given: %s", parameter_value); + if (TCP_reconnect_attempts<=0) log_error("TCP_reconnect_attempts must be greater than 0, %d is given", TCP_reconnect_attempts); + } else if (strcmp(parameter_name, TCP_reconnect_delay_name()) == 0) { + if (sscanf(parameter_value, "%d", &TCP_reconnect_delay)!=1) log_error("Invalid input as TCP_reconnect_delay given: %s", parameter_value); + if (TCP_reconnect_delay<0) log_error("TCP_reconnect_delay must not be less than 0, %d is given", TCP_reconnect_delay); + } else if(strcmp(parameter_name, remote_address_name()) == 0){ + Free(remote_host_name); + remote_host_name = mcopystr(parameter_value); + } else if(strcmp(parameter_name, local_address_name()) == 0){ // only for backward compatibility + Free(local_host_name); + local_host_name = mcopystr(parameter_value); + } else if(strcmp(parameter_name, remote_port_name()) == 0){ + int a; + if (sscanf(parameter_value, "%d", &a)!=1) log_error("Invalid input as port number given: %s", parameter_value); + if (a>65535 || a<0){ log_error("Port number must be between 0 and 65535, %d is given", remote_port_number);} + else {remote_port_number=a;} + } else if(strcmp(parameter_name, ai_family_name()) == 0){ + if (strcasecmp(parameter_value,"IPv6")==0 || strcasecmp(parameter_value,"AF_INET6")==0) ai_family = AF_INET6; + else if (strcasecmp(parameter_value,"IPv4")==0 || strcasecmp(parameter_value,"AF_INET")==0) ai_family = AF_INET; + else if (strcasecmp(parameter_value,"UNSPEC")==0 || strcasecmp(parameter_value,"AF_UNSPEC")==0) ai_family = AF_UNSPEC; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ai_family_name()); + } else if(strcmp(parameter_name, local_port_name()) == 0){ + int a; + if (sscanf(parameter_value, "%d", &a)!=1) log_error("Invalid input as port number given: %s", parameter_value); + if (a>65535 || a<0) {log_error("Port number must be between 0 and 65535, %d is given", local_port_number);} + else {local_port_number=a;} + } else if (strcmp(parameter_name, nagling_name()) == 0) { + if (strcasecmp(parameter_value,"yes")==0) nagling = true; + else if (strcasecmp(parameter_value,"no")==0) nagling = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, nagling_name()); + } else if (strcmp(parameter_name, use_non_blocking_socket_name()) == 0){ + if (strcasecmp(parameter_value, "yes") == 0) use_non_blocking_socket = true; + else if (strcasecmp(parameter_value, "no") == 0) use_non_blocking_socket = false; + } else if (strcmp(parameter_name, server_backlog_name()) == 0) { + if (sscanf(parameter_value, "%d", &server_backlog)!=1) log_error("Invalid input as server backlog given: %s", parameter_value); + } else { + log_debug("leaving Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return false; + } + + log_debug("leaving Abstract_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return true; +} + +void Abstract_Socket::Handle_Socket_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error) +{ + log_debug("entering Abstract_Socket::Handle_Socket_Event(): fd: %d%s%s%s", fd, + is_readable ? " readable" : "", is_writable ? " writable" : "", is_error ? " error" : ""); + + if (fd != listen_fd /* on server the connection requests are handled after the user messages */ + && peer_list_root[fd] != NULL && (is_readable || is_writable) + && get_peer(fd)->reading_state != STATE_DONT_RECEIVE) { + log_debug("receiving data"); + int messageLength = receive_message_on_fd(fd); + if (messageLength == 0) { // peer disconnected + as_client_struct * client_data = get_peer(fd); + log_debug("Abstract_Socket::Handle_Socket_Event(). Client %d closed connection.", fd); + switch (client_data->reading_state) { + case STATE_BLOCK_FOR_SENDING: + log_debug("Abstract_Socket::Handle_Socket_Event(): state is STATE_BLOCK_FOR_SENDING, don't close connection."); + Remove_Fd_Read_Handler(fd); + client_data->reading_state = STATE_DONT_CLOSE; + log_debug("Abstract_Socket::Handle_Socket_Event(): setting socket state to STATE_DONT_CLOSE"); + break; + case STATE_DONT_CLOSE: + log_debug("Abstract_Socket::Handle_Socket_Event(): state is STATE_DONT_CLOSE, don't close connection."); + break; + default: + if((client_data->tcp_state == CLOSE_WAIT) || (client_data->tcp_state == FIN_WAIT)) { + remove_client(fd); + peer_disconnected(fd); + } else { + if(shutdown(fd, SHUT_RD) != 0) { + if(errno == ENOTCONN) { + errno = 0; + } else { + log_error("shutdown(SHUT_RD) system call failed"); + } + } + client_data->tcp_state = CLOSE_WAIT; + Remove_Fd_Read_Handler(fd); + peer_half_closed(fd); + } + } // switch (client_data->reading_state) + } else if (messageLength > 0) { + as_client_struct *client_data=get_peer(fd); + if (socket_debugging) { + struct sockaddr_storage clientAddr = client_data->clientAddr; +#ifdef WIN32 + log_debug("Message received from address %s:%d", inet_ntoa(((struct sockaddr_in*)&clientAddr)->sin_addr), ntohs(((struct sockaddr_in *)&clientAddr)->sin_port)); +#else + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen = client_data->clientAddrlen; + int error = getnameinfo((struct sockaddr *)&clientAddr, clientAddrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) log_error("AbstractSocket: getnameinfo 2: %s\n", gai_strerror(error)); + log_debug("Message received from address (addr) %s/%s", hname, sname); +#endif + } + log_hex("Message received, buffer content: ", get_buffer(fd)->get_data(), get_buffer(fd)->get_len()); + handle_message(fd); + } /* else if (messageLength == -2) => + used in case of SSL: means that reading would bloc. + in this case I stop receiving message on the file descriptor */ + } // if ... (not new connection request) + + if (fd == listen_fd && is_readable) { + // new connection request arrived + log_debug("waiting for accept"); + // receiving new connection on the TCP server + struct sockaddr_storage clientAddr; + +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen = sizeof(clientAddr); +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + int newclient_fd = accept(listen_fd, (struct sockaddr *) &clientAddr, (socklen_t*)&clientAddrlen); +#else + int newclient_fd = accept(listen_fd, (struct sockaddr *) &clientAddr, (int*)&clientAddrlen); +#endif + if(newclient_fd < 0) log_error("Cannot accept connection at port"); + + as_client_struct *client_data=peer_list_add_peer(newclient_fd); + Add_Fd_Read_Handler(newclient_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::Handle_Socket_Event(). Handler set to other fd %d", newclient_fd); + client_data->fd_buff = new TTCN_Buffer; + client_data->clientAddr = clientAddr; + client_data->clientAddrlen = clientAddrlen; + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + if (add_user_data(newclient_fd)) { + char hname[NI_MAXHOST]; + int clientPort = 0; +#ifdef WIN32 + clientPort=ntohs(((struct sockaddr_in *)&clientAddr)->sin_port); + char* tmp=inet_ntoa(((struct sockaddr_in*)&clientAddr)->sin_addr); + strcpy(hname,tmp); +#else + int error; + char sname[NI_MAXSERV]; + error = getnameinfo((struct sockaddr *)&clientAddr, clientAddrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { + log_error("AbstractSocket: getnameinfo: %s\n", + gai_strerror(error)); + } + clientPort = atoi(sname); +#endif + log_debug("Client %d connected from address %s/%d", newclient_fd, hname, clientPort); + peer_connected(newclient_fd, hname, clientPort); + peer_connected(newclient_fd, *((struct sockaddr_in *)&clientAddr)); /* calling deprecated function also */ + log_debug("Handle_Socket_Event updated with client %d ", newclient_fd); + + if (set_non_block_mode(newclient_fd, use_non_blocking_socket) < 0) { + log_error("Set blocking mode failed."); + } + + } else { + remove_client(newclient_fd); + peer_disconnected(newclient_fd); + } + } // if (fd == listen_fd && is_readable) + + log_debug("leaving Abstract_Socket::Handle_Socket_Event()"); +} + +int Abstract_Socket::receive_message_on_fd(int client_id) +{ + as_client_struct * client_data = get_peer(client_id); + TTCN_Buffer* recv_tb = client_data->fd_buff; + unsigned char *end_ptr; + size_t end_len=AS_TCP_CHUNCK_SIZE; + recv_tb->get_end(end_ptr, end_len); + int messageLength = recv(client_id, (char *)end_ptr, end_len, 0); + if (messageLength==0) return messageLength; // peer disconnected + else if (messageLength < 0) { + log_warning("Error when reading the received TCP PDU: %s", strerror(errno)); + errno = 0; + return 0; + } + recv_tb->increase_length(messageLength); + return messageLength; +} + +int Abstract_Socket::send_message_on_fd(int client_id, const unsigned char* send_par, int message_length) +{ + get_peer(client_id); + return send(client_id, (const char *)send_par, message_length, 0); +} + + +//Tthe EAGAIN errno value set by the send operation means that +//the sending operation would block. +//First I try to increase the length of the sending buffer (increase_send_buffer()). +//If the outgoing buffer cannot be increased, the block_for_sending function will +//be called. This function will block until the file descriptor given as its argument +//is ready to write. While the block for sending operation calls the Event_Handler, +//states must be used to indicate that the Event_Handler is called when the +//execution is blocking. +//STATE_BLOCK_FOR_SENDING: the block for sending operation has been called +//STATE_DONT_CLOSE: if the other side close the connection before the block_for_sending +// operation returns, in the Event_Handler the connection +// must not be closed and the block_for_sending must return before we can +// close the connection. This state means that the other side closed the connection +// during the block_for_sending operation +//STATE_NORMAL: normal state +int Abstract_Socket::send_message_on_nonblocking_fd(int client_id, + const unsigned char* send_par, + int length){ + + log_debug("entering Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + as_client_struct * client_data = get_peer(client_id); + int sent_len = 0; + while(sent_len < length){ + int ret; + log_debug("Abstract_Socket::send_message_on_nonblocking_fd(id: %d): new iteration", client_id); + if (client_data->reading_state == STATE_DONT_CLOSE){ + goto client_closed_connection; + } else ret = send(client_id, send_par + sent_len, length - sent_len, 0); + + if (ret > 0) sent_len+=ret; + else{ + switch(errno){ + case EINTR:{ //signal: do nothing, try again + errno = 0; + break; + } + case EPIPE:{ //client closed connection + goto client_closed_connection; + } + case EAGAIN:{ // the output buffer is full: + //try to increase it if possible + errno = 0; + int old_bufsize, new_bufsize; + + if (increase_send_buffer( + client_id, old_bufsize, new_bufsize)) { + log_warning("Sending data on on file descriptor %d", + client_id); + log_warning("The sending operation would" + "block execution. The size of the " + "outgoing buffer was increased from %d to " + "%d bytes.",old_bufsize, + new_bufsize); + } else { + log_warning("Sending data on file descriptor %d", + client_id); + log_warning("The sending operation would block " + "execution and it is not possible to " + "further increase the size of the " + "outgoing buffer. Trying to process incoming" + "data to avoid deadlock."); + log_debug("Abstract_Socket::" + "send_message_on_nonblocking_fd():" + " setting socket state to " + "STATE_BLOCK_FOR_SENDING"); + client_data->reading_state = STATE_BLOCK_FOR_SENDING; + TTCN_Snapshot::block_for_sending(client_id); + } + break; + } + default:{ + log_debug("Abstract_Socket::" + "send_message_on_nonblocking_fd(): " + "setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)" + " with error", client_id); + return -1; + } + } //end of switch + }//end of else + } //end of while + + log_debug("Abstract_Socket::send_message_on_nonblocking_fd():" + "setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + return sent_len; + +client_closed_connection: + log_debug("Abstract_Socket::send_message_on_nonblocking_fd(): setting socket state to STATE_NORMAL"); + client_data->reading_state = STATE_NORMAL; + log_debug("leaving Abstract_Socket::" + "send_message_on_nonblocking_fd(id: %d)", client_id); + errno = EPIPE; + return -1; +} + +const PacketHeaderDescr* Abstract_Socket::Get_Header_Descriptor() const +{ + return NULL; +} + +void Abstract_Socket::peer_connected(int /*client_id*/, sockaddr_in& /*remote_addr*/) +{ +} + +void Abstract_Socket::handle_message(int client_id) +{ + const PacketHeaderDescr* head_descr = Get_Header_Descriptor(); + as_client_struct * client_data = get_peer(client_id); + TTCN_Buffer *recv_tb = client_data->fd_buff; + + if(!head_descr){ + message_incoming(recv_tb->get_data(), recv_tb->get_len(), client_id); + if (!ttcn_buffer_usercontrol) recv_tb->clear(); + } else { + recv_tb->rewind(); + unsigned long valid_header_length = head_descr->Get_Valid_Header_Length(); + while (recv_tb->get_len() > 0) { + if ((unsigned long)recv_tb->get_len() < valid_header_length) { + // this is a message without a valid header + // recv_tb->handle_fragment(); + return; + } + unsigned long message_length = + head_descr->Get_Message_Length(recv_tb->get_data()); + if (message_length < valid_header_length) { + // this is a message with a malformed length + log_error("Malformed message: invalid length: %lu. The length should " + "be at least %lu.", message_length, valid_header_length); + } + if((unsigned long)recv_tb->get_len() < message_length){ + // this is a fragmented message with a valid header + // recv_tb->handle_fragment(); + return; + } + // this a valid message + message_incoming(recv_tb->get_data(), message_length, client_id); + if (!ttcn_buffer_usercontrol) { + recv_tb->set_pos(message_length); + recv_tb->cut(); + } + } + } + log_debug("leaving Abstract_Socket::handle_message()"); +} + +void Abstract_Socket::map_user() +{ + log_debug("entering Abstract_Socket::map_user()"); +#if defined SOLARIS8 + sigignore(SIGPIPE); +#endif + if(!use_connection_ASPs) + { + // If halt_on_connection_reset is not set explicitly + // set it to the default value: true on clients, false on servers + if (!halt_on_connection_reset_set) { + if (local_port_number != 0) halt_on_connection_reset=false; + else halt_on_connection_reset=true; + } + } + + all_mandatory_configparameters_present(); + + char remotePort[6]; + char localPort[6]; + sprintf(localPort, "%u", local_port_number); + sprintf(remotePort, "%u", remote_port_number); + + if(!use_connection_ASPs) + { + if(server_mode) { + //open_listen_port(localAddr); + open_listen_port(local_host_name,(char*)&localPort); + } else { + //open_client_connection(remoteAddr, localAddr); + open_client_connection(remote_host_name,(char*)&remotePort,local_host_name,(char*)&localPort); + } + } + + log_debug("leaving Abstract_Socket::map_user()"); +} + +int Abstract_Socket::open_listen_port(const struct sockaddr_in & new_local_addr) +{ +#ifndef WIN32 + log_debug("**** DEPRECATED FUNCTION CALLED: Abstract_Socket::open_listen_port(const struct sockaddr_in & new_local_addr)." + " USE Abstract_Socket::open_listen_port(const char* localHostname, const char* localServicename) INSTEAD! ****"); +#endif + log_debug("Local address: %s:%d", inet_ntoa(new_local_addr.sin_addr), ntohs(new_local_addr.sin_port)); + + close_listen_port(); + + listen_fd = socket(AF_INET, SOCK_STREAM, 0); + if(listen_fd<0) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot open socket"); + } + + if(!nagling) { + int on = 1; + setsockopt(listen_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + int val = 1; + if(setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed"); + } + + int rc = 0; + + log_debug("Bind to port..."); + rc = bind(listen_fd, (const struct sockaddr *)&new_local_addr, sizeof(new_local_addr)); + if(rc<0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot bind to port"); + } + log_debug("Bind successful on server."); + + rc = listen(listen_fd, server_backlog); + if(rc<0) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot listen at port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot listen at port"); + } + + // to avoid dead-locks and make possible + // handling of multiple clients "accept" is placed in the Event_Handler + +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + addr_len = sizeof(new_local_addr); + if (getsockname(listen_fd, (struct sockaddr*)&new_local_addr, &addr_len)) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getsockname() system call failed on the server socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } + log_debug("Listen successful on server port %d", ntohs(new_local_addr.sin_port)); + + Add_Fd_Read_Handler(listen_fd); // Done here - after all error checks: as closed fd should not be left added + log_debug("Abstract_Socket::open_listen_port(): Handler set to socket fd %d", listen_fd); + + //localAddr = new_local_addr; + + if(use_connection_ASPs) + listen_port_opened(ntohs(new_local_addr.sin_port)); + + return new_local_addr.sin_port; +} + +int Abstract_Socket::open_listen_port(const char* localHostname, const char* localServicename) { + log_debug("Local address: %s/%s", (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + +#ifdef WIN32 + struct sockaddr_in new_local_addr; + memset(&new_local_addr, 0, sizeof(new_local_addr)); + if(localHostname!=NULL){ + get_host_id(localHostname,&new_local_addr); + } + if(localServicename!=NULL){ + new_local_addr.sin_port=htons(atoi(localServicename)); + } + return open_listen_port(new_local_addr); +#else + close_listen_port(); + + struct addrinfo *aip; + struct addrinfo hints; + int sock_opt; + int error; + + /* Set up a socket to listen for connections. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = /*AI_ALL|*/AI_ADDRCONFIG|AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; + + error = getaddrinfo(localHostname, localServicename, &hints, &aip); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", gai_strerror(error), + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + listen_port_opened(-1); + return -1; + } + else log_error("getaddrinfo: %s for host %s service %s", gai_strerror(error), + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + } + + struct addrinfo *res; + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (res = aip; res != NULL; res = res->ai_next,++counter) {}; + log_debug("Number of local addresses: %d\n", counter); + } + + + for (res = aip; res != NULL; res = res->ai_next) { + listen_fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + log_debug("Waiting for connection via: %s\n", + ((res->ai_family==AF_INET)?"IPv4": + ((res->ai_family==AF_INET6)?"IPv6":"unknown"))); + if (listen_fd == -1) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot open socket"); + } + + /* Tell the system to allow local addresses to be reused. */ + sock_opt = 1; + if (setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, (void *)&sock_opt, + sizeof (sock_opt)) == -1) { + + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Setsockopt failed"); + } + + if(!nagling) { + int on = 1; + setsockopt(listen_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + log_debug("Bind to port..."); + if (bind(listen_fd, res->ai_addr, res->ai_addrlen) == -1) { + error = errno; // save it for the warning message + close(listen_fd); + listen_fd = -1; + log_debug("Cannot bind to port when trying to open the listen port: %s", strerror(errno)); + errno = 0; + continue; + } + log_debug("Bind successful on server."); + break; + } + if (res==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open the listen port: %s", strerror(error)); + listen_port_opened(-1); + error = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot bind to port"); + } + + if (listen(listen_fd, server_backlog) == -1) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("Cannot listen at port when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("Cannot listen at port"); + } + + + // to avoid dead-locks and make possible + // handling of multiple clients "accept" is placed in Handle_Socket_Event + + // to determine the local address: + if (getsockname(listen_fd, res->ai_addr, &res->ai_addrlen)) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getsockname() system call failed on the server socket when trying to open the listen port: %s", strerror(errno)); + listen_port_opened(-1); + errno = 0; + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +/* error = getnameinfo(res->ai_addr, res->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICSERV); + if (error) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the server socket when trying to open the listen port: %s", gai_strerror(error)); + listen_port_opened(-1); + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } else { + log_debug("Listening on (name): %s/%s\n", + hname, sname); + }*/ + error = getnameinfo(res->ai_addr, res->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { + close(listen_fd); + listen_fd = -1; + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the server socket when trying to open the listen port: %s", gai_strerror(error)); + listen_port_opened(-1); + freeaddrinfo(aip); + return -1; + } + else log_error("getsockname() system call failed on the server socket"); + } else { + log_debug("Listening on (addr): %s/%s\n", + hname, sname); + } + + Add_Fd_Read_Handler(listen_fd); // Done here - after all error checks: as closed fd should not be left added + log_debug("Abstract_Socket::open_listen_port(): Handler set to socket fd %d", listen_fd); + + log_debug("new_local_addr Addr family: %s\n", + ((res->ai_addr->sa_family==AF_INET)?"IPv4": + ((res->ai_addr->sa_family==AF_INET6)?"IPv6":"unknown")) + ); + + + int listenPort = atoi(sname); + if(use_connection_ASPs) + listen_port_opened(listenPort); + + freeaddrinfo(aip); + return listenPort; +#endif +} + +void Abstract_Socket::listen_port_opened(int /*port_number*/) +{ + // Intentionally blank +} + +void Abstract_Socket::close_listen_port() +{ + // close current listening port if it is alive + if(listen_fd != -1) + { + Remove_Fd_Read_Handler(listen_fd); + close(listen_fd); + log_debug("Closed listening port of fd: %d", listen_fd); + listen_fd = -1; + } +} + +int Abstract_Socket::get_socket_fd() const{ + if(server_mode) return listen_fd; + if(peer_list_get_nr_of_peers()==0) return -1; + return peer_list_get_first_peer(); +} + +int Abstract_Socket::open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr) +{ +#ifdef WIN32 + log_debug("**** DEPRECATED FUNCTION CALLED: Abstract_Socket::open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr)." + " USE open_client_connection(const char* remoteHostname, const char* remoteServicename, const char* localHostname, const char* localServicename) INSTEAD! ****"); +#endif + log_debug("Remote address: %s:%d", inet_ntoa(new_remote_addr.sin_addr), ntohs(new_remote_addr.sin_port)); + + int deadlock_counter = AS_DEADLOCK_COUNTER; + int TCP_reconnect_counter = TCP_reconnect_attempts; + + // workaround for the 'address already used' bug + // used also when TCP reconnect is used + as_start_connecting: + + int socket_fd = socket(AF_INET, SOCK_STREAM, 0); + if(socket_fd<0) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot open socket."); + } + + if(!nagling) { + int on = 1; + setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + int rc; + + // when using client mode there is no separate file_desriptor for listening and target + log_debug("Connecting to server from address %s:%d", inet_ntoa(new_local_addr.sin_addr), ntohs(new_local_addr.sin_port)); + if (new_local_addr.sin_port != ntohs(0)) { // specific port to use + int val = 1; + if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed."); + } + rc = bind(socket_fd, (const struct sockaddr *)&new_local_addr, sizeof(new_local_addr)); + if(rc<0) { + if(use_connection_ASPs) + { + log_warning("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot bind to port."); + } + log_debug("Bind successful on client."); + } + rc = connect(socket_fd, (const struct sockaddr *)&new_remote_addr, sizeof(new_remote_addr)); + + if(rc<0){ + if (errno == EADDRINUSE) { + log_warning("connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again."); + close(socket_fd); + errno = 0; + deadlock_counter--; + if (deadlock_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", AS_DEADLOCK_COUNTER, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", AS_DEADLOCK_COUNTER); + } + goto as_start_connecting; + } else if (client_TCP_reconnect && errno != 0) { + log_warning("connect() returned error code %d, trying to connect again (TCP reconnect mode).", errno); + close(socket_fd); + errno = 0; + TCP_reconnect_counter--; + if (TCP_reconnect_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", TCP_reconnect_attempts, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", TCP_reconnect_attempts); + } + sleep(TCP_reconnect_delay); + goto as_start_connecting; + } + + if(use_connection_ASPs) + { + log_warning("Cannot connect to server when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot connect to server"); + } + + // Non-blocking mode is set before updating bookkeping to handle the error case properly. + if (set_non_block_mode(socket_fd, use_non_blocking_socket) < 0){ + close(socket_fd); + if (use_connection_ASPs){ + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Set blocking mode failed."); + } + + as_client_struct * client_data=peer_list_add_peer(socket_fd); + Add_Fd_Read_Handler(socket_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::open_client_connection(). Handler set to socket fd %d", socket_fd); + client_data->fd_buff = new TTCN_Buffer; +// client_data->clientAddr = *(struct sockaddr_storage*)&new_remote_addr; + memset(&client_data->clientAddr,0,sizeof(client_data->clientAddr)); + memcpy(&client_data->clientAddr,&new_remote_addr,sizeof(new_remote_addr)); + client_data->clientAddrlen = sizeof(new_remote_addr); + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + if (!add_user_data(socket_fd)) { + remove_client(socket_fd); + peer_disconnected(socket_fd); + return -1; + } + + +// localAddr = new_local_addr; +// remoteAddr = new_remote_addr; + + client_connection_opened(socket_fd); + + return socket_fd; +} + +int Abstract_Socket::open_client_connection(const char* remoteHostname, const char* remoteServicename, const char* localHostname, const char* localServicename) { + log_debug("Abstract_Socket::open_client_connection(remoteAddr: %s/%s, localAddr: %s/%s) called", + remoteHostname,remoteServicename, + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); +#ifdef WIN32 + struct sockaddr_in new_local_addr; + struct sockaddr_in new_remote_addr; + memset(&new_local_addr, 0, sizeof(new_local_addr)); + memset(&new_local_addr, 0, sizeof(new_remote_addr)); + if(localHostname!=NULL){ + get_host_id(localHostname,&new_local_addr); + } + if(localServicename!=NULL){ + new_local_addr.sin_port=htons(atoi(localServicename)); + } + if(remoteHostname!=NULL){ + get_host_id(remoteHostname,&new_remote_addr); + } + if(remoteServicename!=NULL){ + new_remote_addr.sin_port=htons(atoi(remoteServicename)); + } + return open_client_connection(new_remote_addr,new_local_addr); +#else + + int deadlock_counter = AS_DEADLOCK_COUNTER; + int TCP_reconnect_counter = TCP_reconnect_attempts; + + + struct addrinfo *res, *aip; + struct addrinfo hints; + int socket_fd = -1; + int error; + + /* Get host address. Any type of address will do. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = AI_ADDRCONFIG; /* |AI_ALL*/ + if (localHostname!=NULL || localServicename!=NULL) { /* use specific local address */ + hints.ai_flags |= AI_PASSIVE; + } + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family; + + error = getaddrinfo(remoteHostname, remoteServicename, &hints, &res); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", + gai_strerror(error), remoteHostname, remoteServicename); + client_connection_opened(-1); + return -1; + } + else { log_error("getaddrinfo: %s for host %s service %s", + gai_strerror(error), remoteHostname, remoteServicename); + } + } + + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (aip = res; aip != NULL; aip = aip->ai_next,++counter) {}; + log_debug("Number of remote addresses: %d\n", counter); + } + + // workaround for the 'address already used' bug + // used also when TCP reconnect is used + as_start_connecting: + + /* Try all returned addresses until one works */ + for (aip = res; aip != NULL; aip = aip->ai_next) { + /* + * Open socket. The address type depends on what + * getaddrinfo() gave us. + */ + socket_fd = socket(aip->ai_family, aip->ai_socktype, + aip->ai_protocol); + if (socket_fd == -1) { + if(use_connection_ASPs) + { + log_warning("Cannot open socket when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + freeaddrinfo(res); + return -1; + } + else { + freeaddrinfo(res); + log_error("Cannot open socket."); + } + } + + log_debug("Using address family for socket %d: %s",socket_fd, + ((aip->ai_family==AF_INET)?"IPv4": + ((aip->ai_family==AF_INET6)?"IPv6":"unknown")) + ); + + + if(!nagling) { + int on = 1; + setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY, (const char*)&on, sizeof(on)); + } + + // when using client mode there is no separate file_descriptor for listening and target + log_debug("Connecting to server from address %s/%s", + (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + if (localHostname!=NULL || localServicename!=NULL) { // specific localaddress/port to use + int val = 1; + if(setsockopt(socket_fd, SOL_SOCKET, SO_REUSEADDR, (const char*)&val, sizeof(val)) < 0) { + if(use_connection_ASPs) + { + log_warning("Setsockopt failed when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Setsockopt failed."); + } + + // determine the local address: + struct addrinfo *localAddrinfo; + /* Get host address. Any type of address will do. */ + bzero(&hints, sizeof (hints)); + hints.ai_flags = AI_PASSIVE; + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = ai_family;//aip->ai_family; // NOTE: On solaris 10 if is set to aip->ai_family, getaddrinfo will crash for IPv4-mapped addresses! + + error = getaddrinfo(localHostname, localServicename, &hints, &localAddrinfo); + if (error != 0) { + if(use_connection_ASPs) + { + log_warning("getaddrinfo: %s for host %s service %s", + gai_strerror(error), (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + client_connection_opened(-1); + return -1; + } + else { log_error("getaddrinfo: %s for host %s service %s", + gai_strerror(error), (localHostname!=NULL)?localHostname:"UNSPEC",(localServicename!=NULL)?localServicename:"UNSPEC"); + } + } + + if (socket_debugging) { + /* count the returned addresses: */ + int counter = 0; + for (struct addrinfo* aip2 = localAddrinfo; aip2 != NULL; aip2 = aip2->ai_next,++counter) {}; + log_debug("Number of local addresses: %d\n", counter); + } + + /* Try all returned addresses until one works */ + struct addrinfo* aip2; + for (aip2 = localAddrinfo; aip2 != NULL; aip2 = aip2->ai_next) { + log_debug("Using address family for bind: %s", + ((aip2->ai_family==AF_INET)?"IPv4": + ((aip2->ai_family==AF_INET6)?"IPv6":"unknown")) + ); + + if(bind(socket_fd, aip2->ai_addr, aip2->ai_addrlen)<0) { +/* if(use_connection_ASPs) // the if else branches are the same + {*/ + log_debug("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + //client_connection_opened(-1); + //freeaddrinfo(localAddrinfo); + errno = 0; + continue; //aip2 cycle + //return -1; +/* } + else { + //freeaddrinfo(localAddrinfo); + //log_error("Cannot bind to port."); + log_debug("Cannot bind to port when trying to open client connection: %s", strerror(errno)); + errno = 0; + continue; //aip2 cycle + }*/ + } + log_debug("Bind successful on client."); + freeaddrinfo(localAddrinfo); + break; + } + if (aip2==NULL) { + log_debug("Bind failed for all local addresses."); + freeaddrinfo(localAddrinfo); + continue; // aip cycle + } + } + + /* Connect to the host. */ + if (connect(socket_fd, aip->ai_addr, aip->ai_addrlen) == -1) { + if (errno == EADDRINUSE) { + log_warning("connect() returned error code EADDRINUSE. Perhaps this is a kernel bug. Trying to connect again."); + close(socket_fd); + socket_fd = -1; + errno = 0; + deadlock_counter--; + if (deadlock_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", AS_DEADLOCK_COUNTER, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Already tried %d times, giving up", AS_DEADLOCK_COUNTER); + } + goto as_start_connecting; + } else if (client_TCP_reconnect && errno != 0) { + log_warning("connect() returned error code %d (%s), trying to connect again (TCP reconnect mode).", errno, strerror(errno)); + close(socket_fd); + socket_fd = -1; + errno = 0; + if (aip->ai_next==NULL) { /* Last address is tried and there is still an error */ + TCP_reconnect_counter--; + if (TCP_reconnect_counter<0) { + if(use_connection_ASPs) + { + log_warning("Already tried %d times, giving up when trying to open client connection: %s", TCP_reconnect_attempts, strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else { log_error("Already tried %d times, giving up", TCP_reconnect_attempts); } + } + } + sleep(TCP_reconnect_delay); + goto as_start_connecting; + } else { + log_debug("Cannot connect to server: %s", strerror(errno)); + (void) close(socket_fd); + socket_fd = -1; + } + + if (aip->ai_next==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot connect to server when trying to open client connection: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Cannot connect to server"); + } + continue; //aip cycle + } + + // to determine the local address: + if (getsockname(socket_fd, aip->ai_addr, &aip->ai_addrlen)) { + close(socket_fd); + if(use_connection_ASPs) { + log_warning("getsockname() system call failed on the client socket when trying to connect to server: %s", strerror(errno)); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("getsockname() system call failed on the client socket when trying to connect to server: %s", strerror(errno)); + } + char hname[NI_MAXHOST]; + char sname[NI_MAXSERV]; +/* error = getnameinfo(aip->ai_addr, aip->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICSERV); + if (error) { + close(socket_fd); + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + client_connection_opened(-1); + return -1; + } + else log_error("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + } else { + log_debug("Connection established (name): %s/%s -> %s/%s\n", + hname, sname, + remoteHostname, remoteServicename); + }*/ + error = getnameinfo(aip->ai_addr, aip->ai_addrlen, + hname, sizeof (hname), sname, sizeof (sname), NI_NUMERICHOST|NI_NUMERICSERV); + if (error) { +/* close(socket_fd); + if(use_connection_ASPs) + { + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); +// client_connection_opened(-1); +// return -1; + } + else*/ + log_warning("getnameinfo() system call failed on the client socket when trying to connect to server: %s", gai_strerror(error)); + } else { + log_debug("Connection established (addr): %s/%s -> %s/%s\n", + hname, sname, + remoteHostname, remoteServicename); + } + + log_debug( + "connected to: host %s service %s via address family %s\n", + remoteHostname, remoteServicename, + ((aip->ai_family==AF_INET)?"IPv4": + ((aip->ai_family==AF_INET6)?"IPv6":"unknown"))); + break; + } + if (aip==NULL) { + if(use_connection_ASPs) + { + log_warning("Cannot connect to server"); + client_connection_opened(-1); + freeaddrinfo(res); + return -1; + } + else log_error("Cannot connect to server"); + } + + // Non-blocking mode is set before updating bookkeping to handle the error case properly. + if (set_non_block_mode(socket_fd, use_non_blocking_socket) < 0) { + freeaddrinfo(res); + close(socket_fd); + if (use_connection_ASPs){ + log_warning("Set blocking mode failed."); + client_connection_opened(-1); + errno = 0; + return -1; + } + else log_error("Set blocking mode failed."); + } + + as_client_struct * client_data=peer_list_add_peer(socket_fd); + Add_Fd_Read_Handler(socket_fd); // Done here - as in case of error: remove_client expects the handler as added + log_debug("Abstract_Socket::open_client_connection(). Handler set to socket fd %d", socket_fd); + client_data->fd_buff = new TTCN_Buffer; +// client_data->clientAddr = *(struct sockaddr_storage*)aip->ai_addr; + memset(&client_data->clientAddr,0,sizeof(client_data->clientAddr)); + memcpy(&client_data->clientAddr,aip->ai_addr,sizeof(*aip->ai_addr)); + client_data->clientAddrlen = aip->ai_addrlen; + client_data->tcp_state = ESTABLISHED; + client_data->reading_state = STATE_NORMAL; + + freeaddrinfo(res); + + if (!add_user_data(socket_fd)) { + remove_client(socket_fd); + peer_disconnected(socket_fd); + return -1; + } + + client_connection_opened(socket_fd); + + return socket_fd; +#endif +} + + +void Abstract_Socket::client_connection_opened(int /*client_id*/) +{ + // Intentionally blank +} + +void Abstract_Socket::unmap_user() +{ + log_debug("entering Abstract_Socket::unmap_user()"); + remove_all_clients(); + close_listen_port(); + Handler_Uninstall(); // For robustness only + log_debug("leaving Abstract_Socket::unmap_user()"); +} + +void Abstract_Socket::peer_disconnected(int /*fd*/) +{ + // virtual peer_disconnected() needs to be overriden in test ports! + if(!use_connection_ASPs) { + if (halt_on_connection_reset) + log_error("Connection was interrupted by the other side."); + if (client_TCP_reconnect){ + log_warning("TCP connection was interrupted by the other side, trying to reconnect again..."); + unmap_user(); + map_user(); + log_warning("TCP reconnect successfuly finished"); + } + } +} + +void Abstract_Socket::peer_half_closed(int fd) +{ + log_debug("Entering Abstract_Socket::peer_half_closed()"); + remove_client(fd); + peer_disconnected(fd); + log_debug("Leaving Abstract_Socket::peer_half_closed()"); +} + +void Abstract_Socket::send_shutdown(int client_id) +{ + log_debug("entering Abstract_Socket::send_shutdown()"); + int dest_fd = client_id; + + if (dest_fd == -1) { + if(peer_list_get_nr_of_peers() > 1) + log_error("Client Id not specified altough not only 1 client exists"); + else if(peer_list_get_nr_of_peers() == 0) + log_error("There is no connection alive, connect before sending anything."); + dest_fd = peer_list_get_first_peer(); + } + as_client_struct * client_data = get_peer(dest_fd); + if(client_data->tcp_state != ESTABLISHED) + log_error("TCP state of client nr %i does not allow to shut down its connection for writing!", dest_fd); + + if(shutdown(dest_fd, SHUT_WR) != 0) + { + if(errno == ENOTCONN) + { + remove_client(dest_fd); + peer_disconnected(dest_fd); + errno = 0; + } + else + log_error("shutdown() system call failed"); + } + else client_data->tcp_state = FIN_WAIT; + + // dest_fd is not removed from readfds, data can be received + + log_debug("leaving Abstract_Socket::send_shutdown()"); +} + +void Abstract_Socket::send_outgoing(const unsigned char* send_par, int length, int client_id) +{ + log_debug("entering Abstract_Socket::send_outgoing()"); + log_hex("Sending data: ", send_par, length); + int dest_fd; + int nrOfBytesSent; + + dest_fd = client_id; + if (dest_fd == -1) { + if(peer_list_get_nr_of_peers() > 1) + log_error("Client Id not specified altough not only 1 client exists"); + else if(peer_list_get_nr_of_peers() == 0) + log_error("There is no connection alive, use a Connect ASP before sending anything."); + dest_fd = peer_list_get_first_peer(); + } + as_client_struct * client_data = get_peer(dest_fd,true); + if(!client_data || ((client_data->tcp_state != ESTABLISHED) && (client_data->tcp_state != CLOSE_WAIT))){ + char *error_text=mprintf("client nr %i has no established connection", dest_fd); + report_error(client_id,length,-2,send_par,error_text); + Free(error_text); + log_debug("leaving Abstract_Socket::send_outgoing()"); + return; + } + + nrOfBytesSent = use_non_blocking_socket ? send_message_on_nonblocking_fd(dest_fd, send_par, length) : + send_message_on_fd(dest_fd, send_par, length); + + if (nrOfBytesSent == -1){ + log_debug("Client %d closed connection. Error: %d %s", client_id, errno, strerror(errno)); + report_unsent(dest_fd,length,nrOfBytesSent,send_par,"Client closed the connection"); + + if(client_data->tcp_state == CLOSE_WAIT){ + log_debug("Client %d waiting for close ASP.", client_id); + } else { + errno = 0; + log_debug("Client %d closed connection", client_id); + client_data->tcp_state = CLOSE_WAIT; + Remove_Fd_Read_Handler(dest_fd); + peer_half_closed(dest_fd); + } + }else if (nrOfBytesSent != length) { + char *error_text=mprintf("Send system call failed: %d bytes were sent instead of %d", nrOfBytesSent, length); + report_error(client_id,length,nrOfBytesSent,send_par,error_text); + Free(error_text); + } else { + log_debug("Nr of bytes sent = %d", nrOfBytesSent); + } + log_debug("leaving Abstract_Socket::send_outgoing()"); +} + +void Abstract_Socket::report_error(int /*client_id*/, int /*msg_length*/, int /*sent_length*/, const unsigned char* /*msg*/, const char* error_text) +{ + log_error("%s",error_text); +} + +void Abstract_Socket::report_unsent(int /*client_id*/, int /*msg_length*/, int /*sent_length*/, const unsigned char* /*msg*/, const char* error_text) +{ + log_debug("%s",error_text); +} + +void Abstract_Socket::all_mandatory_configparameters_present() +{ + if(!use_connection_ASPs) + { + if(server_mode) { + if(local_port_number == 0) { + log_error("%s is not defined in the configuration file", local_port_name()); + } + } + else { // client mode + if (remote_host_name == NULL) { + log_error("%s is not defined in the configuration file", remote_address_name()); + } + if(remote_port_number == 0){ + log_error("%s is not defined in the configuration file", remote_port_name()); + } + } + } + user_all_mandatory_configparameters_present(); +} + + +void Abstract_Socket::get_host_id(const char* hostName, struct sockaddr_in *addr) +{ + log_debug("Abstract_Socket::get_host_id called"); + unsigned int port = addr->sin_port; + memset(addr, 0, sizeof(*addr)); + addr->sin_family = AF_INET; + addr->sin_port = port; + struct hostent *hptr; + if(strcmp("localhost", hostName) != 0) + { + hptr = gethostbyname(hostName); + if (hptr != NULL) memcpy(&addr->sin_addr, hptr->h_addr_list[0], hptr->h_length); + else log_error("The host name %s is not valid in the configuration file.", hostName); + log_debug("The address set to %s[%s]", hptr->h_name, inet_ntoa(addr->sin_addr)); + } + else + { + addr->sin_addr.s_addr = htonl(INADDR_ANY); + log_debug("The address set to [%s]", inet_ntoa(addr->sin_addr)); + } +} + +void Abstract_Socket::remove_client(int fd) +{ + log_debug("entering Abstract_Socket::remove_client(%d)", fd); + if(fd != listen_fd) { + get_peer(fd); // check if client exists, log_error && fail if not + // TODO FIXME: remove the Add_Fd_Read_Handler(fd); if TITAN is fixed + Add_Fd_Read_Handler(fd); + Remove_Fd_All_Handlers(fd); + remove_user_data(fd); + delete get_peer(fd)->fd_buff; + peer_list_remove_peer(fd); + close(fd); + log_debug("Removed client %d.", fd); + } + else log_warning("Abstract_Socket::remove_client: %d is the server listening port, can not be removed!", fd); + log_debug("leaving Abstract_Socket::remove_client(%d)", fd); +} + +void Abstract_Socket::remove_all_clients() +{ + log_debug("entering Abstract_Socket::remove_all_clients"); + for(int i = 0; peer_list_root != NULL && i < peer_list_length; i++) + { + if(i != listen_fd && peer_list_root[i] != NULL) + remove_client(i); + } + // check if no stucked data + while (peer_list_get_nr_of_peers()) { + int client_id = peer_list_get_first_peer(); + if (client_id >= 0) log_warning("Client %d has not been removed, programming error", client_id); + else log_error("Number of clients<>0 but cannot get first client, programming error"); + peer_list_remove_peer(client_id); + } + + log_debug("leaving Abstract_Socket::remove_all_clients"); +} + +int Abstract_Socket::set_non_block_mode(int fd, bool enable_nonblock){ + + int flags = fcntl(fd, F_GETFL); + if (flags < 0) { + log_warning("System call fcntl(F_GETFL) failed on file " + "descriptor %d.", fd); + return -1; + } + + if (enable_nonblock) flags |= O_NONBLOCK; + else flags &= ~O_NONBLOCK; + + if (fcntl(fd, F_SETFL, flags) == -1) { + log_warning("System call fcntl(F_SETFL) failed on file " + "descriptor %d.", fd); + return -1; + } + return 0; + +} + +bool Abstract_Socket::increase_send_buffer(int fd, + int &old_size, int& new_size) +{ + int set_size; +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + optlen = sizeof(old_size); + // obtaining the current buffer size first + if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&old_size, &optlen)) + goto getsockopt_failure; + if (old_size <= 0) { + log_warning("System call getsockopt(SO_SNDBUF) " + "returned invalid buffer size (%d) on file descriptor %d.", + old_size, fd); + return false; + } + // trying to double the buffer size + set_size = 2 * old_size; + if (set_size > old_size) { + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char*)&set_size, + sizeof(set_size))) { + // the operation failed + switch (errno) { + case ENOMEM: + case ENOBUFS: + errno = 0; + break; + default: + // other error codes indicate a fatal error + goto setsockopt_failure; + } + } else { + // the operation was successful + goto success; + } + } + // trying to perform a binary search to determine the maximum buffer size + set_size = old_size; + for (int size_step = old_size / 2; size_step > 0; size_step /= 2) { + int tried_size = set_size + size_step; + if (tried_size > set_size) { + if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (const char*)&tried_size, + sizeof(tried_size))) { + // the operation failed + switch (errno) { + case ENOMEM: + case ENOBUFS: + errno = 0; + break; + default: + // other error codes indicate a fatal error + goto setsockopt_failure; + } + } else { + // the operation was successful + set_size = tried_size; + } + } + } + if (set_size <= old_size) return false; +success: + // querying the new effective buffer size (it might be smaller + // than set_size but should not be smaller than old_size) + optlen = sizeof(new_size); + if (getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&new_size, + &optlen)) goto getsockopt_failure; + if (new_size > old_size) return true; + else { + if (new_size < old_size) + log_warning("System call getsockopt(SO_SNDBUF) returned unexpected buffer size " + "(%d, after increasing it from %d to %d) on file descriptor %d.", + new_size, old_size, set_size, fd); + return false; + } +getsockopt_failure: + log_warning("System call getsockopt(SO_SNDBUF) failed on file " + "descriptor %d. (%s)", fd, strerror(errno)); + return false; +setsockopt_failure: + log_warning("System call setsockopt(SO_SNDBUF) failed on file " + "descriptor %d. (%s)", fd, strerror(errno)); + return false; +} + + +const char* Abstract_Socket::local_port_name() { return "serverPort";} +const char* Abstract_Socket::remote_address_name() { return "destIPAddr";} +const char* Abstract_Socket::local_address_name() { return "serverIPAddr";} +const char* Abstract_Socket::remote_port_name() { return "destPort";} +const char* Abstract_Socket::ai_family_name() { return "ai_family";} +const char* Abstract_Socket::use_connection_ASPs_name() { return "use_connection_ASPs";} +const char* Abstract_Socket::halt_on_connection_reset_name(){ return "halt_on_connection_reset";} +const char* Abstract_Socket::client_TCP_reconnect_name() { return "client_TCP_reconnect";} +const char* Abstract_Socket::TCP_reconnect_attempts_name() { return "TCP_reconnect_attempts";} +const char* Abstract_Socket::TCP_reconnect_delay_name() { return "TCP_reconnect_delay";} +const char* Abstract_Socket::server_mode_name() { return "server_mode";} +const char* Abstract_Socket::socket_debugging_name() { return "socket_debugging";} +const char* Abstract_Socket::nagling_name() { return "nagling";} +const char* Abstract_Socket::use_non_blocking_socket_name() { return "use_non_blocking_socket";} +const char* Abstract_Socket::server_backlog_name() { return "server_backlog";} +bool Abstract_Socket::add_user_data(int) {return true;} +bool Abstract_Socket::remove_user_data(int) {return true;} +bool Abstract_Socket::user_all_mandatory_configparameters_present() { return true; } + + + +//////////////////////////////////////////////////////////////////////// +///// Peer handling functions +//////////////////////////////////////////////////////////////////////// + +void Abstract_Socket::peer_list_reset_peer() { + log_debug("Abstract_Socket::peer_list_reset_peer: Resetting peer array"); + for (int i = 0; i < peer_list_length; i++) + if (peer_list_root[i] != NULL) { + delete peer_list_root[i]; + peer_list_root[i] = NULL; + } + + peer_list_resize_list(-1); + log_debug("Abstract_Socket::peer_list_reset_peer: New length is %d", peer_list_length); +} + +void Abstract_Socket::peer_list_resize_list(int client_id) { + int new_length=client_id; + if (new_length<0) new_length = peer_list_get_last_peer(); + new_length++; // index starts from 0 + log_debug("Abstract_Socket::peer_list_resize_list: Resizing to %d", new_length); + peer_list_root = (as_client_struct **)Realloc(peer_list_root, new_length*sizeof(as_client_struct *)); + + // initialize new entries + for (int i = peer_list_length; i < new_length; i++) + peer_list_root[i] = NULL; + + peer_list_length = new_length; + log_debug("Abstract_Socket::peer_list_resize_list: New length is %d", peer_list_length); +} + +int Abstract_Socket::peer_list_get_first_peer() const { + log_debug("Abstract_Socket::peer_list_get_first_peer: Finding first peer of the peer array"); + for (int i = 0; i < peer_list_length; i++) { + if (peer_list_root[i] != NULL) { + log_debug("Abstract_Socket::peer_list_get_first_peer: First peer is %d", i); + return i; + } + } + log_debug("Abstract_Socket::peer_list_get_first_peer: No active peer found"); + return -1; // this indicates an empty list +} + +int Abstract_Socket::peer_list_get_last_peer() const +{ + log_debug("Abstract_Socket::peer_list_get_last_peer: Finding last peer of the peer array"); + if (peer_list_length==0) { + log_debug("Abstract_Socket::peer_list_get_last_peer: No active peer found"); + return -1; + } + for (int i = peer_list_length - 1; i >= 0; i--) { + if (peer_list_root[i] != NULL) { + log_debug("Abstract_Socket::peer_list_get_last_peer: Last peer is %u", i); + return i; + } + } + log_debug("Abstract_Socket::peer_list_get_last_peer: No active peer found"); + return -1; // this indicates an empty list +} + +int Abstract_Socket::peer_list_get_nr_of_peers() const +{ + int nr=0; + for (int i = 0; i < peer_list_length; i++) + if (peer_list_root[i] != NULL) nr++; + log_debug("Abstract_Socket::peer_list_get_nr_of_peers: Number of active peers = %d", nr); + return nr; +} + +Abstract_Socket::as_client_struct *Abstract_Socket::get_peer (int client_id, bool no_error) const +{ + if (client_id >= peer_list_length){ + if(no_error) return NULL; + else log_error ("Index %d exceeds length of peer list.", client_id); + } + if (peer_list_root[client_id]==NULL){ + if(no_error) return NULL; + else log_error("Abstract_Socket::get_peer: Client %d does not exist", client_id); + } + return peer_list_root[client_id]; +} + +Abstract_Socket::as_client_struct * Abstract_Socket::peer_list_add_peer (int client_id) { + log_debug("Abstract_Socket::peer_list_add_peer: Adding client %d to peer list", client_id); + if (client_id<0) log_error("Invalid Client Id is given: %d.", client_id); + if (client_id>peer_list_get_last_peer()) peer_list_resize_list(client_id); + peer_list_root[client_id] = new as_client_struct; + peer_list_root[client_id]->user_data = NULL; + peer_list_root[client_id]->fd_buff = NULL; + peer_list_root[client_id]->tcp_state = CLOSED; + peer_list_root[client_id]->reading_state = STATE_NORMAL; + return peer_list_root[client_id]; +} + +void Abstract_Socket::peer_list_remove_peer (int client_id) { + + log_debug("Abstract_Socket::peer_list_remove_peer: Removing client %d from peer list", client_id); + if (client_id >= peer_list_length || client_id<0) log_error("Invalid Client Id is given: %d.", client_id); + if (peer_list_root[client_id] == NULL) log_error("Peer %d does not exist.", client_id); + + delete peer_list_root[client_id]; + peer_list_root[client_id] = NULL; + + peer_list_resize_list(-1); +} + + + +#ifdef AS_USE_SSL +/* + * Server mode + When the mode is server, first a TCP socket is created. The server starts + to listen on this port. Once a TCP connect request is received, the TCP + connection is setup. After this the SSL handshake begins. + The SSL is mapped to the file descriptor of the TCP socket. The BIO is + automatically created by OpenSSL inheriting the characteristics of the + socket (non-blocking mode). The BIO is completely transparent. + The server always sends its certificate to the client. If configured so, + the server will request the certificate of the client and check if it is + a valid certificate. If not, the SSL connection is refused. + If configured not to verify the certificate, the server will not request + it from the client and the SSL connection is accepted. + If usage of the SSL ssl_session resumption is enabled and + the client refers to a previous ssl_session, the server will accept it, + unless it is not found in the SSL context cache. + Once the connection is negotiated, data can be sent/received. + The SSL connection is shutted down on an unmap() operation. The shutdown + process does not follow the standard. The server simply shuts down and + does not expect any acknowledgement from the client. + Clients connected to the server are distinguished with their file + descriptor numbers. When a message is received, the file descriptor + number is also passed, so the client can be identified. + * Client mode + When the mode is client, first a TCP connection is requested to the + server. Once accepted, the SSL endpoint is created. + If configured so, the client tries to use the ssl_session Id from the + previous connection, if available (e.g. not the first connection). + If no ssl_session Id is available or the server does not accept it, + a full handshake if performed. + If configured so, the certificate of the server is verified. + If the verification fails, the SSL connection is interrupted by the + client. If no verification required, the received certificate is + still verified, however the result does not affect the connection + (might fail). + * ssl_verify_certificates() is a virtual function. It is called after + SSL connection is up. Testports may use it to check other peer's + certificate and do actions. If the return value is 0, then the + SSL connection is closed. In case of a client, the test port + exits with an error (verification_error). The server just removes + client data, but keeps running. + If ssl_verifiycertificate == "yes", then accept connections only + where certificate is valid + Further checks can be done using SSL_Socket::ssl_verify_certificates() + after the SSL connection is established with the following function call + sequence: + + remove_client(dest_fd); + peer_disconnected(dest_fd); + +*/ + + +// ssl_session ID context of the server +static unsigned char ssl_server_context_name[] = "McHalls&EduardWasHere"; +const unsigned char * SSL_Socket::ssl_server_auth_session_id_context = ssl_server_context_name; +// Password pointer +void *SSL_Socket::ssl_current_client = NULL; + + +SSL_Socket::SSL_Socket() +{ + ssl_use_ssl=false; + ssl_initialized=false; + ssl_key_file=NULL; + ssl_certificate_file=NULL; + ssl_trustedCAlist_file=NULL; + ssl_cipher_list=NULL; + ssl_verify_certificate=false; + ssl_use_session_resumption=true; + ssl_session=NULL; + ssl_password=NULL; + test_port_type=NULL; + test_port_name=NULL; + ssl_ctx = NULL; + ssl_current_ssl = NULL; + SSLv2=true; + SSLv3=true; + TLSv1=true; + TLSv1_1=true; + TLSv1_2=true; +} + +SSL_Socket::SSL_Socket(const char *tp_type, const char *tp_name) +{ + ssl_use_ssl=false; + ssl_initialized=false; + ssl_key_file=NULL; + ssl_certificate_file=NULL; + ssl_trustedCAlist_file=NULL; + ssl_cipher_list=NULL; + ssl_verify_certificate=false; + ssl_use_session_resumption=true; + ssl_session=NULL; + ssl_password=NULL; + test_port_type=tp_type; + test_port_name=tp_name; + ssl_ctx = NULL; + ssl_current_ssl = NULL; + SSLv2=true; + SSLv3=true; + TLSv1=true; + TLSv1_1=true; + TLSv1_2=true; +} + +SSL_Socket::~SSL_Socket() +{ + // now SSL context can be removed + if (ssl_use_ssl && ssl_ctx!=NULL) { + SSL_CTX_free(ssl_ctx); + } + delete [] ssl_key_file; + delete [] ssl_certificate_file; + delete [] ssl_trustedCAlist_file; + delete [] ssl_cipher_list; + delete [] ssl_password; +} + + +bool SSL_Socket::parameter_set(const char *parameter_name, + const char *parameter_value) +{ + log_debug("entering SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + + if(strcmp(parameter_name, ssl_use_ssl_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_use_ssl = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_use_ssl = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_use_ssl_name()); + } else if(strcmp(parameter_name, ssl_use_session_resumption_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_use_session_resumption = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_use_session_resumption = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_use_session_resumption_name()); + } else if(strcmp(parameter_name, ssl_private_key_file_name()) == 0) { + delete [] ssl_key_file; + ssl_key_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_key_file, parameter_value); + } else if(strcmp(parameter_name, ssl_trustedCAlist_file_name()) == 0) { + delete [] ssl_trustedCAlist_file; + ssl_trustedCAlist_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_trustedCAlist_file, parameter_value); + } else if(strcmp(parameter_name, ssl_certificate_file_name()) == 0) { + delete [] ssl_certificate_file; + ssl_certificate_file=new char[strlen(parameter_value)+1]; + strcpy(ssl_certificate_file, parameter_value); + } else if(strcmp(parameter_name, ssl_cipher_list_name()) == 0) { + delete [] ssl_cipher_list; + ssl_cipher_list=new char[strlen(parameter_value)+1]; + strcpy(ssl_cipher_list, parameter_value); + } else if(strcmp(parameter_name, ssl_password_name()) == 0) { + ssl_password=new char[strlen(parameter_value)+1]; + strcpy(ssl_password, parameter_value); + } else if(strcmp(parameter_name, ssl_verifycertificate_name()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) ssl_verify_certificate = true; + else if(strcasecmp(parameter_value, "no") == 0) ssl_verify_certificate = false; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_verifycertificate_name()); + } else if(strcasecmp(parameter_name, ssl_disable_SSLv2()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) SSLv2= false; + else if(strcasecmp(parameter_value, "no") == 0) SSLv2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_SSLv2()); + } else if(strcasecmp(parameter_name, ssl_disable_SSLv3()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) SSLv2 = false; + else if(strcasecmp(parameter_value, "no") == 0) SSLv2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_SSLv3()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1= false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1_1()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1_1 = false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1_1 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1_1()); + } else if(strcasecmp(parameter_name, ssl_disable_TLSv1_2()) == 0) { + if(strcasecmp(parameter_value, "yes") == 0) TLSv1_2 = false; + else if(strcasecmp(parameter_value, "no") == 0) TLSv1_2 = true; + else log_error("Parameter value '%s' not recognized for parameter '%s'", parameter_value, ssl_disable_TLSv1_2()); + } else { + log_debug("leaving SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return Abstract_Socket::parameter_set(parameter_name, parameter_value); + } + log_debug("leaving SSL_Socket::parameter_set(%s, %s)", parameter_name, parameter_value); + return true; +} + + +bool SSL_Socket::add_user_data(int client_id) { + + log_debug("entering SSL_Socket::add_user_data()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::add_user_data()"); + return Abstract_Socket::add_user_data(client_id); + } + + ssl_init_SSL(); + + log_debug("Create a new SSL object"); + if (ssl_ctx==NULL) + log_error("No SSL CTX found, SSL not initialized"); + ssl_current_ssl=SSL_new(ssl_ctx); + + if (ssl_current_ssl==NULL) + log_error("Creation of SSL object failed"); +#ifdef SSL_OP_NO_SSLv2 + if(!SSLv2){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_SSLv2); + } +#endif +#ifdef SSL_OP_NO_SSLv3 + if(!SSLv3){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_SSLv3); + } +#endif +#ifdef SSL_OP_NO_TLSv1 + if(!TLSv1){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_1 + if(!TLSv1_1){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1_1); + } +#endif +#ifdef SSL_OP_NO_TLSv1_2 + if(!TLSv1_2){ + SSL_set_options(ssl_current_ssl,SSL_OP_NO_TLSv1_2); + } +#endif + + set_user_data(client_id, ssl_current_ssl); + log_debug("New client added with key '%d'", client_id); + log_debug("Binding SSL to the socket"); + if (SSL_set_fd(ssl_current_ssl, client_id)!=1) + log_error("Binding of SSL object to socket failed"); + + // Conext change for SSL objects may come here in the + // future. + + if (Abstract_Socket::get_server_mode()) { + log_debug("Accept SSL connection request"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + if (ssl_getresult(SSL_accept(ssl_current_ssl))!=SSL_ERROR_NONE) { + log_warning("Connection from client %d is refused", client_id); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + } + ssl_current_client=NULL; + + } else { + if (ssl_use_session_resumption && ssl_session!=NULL) { + log_debug("Try to use ssl_session resumption"); + if (ssl_getresult(SSL_set_session(ssl_current_ssl, ssl_session))!=SSL_ERROR_NONE) + log_error("SSL error occured"); + } + + log_debug("Connect to server"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + // + + while(true) + { + int res = ssl_getresult(SSL_connect(ssl_current_ssl)); + switch (res) { + case SSL_ERROR_NONE: break; + case SSL_ERROR_WANT_WRITE: + ssl_current_client = NULL; + TTCN_Snapshot::block_for_sending(client_id); + continue; + case SSL_ERROR_WANT_READ: + for(;;) { + pollfd pollClientFd = { client_id, POLLIN, 0 }; + int nEvents = poll(&pollClientFd, 1, 0); + if (nEvents == 1 && (pollClientFd.revents & (POLLIN | POLLHUP)) != 0) + break; + if(nEvents < 0 && errno != EINTR) + log_error("System call poll() failed on file descriptor %d", client_id); + } + continue; + default: + log_warning("Connection to server is refused"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + } + break; + } //while + + + ssl_current_client=NULL; + if (ssl_use_session_resumption) { + log_debug("Connected, get new ssl_session"); + ssl_session=SSL_get1_session(ssl_current_ssl); + if (ssl_session==NULL) + log_warning("Server did not send a session ID"); + } + } + + if (ssl_use_session_resumption) { + if (SSL_session_reused(ssl_current_ssl)) log_debug("Session was reused"); + else log_debug("Session was not reused"); + } + + if (!ssl_verify_certificates()) { // remove client + log_warning("Verification failed"); + log_debug("leaving SSL_Socket::add_user_data()"); + return false; + + } + log_debug("leaving SSL_Socket::add_user_data()"); + return true; +} + + +bool SSL_Socket::remove_user_data(int client_id) { + + log_debug("entering SSL_Socket::remove_user_data()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::remove_user_data()"); + return Abstract_Socket::remove_user_data(client_id); + } + ssl_current_ssl = (SSL*)get_user_data(client_id); + if (ssl_current_ssl!=NULL) { + SSL_shutdown(ssl_current_ssl); + SSL_free(ssl_current_ssl); + } else + log_warning("SSL object not found for client %d", client_id); + log_debug("leaving SSL_Socket::remove_user_data()"); + return true; +} + + + +bool SSL_Socket::user_all_mandatory_configparameters_present() { + if (!ssl_use_ssl) { return true; } + if (Abstract_Socket::get_server_mode()) { + if (ssl_certificate_file==NULL) + log_error("%s is not defined in the configuration file", ssl_certificate_file_name()); + if (ssl_trustedCAlist_file==NULL) + log_error("%s is not defined in the configuration file", ssl_trustedCAlist_file_name()); + if (ssl_key_file==NULL) + log_error("%s is not defined in the configuration file", ssl_private_key_file_name()); + } else { + if (ssl_verify_certificate && ssl_trustedCAlist_file==NULL) + log_error("%s is not defined in the configuration file altough %s=yes", ssl_trustedCAlist_file_name(), ssl_verifycertificate_name()); + } + return true; +} + + + +//STATE_WAIT_FOR_RECEIVE_CALLBACK: if the SSL_read operation would +// block because the socket is not ready for writing, +// I set the socket state to this state and add the file +// descriptor to the Event_Handler. The Event_Handler will +// wake up and call the receive_message_on_fd operation +// if the socket is ready to write. +//If the SSL_read operation would block because the socket is not ready for +//reading, I do nothing +int SSL_Socket::receive_message_on_fd(int client_id) +{ + log_debug("entering SSL_Socket::receive_message_on_fd()"); + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return Abstract_Socket::receive_message_on_fd(client_id); + } + + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + as_client_struct* peer = get_peer(client_id); // check if client exists + if (peer->reading_state == STATE_WAIT_FOR_RECEIVE_CALLBACK){ + Remove_Fd_Write_Handler(client_id); + log_debug("SSL_Socket::receive_message_on_fd: setting socket state to STATE_NORMAL"); + peer->reading_state = STATE_NORMAL; + } + TTCN_Buffer* recv_tb = get_buffer(client_id); + ssl_current_ssl=(SSL*)get_user_data(client_id); + int messageLength=0; + size_t end_len=AS_SSL_CHUNCK_SIZE; + unsigned char *end_ptr; + while (messageLength<=0) { + log_debug(" one read cycle started"); + recv_tb->get_end(end_ptr, end_len); + messageLength = SSL_read(ssl_current_ssl, end_ptr, end_len); + if (messageLength <= 0) { + int res=ssl_getresult(messageLength); + switch (res) { + case SSL_ERROR_ZERO_RETURN: + log_debug("SSL_Socket::receive_message_on_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("SSL_ERROR_ZERO_RETURN is received, setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd() with SSL_ERROR_ZERO_RETURN"); + return 0; + case SSL_ERROR_WANT_WRITE://writing would block + if (get_use_non_blocking_socket()){ + Add_Fd_Write_Handler(client_id); + log_debug("SSL_Socket::receive_message_on_fd: setting socket state to STATE_WAIT_FOR_RECEIVE_CALLBACK"); + peer->reading_state = STATE_WAIT_FOR_RECEIVE_CALLBACK; + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return -2; + } + case SSL_ERROR_WANT_READ: //reading would block, continue processing data + if (get_use_non_blocking_socket()){ + log_debug("SSL_Socket::receive_message_on_fd: reading would block, leaving SSL_Socket::receive_message_on_fd()"); + ssl_current_client = NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd()"); + return -2; + } + log_debug("repeat the read operation to finish the pending SSL handshake"); + break; + default: + log_error("SSL error occured"); + } + } else { + recv_tb->increase_length(messageLength); + } + } + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::receive_message_on_fd() with number of bytes read: %d", messageLength); + return messageLength; +} + + +int SSL_Socket::send_message_on_fd(int client_id, const unsigned char* send_par, int message_length) +{ + log_debug("entering SSL_Socket::send_message_on_fd()"); + + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return Abstract_Socket::send_message_on_fd(client_id, send_par, message_length); + } + + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + get_peer(client_id); // check if client exists + ssl_current_ssl=(SSL*)get_user_data(client_id); + if (ssl_current_ssl==NULL) { log_error("No SSL data available for client %d", client_id); } + log_debug("Client ID = %d", client_id); + while (true) { + log_debug(" one write cycle started"); + + int res = ssl_getresult(SSL_write(ssl_current_ssl, send_par, message_length)); + switch (res) { + case SSL_ERROR_NONE: + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return message_length; + case SSL_ERROR_WANT_WRITE: + case SSL_ERROR_WANT_READ: + log_debug("repeat the write operation to finish the pending SSL handshake"); + break; + case SSL_ERROR_ZERO_RETURN: + log_warning("SSL_Socket::send_message_on_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("SSL_ERROR_ZERO_RETURN is received, setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_fd()"); + return -1; + default: + log_debug("SSL error occured"); + return -1; + } + } + // avoid compiler warnings + return 0; +} + +//If the socket is not ready for writing, the same mechanism is used +//as described at the Abstract_Socket class +//If the socket is not ready for reading, I block the execution using +//the take_new operation while the socket is not ready for reading. +//While this operation will call the Event_Handler, +//I indicate with the STATE_DONT_RECEIVE state that from the Event_Handler the receive_message_on_fd +//operation must not be called for this socket. +int SSL_Socket::send_message_on_nonblocking_fd(int client_id, const unsigned char* send_par, int message_length){ + log_debug("entering SSL_Socket::send_message_on_nonblocking_fd()"); + + if (!ssl_use_ssl) { + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + return Abstract_Socket::send_message_on_nonblocking_fd(client_id, send_par, message_length); + } + + as_client_struct* peer; + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + + get_peer(client_id); + ssl_current_ssl=(SSL*)get_user_data(client_id); + if (ssl_current_ssl==NULL) { log_error("No SSL data available for client %d", client_id); } + log_debug("Client ID = %d", client_id); + while (true) { + int res; + peer = get_peer(client_id); // check if client exists + log_debug(" one write cycle started"); + ssl_current_ssl = (SSL*)get_user_data(client_id); + if (peer -> reading_state == STATE_DONT_CLOSE){ + goto client_closed_connection; + }else res = ssl_getresult(SSL_write(ssl_current_ssl, send_par, message_length)); + + switch (res) { + case SSL_ERROR_NONE: + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_NORMAL"); + peer -> reading_state = STATE_NORMAL; + return message_length; + case SSL_ERROR_WANT_WRITE: + if (peer == NULL){ + log_error("SSL_Socket::send_message_on_nonblocking_fd, Client ID %d does not exist.", client_id); + } + int old_bufsize, new_bufsize; + if (increase_send_buffer(client_id, old_bufsize, new_bufsize)) { + log_debug("Sending data on on file descriptor %d",client_id); + log_debug("The sending operation would block execution. The " + "size of the outgoing buffer was increased from %d to " + "%d bytes.",old_bufsize, + new_bufsize); + } else { + log_warning("Sending data on file descriptor %d", client_id); + log_warning("The sending operation would block execution and it " + "is not possible to further increase the size of the " + "outgoing buffer. Trying to process incoming data to " + "avoid deadlock."); + ssl_current_client=NULL; + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_BLOCK_FOR_SENDING"); + peer->reading_state = STATE_BLOCK_FOR_SENDING; + TTCN_Snapshot::block_for_sending(client_id); + } + peer = get_peer(client_id); // check if client exists + if (peer == NULL){ + log_error("SSL_Socket::send_message_on_nonblocking_fd, Client ID %d does not exist.", client_id); + } + break; + case SSL_ERROR_WANT_READ: + //receiving buffer is probably empty thus reading would block execution + log_debug("SSL_write cannot read data from socket %d. Trying to process data to avoid deadlock.", client_id); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_DONT_RECEIVE"); + peer -> reading_state = STATE_DONT_RECEIVE; //don't call receive_message_on_fd() to this socket + for (;;) { + TTCN_Snapshot::take_new(TRUE); + pollfd pollClientFd = { client_id, POLLIN, 0 }; + int nEvents = poll(&pollClientFd, 1, 0); + if (nEvents == 1 && (pollClientFd.revents & (POLLIN | POLLHUP)) != 0) + break; + if (nEvents < 0 && errno != EINTR) + log_error("System call poll() failed on file descriptor %d", client_id); + } + log_debug("Deadlock resolved"); + break; + case SSL_ERROR_ZERO_RETURN: + goto client_closed_connection; + default: + log_warning("SSL error occured"); + return -1; + } + } + +client_closed_connection: + log_warning("SSL_Socket::send_message_on_nonblocking_fd: SSL connection was interrupted by the other side"); + SSL_set_quiet_shutdown(ssl_current_ssl, 1); + log_debug("Setting SSL SHUTDOWN mode to QUIET"); + ssl_current_client=NULL; + log_debug("leaving SSL_Socket::send_message_on_nonblocking_fd()"); + log_debug("SSL_Socket::send_message_on_nonblocking_fd: setting socket state to STATE_NORMAL"); + peer -> reading_state = STATE_NORMAL; + errno = EPIPE; + return -1; + +} + +bool SSL_Socket::ssl_verify_certificates() +{ + char str[SSL_CHARBUF_LENGTH]; + + log_debug("entering SSL_Socket::ssl_verify_certificates()"); + + ssl_log_SSL_info(); + + // Get the other side's certificate + log_debug("Check certificate of the other party"); + X509 *cert = SSL_get_peer_certificate (ssl_current_ssl); + if (cert != NULL) { + + { + log_debug("Certificate information:"); + X509_NAME_oneline (X509_get_subject_name (cert), str, SSL_CHARBUF_LENGTH); + log_debug(" subject: %s", str); + } + + // We could do all sorts of certificate verification stuff here before + // deallocating the certificate. + + // Just a basic check that the certificate is valid + // Other checks (e.g. Name in certificate vs. hostname) shall be + // done on application level + if (ssl_verify_certificate) + log_debug("Verification state is: %s", X509_verify_cert_error_string(SSL_get_verify_result(ssl_current_ssl))); + X509_free (cert); + + } else + log_warning("Other side does not have certificate."); + + log_debug("leaving SSL_Socket::ssl_verify_certificates()"); + return true; +} + + + +// Data set/get functions +char * SSL_Socket::get_ssl_password() const {return ssl_password;} +void SSL_Socket::set_ssl_use_ssl(bool par) {ssl_use_ssl=par;} +void SSL_Socket::set_ssl_verifycertificate(bool par) {ssl_verify_certificate=par;} +void SSL_Socket::set_ssl_use_session_resumption(bool par) {ssl_use_session_resumption=par;} +void SSL_Socket::set_ssl_key_file(char * par) { + delete [] ssl_key_file; + ssl_key_file=par; +} +void SSL_Socket::set_ssl_certificate_file(char * par) { + delete [] ssl_certificate_file; + ssl_certificate_file=par; +} +void SSL_Socket::set_ssl_trustedCAlist_file(char * par) { + delete [] ssl_trustedCAlist_file; + ssl_trustedCAlist_file=par; +} +void SSL_Socket::set_ssl_cipher_list(char * par) { + delete [] ssl_cipher_list; + ssl_cipher_list=par; +} +void SSL_Socket::set_ssl_server_auth_session_id_context(const unsigned char * par) { + ssl_server_auth_session_id_context=par; +} + +// Default parameter names +const char* SSL_Socket::ssl_use_ssl_name() { return "ssl_use_ssl";} +const char* SSL_Socket::ssl_use_session_resumption_name() { return "ssl_use_session_resumption";} +const char* SSL_Socket::ssl_private_key_file_name() { return "ssl_private_key_file";} +const char* SSL_Socket::ssl_trustedCAlist_file_name() { return "ssl_trustedCAlist_file";} +const char* SSL_Socket::ssl_certificate_file_name() { return "ssl_certificate_chain_file";} +const char* SSL_Socket::ssl_password_name() { return "ssl_private_key_password";} +const char* SSL_Socket::ssl_cipher_list_name() { return "ssl_allowed_ciphers_list";} +const char* SSL_Socket::ssl_verifycertificate_name() { return "ssl_verify_certificate";} +const char* SSL_Socket::ssl_disable_SSLv2() { return "ssl_disable_SSLv2";} +const char* SSL_Socket::ssl_disable_SSLv3() { return "ssl_disable_SSLv3";} +const char* SSL_Socket::ssl_disable_TLSv1() { return "ssl_disable_TLSv1";} +const char* SSL_Socket::ssl_disable_TLSv1_1() { return "ssl_disable_TLSv1_1";} +const char* SSL_Socket::ssl_disable_TLSv1_2() { return "ssl_disable_TLSv1_2";} + + +void SSL_Socket::ssl_actions_to_seed_PRNG() { + struct stat randstat; + + if(RAND_status()) { + log_debug("PRNG already initialized, no action needed"); + return; + } + log_debug("Seeding PRND"); + // OpenSSL tries to use random devives automatically + // these would not be necessary + if (!stat("/dev/urandom", &randstat)) { + log_debug("Using installed random device /dev/urandom for seeding the PRNG with %d bytes.", SSL_PRNG_LENGTH); + if (RAND_load_file("/dev/urandom", SSL_PRNG_LENGTH)!=SSL_PRNG_LENGTH) + log_error("Could not read from /dev/urandom"); + } else if (!stat("/dev/random", &randstat)) { + log_debug("Using installed random device /dev/random for seeding the PRNG with %d bytes.", SSL_PRNG_LENGTH); + if (RAND_load_file("/dev/random", SSL_PRNG_LENGTH)!=SSL_PRNG_LENGTH) + log_error("Could not read from /dev/random"); + } else { + /* Neither /dev/random nor /dev/urandom are present, so add + entropy to the SSL PRNG a hard way. */ + log_warning("Solaris patches to provide random generation devices are not installed.\nSee http://www.openssl.org/support/faq.html \"Why do I get a \"PRNG not seeded\" error message?\"\nA workaround will be used."); + for (int i = 0; i < 10000 && !RAND_status(); ++i) { + char buf[4]; + struct timeval tv; + gettimeofday(&tv, 0); + buf[0] = tv.tv_usec & 0xF; + buf[2] = (tv.tv_usec & 0xF0) >> 4; + buf[3] = (tv.tv_usec & 0xF00) >> 8; + buf[1] = (tv.tv_usec & 0xF000) >> 12; + RAND_add(buf, sizeof buf, 0.1); + } + return; + } + + if(!RAND_status()) { + log_error("Could not seed the Pseudo Random Number Generator with enough data."); + } else { + log_debug("PRNG successfully initialized."); + } +} + + +void SSL_Socket::ssl_init_SSL() +{ + if (ssl_initialized) { + log_debug("SSL already initialized, no action needed"); + return; + } + + { + log_debug("Init SSL started"); + log_debug("Using %s (%lx)", SSLeay_version(SSLEAY_VERSION), OPENSSL_VERSION_NUMBER); + } + + SSL_library_init(); // initialize library + SSL_load_error_strings(); // readable error messages + + // Create SSL method: both server and client understanding SSLv2, SSLv3, TLSv1 +// ssl_method = SSLv23_method(); +// if (ssl_method==NULL) +// log_error("SSL method creation failed."); + // Create context + ssl_ctx = SSL_CTX_new (SSLv23_method()); + if (ssl_ctx==NULL) + log_error("SSL context creation failed."); + + // valid for all SSL objects created from this context afterwards + if(ssl_certificate_file!=NULL) { + log_debug("Loading certificate file"); + if(SSL_CTX_use_certificate_chain_file(ssl_ctx, ssl_certificate_file)!=1) + log_error("Can't read certificate file "); + } + + // valid for all SSL objects created from this context afterwards + if(ssl_key_file!=NULL) { + log_debug("Loading key file"); + if (ssl_current_client!=NULL) log_warning("Warning: race condition while setting current client object pointer"); + ssl_current_client=(SSL_Socket *)this; + if(ssl_password!=NULL) + SSL_CTX_set_default_passwd_cb(ssl_ctx, ssl_password_cb); + if(SSL_CTX_use_PrivateKey_file(ssl_ctx, ssl_key_file, SSL_FILETYPE_PEM)!=1) + log_error("Can't read key file "); + ssl_current_client=NULL; + } + + if (ssl_trustedCAlist_file!=NULL) { + log_debug("Loading trusted CA list file"); + if (SSL_CTX_load_verify_locations(ssl_ctx, ssl_trustedCAlist_file, NULL)!=1) + log_error("Can't read trustedCAlist file "); + } + + if (ssl_certificate_file!=NULL && ssl_key_file!=NULL) { + log_debug("Check for consistency between private and public keys"); + if (SSL_CTX_check_private_key(ssl_ctx)!=1) + log_warning("Private key does not match the certificate public key"); + } + + // check the other side's certificates + if (ssl_verify_certificate) { + log_debug("Setting verification behaviour: verification required and do not allow to continue on failure.."); + SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, ssl_verify_callback); + } else { + log_debug("Setting verification behaviour: verification not required and do allow to continue on failure.."); + SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_NONE, ssl_verify_callback); + } + + if (ssl_cipher_list!=NULL) { + log_debug("Setting ssl_cipher list restrictions"); + if (SSL_CTX_set_cipher_list(ssl_ctx, ssl_cipher_list)!=1) + log_error("Cipher list restriction failed for %s", ssl_cipher_list); + } + + ssl_actions_to_seed_PRNG(); + + if (Abstract_Socket::get_server_mode() && ssl_use_session_resumption) { + log_debug("Prepare server for ssl_session resumption"); + + log_debug("Context is: %s; length = %lu", ssl_server_auth_session_id_context, (unsigned long)strlen((const char*)ssl_server_auth_session_id_context)); + if (SSL_CTX_set_session_id_context(ssl_ctx, ssl_server_auth_session_id_context, strlen((const char*)ssl_server_auth_session_id_context))!=1) + log_error("Activation of SSL ssl_session resumption failed on server"); + } + + ssl_initialized=true; + + log_debug("Init SSL successfully finished"); +} + + +void SSL_Socket::ssl_log_SSL_info() +{ + char str[SSL_CHARBUF_LENGTH]; + + log_debug("Check SSL description"); + const SSL_CIPHER *ssl_cipher=SSL_get_current_cipher(ssl_current_ssl); + if (ssl_cipher!=NULL) { + SSL_CIPHER_description(SSL_get_current_cipher(ssl_current_ssl), str, SSL_CHARBUF_LENGTH); + { + log_debug("SSL description:"); + log_debug("%s", str); + } + } +} + + + +// Log the SSL error and flush the error queue +// Can be used after the followings: +// SSL_connect(), SSL_accept(), SSL_do_handshake(), +// SSL_read(), SSL_peek(), or SSL_write() +int SSL_Socket::ssl_getresult(int res) +{ + int err = SSL_get_error(ssl_current_ssl, res); + + log_debug("SSL operation result:"); + + switch(err) { + case SSL_ERROR_NONE: + log_debug("SSL_ERROR_NONE"); + break; + case SSL_ERROR_ZERO_RETURN: + log_debug("SSL_ERROR_ZERO_RETURN"); + break; + case SSL_ERROR_WANT_READ: + log_debug("SSL_ERROR_WANT_READ"); + break; + case SSL_ERROR_WANT_WRITE: + log_debug("SSL_ERROR_WANT_WRITE"); + break; + case SSL_ERROR_WANT_CONNECT: + log_debug("SSL_ERROR_WANT_CONNECT"); + break; + case SSL_ERROR_WANT_ACCEPT: + log_debug("SSL_ERROR_WANT_ACCEPT"); + break; + case SSL_ERROR_WANT_X509_LOOKUP: + log_debug("SSL_ERROR_WANT_X509_LOOKUP"); + break; + case SSL_ERROR_SYSCALL: + log_debug("SSL_ERROR_SYSCALL"); + log_debug("EOF was observed that violates the protocol, peer disconnected; treated as a normal disconnect"); + return SSL_ERROR_ZERO_RETURN; + break; + case SSL_ERROR_SSL: + log_debug("SSL_ERROR_SSL"); + break; + default: + log_error("Unknown SSL error code: %d", err); + } + // get the copy of the error string in readable format + unsigned long e=ERR_get_error(); + while (e) { + log_debug("SSL error queue content:"); + log_debug(" Library: %s", ERR_lib_error_string(e)); + log_debug(" Function: %s", ERR_func_error_string(e)); + log_debug(" Reason: %s", ERR_reason_error_string(e)); + e=ERR_get_error(); + } + //It does the same but more simple: + // ERR_print_errors_fp(stderr); + return err; +} + +int SSL_Socket::ssl_verify_certificates_at_handshake(int /*preverify_ok*/, X509_STORE_CTX */*ssl_ctx*/) { + // don't care by default + return -1; +} + +// Callback function used by OpenSSL. +// Called when a password is needed to decrypt the private key file. +// NOTE: not thread safe +int SSL_Socket::ssl_password_cb(char *buf, int num, int /*rwflag*/,void */*userdata*/) { + + if (ssl_current_client!=NULL) { + char *ssl_client_password; + ssl_client_password=((SSL_Socket *)ssl_current_client)->get_ssl_password(); + if(ssl_client_password==NULL) return 0; + const char* pass = (const char*) ssl_client_password; + int pass_len = strlen(pass) + 1; + if (num < pass_len) return 0; + + strcpy(buf, pass); + return(strlen(pass)); + } else { // go on with no password set + fprintf(stderr, "Warning: no current SSL object found but ssl_password_cb is called, programming error\n"); + return 0; + } +} + +// Callback function used by OpenSSL. +// Called during SSL handshake with a pre-verification status. +int SSL_Socket::ssl_verify_callback(int preverify_ok, X509_STORE_CTX *ssl_ctx) +{ + SSL *ssl_pointer; + SSL_CTX *ctx_pointer; + int user_result; + + ssl_pointer = (SSL *)X509_STORE_CTX_get_ex_data(ssl_ctx, SSL_get_ex_data_X509_STORE_CTX_idx()); + ctx_pointer = SSL_get_SSL_CTX(ssl_pointer); + + if (ssl_current_client!=NULL) { + // if ssl_verifiycertificate == "no", then always accept connections + if(((SSL_Socket *)ssl_current_client)->ssl_verify_certificate) { + user_result=((SSL_Socket *)ssl_current_client)->ssl_verify_certificates_at_handshake(preverify_ok, ssl_ctx); + if (user_result>=0) return user_result; + } else { + return 1; + } + } else { // go on with default authentication + fprintf(stderr, "Warning: no current SSL object found but ssl_verify_callback is called, programming error\n"); + } + + // if ssl_verifiycertificate == "no", then always accept connections + if (SSL_CTX_get_verify_mode(ctx_pointer) == SSL_VERIFY_NONE) + return 1; + // if ssl_verifiycertificate == "yes", then accept connections only if the + // certificate is valid + else if (SSL_CTX_get_verify_mode(ctx_pointer) & SSL_VERIFY_PEER) { + return preverify_ok; + } + // something went wrong + else + return 0; +} + +#endif diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp new file mode 100644 index 0000000..bd77911 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.grp @@ -0,0 +1,35 @@ + + + + + + + + diff --git a/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh new file mode 100644 index 0000000..7de8446 --- /dev/null +++ b/ttcn/modules/titan.TestPorts.Common_Components.Abstract_Socket/module/src/Abstract_Socket.hh @@ -0,0 +1,414 @@ +/****************************************************************************** +* Copyright (c) 2000-2019 Ericsson Telecom AB +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +* +* Contributors: +* Zoltan Bibo - initial implementation and initial documentation +* Gergely Futo +* Oliver Ferenc Czerman +* Balasko Jeno +* Zoltan Bibo +* Eduard Czimbalmos +* Kulcsár Endre +* Gabor Szalai +* Jozsef Gyurusi +* Csöndes Tibor +* Zoltan Jasz +******************************************************************************/ +// +// File: Abstract_Socket.hh +// Description: Abstract_Socket header file +// Rev: R9B +// Prodnr: CNL 113 384 +// + + +#ifndef Abstract_Socket_HH +#define Abstract_Socket_HH + +#ifdef AS_USE_SSL +#include +#include +#include +#endif + +#include +#include +#include + +// to support systems not supporting IPv6 define AF_INET6 to some dummy value: +#ifndef AF_INET6 +#define AF_INET6 (-255) +#endif + +class PacketHeaderDescr { +public: + // Byte order in the header + enum HeaderByteOrder{ Header_MSB, Header_LSB }; +private: + unsigned long length_offset; + unsigned long nr_bytes_in_length; + HeaderByteOrder byte_order; + long value_offset; + unsigned long length_multiplier; +public: + PacketHeaderDescr(unsigned long p_length_offset, + unsigned long p_nr_bytes_in_length, HeaderByteOrder p_byte_order, + long p_value_offset = 0, unsigned long p_length_multiplier = 1) + : length_offset(p_length_offset), nr_bytes_in_length(p_nr_bytes_in_length), + byte_order(p_byte_order), value_offset(p_value_offset), + length_multiplier(p_length_multiplier) { } + + // returns the message length + unsigned long Get_Message_Length(const unsigned char* buffer_pointer) const; + // returns the number of bytes needed to have a valid message length + inline unsigned long Get_Valid_Header_Length() const + { return length_offset + nr_bytes_in_length; } +}; + +class Abstract_Socket +{ +protected: + enum TCP_STATES {CLOSED, LISTEN, ESTABLISHED, CLOSE_WAIT, FIN_WAIT}; + enum READING_STATES {STATE_DONT_RECEIVE, STATE_WAIT_FOR_RECEIVE_CALLBACK, STATE_BLOCK_FOR_SENDING, STATE_DONT_CLOSE, STATE_NORMAL}; + // client data + struct as_client_struct { + void *user_data; // pointer to any additional data needed by the user + TTCN_Buffer *fd_buff; // pointer to the data buffer + struct sockaddr_storage clientAddr;// client address +#if defined LINUX || defined FREEBSD || defined SOLARIS8 + socklen_t +#else /* SOLARIS or WIN32 */ + int +#endif + clientAddrlen; + TCP_STATES tcp_state; // TCP state + READING_STATES reading_state; //used when SSL_write returns SSL_ERROR_WANT_READ an we are using non-blocking socket + }; + + Abstract_Socket(); + Abstract_Socket(const char *testport_type, const char *testport_name); + virtual ~Abstract_Socket(); + + // Shall be called from set_parameter() + bool parameter_set(const char *parameter_name, const char *parameter_value); + // Shall be called from user_map() + void map_user(); + // Shall be called from user_unmap() + void unmap_user(); + + // puts the IP address in the addr + void get_host_id(const char* hostName, struct sockaddr_in *addr); /* This function should not be used! Use getaddrinfo instead! */ + + // Closes the current listening port and opens the specified one + int open_listen_port(const struct sockaddr_in & localAddr); /* This function should be removed! Deprecated by: */ + int open_listen_port(const char* localHostname, const char* localServicename); + // Closes the current listening port + void close_listen_port(); + + virtual void listen_port_opened(int port_number); + + // Opens a new client connection + int open_client_connection(const struct sockaddr_in & new_remote_addr, const struct sockaddr_in & new_local_addr); /* This function should be removed! Deprecated by: */ + int open_client_connection(const char* remoteHostname, const char* remoteService, const char* localHostname, const char* localService); + + virtual void client_connection_opened(int client_id); + + // Shall be called from Handle_Fd_Event() + void Handle_Socket_Event(int fd, boolean is_readable, boolean is_writable, boolean is_error); + // Shall be called from Handle_Timeout() - for possible future development + void Handle_Timeout_Event(double /*time_since_last_call*/) {}; + + // Shall be called from outgoing_send() + void send_outgoing(const unsigned char* message_buffer, int length, int client_id = -1); + void send_shutdown(int client_id = -1); + + // Access to private variables + bool get_nagling() const {return nagling;} + bool get_use_non_blocking_socket() const {return use_non_blocking_socket;}; + bool get_server_mode() const {return server_mode;} + bool get_socket_debugging() const {return socket_debugging;} + bool get_halt_on_connection_reset() const {return halt_on_connection_reset;} + bool get_use_connection_ASPs() const {return use_connection_ASPs;} + bool get_handle_half_close() const {return handle_half_close;} + int get_socket_fd() const; + int get_listen_fd() const {return listen_fd;} + + //set non-blocking mode + int set_non_block_mode(int fd, bool enable_nonblock); + + //increase buffer size + bool increase_send_buffer(int fd, int &old_size, int& new_size); + + const char* get_local_host_name(){return local_host_name; }; + unsigned int get_local_port_number(){return local_port_number; }; + const char* get_remote_host_name(){return remote_host_name; }; + unsigned int get_remote_port_number(){return remote_port_number; }; + const struct sockaddr_in & get_remote_addr() {return remoteAddr; }; /* FIXME: This function is deprecated and should be removed! */ + const struct sockaddr_in & get_local_addr() {return localAddr; }; /* FIXME: This function is deprecated and should be removed! */ + const int& get_ai_family() const {return ai_family;} + void set_ai_family(int parameter_value) {ai_family=parameter_value;} + bool get_ttcn_buffer_usercontrol() const {return ttcn_buffer_usercontrol; } + void set_nagling(bool parameter_value) {nagling=parameter_value;} + void set_server_mode(bool parameter_value) {server_mode=parameter_value;} + void set_handle_half_close(bool parameter_value) {handle_half_close=parameter_value;} + void set_socket_debugging(bool parameter_value) {socket_debugging=parameter_value;} + void set_halt_on_connection_reset(bool parameter_value) {halt_on_connection_reset=parameter_value;} + void set_ttcn_buffer_usercontrol(bool parameter_value) {ttcn_buffer_usercontrol=parameter_value;} + const char *test_port_type; + const char *test_port_name; + + // Called when a message is received + virtual void message_incoming(const unsigned char* message_buffer, int length, int client_id = -1) = 0; + + virtual void Add_Fd_Read_Handler(int fd) = 0; + virtual void Add_Fd_Write_Handler(int fd) = 0; + virtual void Remove_Fd_Read_Handler(int fd) = 0; + virtual void Remove_Fd_Write_Handler(int fd) = 0; + virtual void Remove_Fd_All_Handlers(int fd) = 0; + virtual void Handler_Uninstall() = 0; + virtual void Timer_Set_Handler(double call_interval, boolean is_timeout = TRUE, + boolean call_anyway = TRUE, boolean is_periodic = TRUE) = 0; // unused - for possible future development + virtual const PacketHeaderDescr* Get_Header_Descriptor() const; + + // Logging functions + void log_debug(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3))); + void log_warning(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3))); + void log_error(const char *fmt, ...) const + __attribute__ ((__format__ (__printf__, 2, 3), __noreturn__)); + void log_hex(const char *prompt, const unsigned char *msg, size_t length) const; + + // Called when a message is to be received (an event detected) + virtual int receive_message_on_fd(int client_id); + // Called when a message is to be sent + virtual int send_message_on_fd(int client_id, const unsigned char* message_buffer, int message_length); + virtual int send_message_on_nonblocking_fd(int client_id, const unsigned char *message_buffer, int message_length); + // Called after a peer is connected + virtual void peer_connected(int client_id, sockaddr_in& remote_addr); /* This function should be removed! deprecated by: */ + virtual void peer_connected(int /*client_id*/, const char * /*host*/, const int /*port*/) {}; + // Called after a peer is disconnected + virtual void peer_disconnected(int client_id); + // Called when a peer shut down its fd for writing + virtual void peer_half_closed(int client_id); + // Called after a send error + virtual void report_error(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); + // Called after a unsent message + virtual void report_unsent(int client_id, int msg_length, int sent_length, const unsigned char* msg, const char* error_text); + + // Test port parameters + virtual const char* local_port_name(); + virtual const char* remote_address_name(); + virtual const char* local_address_name(); + virtual const char* remote_port_name(); + virtual const char* ai_family_name(); + virtual const char* use_connection_ASPs_name(); + virtual const char* halt_on_connection_reset_name(); + virtual const char* client_TCP_reconnect_name(); + virtual const char* TCP_reconnect_attempts_name(); + virtual const char* TCP_reconnect_delay_name(); + virtual const char* server_mode_name(); + virtual const char* socket_debugging_name(); + virtual const char* nagling_name(); + virtual const char* use_non_blocking_socket_name(); + virtual const char* server_backlog_name(); + + // Fetch/Set user data pointer + void* get_user_data(int client_id) {return get_peer(client_id)->user_data;} + void set_user_data(int client_id, void *uptr) {get_peer(client_id)->user_data = uptr;} + // Called after a TCP connection is established + virtual bool add_user_data(int client_id); + // Called before the TCP connection is drop down + virtual bool remove_user_data(int client_id); + // Called when a client shall be removed + virtual void remove_client(int client_id); + // Called when all clients shall be removed + virtual void remove_all_clients(); + // Called at the beginning of map() to check mandatory parameter presence + virtual bool user_all_mandatory_configparameters_present(); + TTCN_Buffer *get_buffer(int client_id) {return get_peer(client_id)->fd_buff; } + + // Client data management functions + // add peer to the list + as_client_struct *peer_list_add_peer(int client_id); + // remove peer from list + void peer_list_remove_peer(int client_id); + // remove all peers from list + void peer_list_reset_peer(); + // returns back the structure of the peer + as_client_struct *get_peer(int client_id, bool no_error=false) const; + // length of the list + int peer_list_get_length() const { return peer_list_length; } + // number of peers in the list + int peer_list_get_nr_of_peers() const; + // fd of the last peer in the list + int peer_list_get_last_peer() const; + // fd of the first peer in the list + int peer_list_get_first_peer() const; + + +private: + void handle_message(int client_id = -1); + void all_mandatory_configparameters_present(); + bool halt_on_connection_reset_set; + bool halt_on_connection_reset; + bool client_TCP_reconnect; + int TCP_reconnect_attempts; + int TCP_reconnect_delay; + bool server_mode; + bool use_connection_ASPs; + bool handle_half_close; + bool socket_debugging; + bool nagling; + bool use_non_blocking_socket; + bool ttcn_buffer_usercontrol; + char* local_host_name; + unsigned int local_port_number; + char* remote_host_name; + unsigned int remote_port_number; + int ai_family; // address family to use + // remoteAddr and localAddr is filled when map_user is called + struct sockaddr_in remoteAddr; /* FIXME: not used! should be removed */ + struct sockaddr_in localAddr; /* FIXME: not used! should be removed */ + int server_backlog; + int deadlock_counter; + int listen_fd; + int peer_list_length; + + // Client data management functions + as_client_struct **peer_list_root; + void peer_list_resize_list(int client_id); +}; + + + +#ifdef AS_USE_SSL + +class SSL_Socket: public Abstract_Socket +{ + +protected: + SSL_Socket(); + SSL_Socket(const char *tp_type, const char *tp_name); + virtual ~SSL_Socket(); + + bool parameter_set(const char * parameter_name, const char * parameter_value); + // Called after a TCP connection is established (client side or server accepted a connection). + // It will create a new SSL conenction on the top of the TCP connection. + virtual bool add_user_data(int client_id); + // Called after a TCP connection is closed. + // It will delete the SSL conenction. + virtual bool remove_user_data(int client_id); + // Called from all_mandatory_configparameters_present() function + // during map() operation to check mandatory parameter presents. + virtual bool user_all_mandatory_configparameters_present(); + // Called after an SSL connection is established (handshake finished) for further + // authentication. Shall return 'true' if verification + // is OK, otherwise 'false'. If return value was 'true', the connection is kept, otherwise + // the connection will be shutted down. + virtual bool ssl_verify_certificates(); + // Call during SSL handshake (and rehandshake as well) by OpenSSL + // Return values: + // ==1: user authentication is passed, go on with handshake + // ==0: user authentication failed, refuse the connection to the other peer + // <0 : user don't care, go on with default basic checks + virtual int ssl_verify_certificates_at_handshake(int preverify_ok, X509_STORE_CTX *ssl_ctx); + // Called to receive from the socket if data is available (select()). + // Shall return with 0 if the peer is disconnected or with the number of bytes read. + // If error occured, execution shall stop in the function by calling log_error() + virtual int receive_message_on_fd(int client_id); + // Called to send a message on the socket. + // Shall return with 0 if the peer is disconnected or with the number of bytes written. + // If error occured, execution shall stop in the function by calling log_error() + virtual int send_message_on_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + virtual int send_message_on_nonblocking_fd(int client_id, const unsigned char * message_buffer, int length_of_message); + + // The following members can be called to fetch the current values + bool get_ssl_use_ssl() const {return ssl_use_ssl;} + bool get_ssl_verifycertificate() const {return ssl_verify_certificate;} + bool get_ssl_use_session_resumption() const {return ssl_use_session_resumption;} + bool get_ssl_initialized() const {return ssl_initialized;} + char * get_ssl_key_file() const {return ssl_key_file;} + char * get_ssl_certificate_file() const {return ssl_certificate_file;} + char * get_ssl_trustedCAlist_file() const {return ssl_trustedCAlist_file;} + char * get_ssl_cipher_list() const {return ssl_cipher_list;} + char * get_ssl_password() const; + const unsigned char * get_ssl_server_auth_session_id_context() const {return ssl_server_auth_session_id_context;} +// const SSL_METHOD * get_current_ssl_method() const {return ssl_method;} +// const SSL_CIPHER * get_current_ssl_cipher() const {return ssl_cipher;} + SSL_SESSION* get_current_ssl_session() const {return ssl_session;} + SSL_CTX * get_current_ssl_ctx() const {return ssl_ctx;} + SSL * get_current_ssl() const {return ssl_current_ssl;} + + // The following members can be called to set the current values + // NOTE that in case the parameter_value is a char *pointer, the old character + // array is deleted by these functions automatically. + void set_ssl_use_ssl(bool parameter_value); + void set_ssl_verifycertificate(bool parameter_value); + void set_ssl_use_session_resumption(bool parameter_value); + void set_ssl_key_file(char * parameter_value); + void set_ssl_certificate_file(char * parameter_value); + void set_ssl_trustedCAlist_file(char * parameter_value); + void set_ssl_cipher_list(char * parameter_value); + void set_ssl_server_auth_session_id_context(const unsigned char * parameter_value); + + // The following members can be called to fetch the default test port parameter names + virtual const char* ssl_use_ssl_name(); + virtual const char* ssl_use_session_resumption_name(); + virtual const char* ssl_private_key_file_name(); + virtual const char* ssl_trustedCAlist_file_name(); + virtual const char* ssl_certificate_file_name(); + virtual const char* ssl_password_name(); + virtual const char* ssl_cipher_list_name(); + virtual const char* ssl_verifycertificate_name(); + virtual const char* ssl_disable_SSLv2(); + virtual const char* ssl_disable_SSLv3(); + virtual const char* ssl_disable_TLSv1(); + virtual const char* ssl_disable_TLSv1_1(); + virtual const char* ssl_disable_TLSv1_2(); + +private: + bool ssl_verify_certificate; // verify other part's certificate or not + bool ssl_use_ssl; // whether to use SSL + bool ssl_initialized; // whether SSL already initialized or not + bool ssl_use_session_resumption; // use SSL sessions or not + + bool SSLv2; + bool SSLv3; + bool TLSv1; + bool TLSv1_1; + bool TLSv1_2; + + + char *ssl_key_file; // private key file + char *ssl_certificate_file; // own certificate file + char *ssl_trustedCAlist_file; // trusted CA list file + char *ssl_cipher_list; // ssl_cipher list restriction to apply + char *ssl_password; // password to decode the private key + static const unsigned char * ssl_server_auth_session_id_context; + +// const SSL_METHOD *ssl_method; // SSL context method + SSL_CTX *ssl_ctx; // SSL context +// const SSL_CIPHER *ssl_cipher; // used SSL ssl_cipher + SSL_SESSION *ssl_session; // SSL ssl_session + SSL *ssl_current_ssl; // currently used SSL object + static void *ssl_current_client; // current SSL object, used only during authentication + + void ssl_actions_to_seed_PRNG(); // Seed the PRNG with enough random data + void ssl_init_SSL(); // Initialize SSL libraries and create the SSL context + void ssl_log_SSL_info(); // Log the currently used SSL setting (debug) + int ssl_getresult(int result_code); // Fetch and log the SSL error code from I/O operation result codes + // Callback function to pass the password to OpenSSL. Called by OpenSSL + // during SSL handshake. + static int ssl_password_cb(char * password_buffer, int length_of_password, int rw_flag, void * user_data); + // Callback function to perform authentication during SSL handshake. Called by OpenSSL. + // NOTE: for further authentication, use ssl_verify_certificates(). + static int ssl_verify_callback(int preverify_status, X509_STORE_CTX * ssl_context); +}; +#endif + +#endif diff --git a/ttcn/patch_lib_common_titan/module.mk b/ttcn/patch_lib_common_titan/module.mk new file mode 100644 index 0000000..3b3b660 --- /dev/null +++ b/ttcn/patch_lib_common_titan/module.mk @@ -0,0 +1,9 @@ +sources := \ + ttcn/LibCommon_AbstractData.ttcn \ + ttcn/LibCommon_BasicTypesAndValues.ttcn \ + ttcn/LibCommon_DataStrings.ttcn \ + ttcn/LibCommon_Sync.ttcn \ + ttcn/LibCommon_TextStrings.ttcn \ + ttcn/LibCommon_Time.ttcn \ + ttcn/LibCommon_VerdictControl.ttcn + diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn new file mode 100644 index 0000000..9b5477d --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn @@ -0,0 +1,247 @@ +/** + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of basic type and value definitions which may be + * useful in the implementation of any TTCN-3 test suite.

      + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ + module LibCommon_BasicTypesAndValues { + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group unsignedIntegerDefintions { + + const integer c_uInt1Max := 1; + const integer c_uInt2Max := 3; + const integer c_uInt3Max := 7; + const integer c_uInt4Max := 15; + const integer c_uInt5Max := 31; + const integer c_uInt6Max := 63; + const integer c_uInt7Max := 127; + const integer c_uInt8Max := 255; + const integer c_uInt9Max := 511; + const integer c_uInt10Max := 1023; + const integer c_uInt11Max := 2047; + const integer c_uInt12Max := 4095; + const integer c_uInt13Max := 8191; + const integer c_uInt14Max := 16383; + const integer c_uInt15Max := 32767; + const integer c_uInt16Max := 65535; + const integer c_uInt17Max := 131071; + const integer c_uInt18Max := 262143; + const integer c_uInt19Max := 524287; + const integer c_uInt20Max := 1048575; + const integer c_uInt21Max := 2097151; + const integer c_uInt22Max := 4194303; + const integer c_uInt23Max := 8388607; + const integer c_uInt24Max := 16777215; + const integer c_uInt25Max := 33554431; + const integer c_uInt26Max := 67108863; + const integer c_uInt27Max := 134217727; + const integer c_uInt28Max := 268435456; + const integer c_uInt29Max := 536870911; + const integer c_uInt30Max := 1073741823; + const integer c_uInt31Max := 2147483647; + const integer c_uInt32Max := 4294967295; + const integer c_uInt36Max := 68719476735; + const integer c_uInt48Max := 281474976710655; + const integer c_uInt52Max := 4503599627370495; + const integer c_uInt64Max := 18446744073709551615; + + type integer UInt (0 .. infinity); + type integer UInt1 (0 .. c_uInt1Max) with {variant "unsigned 1 bit"}; + type integer UInt2 (0 .. c_uInt2Max) with {variant "unsigned 2 bit"}; + type integer UInt3 (0 .. c_uInt3Max) with {variant "unsigned 3 bit"}; + type integer UInt4 (0 .. c_uInt4Max) with {variant "unsigned 4 bit"}; + type integer UInt5 (0 .. c_uInt5Max) with {variant "unsigned 5 bit"}; + type integer UInt6 (0 .. c_uInt6Max) with {variant "unsigned 6 bit"}; + type integer UInt7 (0 .. c_uInt7Max) with {variant "unsigned 7 bit"}; + type integer UInt8 (0 .. c_uInt8Max) with {variant "unsigned 8 bit"}; + type integer UInt9 (0 .. c_uInt9Max) with {variant "unsigned 9 bit"}; + type integer UInt10 (0 .. c_uInt10Max) with {variant "unsigned 10 bit"}; + type integer UInt11 (0 .. c_uInt11Max) with {variant "unsigned 11 bit"}; + type integer UInt12 (0 .. c_uInt12Max) with {variant "unsigned 12 bit"}; + type integer UInt13 (0 .. c_uInt13Max) with {variant "unsigned 13 bit"}; + type integer UInt14 (0 .. c_uInt14Max) with {variant "unsigned 14 bit"}; + type integer UInt15 (0 .. c_uInt15Max) with {variant "unsigned 15 bit"}; + type integer UInt16 (0 .. c_uInt16Max) with {variant "unsigned 16 bit"}; + type integer UInt17 (0 .. c_uInt17Max) with {variant "unsigned 17 bit"}; + type integer UInt18 (0 .. c_uInt18Max) with {variant "unsigned 18 bit"}; + type integer UInt19 (0 .. c_uInt19Max) with {variant "unsigned 19 bit"}; + type integer UInt20 (0 .. c_uInt20Max) with {variant "unsigned 20 bit"}; + type integer UInt21 (0 .. c_uInt21Max) with {variant "unsigned 21 bit"}; + type integer UInt22 (0 .. c_uInt22Max) with {variant "unsigned 22 bit"}; + type integer UInt23 (0 .. c_uInt23Max) with {variant "unsigned 23 bit"}; + type integer UInt24 (0 .. c_uInt24Max) with {variant "unsigned 24 bit"}; + type integer UInt25 (0 .. c_uInt25Max) with {variant "unsigned 25 bit"}; + type integer UInt26 (0 .. c_uInt26Max) with {variant "unsigned 26 bit"}; + type integer UInt27 (0 .. c_uInt27Max) with {variant "unsigned 27 bit"}; + type integer UInt28 (0 .. c_uInt28Max) with {variant "unsigned 28 bit"}; + type integer UInt29 (0 .. c_uInt29Max) with {variant "unsigned 29 bit"}; + type integer UInt30 (0 .. c_uInt30Max) with {variant "unsigned 30 bit"}; + type integer UInt31 (0 .. c_uInt31Max) with {variant "unsigned 31 bit"}; + type integer UInt32 (0 .. c_uInt32Max) with {variant "unsigned 32 bit"}; + type integer UInt36 (0 .. c_uInt36Max) with {variant "unsigned 36 bit"}; + type integer UInt48 (0 .. c_uInt48Max) with {variant "unsigned 48 bit"}; + type integer UInt52 (0 .. c_uInt52Max) with {variant "unsigned 52 bit"}; + type integer UInt64 (0 .. c_uInt64Max) with {variant "unsigned 64 bit"}; + + } // end group unsignedIntegerDefintions + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group signedIntegerDefintions { + + const integer c_int1Min := -1; + const integer c_int1Max := 0; + const integer c_int2Min := -2; + const integer c_int2Max := 1; + const integer c_int3Min := -4; + const integer c_int3Max := 3; + const integer c_int4Min := -8; + const integer c_int4Max := 7; + const integer c_int5Min := -16; + const integer c_int5Max := 15; + const integer c_int6Min := -32; + const integer c_int6Max := 31; + const integer c_int7Min := -64; + const integer c_int7Max := 63; + const integer c_int8Min := -128; + const integer c_int8Max := 127; + const integer c_int9Min := -256; + const integer c_int9Max := 255; + const integer c_int10Min := -512; + const integer c_int10Max := 511; + const integer c_int11Min := -1024; + const integer c_int11Max := 1023; + const integer c_int12Min := -2048; + const integer c_int12Max := 2047; + const integer c_int13Min := -4096; + const integer c_int13Max := 4095; + const integer c_int14Min := -8192; + const integer c_int14Max := 8191; + const integer c_int15Min := -16384; + const integer c_int15Max := 16383; + const integer c_int16Min := -32768; + const integer c_int16Max := 32767; + const integer c_int17Min := -65536; + const integer c_int17Max := 65535; + const integer c_int18Min := -131072; + const integer c_int18Max := 131071; + const integer c_int19Min := -262144; + const integer c_int19Max := 262143; + const integer c_int20Min := -524288; + const integer c_int20Max := 524287; + const integer c_int21Min := -1048576; + const integer c_int21Max := 1048575; + const integer c_int22Min := -2097152; + const integer c_int22Max := 2097151; + const integer c_int23Min := -4194304; + const integer c_int23Max := 4194303; + const integer c_int24Min := -8388608; + const integer c_int24Max := 8388607; + const integer c_int25Min := -16777216; + const integer c_int25Max := 16777215; + const integer c_int26Min := -33554432; + const integer c_int26Max := 33554431; + const integer c_int27Min := -67108864; + const integer c_int27Max := 67108863; + const integer c_int28Min := -134217728; + const integer c_int28Max := 134217727; + const integer c_int29Min := -268435456; + const integer c_int29Max := 268435456; + const integer c_int30Min := -536870912; + const integer c_int30Max := 536870911; + const integer c_int31Min := -1073741824; + const integer c_int31Max := 1073741823; + const integer c_int32Min := -2147483648; + const integer c_int32Max := 2147483647; + + type integer Int; + type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; + type integer Int2 (c_int2Min .. c_int2Max) with { variant "2 bit"}; + type integer Int3 (c_int3Min .. c_int3Max) with { variant "3 bit"}; + type integer Int4 (c_int4Min .. c_int4Max) with { variant "4 bit"}; + type integer Int5 (c_int5Min .. c_int5Max) with { variant "5 bit"}; + type integer Int6 (c_int6Min .. c_int6Max) with { variant "6 bit"}; + type integer Int7 (c_int7Min .. c_int7Max) with { variant "7 bit"}; + type integer Int8 (c_int8Min .. c_int8Max) with { variant "8 bit"}; + type integer Int9 (c_int9Min .. c_int9Max) with { variant "9 bit"}; + type integer Int10 (c_int10Min .. c_int10Max) with { variant "10 bit"}; + type integer Int11 (c_int11Min .. c_int11Max) with { variant "11 bit"}; + type integer Int12 (c_int12Min .. c_int12Max) with { variant "12 bit"}; + type integer Int13 (c_int13Min .. c_int13Max) with { variant "13 bit"}; + type integer Int14 (c_int14Min .. c_int14Max) with { variant "14 bit"}; + type integer Int15 (c_int15Min .. c_int15Max) with { variant "15 bit"}; + type integer Int16 (c_int16Min .. c_int16Max) with { variant "16 bit"}; + type integer Int17 (c_int17Min .. c_int17Max) with { variant "17 bit"}; + type integer Int18 (c_int18Min .. c_int18Max) with { variant "18 bit"}; + type integer Int19 (c_int19Min .. c_int19Max) with { variant "19 bit"}; + type integer Int20 (c_int20Min .. c_int20Max) with { variant "20 bit"}; + type integer Int21 (c_int21Min .. c_int21Max) with { variant "21 bit"}; + type integer Int22 (c_int22Min .. c_int22Max) with { variant "22 bit"}; + type integer Int23 (c_int23Min .. c_int23Max) with { variant "23 bit"}; + type integer Int24 (c_int24Min .. c_int24Max) with { variant "24 bit"}; + type integer Int25 (c_int25Min .. c_int25Max) with { variant "25 bit"}; + type integer Int26 (c_int26Min .. c_int26Max) with { variant "26 bit"}; + type integer Int27 (c_int27Min .. c_int27Max) with { variant "27 bit"}; + type integer Int28 (c_int28Min .. c_int28Max) with { variant "28 bit"}; + type integer Int29 (c_int29Min .. c_int29Max) with { variant "29 bit"}; + type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; + type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; + type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; + + } // end group signedIntegerDefintions + + group zeroedIntegers { + + const UInt1 c_uInt1Zero := 0; + const UInt2 c_uInt2Zero := 0; + const UInt3 c_uInt3Zero := 0; + const UInt4 c_uInt4Zero := 0; + const UInt5 c_uInt5Zero := 0; + const UInt6 c_uInt6Zero := 0; + const UInt7 c_uInt7Zero := 0; + const UInt8 c_uInt8Zero := 0; + const UInt10 c_uInt10Zero := 0; + const UInt12 c_uInt12Zero := 0; + const UInt14 c_uInt14Zero := 0; + const UInt16 c_uInt16Zero := 0; + const UInt24 c_uInt24Zero := 0; + const UInt32 c_uInt32Zero := 0; + const UInt48 c_uInt48Zero := 0; + + }//end group zeroedInt + + /** + * @remark Number in subtype name always indicates encoding length + * in _bits_ + */ + group booleanDefintions { + + type boolean Bool1 with { variant "1 bit" }; + type boolean Bool2 with { variant "2 bit" }; + type boolean Bool3 with { variant "3 bit" }; + type boolean Bool4 with { variant "4 bit" }; + type boolean Bool5 with { variant "5 bit" }; + type boolean Bool6 with { variant "6 bit" }; + type boolean Bool7 with { variant "7 bit" }; + type boolean Bool8 with { variant "8 bit" }; + + } // end group booleanDefintions + +} // end module LibCommon_BasicTypesAndValues diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn new file mode 100644 index 0000000..9bfbe61 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn @@ -0,0 +1,168 @@ +/** + * + * @author ETSI + * @version $URL$ + * $Id$ + * @desc A collection of data string type and value definitions which + * may be useful in the implementation of any TTCN-3 test + * suite. "Data string" refers to TTCN-3 hexstring, octetstring + * and bitstring types. + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ + module LibCommon_DataStrings { + + /** + * @remark Number in name indicates string length in number of + * _bits_ + */ + group bitStringSubTypes { + + type bitstring Bit1 length(1) with {encode "length(1)"}; + type bitstring Bit2 length(2) with {encode "length(2)"}; + type bitstring Bit3 length(3) with {encode "length(3)"}; + type bitstring Bit4 length(4) with {encode "length(4)"}; + type bitstring Bit5 length(5) with {encode "length(5)"}; + type bitstring Bit6 length(6) with {encode "length(6)"}; + type bitstring Bit7 length(7) with {encode "length(7)"}; + type bitstring Bit8 length(8) with {encode "length(8)"}; + type bitstring Bit9 length(9) with {encode "length(9)"}; + type bitstring Bit10 length(10) with {encode "length(10)"}; + type bitstring Bit11 length(11) with {encode "length(11)"}; + type bitstring Bit12 length(12) with {encode "length(12)"}; + type bitstring Bit13 length(13) with {encode "length(13)"}; + type bitstring Bit14 length(14) with {encode "length(14)"}; + type bitstring Bit15 length(15) with {encode "length(15)"}; + type bitstring Bit16 length(16) with {encode "length(16)"}; + type bitstring Bit17 length(17) with {encode "length(17)"}; + type bitstring Bit18 length(18) with {encode "length(18)"}; + type bitstring Bit19 length(19) with {encode "length(19)"}; + type bitstring Bit20 length(20) with {encode "length(20)"}; + type bitstring Bit21 length(21) with {encode "length(21)"}; + type bitstring Bit22 length(22) with {encode "length(22)"}; + type bitstring Bit23 length(23) with {encode "length(23)"}; + type bitstring Bit24 length(24) with {encode "length(24)"}; + type bitstring Bit25 length(25) with {encode "length(25)"}; + type bitstring Bit26 length(26) with {encode "length(26)"}; + type bitstring Bit27 length(27) with {encode "length(27)"}; + type bitstring Bit28 length(28) with {encode "length(28)"}; + type bitstring Bit29 length(29) with {encode "length(29)"}; + type bitstring Bit30 length(30) with {encode "length(30)"}; + type bitstring Bit31 length(31) with {encode "length(31)"}; + type bitstring Bit32 length(32) with {encode "length(32)"}; + type bitstring Bit40 length(40) with {encode "length(40)"}; + + type bitstring Bit48 length(48) with {encode "length(48)"}; + type bitstring Bit64 length(64) with {encode "length(64)"}; + type bitstring Bit72 length(72) with {encode "length(72)"}; + type bitstring Bit128 length(128) with {encode "length(128)"}; + type bitstring Bit144 length(144) with {encode "length(144)"}; + type bitstring Bit256 length(256) with {encode "length(256)"}; + + } // end group bitStringSubTypes + + group zeroedBits { + + const Bit1 c_1ZeroBit := int2bit(0,1); + const Bit2 c_2ZeroBits := int2bit(0,2); + const Bit4 c_4ZeroBits := int2bit(0,4); + const Bit5 c_5ZeroBits := int2bit(0,5); + const Bit6 c_6ZeroBits := int2bit(0,6); + const Bit8 c_8ZeroBits := int2bit(0,8); + const Bit14 c_14ZeroBits := int2bit(0,14); + const Bit64 c_64ZeroBits := int2bit(0,64); + + }//end group zeroedBits + + /** + * @remark Number in name indicates string length in number of + * _octets_ + */ + group octetStringSubTypes { + + type octetstring Oct1 length(1) with {encode "length(1)"}; + type octetstring Oct2 length(2) with {encode "length(2)"}; + type octetstring Oct3 length(3) with {encode "length(3)"}; + type octetstring Oct4 length(4) with {encode "length(4)"}; + type octetstring Oct5 length(5) with {encode "length(5)"}; + type octetstring Oct6 length(6) with {encode "length(6)"}; + type octetstring Oct7 length(7) with {encode "length(7)"}; + type octetstring Oct8 length(8) with {encode "length(8)"}; + type octetstring Oct9 length(9) with {encode "length(9)"}; + type octetstring Oct10 length(10) with {encode "length(10)"}; + type octetstring Oct11 length(11) with {encode "length(11)"}; + type octetstring Oct12 length(12) with {encode "length(12)"}; + type octetstring Oct13 length(13) with {encode "length(13)"}; + type octetstring Oct14 length(14) with {encode "length(14)"}; + type octetstring Oct15 length(15) with {encode "length(15)"}; + type octetstring Oct16 length(16) with {encode "length(16)"}; + + type octetstring Oct20 length(20) with {encode "length(20)"}; + type octetstring Oct32 length(32) with {encode "length(32)"}; + type octetstring Oct48 length(48) with {encode "length(48)"}; + type octetstring Oct64 length(64) with {encode "length(64)"}; + type octetstring Oct80 length(80) with {encode "length(80)"}; + type octetstring Oct96 length(96) with {encode "length(96)"}; + type octetstring Oct128 length(128) with {encode "length(128)"}; + type octetstring Oct160 length(160) with {encode "length(160)"}; + type octetstring Oct320 length(320) with {encode "length(320)"}; + type octetstring Oct640 length(640) with {encode "length(640)"}; + type octetstring Oct1280 length(1280) with {encode "length(1280)"}; + type octetstring Oct1380 length(1380) with {encode "length(1380)"}; + + type octetstring Oct0to3 length(0..3) with {encode "length(0..3)"}; + type octetstring Oct0to8 length(0..16) with {encode "length(0..8)"}; + type octetstring Oct0to12 length(0..12) with {encode "length(0..12)"}; + type octetstring Oct0to16 length(0..16) with {encode "length(0..16)"}; + type octetstring Oct0to31 length(0..31) with {encode "length(0..31)"}; + type octetstring Oct0to20 length(0..20) with {encode "length(0..20)"}; + type octetstring Oct0to30 length(0..20) with {encode "length(0..30)"}; + type octetstring Oct0to127 length(0..127) with {encode "length(0..127)"}; + type octetstring Oct0to255 length(0..255) with {encode "length(0..255)"}; + + type octetstring Oct1to15 length(1..15) with {encode "length(1..15)"}; + type octetstring Oct1to31 length(1..31) with {encode "length(1..31)"}; + type octetstring Oct1to128 length(1..128) with {encode "length(1..128)"}; + type octetstring Oct1to254 length(1..254) with {encode "length(1..254)"}; + type octetstring Oct1to255 length(1..255) with {encode "length(1..255)"}; + + type octetstring Oct4to16 length(4..16) with {encode "length(4..16)"}; + type octetstring Oct6to15 length(6..15) with {encode "length(6..15)"}; + + } // end group octetStringSubTypes + + group zeroedBytes { + const Oct1 c_1ZeroByte := int2oct(0,1); + const Oct2 c_2ZeroBytes := int2oct(0,2); + const Oct4 c_4ZeroBytes := int2oct(0,4); + const Oct6 c_6ZeroBytes := int2oct(0,6); + const Oct8 c_8ZeroBytes := int2oct(0,8); + const Oct9 c_9ZeroBytes := int2oct(0,9); + const Oct12 c_12ZeroBytes := int2oct(0,12); + const Oct16 c_16ZeroBytes := int2oct(0,16); + const Oct20 c_20ZeroBytes := int2oct(0,20); + + const Oct80 c_80ZeroBytes := int2oct(0,80); + const Oct160 c_160ZeroBytes := int2oct(0,160); + const Oct320 c_320ZeroBytes := int2oct(0,320); + const Oct640 c_640ZeroBytes := int2oct(0,640); + const Oct1280 c_1280ZeroBytes := int2oct(0,1280); + const Oct1380 c_1380ZeroBytes := int2oct(0,1380); + const octetstring c_256ZeroBytes := int2oct(0,256); + const octetstring c_1KZeroBytes := int2oct(0,1024); + const octetstring c_4KZeroBytes := int2oct(0,4096); + const octetstring c_16KZeroBytes := int2oct(0,16384); + const octetstring c_64KZeroBytes := int2oct(0,65536); + const octetstring c_128KZeroBytes := int2oct(0,131072); + + }//end group zeroedBytes + +} // end module LibCommon_DataStrings diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn new file mode 100644 index 0000000..5b2ae66 --- /dev/null +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn @@ -0,0 +1,1359 @@ +/** + * @author ETSI + * @version $URL$ + * $Id$ + * @desc This module implements _one_ generic synchronization mechanism + * for TTCN-3 test cases with one or more test components. + * Key concept is here that one test component acts as a + * synchronization server which listens and triggers one or more + * synchronization clients. It is recomended to use the MTC always as + * the synchronization server but in theory also a PTC can act as such + * a server.

      + * This synchronization is used by calling a function on + * the server test component to wait for a desired amount of clients + * to notify the server that they have reached a specific synchronization + * point. Each client test component must call another + * function to perform this notification.

      + * In the event that a client is not able to reach a synchronization + * point the server sends out a signal to all clients to abort the + * test case. This signal is a STOP message which can be caught by + * a test component default which in turn can then run a proper + * shut down behavior based on the current state of the test + * component.

      + * Note that this synchronization mechanism can also be used + * in a special mode called "self synchronization" when a test case + * only has one test component. Here, the test component in essence + * acts as a server and client at the same time. The main benefit of + * using self synchoronization is that the same shutdown mechanisms + * can also be reused fomr the multi component test cases.

      + * This module contains a lot of TTCN-3 definitions. It has been + * structured into tree main groups to help the user to identify + * quickly relevant TTCN-3 definitions. For rookie users of this + * module basicUserRelevantDefinitions should offer all the needed + * definitions. Advanced users can consider use of definitions in + * advancedUserRelevantDefinitions. Finally, internalDefinitions + * are definitions which are required for the module to work + * properly but do not need to be used in your code. Remember that + * the main motiviation of this sychronization module is to offer + * are _simple_ user interface. Practice has shown that when writing + * actual test component behavior _only a handful_ of functions + * usually wind up being used! Also check the synchronization examples + * module for example uses of this synchronization mechanism.

      + * The invocation of the sync functions is also closely tied + * to the verdict control functions which should also be reviewed + * prior to using this module.

      + * This module has been derived from EtsiCommon_Synchronization + * which was created in ETSIs STF256/276. It has been kept + * intentionally separate to avoid conflicts with future ETSI + * test suite releases. + * @see LibCommon_Sync.basicUserRelevantDefinitions + * @see LibCommon_Sync.advancedUserRelevantDefinitions + * @remark End users should be aware that any changes made to the in + * definitions this module may be overwritten in future releases. + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions so that future + * updates will include your changes. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * + */ +module LibCommon_Sync { + + //Common + import from LibCommon_BasicTypesAndValues { type UInt } ; + import from LibCommon_AbstractData all; + import from LibCommon_VerdictControl all; + + group basicUserRelevantDefinitions { + + group importantSyncTypeDefinitions { + + group compTypeRelated { + + /** + * @desc This type is used to be the base of any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case must NOT directly use + * this component type in its runs on clause! + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component BaseSyncComp { + port SyncPort syncPort; + timer tc_sync := PX_TSYNC_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync server + * component. The test component which acts as a + * sync server in a test case may - but does + * not have to - directly use this component type its + * runs on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ServerSyncComp extends BaseSyncComp { + timer tc_shutDown := PX_TSHUT_DOWN_TIME_LIMIT; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is to be executed on a sync client + * component. The test component(s) which act as a + * sync client in a test case may - but do not have + * to - directly use this component type their runs + * on clause. + * Note that server synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + */ + type component ClientSyncComp extends BaseSyncComp { + var StringStack v_stateStack:= c_initStringStack; + var TestcaseStep vc_testcaseStep := e_preamble; + } + + /** + * @desc This type is used to define any synchronization + * behavior which is relevant to non-concurrent test + * cases. + * Note that self synchronization functions may be + * invoked by a test component as long as its + * component type is type compatible to this component + * type definition! + * Note also that this type is type compatible to the + * ClientSyncComp type so that shutdown altsteps from + * concurrent test cases can also be reused in single + * component test cases! + * @see LibCommon_Sync.ClientSyncComp + */ + type component SelfSyncComp extends ClientSyncComp { + port SyncPort syncSendPort; + } + + /** + * @desc This port type must be imported into test suites + * when defining test component types which are + * type compatible to a synchronization component + * type + * @see LibCommon_Sync.SelfSyncComp + * @see LibCommon_Sync.ServerSyncComp + * @see LibCommon_Sync.ClientSyncComp + */ + type port SyncPort message { + inout SyncCmd + } with { + extension "internal" + } + + + /** + * @desc Describes in which step of execution is the testcase + */ + type enumerated TestcaseStep { + e_preamble, + e_testBody, + e_postamble + } + + } // end compTypeRelated + + group standardSyncPointNames { + const charstring c_prDone := "preambleDone"; + const charstring c_poDone := "postambleDone"; + const charstring c_tbDone := "testBodyDone"; + const charstring c_initDone := "initDone"; + } + + } // end group importantSyncTypeDefinitions + + group syncCompTestConfiguration { + + /** + * @desc Calls self connect function if invoking + * component is the MTC or otherwise connects the client + * the server. This function allows to implement preambles + * in a way that they can be used by test components + * in both non-concurrent as well as concurrent test + * cases! + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_connect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.f_connect4ClientSync + */ + function f_connect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_connect4SelfSync(); + } else { + f_connect4ClientSync(); + } + } + + /** + * @desc Calls self connect function if the invoking + * component is the MTC or otherwise disconnects the client + * from the server. This function allows to implement + * postambles in a way that they can be used in both + * non-concurrent as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_disconnect4ClientSync + * should be used instead. + * @see LibCommon_Sync.f_disconnect4SelfSync + * @see LibCommon_Sync.f_disconnect4ClientSync + */ + function f_disconnect4SelfOrClientSync() + runs on SelfSyncComp { + if ( self == mtc ) { + f_disconnect4SelfSync(); + } else { + f_disconnect4ClientSync(); + } + } + + } // end group syncCompTestConfiguration + + group syncFunctions { + + /** + * @desc Implements synchronization of 2 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(2, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 3 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync3ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(3, p_syncPointIds); + } + + /** + * @desc Implements synchronization of 4 clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync4ClientsAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + f_serverSyncNClientsAndStop(4, p_syncPointIds); + } + + /** + * @desc Implements synchronization of N clients from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_numClients number of synchronization clients + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSyncNClientsAndStop ( + in UInt p_numClients, + in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed ( + p_numClients, + valueof(p_syncPointIds[i]), + PX_TSYNC_TIME_LIMIT ); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Implements synchronization of 2 clients and 1 UT from server side + * on one or more synchronization points. + * If problem occurs, then server sends STOP to all clients. + * Waits for PX_TSYNC_TIME_LIMIT to let clients + * finish executing their behavior until this + * synchronization point. After passing all synchronization + * points successfuly the server waits for all clients + * to stop. + * See f_serverSyncClientsTimed for overwriting this + * the timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @see LibCommon_Sync.f_serverWaitForAllClientsToStop + * @param p_syncPointIds list of synchronization point name/ids + */ + function f_serverSync2ClientsUtAndStop( in SyncPointList p_syncPointIds ) + runs on ServerSyncComp { + var integer i, v_noOfSyncIds := sizeof(p_syncPointIds); + for ( i := 0; i < v_noOfSyncIds; i := i+1 ) { + f_serverSyncClientsTimed(3,valueof(p_syncPointIds[i]), PX_TSYNC_TIME_LIMIT); + } + f_serverWaitForAllClientsToStop(); + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets the verdict based on the specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdict + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdict + */ + function f_selfOrClientSyncAndVerdict( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdict(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdict(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictPreamble + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictPreamble( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictPreamble(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + } + + /** + * @desc Calls either self synchronization function if + * invoking component is the MTC, otherwise + * calls client synchronization. After that it + * sets a preamble specific verdict based on the + * specified return code. + * This function allows to implement TTCN-3 functions + * in a way that they can be used in both non-concurrent + * as well as concurrent test cases. + * @remark This function should _not_ be called if the MTC + * acts as a client (and not a server) in a concurrent + * test case. In this case f_clientSyncAndVerdictTestBody + * should be used instead. + * @param p_syncPoint Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_Sync.f_clientSyncAndVerdict + * @see LibCommon_VerdictControl.f_setVerdictPreamble + */ + function f_selfOrClientSyncAndVerdictTestBody( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + if ( self == mtc ) { + // then assume we are running non-conurrent test case + f_selfSyncAndVerdictTestBody(p_syncPoint, p_ret); + } else { + f_clientSyncAndVerdictTestBody(p_syncPoint, p_ret); + } + } + + /** + * @desc Function kept for backward compatibility + * @see f_selfOrClientSyncAndVerdictPreamble + * + */ + function f_selfOrClientSyncAndVerdictPR( in charstring p_syncPoint, + in FncRetCode p_ret) + runs on SelfSyncComp { + f_selfOrClientSyncAndVerdictPreamble(p_syncPoint, p_ret); + } + + } // end group syncFunctions + + group syncCompStateHandling { + + /** + * + * @desc This function updates the state (stack) of a + * sync client or self sync component. This stack is + * key in the shutdown handling of test components. + * It adds the new state name to the top of the + * sync component stack of states. + * The state will only be added in case of a current + * execution status of e_success. + * @param p_newSyncCompState Name of state which was attempted to be reached. + * @param p_ret Current behavior execution status + * @remark If the state of component changes this function must be + * _at least_ called from your test suite prior to f_selfSync + * or f_clientSync which is the only definite place for the + * shutdown default invocation! + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + */ + function f_addSyncCompState(in charstring p_newSyncCompState, + in FncRetCode p_ret) + runs on ClientSyncComp { + if ( p_ret == e_success ) { + if ( f_isItemOnStringStack(v_stateStack,p_newSyncCompState) ) { + log("**** f_addSyncCompState: WARNING: Attempt to add state which is already on sync state stack! No additition done.****"); + } else { + f_pushStringStack(v_stateStack,p_newSyncCompState); + } + } + } // end function f_addSyncCompState + + /** + * + * @desc This function returns the top state on the sync + * state stack of a sync client or self sync + * component and removes it from the stack + * This function cna be used, e.g., in a while + * statement within a postamble or shutdown + * implementation + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_getTopSyncCompState( out charstring p_state ) + runs on ClientSyncComp + return boolean { + if ( not f_peekStringStackTop(v_stateStack,p_state) ) { + p_state := "IDLE"; + return false; + } + f_popStringStack(v_stateStack); + return true; + } // end function f_getTopSyncCompState + + /* + * @desc This function removes the last state on the state stack + * of a sync client or self sync component. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_popSyncCompState() + runs on ClientSyncComp { + f_popStringStack(v_stateStack); + } // end function f_popSyncCompState + + /** + * + * @desc This function returns the top state on the sync state + * stack of a sync client or self sync component. It + * does not remove it from the stack + * This stack is key in the shutdown handling of test + * components. + * @param p_state State on top of the state stack. + * @return false if state stack is empty, true otherwise + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_peekTopSyncCompState(out charstring p_state) + runs on ClientSyncComp + return boolean { + return f_peekStringStackTop(v_stateStack,p_state); + } // end function f_peekTopSyncCompState + + /** + * @desc This function checks if the sync state stack + * of a sync client or self sync component is empty. + * This stack is key in the shutdown handling of test + * components. + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_isSyncCompStateStackEmpty() + runs on ClientSyncComp + return boolean { + return f_isStringStackEmpty(v_stateStack); + } // end function f_isSyncCompStateStackEmpty + + } // end group syncCompStateHandling + + group shutDownAltsteps { + + /** + * @desc This is an example of a shutdown altstep which can be + * used as a "template" for a interface specific shutdown + * altstep or possily as a first temporary solution in + * test case development.

      + * This altstep shall be activated as a default as the + * first statement in each test case function which drives + * an interface, i.e., in MTC behavior of single component + * and in each client behavior of multi component test + * cases.
      + * The required behavior from this altstep is to:

      + * 1) expect the STOP either via the test component + * syncPort

      + * 2) upon its arrival it should shut down the SUT + * gracefully based on the current component state

      + * The current component state should have been + * previously kept uptodate from a test suite via the + * f_addSyncCompState function. This default will then be + * (automatically) invoked either from within f_selfSync + * or f_clientSync.
      + * Note that shutdown defaults can be written as + * _interface specific_ - they do not need to be test case + * or test component specific! See another example of a + * shutdown altstep in the sync module. + * @see LibCommon_Sync.f_addSyncCompState + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_SyncExamples.a_exampleShutDown + * @remark Your application specific shutdown altstep + * implementation(s) should _not_ be defined in this + * module but as part of your test suite or application specific + * modules. + */ + altstep a_dummyShutDown() + runs on SelfSyncComp { + [] syncPort.receive(m_syncServerStop){ + var charstring v_state := ""; + tc_sync.stop; + log("**** a_dummyShutDown: Test component received STOP signal from sync server - going to IDLE state ****"); + while ( f_getTopSyncCompState(v_state) ) { + if ( v_state == "x" ) { + // then do something + } else if ( v_state == "y" ) { + // then do something else + } + } // end while + f_disconnect4SelfOrClientSync(); + // unmap/disconnect more if needed + log("**** a_dummyShutDown: -> Test component stopping itself now! ****") ; + stop ; + } + } // end altstep a_dummyShutDown + + /** + * @desc Shutdown alstep in case the sync server is requesting shutdown. + * + * @remark User shall stop the component + */ + altstep a_shutdown() + runs on ClientSyncComp { + [] syncPort.receive(m_syncServerStop){ + tc_sync.stop ; + log("**** a_shutdown: Test component received STOP signal from MTC **** "); + } + } + + } // end group shutDownAltsteps + + } // end group basicUserRelevantDefinitions + + group advancedUserRelevantDefinitions { + + group serverRelated { + + /** + * @desc Implements synchronization of "n" clients from server + * side. If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClients( in UInt p_noOfClients, in charstring p_syncId ) + runs on ServerSyncComp { + f_serverSyncClientsTimed(p_noOfClients,p_syncId, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Implements synchronization of "n" clients from server + * side including intermediate synchronization. + * If a problem occurs, then server sends STOP to + * all clients. Waits for PX_TSYNC_TIME_LIMIT to let + * clients finish executing their behavior until this + * synchronization point. See f_serverSyncClientsTimed for + * overwriting this later timing constraint! + * This function sets the server component verdict. + * @remark The use of this function requires prior connection of + * the server sync port! + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.f_serverSyncClientsTimed + * @param p_noOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + */ + function f_serverSyncClientsIntermediateSync( in UInt p_noOfClients, in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_noOfClients,p_syncId, p_NoOfClientIntermediate, p_syncIdIntermediate, PX_TSYNC_TIME_LIMIT); + } + + /** + * @desc Handles synchronization of clients from server side. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + */ + function f_serverSyncClientsTimed(in UInt p_NoOfClients, + in charstring p_syncId, + float p_execTimeLimit ) + runs on ServerSyncComp { + f_serverSyncClientsTimedIntermediateSync(p_NoOfClients, p_syncId, 0, ?, p_execTimeLimit ) + } // end function f_serverSyncClientsTimed + + /** @desc Handles synchronization of clients from server side including + * intermediate synchronization. + * If problem occurs, then server sends STOP to all clients. + * This function sets the server verdict. + * @remark The use of this function requires prior connection of + * the server sync ports! + * @param p_NoOfClients number of clients to be synchronized + * @param p_syncId synchronization point name/id + * @param p_execTimeLimit time limit given to all clients to finish the execution + * of their behavior up to this synchronization point + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @return execution status + */ + function f_serverSyncClientsTimedIntermediateSync( in UInt p_NoOfClients, + in charstring p_syncId, in UInt p_NoOfClientIntermediate, in template (present) charstring p_syncIdIntermediate, + float p_execTimeLimit ) + runs on ServerSyncComp { + + var integer v_noOfRecvdSyncMsgs := 0, v_noOfRecvdSyncMsgsIntermediate := 0; + var boolean v_stopClients := false; + var ClientSyncCompList v_clientRefs := {}, v_clientRefsIntermediate := {}; + var ClientSyncComp v_clientRef; + + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting PREAMBLE synchronization ... ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting TEST BODY synchronization ... ****") ; + } else if ( p_syncId == c_initDone ) { + log("**** f_serverSyncClientsTimed: Sync server now starting UPPER TESTER synchronization ... ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server now starting handling of next synchronization point ... ****") ; + } + tc_sync.start(p_execTimeLimit) ; + alt{ + [v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate] syncPort.receive(m_syncClientReady(p_syncIdIntermediate)) -> sender v_clientRef { + if(not f_isPresentInArray(v_clientRef, v_clientRefsIntermediate)) { + v_clientRefsIntermediate[v_noOfRecvdSyncMsgsIntermediate] := v_clientRef; + v_noOfRecvdSyncMsgsIntermediate := v_noOfRecvdSyncMsgsIntermediate + 1; + if (v_noOfRecvdSyncMsgsIntermediate == p_NoOfClientIntermediate) { + f_serverSendToAllClients(v_clientRefsIntermediate, m_syncServerReady(p_syncIdIntermediate)); + } + } + repeat; + } + [] syncPort.receive(m_syncClientReady(p_syncId)) -> sender v_clientRef { + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + } + [] syncPort.receive(m_syncClientStop) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received STOP signal from a client - server will wait for all clients to reach their next synchronization point and then stop them! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + v_noOfRecvdSyncMsgs := v_noOfRecvdSyncMsgs + 1; + } + if ( v_noOfRecvdSyncMsgs != p_NoOfClients ) { repeat; } + + } + [] syncPort.receive(m_syncClientReady(?)) -> sender v_clientRef { + log("**** f_serverSyncClientsTimed: Sync server received client sync message with incorrect synchronization point id which is currently not handled - server will stop all clients! ****") ; + v_stopClients := true; + if(not f_isPresentInArray(v_clientRef, v_clientRefs)) { + v_clientRefs[v_noOfRecvdSyncMsgs] := v_clientRef; + } + } + [] syncPort.receive(SyncCmd :? ) { + log("**** f_serverSyncClientsTimed: Sync server received (invalid) sync message from other sync server - server will stop all clients! ****") ; + v_stopClients := true; } + [] any port.receive { + // leave it to be ok to receive anything else + // in case that the user has added any non-sync ports to + // his/her server component type definition! + repeat; + } + [] tc_sync.timeout{ + log("**** f_serverSyncClientsTimed: A client is not responding within specified time limit - sync server is sending stop to all clients! ****"); + v_stopClients := true; } + } //end alt + if (v_noOfRecvdSyncMsgsIntermediate != p_NoOfClientIntermediate) { + v_stopClients := true; + } + tc_sync.stop ; + if ( v_stopClients ) { + setverdict(inconc); + // then send out STOP sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerStop); + f_serverWaitForAllClientsToShutDown(); // function will never return! + } else { + setverdict(pass); + // then send out READY sync msg + f_serverSendToAllClients(v_clientRefs, m_syncServerReady(p_syncId)); + if ( p_syncId == c_prDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_serverSyncClientsTimed: Sync server successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_serverSyncClientsTimed: Sync server successfully passed synchronization point. ****") ; + } + } + } // end function f_serverSyncClientsTimedIntermediateSync + + /** + * @desc This function is intended only for use on the sync + * server component in concurrent TTCN-3 test cases. + * It waits for all components to finish execution within + * the PX_TSYNC_TIME_LIMIT. If a timeout occurs + * the server will stop all clients. + * This function sets the server component verdict. + */ + function f_serverWaitForAllClientsToStop() + runs on ServerSyncComp { + tc_sync.start; + alt { + [] all component.done { + tc_sync.stop; + log("**** f_serverWaitForAllClientsToStop: All sync clients have finished their execution. Sync server now terminating test case. ****") ; + } + [] tc_sync.timeout { + log("**** f_serverWaitForAllClientsToStop: Not all sync clients have finshed execution within the sync time limit. Sync server will stop test case! ****") ; + stop; + } + } // end alt + setverdict(pass); + } // end function f_serverWaitForAllClientsToStop + + } // end group serverRelated + + group clientRelated { + + /** + * @desc This function creates the connection needed to + * execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_connect4ClientSync() + runs on ClientSyncComp { + connect(self:syncPort, mtc:syncPort); + }// end function f_connect4ClientSync + + /** + * @desc This function removes the connection needed + * to execute client synchronization functions + * @see LibCommon_Sync.f_clientSync + * @see LibCommon_Sync.f_clientSendStop + */ + function f_disconnect4ClientSync() + runs on ClientSyncComp { + disconnect(self:syncPort, mtc:syncPort); + }// end function f_disconnect4ClientSync + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdict(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + if(vc_testcaseStep == e_preamble) { + f_clientSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_clientSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_clientSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a preamble + * implementation. + * Note that such preambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPreamble(in charstring p_syncId , + FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPreamble(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use,e.g, after or within a + * test body implementation. + * Note that such premables can _not_ be reused in non- + * concurrent test cases. This can be achieved by using + * the f_selfOrClientSyncAndVerdict function instead. + * This function sets the client component verdict. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfOrClientSyncAndVerdict + */ + function f_clientSyncAndVerdictTestBody(in charstring p_syncId, + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdict(p_ret); + f_clientSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines client verdict setting with its + * synchronization for use after or within a + * postamble implementation. + * Note that such prostambles can _not_ be reused in non- + * concurrent test cases. + * This function sets the client component verdict. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + */ + function f_clientSyncAndVerdictPostamble(in charstring p_syncId , + in FncRetCode p_ret) + runs on ClientSyncComp { + f_setVerdictPostamble(p_ret); + f_clientSync(p_syncId,p_ret); + } + + /** + * @desc This function handles synchronization of a sync client + * with the server. In case of successful execution it sends + * a READY message to the server and waits the READY back. + * The time used for waiting is defined by PX_TSYNC_TIME_LIMIT. + * In case of a non successful execution status it + * sends a STOP message to the server. + * In both cases the receipt of a STOP message or no + * response from the server it will trigger the shutdown + * default (if activated). + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + * @see LibCommon_Sync.f_clientSendStop + * @return Updated execution status + */ + function f_clientSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on ClientSyncComp + return FncRetCode{ + + if (p_ret == e_success){ + syncPort.send(m_syncClientReady(p_syncId)); + tc_sync.start; + alt{ + [] syncPort.receive(m_syncServerReady(p_syncId)){ + tc_sync.stop ; } + [] tc_sync.timeout{ + log("**** f_clientSync: Sync client did not receive message from sync server within the specified time limit - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); } // function will not return! + } //end alt + } //end if + else { + log("**** f_clientSync: Execution status indicates that execution of test component behavior was not successful - sync client will ask sync server to stop test case! ****") ; + f_clientSendStop(); // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_clientSync: Sync client successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_clientSync: Sync client successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_clientSync: Sync client successfully passed synchronization point. ****") ; + } + return e_success ; + + } // end function f_clientSync + + /** + * @desc This function can be used to request the shutdown a + * multi component test case _prior_ to reaching a + * synchronization point. It sends a STOP message to + * the sync server and awaits then the STOP from the server + * which will trigger the shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * This function will set only the client verdict to INCONC + * (and stop its execution) if no STOP response is received + * from the server within the PX_TSYNC_TIME_LIMIT + * or if no shutdown default is activated. In all other + * cases the client verdict is NOT set. + * @remark The use of this function requires prior connection + * of the client sync port! + * @see LibCommon_Sync.f_connect4ClientSync + * @see LibCommon_Sync.f_connect4SelfOrClientSync + * @see LibCommon_Sync.PX_TSYNC_TIME_LIMIT + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_clientSendStop() + runs on ClientSyncComp { + log("**** f_clientSendStop: Sync client requesting from server to stop test case (including itself). ****") ; + syncPort.send(m_syncClientStop) ; + tc_sync.start; + alt{ + [] tc_sync.timeout{ + log("**** f_clientSendStop: Stopping sync client without shutdown - either no shutdown default active or no stop received from server. ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // stop here if shutdown default does not stop + } + + } // end group clientRelated + + } // end group advancedUserRelevantDefinitions + + group otherSyncModuleDefinitions { + + group syncModuleparams { + /** + * + * @desc Default time limit for a sync client to reach a + * synchronization point + */ + modulepar float PX_TSYNC_TIME_LIMIT := 120.0; + + /* + * @desc Default time limit for a sync client to finish + * its execution of the shutdown default + */ + modulepar float PX_TSHUT_DOWN_TIME_LIMIT := 120.0; + } + + group otherSyncTypes { + + type record of charstring SyncPointList; + + type record of ClientSyncComp ClientSyncCompList; + + } // end group otherSyncTypes + + group otherSelfSyncRelatedDefinitions { + + /** + * @desc This function creates the connection needed to + * execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_connect4SelfSync() + runs on SelfSyncComp { + connect(self:syncSendPort, self:syncPort); + }// end function f_connect4SelfSync + + /** + * @desc This function removes the connection needed + * to execute self sync functions + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.f_selfSyncStop + */ + function f_disconnect4SelfSync() + runs on SelfSyncComp { + disconnect(self:syncSendPort, self:syncPort); + }// end function f_disconnect4SelfSync + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use in the preamble / test body / postamble + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSyncAndVerdict( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + if(vc_testcaseStep == e_preamble) { + f_selfSyncAndVerdictPreamble(p_syncId, p_ret); + } else if(vc_testcaseStep == e_testBody) { + f_selfSyncAndVerdictTestBody(p_syncId, p_ret); + } + else { + f_selfSyncAndVerdictPostamble(p_syncId, p_ret); + } + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the preamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPreamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPreamble( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_testBody; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the test body. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdict + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictTestBody( in charstring p_syncId, + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdict(p_ret); + f_selfSync(p_syncId,p_ret); + vc_testcaseStep := e_postamble; + } + + /** + * @desc This function combines MTC verdict setting with self + * synchronization for use after the postamble. + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @see LibCommon_VerdictControl.f_setVerdictPostamble + * @see LibCommon_Sync.f_selfSync + */ + function f_selfSyncAndVerdictPostamble( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp { + f_setVerdictPreOrPostamble(p_ret); + f_selfSync(p_syncId,p_ret); + } + + /** + * @desc This function synchronizes a MTC with itself. In case + * of a non successful execution status it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @param p_syncId Synchronization point name/id + * @param p_ret Current behavior execution status + * @return Updated execution status + * @see LibCommon_Sync.f_connect4SelfSync + * @see LibCommon_Sync.a_dummyShutDown + */ + function f_selfSync( in charstring p_syncId , + in FncRetCode p_ret ) + runs on SelfSyncComp + return FncRetCode{ + if (p_ret != e_success){ + f_selfSyncStop() ; // function will not return! + } + if ( p_syncId == c_prDone ) { + log("**** f_selfSync: Successfully passed PREAMBLE synchronization point. ****") ; + } else if ( p_syncId == c_tbDone ) { + log("**** f_selfSync: Successfully passed TEST BODY synchronization point. ****") ; + } else { + log("**** f_selfSync: Successfully passed synchronization point. ****") ; + } + return e_success ; + }// end function f_selfSync + + /** + * @desc This function can be used to shut down a test case _prior_ + * to reaching a synchronization point. it sends a STOP + * message to itself and invokes that way the + * shutdown default (if activated). + * This function will set the server verdict to INCONC (and + * stop the test case) if no shutdown default is activated. + * Otherwise no verdict is set. + * @remark Sync ports should be connected prior to the invocation + * of this function! + * @see LibCommon_Sync.f_connect4SelfSync + */ + function f_selfSyncStop() + runs on SelfSyncComp { + + log("**** f_selfSyncStop: MTC requests to stop test case (itself). ****") ; + syncSendPort.send(m_syncServerStop) ; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_selfSyncStop + + } // end group otherSelfSyncRelatedDefinitions + + /** + * + * @desc The sychronization protocol is conceptually based on + * named synchronization. Each synchronization point + * has it own specific synchronization message. This + * makes each synchronization unique, and allows, e.g., to + * ensure that a server synchronizes only clients which have + * reached the same synchronization point. + */ + group syncProtocolDefinition { + + type union SyncCmd { + ClientReady clientReady, + ServerReady serverReady, + ClientStop clientStop, + ServerStop serverStop + } + + type record ClientReady { + charstring syncPointId + } + + type record ServerReady { + charstring syncPointId + } + + type record ClientStop {} + + type record ServerStop {} + + } // end group syncProtocolDefinition + + group syncMessages { + template SyncCmd m_syncClientReady( template (present) charstring p_syncId ) := { + clientReady := { p_syncId } + } + + template SyncCmd m_syncServerReady( template (present) charstring p_syncId ) := { + serverReady := { p_syncId } + } + + template SyncCmd m_syncClientStop := { + clientStop := {} + } + + template SyncCmd m_syncServerStop := { + serverStop := {} + } + + } // end group syncMessages + + group otherSyncFunctions { + + /** + * @desc Makes server send a sync message to all known clients + * @param p_clientRefs List of client references to which the message is to be send + * @param p_syncCmd The actual synchronization message to be sent out + */ + function f_serverSendToAllClients( in ClientSyncCompList p_clientRefs, + in template (value) SyncCmd p_syncCmd) + runs on ServerSyncComp { + var integer i:=0; + for (i:=0; i< sizeof(p_clientRefs); i:=i+1 ){ + syncPort.send(p_syncCmd) to valueof(p_clientRefs[i]); + } + } // end function f_serverSendToAllClients + + /** + * @desc This function is intended only for use on server in concurrent + * TTCN-3 test cases. It waits for all components to shut down + * within the PX_TSHUT_DOWN_TIME_LIMIT. If a timeout occurs + * it aborts the test case (no matter how far clients got with their + * shutdown). + * This function sets the server verdict. + */ + function f_serverWaitForAllClientsToShutDown() + runs on ServerSyncComp { + + tc_shutDown.start(PX_TSHUT_DOWN_TIME_LIMIT); + alt { + [] syncPort.receive { + // clients may still try to send some sync message + } + [] all component.done { + tc_shutDown.stop; + log("**** f_serverWaitForAllClientsToShutDown: All components have properly shut down. Sync server will now terminate the test case. ****") ; + } + [] tc_shutDown.timeout { + log("**** f_serverWaitForAllClientsToShutDown: Not all clients have properly shutdown within the shut down time limit. Sync server will now terminate test case! ****") ; + } + } // end alt + // cover case that shut down default is NOT activated + setverdict(inconc); + //mtc.stop; + syncPort.send(m_syncServerStop) to self; // this MUST be _server_ for the default to catch! + tc_sync.start(PX_TSYNC_TIME_LIMIT); + alt{ + [] tc_sync.timeout{ + log("**** f_selfSyncStop: Stopping MTC without shutdown - either no shutdown default active or missing syncPort connection ****") ; + setverdict(inconc); + stop ; + } + }//end alt + tc_sync.stop; + stop; // if shutdown default is not activated or if it does not stop + } // end function f_serverWaitForAllClientsToShutDown + + function f_isPresentInArray(in ClientSyncComp p_clientRef, in ClientSyncCompList p_clientRefs) + return boolean { + var integer i; + for(i:=0; i < sizeof(p_clientRefs); i:=i+1) { + if(p_clientRefs[i] == p_clientRef) { + return true; + } + } + return false; + } + } // end group otherSyncFunctions + + } // end group otherSyncDefinitions + +} // end module LibCommon_Sync diff --git a/ttcn/patch_lib_config_and_trigger_titan/module.mk b/ttcn/patch_lib_config_and_trigger_titan/module.mk new file mode 100644 index 0000000..55ba6b1 --- /dev/null +++ b/ttcn/patch_lib_config_and_trigger_titan/module.mk @@ -0,0 +1 @@ +sources := LibIms_UpperTester.ttcn \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk new file mode 100644 index 0000000..ba8766d --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -0,0 +1,15 @@ +sources := \ + ttcn/LibDiameter_Interface.ttcn \ + LibDiameter_TypesAndValues.ttcn \ + ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 \ + ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ + ttcn/LibDiameter_PIXITS.ttcn \ + ttcn/LibDiameter_Types_Base_AVPs.ttcn \ + ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ + ttcn/LibDiameter_Steps.ttcn \ + ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ + ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ + ttcn/LibDiameter_Templates.ttcn \ + ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ + ttcn/LibDiameter_Types_S9_AVPs.ttcn \ + diff --git a/ttcn/patch_lib_http/module.mk b/ttcn/patch_lib_http/module.mk new file mode 100644 index 0000000..70c22cf --- /dev/null +++ b/ttcn/patch_lib_http/module.mk @@ -0,0 +1,8 @@ +sources := \ + ttcn/LibHttp_XmlMessageBodyTypes.ttcn \ + ttcn/LibHttp_XmlTemplates.ttcn \ + ttcn/LibHttp_JsonMessageBodyTypes.ttcn \ + ttcn/LibHttp_JsonTemplates.ttcn \ + ttcn/LibHttp_Templates.ttcn \ + ttcn/LibHttp_TestSystem.ttcn \ + ttcn/LibHttp_Functions.ttcn diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_Functions.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_Functions.ttcn new file mode 100644 index 0000000..b3b7947 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_Functions.ttcn @@ -0,0 +1,326 @@ +module LibHttp_Functions { + + // LibCommon + import from LibCommon_Time all; + import from LibCommon_VerdictControl all; + import from LibCommon_Sync all; + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_Templates all; + import from LibHttp_Pics all; + import from LibHttp_Pixits all; + import from LibHttp_TestSystem all; + + group preambles { + + /** + * @desc Setup HTTP pprotocol port + */ + function f_cf_01_http_up() runs on HttpComponent { + + // Map ports + map(self:httpPort, system:httpPort); + + // Connect + f_connect4SelfOrClientSync(); + + activate(a_cf_01_http_down()); + activate(a_default_requests()); + activate(a_default_responses()); + + } // End of function f_cf_01_http_up + + /** + * @desc Setup HTTP pprotocol port + */ + function f_cf_01_http_notif_up() runs on HttpComponent { + + // Map ports + map(self:httpPort, system:httpPort); + map(self:httpPort_notif, system:httpPort_notif); + + // Connect + f_connect4SelfOrClientSync(); + + activate(a_cf_01_http_notif_down()); + activate(a_default_requests()); + activate(a_default_responses()); + + } // End of function f_cf_01_http_notif_up + + } // End of group preambles + + group postambles { + + /** + * @desc Shutdown HTTP pprotocol port + */ + function f_cf_01_http_down() runs on HttpComponent { + + // Unmap ports + unmap(self:httpPort, system:httpPort); + + // Disconnect ports + f_disconnect4SelfOrClientSync(); + + deactivate; + } // End of function f_cf_01_http_down + + /** + * @desc Shutdown HTTP pprotocol port + */ + function f_cf_01_http_notif_down() runs on HttpComponent { + + // Unmap ports + unmap(self:httpPort, system:httpPort); + unmap(self:httpPort_notif, system:httpPort_notif); + + // Disconnect ports + f_disconnect4SelfOrClientSync(); + + deactivate; + } // End of function f_cf_01_http_notif_down + + /** + * @desc Default handling cf01 de-initialisation. + */ + altstep a_cf_01_http_down() runs on HttpComponent { + [] a_shutdown() { + f_cf_01_http_down(); + log("*** a_cf_01_http_down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); + stop; + } + } // End of altstep a_cf_01_http_down + + /** + * @desc Default handling cf01 de-initialisation. + */ + altstep a_cf_01_http_notif_down() runs on HttpComponent { + [] a_shutdown() { + f_cf_01_http_notif_down(); + log("*** a_cf_01_http_notif_down: INFO: TEST COMPONENT NOW STOPPING ITSELF! ***"); + stop; + } + } // End of altstep a_cf_01_http_notif_down + + } // End of group postambles + + group http_headers { + + function f_init_default_headers_list( + in charstring p_header_content_type := PICS_HEADER_CONTENT_TYPE, + in charstring p_header_content_text := "", + out Headers p_headers + ) { + var integer v_i := 0; + + p_headers[v_i] := { c_header_host, { PICS_HEADER_HOST } }; + v_i := v_i + 1; + p_headers[v_i] := { c_header_content_type, { p_header_content_type } }; + v_i := v_i + 1; + if (p_header_content_text != "") { + p_headers[v_i] := { c_header_content_text, { p_header_content_text } }; + v_i := v_i + 1; + } + p_headers[v_i] := { c_header_content_length, { "0" } }; + v_i := v_i + 1; + p_headers[v_i] := { c_header_connection, { "keep-alive" } }; + v_i := v_i + 1; + p_headers[v_i] := { c_header_pragma, { "no-cache" } }; + v_i := v_i + 1; + p_headers[v_i] := { c_header_cache_control, { "no-cache" } }; + v_i := v_i + 1; + if (PICS_USE_TOKEN_HEADER) { + p_headers[v_i] := { c_header_authorization, { PICS_TOKEN_HEADER } }; // aladdin:opensesame + v_i := v_i + 1; + } + //p_headers[v_i] := { c_header_accept, { "application/x-its-response" } }; + if (lengthof(PX_ADDITIONAL_HTTP_HEADERS_KEYS) != 0) { + f_set_headers_list(PX_ADDITIONAL_HTTP_HEADERS_KEYS, PX_ADDITIONAL_HTTP_HEADERS_VALUES, p_headers); + } + } // End of function f_init_default_headers_list + + function f_set_headers_list( + in charstring_list p_headers_to_set, + in charstring_list p_headers_value, + inout Headers p_headers + ) { + // Sanity checks + if (lengthof(p_headers_to_set) == 0) { + return; + } else if (lengthof(p_headers) == 0) { + return; + } + + for (var integer v_idx := 0; v_idx < lengthof(p_headers_to_set); v_idx := v_idx + 1) { + var integer v_jdx; + for (v_jdx := 0; v_jdx < lengthof(p_headers); v_jdx := v_jdx + 1) { + if (p_headers[v_jdx].header_name == p_headers_to_set[v_idx]) { + p_headers[v_jdx].header_value := { p_headers_value[v_idx] }; // NOTE Codec won't encode it + break; + } + } // End of 'for' statement + if (v_jdx == lengthof(p_headers)) { + p_headers[v_jdx].header_name := p_headers_to_set[v_idx]; + p_headers[v_jdx].header_value := { p_headers_value[v_idx] }; + } + } // End of 'for' statement + } // End of function f_set_headers_list + + function f_remove_headers_list( + in charstring_list p_headers_to_remove, + inout Headers p_headers + ) { + // Sanity checks + if (lengthof(p_headers_to_remove) == 0) { + return; + } else if (lengthof(p_headers) == 0) { + return; + } + + for (var integer v_idx := 0; v_idx < lengthof(p_headers_to_remove); v_idx := v_idx + 1) { + for (var integer v_jdx := 0; v_jdx < lengthof(p_headers); v_jdx := v_jdx + 1) { + if (p_headers[v_jdx].header_name == p_headers_to_remove[v_idx]) { + p_headers[v_jdx].header_value := omit; // NOTE Codec won't encode it + break; + } + } // End of 'for' statement + } // End of 'for' statement + } // End of function f_remove_headers_list + + function f_get_header( + in Headers p_headers, + in charstring p_header_name := c_header_content_text, + out charstring_list p_header_value + ) { + // Sanity checks + if (lengthof(p_header_name) == 0) { + return; + } else if (lengthof(p_headers) == 0) { + return; + } + + for (var integer v_jdx := 0; v_jdx < lengthof(p_headers); v_jdx := v_jdx + 1) { + if (p_headers[v_jdx].header_name == p_header_name) { + p_header_value := p_headers[v_jdx].header_value; // NOTE Codec won't encode it + break; + } + } // End of 'for' statement + } // End of function f_get_header + + /** + * @desc Check HTTP response headers + * @param p_headers The HTTP headers + * @param p_value the expected va;ue + * @return true on success, false otherwise + */ + function f_check_headers( + in Headers p_headers, + in charstring p_header_name := "Location", + in template (present) charstring p_value := ? + ) return boolean { + // Local variables + var boolean v_header_matched := false; + + for (var integer v_idx := 0; v_idx < lengthof(p_headers); v_idx := v_idx + 1) { + if (p_headers[v_idx].header_name == p_header_name) { + if (match(p_headers[v_idx].header_value[0], p_value) == true) { + v_header_matched := true; + } // else, nothing to do + break; + } + } // End of 'for' statement + + return v_header_matched; + } // End of function f_check_headers + + } // End of group http_headers + + group altsteps { + + altstep a_default_requests() runs on HttpComponent { + [] httpPort.receive(mw_http_request) { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: Receive request instead of response on httpPort ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort_notif.receive(mw_http_request) { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited request on httpPort_notif ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + } // End of altstep a_default_requests + + altstep a_default_responses() runs on HttpComponent { + var HttpMessage v_response; + + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_xml + ))) { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Unexpected XML response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_json + ))) { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Unexpected JSON response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ok( + mw_http_message_body_binary + ))) { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Unexpected binary response ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [PICS_USE_TOKEN_HEADER == false] httpPort.receive( + mw_http_response( + mw_http_response_401_unauthorized + )) -> value v_response { + tc_http_ac.stop; + log("*** " & testcasename() & ": PASS: Received HTTP error message in case of non authenticated HTTP request ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_success); + } + [] httpPort.receive( + mw_http_response( + mw_http_response_ko + )) -> value v_response { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + // Do not repeat! + } + [] httpPort.receive(mw_http_response) -> value v_response { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort.receive { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited message on httpPort ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort_notif.receive(mw_http_response) -> value v_response { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: " & int2str(v_response.response.statuscode) & "/" & v_response.response.statustext & " on httpPort_notif ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + [] httpPort_notif.receive { + tc_http_ac.stop; + log("*** " & testcasename() & ": FAIL: Server error: Receive unsollicited message on httpPort_notif ***"); + f_selfOrClientSyncAndVerdictTestBody(c_tbDone, e_error); + } + } // End of altstep a_default_responses + + } // end of group altsteps + +} // End of module LibHttp_Functions diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn new file mode 100644 index 0000000..3e411e5 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonMessageBodyTypes.ttcn @@ -0,0 +1,24 @@ +module LibHttp_JsonMessageBodyTypes { + + // LibNg112 + import from LibNg112_DequeueRegistration all; + + /** + * This file volontary contains a trivial declaration of the type JsonBody. + * In accordance with your TTCN-3 module LibHttp_JSONTypes, you have to change the JsonBody typing. + */ + // TODO Add here your custom RFCs import + + type union JsonBody { + // TODO Add here your custom variants + DequeueRegistrationRequest dequeueRegistrationRequest, + DequeueRegistrationResponse dequeueRegistrationResponse, + universal charstring raw + } with { + variant "" + } + +} with { + encode "JSON"; + variant "" +} // End of module LibHttp_JsonMessageBodyTypes diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn new file mode 100644 index 0000000..4dbfc93 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_JsonTemplates.ttcn @@ -0,0 +1,121 @@ +/** + * @author ETSI / STF569 + * @version $URL$ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module LibHttp_JsonTemplates { + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_JsonMessageBodyTypes all; + + // LibJson + import from Json all; + + // LibNg112 + import from LibNg112_DequeueRegistration all; + import from LibNg112_SubscriptionPayloads all; + + // TODO Add here your custom RFCs import + + template (value) JsonBody m_json_body_raw( + in template (value) charstring p_raw + ) := { + raw := p_raw + } // End of template m_json_body_raw + + template (present) JsonBody mw_json_body_raw( + template (present) charstring p_raw := ? + ) := { + raw := p_raw + } // End of template mw_json_body_raw + + group dequeue_register { + + template (value) LibHttp_JsonMessageBodyTypes.JsonBody m_body_json_dequeue_registration_request( + in template (value) DequeueRegistrationRequest p_dequeue_registration_request + ) := { + dequeueRegistrationRequest := p_dequeue_registration_request + } // End of template m_dequeue_registration_request + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_dequeue_registration_request( + template (present) DequeueRegistrationRequest p_dequeue_registration_request := ? + ) := { + dequeueRegistrationRequest := p_dequeue_registration_request + } // End of template mw_dequeue_registration_request + + template (present) LibHttp_JsonMessageBodyTypes.JsonBody mw_body_json_dequeue_registration_response( + template (present) DequeueRegistrationResponse p_dequeue_registration_response := ? + ) := { + dequeueRegistrationResponse := p_dequeue_registration_response + } // End of template m_dequeue_registration_response + + template (omit) DequeueRegistrationRequest m_dequeue_registration_request( + in template (value) Json.String p_DequeueRegistrationQueueUri, + in template (value) Json.String p_DequeueRegistrationDequeuer, + in template (value) Json.Integer p_DequeueRegistrationExpirationTime, + in template (omit) Json.Integer p_DequeueRegistrationDequeuePreference := omit + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template m_dequeue_registration_request + + template (present) DequeueRegistrationRequest mw_dequeue_registration_request( + template (present) Json.String p_DequeueRegistrationQueueUri := ?, + template (present) Json.String p_DequeueRegistrationDequeuer := ?, + template (present) Json.Integer p_DequeueRegistrationExpirationTime := ?, + template Json.Integer p_DequeueRegistrationDequeuePreference := * + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template mw_dequeue_registration_request + + template (omit) DequeueRegistrationRequest m_dequeue_deregistration_request( + in template (value) Json.String p_DequeueRegistrationQueueUri, + in template (value) Json.String p_DequeueRegistrationDequeuer, + in template (omit) Json.Integer p_DequeueRegistrationDequeuePreference := omit + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := 0, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template m_dequeue_deregistration_request + + template (present) DequeueRegistrationRequest mw_dequeue_deregistration_request( + template (present) Json.String p_DequeueRegistrationQueueUri := ?, + template (present) Json.String p_DequeueRegistrationDequeuer := ?, + template Json.Integer p_DequeueRegistrationDequeuePreference := * + ) := { + DequeueRegistrationQueueUri := p_DequeueRegistrationQueueUri, + DequeueRegistrationDequeuer := p_DequeueRegistrationDequeuer, + DequeueRegistrationExpirationTime := 0, + DequeueRegistrationDequeuePreference := p_DequeueRegistrationDequeuePreference + } // End of template mw_dequeue_registration_request + + template (value) DequeueRegistrationResponse m_dequeue_response_ok( + in template (value) Json.Integer p_DequeueRegistrationExpirationTime + ) := { + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationStatusCode := 0 + + } // End of template m_dequeue_registration_request + + template (present) DequeueRegistrationResponse mw_dequeue_response_ok( + template (present) Json.Integer p_DequeueRegistrationExpirationTime := ? + ) := { + DequeueRegistrationExpirationTime := p_DequeueRegistrationExpirationTime, + DequeueRegistrationStatusCode := ? + } // End of template mw_dequeue_registration_request + + } // End of group dequeue_register + +} // End of module LibHttp_JsonTemplates diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_Templates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_Templates.ttcn new file mode 100644 index 0000000..8adde3d --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_Templates.ttcn @@ -0,0 +1,428 @@ +/** + * @author ETSI / STF549 + * @version $URL$ + * $ID:$ + * @desc This module provides the templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS 103 478 + */ +module LibHttp_Templates { + + // LibHttp + import from LibHttp_TypesAndValues all; + import from LibHttp_MessageBodyTypes all; + import from LibHttp_XmlMessageBodyTypes all; + import from LibHttp_JsonMessageBodyTypes all; + import from LibHttp_BinaryMessageBodyTypes all; + + template LibHttp_TypesAndValues.Response mw_http_response_456_bad_queue( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 456, + statustext := ? + } // End of template mw_http_response_456_bad_queue + + template LibHttp_TypesAndValues.Response mw_http_response_457_bad_dequeuePreference( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 457, + statustext := ? + } // End of template mw_http_response_457_bad_dequeuePreference + + group http_messages { + + template (value) HttpMessage m_http_request( + in template (value) Request p_request + ) := { + request := p_request + } // End of template m_http_request + + template (present) HttpMessage mw_http_request( + template (present) Request p_request := ? + ) := { + request := p_request + } // End of template mw_http_request + + template (value) HttpMessage m_http_response( + in template (value) Response p_response + ) := { + response := p_response + } // End of template m_http_response + + template (present) HttpMessage mw_http_response( + template (present) Response p_response := ? + ) := { + response := p_response + } // End of template mw_http_response + + } // End of group http_messages + + group http_headers { + + template (value) Header m_header_line( + in template (value) charstring p_header_name, + in template (value) charstring_list p_header_value + ) := { + header_name := p_header_name, + header_value := p_header_value + } // End of template m_header_line + + } // End of group http_headers + + group http_requests { + + template (omit) Request m_http_request_get( + in charstring p_uri, + in template (value) Headers p_headers, + in template (omit) HttpMessageBody p_body := omit + ) := { + method := "GET", + uri := p_uri, + version_major := c_http_version_major, + version_minor := c_http_version_minor, + header := p_headers, + body := p_body + } // End of template m_http_request_get + + template Request mw_http_request_get( + template (present) charstring p_uri := ?, + template (present) Headers p_headers := ?, + template HttpMessageBody p_body := * + ) := { + method := "GET", + uri := p_uri, + version_major := c_http_version_major, + version_minor := c_http_version_minor, + header := p_headers, + body := p_body + } // End of template mw_http_request_get + + template (omit) Request m_http_request_post( + in charstring p_uri, + in template (value) Headers p_headers, + in template (omit) HttpMessageBody p_body := omit + ) modifies m_http_request_get := { + method := "POST" + } // End of template m_http_request_post + + template Request mw_http_request_post( + template (present) charstring p_uri := ?, + template (present) Headers p_headers := ?, + template HttpMessageBody p_body := * + ) modifies mw_http_request_get := { + method := "POST" + } // End of template mw_http_request_post + + template (omit) Request m_http_request_patch( + in charstring p_uri, + in template (value) Headers p_headers, + in template (omit) HttpMessageBody p_body := omit + ) modifies m_http_request_get := { + method := "PATCH" + } // End of template m_http_request_patch + + template Request mw_http_request_patch( + template (present) charstring p_uri := ?, + template (present) Headers p_headers := ?, + template HttpMessageBody p_body := * + ) modifies mw_http_request_get := { + method := "PATCH" + } // End of template mw_http_request_patch + + template (omit) Request m_http_request_put( + in charstring p_uri, + in template (value) Headers p_headers, + in template (omit) HttpMessageBody p_body := omit + ) modifies m_http_request_get := { + method := "PUT" + } // End of template m_http_request_put + + template Request mw_http_request_put( + template (present) charstring p_uri := ?, + template (present) Headers p_headers := ?, + template HttpMessageBody p_body := * + ) modifies mw_http_request_get := { + method := "PUT" + } // End of template mw_http_request_put + + template (omit) Request m_http_request_delete( + in charstring p_uri, + in template (value) Headers p_headers, + in template (omit) HttpMessageBody p_body := omit + ) modifies m_http_request_get := { + method := "DELETE" + } // End of template m_http_request_delete + + template Request mw_http_request_delete( + template (present) charstring p_uri := ?, + template (present) Headers p_headers := ?, + template HttpMessageBody p_body := * + ) modifies mw_http_request_get := { + method := "DELETE" + } // End of template mw_http_request_post + + } // End of group http_requests + + group http_responses { + + template (value) Response m_http_response_ok( + in template (value) HttpMessageBody p_body, + in template (value) Headers p_header + ) := { + version_major := 1, + version_minor := 1, + statuscode := 200, + statustext := "OK", + header := p_header, + body := p_body, + tls := omit, + mutual_tls := omit + } // End of template m_http_response_ok + + template (value) Response m_http_response_ok_no_body( + in template (value) Headers p_header + ) := { + version_major := 1, + version_minor := 1, + statuscode := 200, + statustext := "OK", + header := p_header, + body := omit + } // End of template m_http_response_ok_no_body + + template (present) Response mw_http_response_ok_no_body( + template (present) Headers p_header := ? + ) := { + version_major := 1, + version_minor := 1, + statuscode := 200, + statustext := "OK", + header := p_header, + body := omit, + tls := *, + mutual_tls := * + } // End of template mw_http_response_ok_no_body + + template (value) Response m_http_response_204_no_content( + in template (value) Headers p_header + ) modifies m_http_response_ok_no_body := { + statuscode := 204, + statustext := "No Content" + } // End of template m_http_response_204_no_content + + template (present) Response mw_http_response_ok( + template (present) HttpMessageBody p_body := ?, + template (present) Headers p_header := ? + ) := { + version_major := 1, + version_minor := 1, + statuscode := 200, + statustext := ?, + header := p_header, + body := p_body, + tls := *, + mutual_tls := * + } // End of template mw_http_response_ok + + template (present) Response mw_http_response_201_created( + template (present) HttpMessageBody p_body := ?, + template (present) Headers p_header := ? + ) modifies mw_http_response_ok := { + statuscode := 201, + statustext := "Created" + } // End of template mw_http_response_201_created + + template (present) Response mw_http_response_202_accepted( + template (present) HttpMessageBody p_body := ?, + template (present) Headers p_header := ? + ) modifies mw_http_response_ok := { + statuscode := 202, + statustext := "Accepted" + } // End of template mw_http_response_202_accepted + + template (present) Response mw_http_response_204_no_content( + template (present) Headers p_header := ? + ) modifies mw_http_response_ok_no_body := { + statuscode := 204, + statustext := "No Content" + } // End of template mw_http_response_204_no_content + + template (value) Response m_http_response_ko( + in template (value) HttpMessageBody p_body, + in template (value) Headers p_header, + in template (value) integer p_statuscode := 404, + in template (value) charstring p_statustext := "Not found" + ) := { + version_major := 1, + version_minor := 1, + statuscode := p_statuscode, + statustext := p_statustext, + header := p_header, + body := p_body + } // End of template m_http_response_ko + + template (value) Response m_http_response_ko_no_body( + in template (value) Headers p_header, + in template (value) integer p_statuscode := 404, + in template (value) charstring p_statustext := "Not found" + ) := { + version_major := 1, + version_minor := 1, + statuscode := p_statuscode, + statustext := p_statustext, + header := p_header, + body := omit + } // End of template m_http_response_ko_no_body + + template (value) Response m_http_response_500_internal_error( + in template (value) Headers p_header, + in template (value) integer p_statuscode := 500, + in template (value) charstring p_statustext := "Internal Error" + ) modifies m_http_response_ko_no_body := { + } // End of template m_http_response_ko + + template (present) Response mw_http_response_ko_no_body( + template (present) Headers p_header := ?, + template (present) integer p_statuscode := 404, + template (present) charstring p_statustext := "Not found" + ) := { + version_major := 1, + version_minor := 1, + statuscode := p_statuscode, + statustext := p_statustext, + header := p_header, + body := omit + } // End of template mw_http_response_ko_no_body + + template Response mw_http_response_ko( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) := { + version_major := 1, + version_minor := 1, + statuscode := complement(200), + statustext := ?, + header := p_header, + body := p_body + } // End of template mw_http_response_ko + + template (value) Response m_http_response_400_bad_request( + in template (value) HttpMessageBody p_body, + in template (value) Headers p_header, + in template (value) integer p_statuscode := 400, + in template (value) charstring p_statustext := "Bad Request" + ) modifies m_http_response_ko := { + } // End of template m_http_response_400_bad_request + + template Response mw_http_response_400_bad_request( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 400, + statustext := "Bad Request" + } // End of template mw_http_response_400_bad_request + + template Response mw_http_response_401_unauthorized( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 401, + statustext := "Unauthorized" + } // End of template mw_http_response_401_unauthorized + + template Response mw_http_response_403_forbidden( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 403, + statustext := "Forbidden" + } // End of template mw_http_response_403_forbidden + + template Response mw_http_response_404_not_found( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 404, + statustext := "Not Found" + } // End of template mw_http_response_404_not_found + + template Response mw_http_response_412_precondition_failed( + template HttpMessageBody p_body := *, + template (present) Headers p_header := ? + ) modifies mw_http_response_ko := { + statuscode := 412, + statustext := "Precondition Failed" + } // End of template mw_http_response_412_not_found + + } // End of group http_responses + + group http_html_body { + + template (value) HttpMessageBody m_http_message_body_html( + in template (value) HtmlBody p_html_body + ) := { + html_body := p_html_body + } // End of template m_http_message_body_html + + template (present) HttpMessageBody mw_http_message_body_html( + template (present) HtmlBody p_html_body := ? + ) := { + html_body := p_html_body + } // End of template mw_http_message_body_html + + } // End of group http_html_body + + group http_xml_body { + + template (value) HttpMessageBody m_http_message_body_xml( + in template (value) XmlBody p_xml_body + ) := { + xml_body := p_xml_body + } // End of template m_http_message_body_xml + + template (present) HttpMessageBody mw_http_message_body_xml( + template (present) XmlBody p_xml_body := ? + ) := { + xml_body := p_xml_body + } // End of template mw_http_message_body_xml + + } // End of group http_xml_body + + group http_json_body { + + template (value) HttpMessageBody m_http_message_body_json( + in template (value) JsonBody p_json_body + ) := { + json_body := p_json_body + } // End of template m_http_message_body_json + + template (present) HttpMessageBody mw_http_message_body_json( + template (present) JsonBody p_json_body := ? + ) := { + json_body := p_json_body + } // End of template mw_http_message_body_json + + } // End of group http_json_body + + group http_binary_body { + + template (value) HttpMessageBody m_http_message_body_binary( + in template (value) BinaryBody p_binary_body + ) := { + binary_body := p_binary_body + } // End of template m_http_message_body_binary + + template (present) HttpMessageBody mw_http_message_body_binary( + template (present) BinaryBody p_binary_body := ? + ) := { + binary_body := p_binary_body + } // End of template mw_http_message_body_binary + + } // End of group http_binary_body + +} // End of module LibHttp_Templates diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_TestSystem.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_TestSystem.ttcn new file mode 100644 index 0000000..fa86083 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_TestSystem.ttcn @@ -0,0 +1,38 @@ +/** + * @author ETSI / STF545 + * @version $URL$ + * $ID:$ + * @desc This module provides the test system used by ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * @see ETSI TS 103 478 + */ +module LibHttp_TestSystem { + + // LibCommon + import from LibCommon_Sync all; + import from LibCommon_Time all; + + // LibHttp + import from LibHttp_TypesAndValues all; + + type port HttpPort message { + inout HttpMessage; + } + + type component HttpComponent extends SelfSyncComp { // FIXME To be rename into HttpTest + port HttpPort httpPort; + port HttpPort httpPort_notif; + // timers + timer tc_http_ac := PX_TAC; + + } // End of component HttpComponent + + type component HttpTestAdapter { // FIXME To be rename into HttpTestSystem + port HttpPort httpPort; + port HttpPort httpPort_notif; + } // End of component TestAdapter + +} // End of module LibHttp_TestSystem diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn new file mode 100644 index 0000000..68796c4 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_XmlMessageBodyTypes.ttcn @@ -0,0 +1,62 @@ +module LibHttp_XmlMessageBodyTypes { + + import from XSD all; + + // LibNg112 + import from LibNg112_TypesAndValues all; + + // LibHttp + import from LibHttp_XMLTypes all; + + // RFC5985 Held + import from urn_ietf_params_xml_ns_geopriv_held language "XSD" all + with { + extension "File:../xsd/RFC5985_held.xsd"; + } + + // RFC3863 PIDF + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/urn_ietf_params_xml_ns_pidf.ttcn" + } + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + /** + * This file volontary contains a trivial declaration of the type XmlBody. + * In accordance with your TTCN-3 module LibHttp_XMLTypes, you have to change the XmlBody typing. + */ + // TODO Add here your custom RFCs import + + type union XmlBodyMsg { + // TODO Add here your custom variants + LocationRequest locationRequest, + LocationResponse locationResponse, + Presence presence, + ErrorType errorType, + FindService findServiceRequest, + FindServiceResponse findServiceResponse, + ListServices listServices, + ListServicesResponse listServicesResponse, + ListServicesByLocation listServicesByLocation, + ListServicesByLocationResponse listServicesByLocationResponse, + ExceptionContainer exceptionContainer, + Redirect redirect, + charstring raw + } with { + variant "" + } + + type record XmlBody { + XmlBodyMsg msg, + charstring raw optional + } + +} with { + encode "XML"; + variant "" +} // End of LibHttp_XmlMessageBodyTypes diff --git a/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn b/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn new file mode 100644 index 0000000..1c42111 --- /dev/null +++ b/ttcn/patch_lib_http/ttcn/LibHttp_XmlTemplates.ttcn @@ -0,0 +1,1095 @@ +/** + * @author ETSI / STF545 + * @version $URL: https://oldforge.etsi.org/svn/LibIts/branches/STF525/ttcn/Http/LibHttp_Templates.ttcn $ + * $ID:$ + * @desc This module provides the custom templates for ITS HTTP based protocols. + * @copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + */ +module LibHttp_XmlTemplates { + + import from XSD all; + + // RFC5985 Held + import from urn_ietf_params_xml_ns_geopriv_held language "XSD" all + with { + extension "File:../xsd/RFC5985_held.xsd"; + } + // RFC6155 Held ID + import from urn_ietf_params_xml_ns_geopriv_held_id language "XSD" all + with { + extension "File:../xsd/RFC6155_held_id.xsd"; + } + // RFC3863 PIDF + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/urn_ietf_params_xml_ns_pidf.ttcn" + } + import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10.xsd"; + } + import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all + with { + extension "File:../xsd/RFC4119_geopriv10_basic_policy.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr language "XSD" all + with { + extension "File:../xsd/RFC5139_pdif_geopriv10_civic_address.xsd"; + } + + // RFC3863 + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/RFC3863_pidf.xsd"; + } + + // RFC5222 + import from urn_ietf_params_xml_ns_lost1 language "XSD" all + with { + extension "File:../xsd/RFC5222_lost.xsd"; + } + + // OpenGIS + import from http_www_opengis_net_pidflo_1_0 language "XSD" all + with { + extension "File:../xsd/GLM-pidf-lo-shape.xsd"; + } + import from http_www_opengis_net_gml language "XSD" all + with { + extension "File:../xsd/gmlBase.xsd"; + extension "File:../xsd/basicTypes.xsd"; + extension "File:../xsd/measures.xsd"; + extension "File:../xsd/geometryPrimitives.xsd"; + extension "File:../xsd/geometryBasic0d1d.xsd"; + extension "File:../xsd/geometryBasic2d.xsd"; + } + + // LibHttp + import from LibHttp_XmlMessageBodyTypes all; + import from LibHttp_XMLTypes all; + + template (value) XmlBody m_xml_body_raw( + in template (value) charstring p_raw + ) := { + raw := p_raw + } // End of template m_xml_body_raw + + template (present) XmlBody mw_xml_body_raw( + template (present) charstring p_raw := ? + ) := { + raw := p_raw + } // End of template mw_xml_body_raw + + group rfc5985_held { + + group http_xml_body { + + template (value) XmlBody m_body_xml_location_request( + in template (value) LocationRequest p_locationRequest + ) := { + msg := { locationRequest := p_locationRequest }, + raw := omit + } // End of template m_body_xml_location_request + + template (present) XmlBody mw_body_xml_location_request( + template (present) LocationRequest p_locationRequest := ? + ) := { + msg := { locationRequest := p_locationRequest }, + raw := omit + } // End of template mw_body_xml_location_request + + template (value) XmlBody m_body_xml_location_response( + in template (value) LocationResponse p_locationResponse + ) := { + msg := { locationResponse := p_locationResponse }, + raw := omit + } // End of template m_body_xml_location_response + + template (present) XmlBody mw_body_xml_location_response( + template (present) LocationResponse p_locationResponse := ? + ) := { + msg := { locationResponse := p_locationResponse }, + raw := omit + } // End of template mw_body_xml_location_response + + template (present) XmlBody mw_body_xml_presence( + in template (present) Presence p_presence := ? + ) := { + msg := { presence := p_presence }, + raw := omit + } // End of template mw_body_xml_presence + + template (present) XmlBody mw_body_xml_location_response_error( + in template (present) ErrorType p_error_type := ? + ) := { + msg := { errorType := p_error_type }, + raw := omit + } // End of template mw_body_xml_location_response_error + + template (value) XmlBody m_body_xml_find_service_request( + in template (value) FindService p_findServiceRequest + ) := { + msg := { findServiceRequest := p_findServiceRequest }, + raw := omit + } // End of template m_body_xml_find_service_request + + template (present) XmlBody mw_body_xml_find_service_request( + template (present) FindService p_findServiceRequest := ? + ) := { + msg := { findServiceRequest := p_findServiceRequest }, + raw := omit + } // End of template mw_body_xml_find_service_request + + template (value) XmlBody m_body_xml_find_service_response( + in template (value) FindServiceResponse p_findServiceResponse + ) := { + msg := { findServiceResponse := p_findServiceResponse }, + raw := omit + } // End of template m_body_xml_find_service_response + + template (present) XmlBody mw_body_xml_find_service_response( + template (present) FindServiceResponse p_findServiceResponse := ? + ) := { + msg := { findServiceResponse := p_findServiceResponse }, + raw := omit + } // End of template mw_body_xml_find_service_response + + template (value) XmlBody m_body_xml_list_services_request( + in template (value) ListServices p_listServices + ) := { + msg := { listServices := p_listServices }, + raw := omit + } // End of template m_body_xml_list_services_request + + template (present) XmlBody mw_body_xml_list_services_response( + template (present) ListServicesResponse p_listServicesResponse := ? + ) := { + msg := { listServicesResponse := p_listServicesResponse }, + raw := omit + } // End of template mw_body_xml_list_services_response + + template (value) XmlBody m_body_xml_list_services_by_location_request( + in template (value) ListServicesByLocation p_listServicesByLocation + ) := { + msg := { listServicesByLocation := p_listServicesByLocation }, + raw := omit + } // End of template m_body_xml_list_services_by_location_request + + template (present) XmlBody mw_body_xml_list_services_by_location_response( + template (present) ListServicesByLocationResponse p_listServicesByLocationResponse := ? + ) := { + msg := { listServicesByLocationResponse := p_listServicesByLocationResponse }, + raw := omit + } // End of template mw_body_xml_list_services_by_location_response + + template (value) XmlBody m_body_xml_redirect_response( + in template (value) Redirect p_redirect + ) := { + msg := { redirect := p_redirect }, + raw := omit + } // End of template m_body_xml_list_services_request + + template (present) XmlBody mw_body_xml_redirect_response( + template (present) Redirect p_redirect := ? + ) := { + msg := { redirect := p_redirect }, + raw := omit + } // End of template mw_body_xml_list_services_by_location_response + + template (present) XmlBody mw_body_xml_find_service_response_error( + template (present) ExceptionContainer p_exceptionContainer := ? + ) := { + msg := { exceptionContainer := p_exceptionContainer }, + raw := omit + } // End of template mw_body_xml_find_service_response_error + + } // End of group http_xml_body + + template (omit) LocationRequest m_locationRequest( + in template (value) LocationRequestType.elem_list p_elem_list, + in template (omit) LocationTypeType p_locationType := omit, + in template (omit) ResponseTimeType p_responseTime := omit, + in template (omit) LocationRequestType.attr p_attr := omit + ) := { + responseTime := p_responseTime, + attr := p_attr, + locationType := p_locationType, + elem_list := p_elem_list + } // End of template m_locationRequest + + template LocationRequest mw_locationRequest( + template (present) LocationRequestType.elem_list p_elem_list := ?, + template LocationTypeType p_locationType := *, + template ResponseTimeType p_responseTime := *, + template LocationRequestType.attr p_attr := * + ) := { + responseTime := p_responseTime, + attr := p_attr, + locationType := p_locationType, + elem_list := p_elem_list + } // End of template mw_locationRequest + + //template (value) Uri m_uri(in template (value) Uri p_uri) := p_uri; + + template (value) LocationResponseType m_locationResponse( + in template (omit) ReturnLocationType p_locationUriSet := omit, + in template (value) Presence p_presence, + in template (value) LocationResponseType.elem_list p_elem_list := { } + ) := { + locationUriSet := p_locationUriSet, + presence := p_presence, + elem_list := p_elem_list + } // End of template m_locationResponse + + template LocationResponseType mw_locationResponse( + template ReturnLocationType p_locationUriSet := *, + template Presence p_presence := *, + template LocationResponseType.elem_list p_elem_list := * + ) := { + locationUriSet := p_locationUriSet, + presence := p_presence, + elem_list := p_elem_list + } // End of template mw_locationResponse + + template (omit) LocationTypeType m_locationTypeType( + in template (value) LocationTypeBase p_base, + in template (omit) XSD.Boolean p_exact := omit + ) := { + exact := p_exact, + base := p_base + } // End of template m_locationTypeType + + template (value) LocationTypeBase m_locationTypeBase_civic := { + alt_1 := { + civic + } + } // End of template m_locationTypeBase_civic + + template (value) LocationTypeBase m_locationTypeBase_geodetic := { + alt_1 := { + geodetic + } + } // End of template m_locationTypeBase_geodetic + + template (value) LocationTypeBase m_locationTypeBase_locationUri := { + alt_1 := { + locationURI + } + } // End of template m_locationTypeBase_locationUri + + template (value) LocationTypeBase m_locationTypeBase_all := { + alt_1 := { + geodetic, civic + } + } // End of template m_locationTypeBase_all + + template (value) ReturnLocationType m_locationUriSet( + in template (value) XSD.DateTime p_expires, + in template (value) ReturnLocationType.locationURI_list p_locationURI_list + ):= { + expires := p_expires, + locationURI_list := p_locationURI_list + } // End of template m_locationUriSet + + template (present) ReturnLocationType mw_locationUriSet( + template (present) XSD.DateTime p_expires := ?, + template (present) ReturnLocationType.locationURI_list p_locationURI_list := { ? } + ):= { + expires := p_expires, + locationURI_list := p_locationURI_list + } // End of template mw_locationUriSet + + template ErrorType mw_error_type( + template (present) XSD.Token p_code := ?, + template (present) ErrorType.message_list p_message_list := ?, + template (present) ErrorType.elem_list p_elem_list := {}, + template ErrorType.attr p_attr := * + ) := { + code := p_code, + attr := p_attr, + message_list := p_message_list, + elem_list := p_elem_list + } // End of template mw_error_type + + } // End of group rfc5985_held + + group rfc6155_held_id { + + template (value) Device m_device( + in template (value) Device.elem_list p_elem_list + ) := { + elem_list := p_elem_list + } // End of template m_device + + template (present) Device mw_device( + template (present) DeviceIdentity.elem_list p_elem_list := ? + ) := { + elem_list := p_elem_list + } // End of template mw_device + + } // End of group rfc6155_held_id + + group rfc3863_pidf { + + template (present) Presence mw_presence( + template (present) XSD.AnyURI p_entity := ?, + template (present) Presence.tuple_list p_tuple_list := ? + ) := { + entity := p_entity, + tuple_list := p_tuple_list, + note_list := {}, + elem_list := {} + } // End of template mw_presence + + template Tuple mw_tuple( + template (present) universal charstring p_id := ?, + template (present) Status p_status := ?, + template (present) Tuple.elem_list p_elem_list := ?, + template (present) Tuple.note_list p_note_list := {}, + template Contact p_contact := * + ) := { + id := p_id, + status := p_status, + elem_list := p_elem_list, + contact := p_contact, + note_list := p_note_list, + timestamp_ := * + } // End of template mw_tuple + + } // End of group rfc3863_pidf + + group rfc4119_geopriv10 { + + template (value) LocInfoType m_location_info( + in template (value) LocInfoType.point p_point + ) := { + point := p_point + } // End of template m_location_info + + template (present) LocInfoType mw_location_info( + template LocInfoType.point p_point := * + ) := { + point := p_point + } // End of template mw_location_info + + template (value) Geopriv m_geopriv( + in template (value) LocInfoType p_location_info, + in template (value) LocPolicyType p_usage_rules, + in template (value) Geopriv.elem_list p_elem_list := { }, + in template (omit) LocMethod p_method := omit, + in template (omit) LocProvidedBy p_provided_by := omit + ) := { + location_info := p_location_info, + usage_rules := p_usage_rules, + method := p_method, + provided_by := p_provided_by, + elem_list := p_elem_list + } // End of template m_geopriv + + template (present) Geopriv mw_geopriv( + template (present) LocInfoType p_location_info := ?, + template (present) LocPolicyType p_usage_rules := ?, + template LocMethod p_method := ?, + template LocProvidedBy p_provided_by := *, + template Geopriv.elem_list p_elem_list := * + ) := { + location_info := p_location_info, + usage_rules := p_usage_rules, + method := p_method, + provided_by := p_provided_by, + elem_list := p_elem_list + } // End of template mw_geopriv + + template (value) LocPolicyType m_LocPolicyType( + in template (value) LocPolicyType.elem_list p_elem_list := {} + ) := { + retransmission_allowed := omit, + retention_expiry := omit, + external_ruleset := omit, + note_well := omit, + elem_list := p_elem_list + } // End of template m_LocPolicyType + + } // End of group rfc4119_geopriv10 + + group rfc5139_pdif_geopriv10_civic_address { + + template (present) CaType mw_ca_type( + template (present) XSD.Token p_base := ? + ) := { + lang := *, + base := p_base + } // End of template mw_ca_type + + template CivicAddress mw_civicAddress( + template (present) Iso3166a2 p_country := ?, + template (present) XSD.Token p_a1 := ?, + template (present) XSD.String p_a3 := ?, + template (present) XSD.String p_a4 := ?, + template (present) XSD.String p_sTS := ?, + template (present) XSD.String p_lMK := ?, + template (present) CivicAddress.elem_list p_elem_list := ? + ) := { + attr := *, + country := p_country, + a1 := mw_ca_type(p_a1), + a2 := *, + a3 := mw_ca_type(p_a3), + a4 := mw_ca_type(p_a4), + a5 := *, + a6 := *, + pRM := *, + pRD := *, + rD := *, + sTS := mw_ca_type(p_sTS), + pOD := *, + pOM := *, + rDSEC := *, + rDBR := *, + rDSUBBR := *, + hNO := *, + hNS := *, + lMK := mw_ca_type(p_lMK), + lOC := *, + fLR := *, + nAM := *, + pC := *, + bLD := *, + uNIT := *, + rOOM := *, + sEAT := *, + pLC := *, + pCN := *, + pOBOX := *, + aDDCODE := *, + elem_list := p_elem_list + } // End of template mw_civicAddress + + } // End of group rfc5139_pdif_geopriv10_civic_address + + group rfc5222_lost { + + template (omit) FindService m_find_service_request( + in template (value) FindService.location_list p_location_list, + in template (value) FindService.notLost_list p_notLost_list, + in template (omit) Service p_service := omit, + in template (omit) XSD.Boolean p_recursive_ := omit, + in template (omit) FindService.serviceBoundary p_serviceBoundary := omit, + in template (omit) XSD.Boolean p_validateLocation := omit, + in template (omit) Path p_path := omit + ) := { + recursive_ := p_recursive_, + serviceBoundary := p_serviceBoundary, + validateLocation := p_validateLocation, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := p_notLost_list + } // End of template m_find_service_request + + template FindService mw_find_service_request( + template (present) FindService.location_list p_location_list := ?, + template (present) FindService.notLost_list p_notLost_list := ?, + template Service p_service := *, + template XSD.Boolean p_recursive_ := *, + template FindService.serviceBoundary p_serviceBoundary := *, + template XSD.Boolean p_validateLocation := *, + template Path p_path := * + ) := { + recursive_ := p_recursive_, + serviceBoundary := p_serviceBoundary, + validateLocation := p_validateLocation, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := p_notLost_list + } // End of template mw_find_service_request + + template (omit) Location m_location( + in template (value) XSD.Token p_id, + in template (value) Location.extensionPoint_list p_extensionPoint_list, + in template (omit) XSD.NMTOKEN p_profile := omit + ) := { + id := p_id, + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template m_location + + template Location mw_location( + template (present) XSD.Token p_id := ?, + template (present) Location.extensionPoint_list p_extensionPoint_list := ?, + template XSD.NMTOKEN p_profile := * + ) := { + id := p_id, + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template mw_location + + template (value) NotLost m_notLost( + in template (value) XSD.String p_elem + ) := { + elem := p_elem + } // End of template m_notLost + + template (value) ExtensionPoint m_extension_point( + in template (value) XSD.String p_elem + ) := { + elem := p_elem, + notLost_list := { } + } // End of template m_extension_point + + template (present) ExtensionPoint mw_extension_point( + template (present) XSD.String p_elem := ? + ) := { + elem := p_elem, + notLost_list := { } + } // End of template mw_extension_point + + template (value) ExtensionPoint m_extension_point_notLost( + in template (value) XSD.String p_elem, + in template (value) ExtensionPoint.notLost_list p_notLost_list + ) modifies m_extension_point := { + notLost_list := p_notLost_list + } // End of template m_extension_point_notLost + + template (omit) FindServiceResponse m_find_service_response( + in template (value) FindServiceResponse.mapping_list p_mapping_list, + in template (value) FindServiceResponse.warnings_list p_warnings_list := { }, + in template (value) Path p_path, + in template (value) FindServiceResponse.notLost_list p_notLost_list := { }, + in template (omit) LocationValidation p_locationValidation := omit, + in template (omit) LocationUsed p_locationUsed := omit + ) := { + mapping_list := p_mapping_list, + locationValidation := p_locationValidation, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := p_notLost_list, + locationUsed := p_locationUsed + } // End of template m_find_service_response + + template FindServiceResponse mw_find_service_response( + template (present) FindServiceResponse.mapping_list p_mapping_list := ?, + template (present) FindServiceResponse.warnings_list p_warnings_list := ?, + template (present) Path p_path := ?, + template (present) FindServiceResponse.notLost_list p_notLost_list := ?, + template LocationValidation p_locationValidation := *, + template LocationUsed p_locationUsed := * + ) := { + mapping_list := p_mapping_list, + locationValidation := p_locationValidation, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := p_notLost_list, + locationUsed := p_locationUsed + } // End of template mw_find_service_response + + template Redirect mw_redirect( + template (present) XSD.Token p_source := ?, + template (present) XSD.Token p_target := ?, + template (present) XSD.Token p_message := ? + ) := { + lang := ?, + message_ := p_message, + source := p_source, + target := p_target, + notLost_list := {} + } // End of template mw_find_service_response + + template Redirect m_redirect( + template (present) XSD.Token p_source := ?, + template (present) XSD.Token p_target := ?, + template (present) XSD.Token p_message := "Out of jurisdiction" + ) := { + lang := "en", + message_ := p_message, + source := p_source, + target := p_target, + notLost_list := {} + } // End of template mw_find_service_response + + template (omit) Mapping m_mapping( + in template (value) Mapping.expires p_expires, + in template (value) XSD.DateTime p_lastUpdated, + in template (value) AppUniqueString p_source, + in template (value) XSD.Token p_sourceId, + in template (value) Mapping.displayName_list p_displayName_list, + in template (value) Mapping.uri_list p_uri_list, + in template (omit) Mapping.choice p_choice := omit, + in template (omit) Service p_service := omit, + in template (value) Mapping.notLost_list p_notLost_list := { }, + in template (omit) Mapping.lang p_lang := omit, + in template (omit) XSD.Token p_message_ := omit, + in template (omit) ServiceNumber p_serviceNumber := omit + ) := { + lang := p_lang, + expires := p_expires, + lastUpdated := p_lastUpdated, + message_ := p_message_, + source := p_source, + sourceId := p_sourceId, + displayName_list := p_displayName_list, + service := p_service, + choice := omit, + uri_list := p_uri_list, + serviceNumber := p_serviceNumber, + notLost_list := p_notLost_list + } // End of template m_mapping + + template Mapping mw_mapping( + template (present) Mapping.expires p_expires := ?, + template (present) XSD.DateTime p_lastUpdated := ?, + template (present) AppUniqueString p_source := ?, + template (present) XSD.Token p_sourceId := ?, + template (present) Mapping.displayName_list p_displayName_list := ?, + template (present) Mapping.uri_list p_uri_list := ?, + template Mapping.choice p_choice := *, + template Service p_service := *, + template (present) Mapping.notLost_list p_notLost_list := ?, + template Mapping.lang p_lang := *, + template XSD.Token p_message_ := *, + template ServiceNumber p_serviceNumber := * + ) := { + lang := p_lang, + expires := p_expires, + lastUpdated := p_lastUpdated, + message_ := p_message_, + source := p_source, + sourceId := p_sourceId, + displayName_list := p_displayName_list, + service := p_service, + choice := *, + uri_list := p_uri_list, + serviceNumber := p_serviceNumber, + notLost_list := p_notLost_list + } // End of template mw_mapping + + template (value) DisplayName m_display_name( + in template (value) XSD.Language p_lang := "en", + in template (value) XSD.String p_base + ) := { + lang := p_lang, + base := p_base + } // End of template m_display_name + + template (present) DisplayName mw_display_name( + template (present) XSD.Language p_lang := ?, + template (present) XSD.String p_base := ? + ) := { + lang := p_lang, + base := p_base + } // End of template mw_display_name + + template (present) Mapping.expires mw_expires_date_time( + template (present) XSD.DateTime p_date_time := ? + ) := { + dateTime := p_date_time + } // End of template mw_expires_date_time + + template (present) Mapping.choice mw_mapping_service_boundary( + template (present) ServiceBoundary_1 p_service_boundary := ? + ) := { + serviceBoundary := p_service_boundary + } // End of template mw_mapping_service_boundary + + template (present) ServiceBoundary_1 mw_service_boundary( + template (present) ServiceBoundary_1.serviceBoundary_list p_serviceBoundary_list + ) := { + serviceBoundary_list := p_serviceBoundary_list + } // End of template mw_service_boundary + + template ServiceBoundary mw_service_boundary_item( + template XSD.NMTOKEN p_profile := *, + template (present) ServiceBoundary.extensionPoint_list p_extensionPoint_list := ? + ) := { + profile := p_profile, + extensionPoint_list := p_extensionPoint_list + } // End of template mw_service_boundary_item + + template BasicException mw_basic_exception( + template XSD.Language p_lang := *, + template XSD.Token p_message_ := *, + template (present) BasicException.notLost_list p_notLost_list := ? + ) := { + lang := p_lang, + message_ := p_message_, + notLost_list := p_notLost_list + } // End of template mw_basic_exception + + template LocationProfileUnrecognized mw_location_profile_unrecognized( + template XSD.Language p_lang := *, + template XSD.Token p_message_ := *, + template (present) LocationProfileUnrecognized.notLost_list p_notLost_list := ? + ) := { + lang := p_lang, + message_ := p_message_, + notLost_list := p_notLost_list + } // End of template mw_location_profile_unrecognized + + template (present) ExceptionContainer mw_exception_serviceNotImplemented( + template (present) AppUniqueString p_source := ?, + template (present) BasicException p_serviceNotImplemented := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? +) := { + source := p_source, + choice_list := { { serviceNotImplemented := p_serviceNotImplemented } }, + notLost_list := p_notLost_list + } // End of template mw_exception_serviceNotImplemented + + template (present) ExceptionContainer mw_exception_locationProfileUnrecognized( + template (present) AppUniqueString p_source := ?, + template (present) LocationProfileUnrecognized p_locationProfileUnrecognized := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { locationProfileUnrecognized := p_locationProfileUnrecognized } }, + notLost_list := p_notLost_list + } // End of template mw_exception_locationProfileUnrecognized + + template (present) ExceptionContainer mw_exception_loop( + template (present) AppUniqueString p_source := ?, + template (present) Loop p_loop := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { loop := p_loop } }, + notLost_list := p_notLost_list + } // End of template mw_exception_loop + + template (present) ExceptionContainer mw_exception_badRequest( + template (present) AppUniqueString p_source := ?, + template (present) BadRequest p_bad := ?, + template (present) ExceptionContainer.notLost_list p_notLost_list := ? + ) := { + source := p_source, + choice_list := { { badRequest := p_bad } }, + notLost_list := p_notLost_list + } // End of template mw_exception_badRequest + + template (value) LocationUsed m_location_used( + in template (value) XSD.Token p_id + ) := { + id := p_id + } // End of template m_location_used + + template (present) LocationUsed mw_location_used( + template (present) XSD.Token p_id := ? + ) := { + id := p_id + } // End of template mw_location_used + + template (value) Via m_via( + in template (value) AppUniqueString p_source + ) := { + source := p_source, + notLost_list := { } + } // End of template m_via + + template (present) Via mw_via( + template (present) AppUniqueString p_source := ? + ) := { + source := p_source, + notLost_list := ? + } // End of template mw_via + + template (value) Path m_path( + in template (value) Path.via_list p_via_list + ) := { + via_list := p_via_list + } // End of template m_path + + template (present) Path mw_path( + template (present) Path.via_list p_via_list := ? + ) := { + via_list := p_via_list + } // End of template mw_path + + template (omit) ListServices m_list_services( + in template (omit) Path p_path := omit, + in template (omit) Service p_service := omit + ) := { + path := p_path, + service := p_service, + notLost_list := { } + } // End of template m_list_services + + template (present) ListServicesResponse mw_list_services_response( + template (present) ServiceList p_serviceList := ?, + template (present) Path p_path := ?, + template (present) ListServicesResponse.warnings_list p_warnings_list := ? + ) := { + serviceList := p_serviceList, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := { } + } // End of template mw_list_services_response + + template (omit) ListServicesByLocation m_list_services_by_location( + in template (value) ListServicesByLocation.location_list p_location_list, + in template (omit) Path p_path := omit, + in template (omit) Service p_service := omit, + in template (omit) XSD.Boolean p_recursive_ := omit + ) := { + recursive_ := p_recursive_, + location_list := p_location_list, + path := p_path, + service := p_service, + notLost_list := { } + } // End of template m_list_services_by_location + + template (present) ListServicesByLocationResponse mw_list_services_by_location_response( + template (present) ServiceList p_serviceList := ?, + template (present) Path p_path := ?, + template (present) ListServicesByLocationResponse.warnings_list p_warnings_list := ?, + template (present) LocationUsed p_locationUsed := ? + ) := { + serviceList := p_serviceList, + warnings_list := p_warnings_list, + path := p_path, + notLost_list := { }, + locationUsed := p_locationUsed + } // End of template mw_list_services_by_location_response + + } // End of group rfc5222_lost + + group open_gis { + + template (omit) Point m_point( + in template (value) Pos p_position, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := p_id, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + pos := p_position + } // End of template m_point + + template Point mw_point( + template (present) Pos p_position := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + pos := p_position + } // End of template mw_point + + template Point mw_point_1( + template (present) XSD.Double p_position_1 := ?, + template (present) XSD.Double p_position_2 := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + pos := { p_position_1, p_position_2 } + } // End of template mw_point_1 + + template (omit) CircleType m_circle( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_radius, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + radius := p_radius + } // End of template m_circle + + template CircleType mw_circle( + template (present) CenterGroup p_centerGroup := ?, + template (present) LengthType p_radius := ?, + template XSD.AnyURI p_srsName := * + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + centerGroup := p_centerGroup, + radius := p_radius + } // End of template mw_circle + + template (omit) EllipseType m_ellipse( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_semiMajorAxis, + in template (value) LengthType p_semiMinorAxis, + in template (value) AngleType p_orientation, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + semiMajorAxis := p_semiMajorAxis, + semiMinorAxis := p_semiMinorAxis, + orientation := p_orientation + } // End of template m_ellipse + + template (omit) ArcBandType m_arcband( + in template (value) CenterGroup p_centerGroup, + in template (value) LengthType p_innerRadius, + in template (value) LengthType p_outerRadius, + in template (value) AngleType p_startAngle, + in template (value) AngleType p_openingAngle, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) XSD.AnyURI p_id := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + centerGroup := p_centerGroup, + innerRadius := p_innerRadius, + outerRadius := p_outerRadius, + startAngle := p_startAngle, + openingAngle := p_openingAngle + } // End of template m_arcband + + + template (omit) PolygonType m_polygon( + in template (omit) DoubleList p_posList, + in template (omit) XSD.AnyURI p_srsName := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := omit, + exterior := { + ring := { + linearRing := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := omit, + uomLabels := omit, + choice := { + posList := { + count := omit, + base := p_posList + } + } + } + } + } + } + + + + template (value) CenterGroup m_center_group_pos( + in template (value) CenterGroup.pos p_pos + ) := { + pos := p_pos + } // End of template m_center_group_pos + + template (present) CenterGroup mw_center_group_pos( + template (present) CenterGroup.pos p_pos := ? + ) := { + pos := p_pos + } // End of template mw_center_group_pos + + template (present) CenterGroup mw_center_group_pos_1( + template (present) XSD.Double p_pos_1 := ?, + template (present) XSD.Double p_pos_2 := ? + ) := { + pos := { p_pos_1, p_pos_2 } + } // End of template mw_center_group_pos_1 + + template (value) LengthType m_radius( + in template (value) XSD.AnyURI p_uom, + in template (value) XSD.Double p_base + ) := { + uom := p_uom, + base := p_base + } // End of template m_radius + + template (present) LengthType mw_radius( + template (present) XSD.AnyURI p_uom := ?, + template (present) XSD.Double p_base := ? + ) := { + uom := p_uom, + base := p_base + } // End of template mw_radius + + template (present) PolygonType mw_polygon( + template (present) XSD.AnyURI p_srsName := ?, + template (present) Exterior p_exterior := ? + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + exterior := p_exterior + } // End of template mw_polygon + + template (present) Exterior mw_exterior_linear_ring( + template (present) LinearRingType p_linear_ring := ? + ) := { + ring := { linearRing := p_linear_ring } + } // End of template mw_exterior + + template (omit) LinearRingType m_linear_ring_type_pos( + in template (value) LinearRingType.choice.choice_list p_choice_list, + in template (omit) XSD.AnyURI p_srsName := omit, + in template (omit) NCNameList p_uomLabels := omit + ) := { + axisLabels := omit, + gid := omit, + id := omit, + srsDimension := omit, + srsName := p_srsName, + uomLabels := p_uomLabels, + choice := { + choice_list := p_choice_list + } + } // End of template m_linear_ring_type_pos + + template (present) LinearRingType mw_linear_ring_type_pos( + template (present) XSD.AnyURI p_srsName := ?, + template (present) LinearRingType.choice.choice_list p_choice_list := ? + ) := { + axisLabels := *, + gid := *, + id := *, + srsDimension := *, + srsName := p_srsName, + uomLabels := *, + choice := { + choice_list := p_choice_list + } + } // End of template mw_linear_ring_type_pos + + } // End of group open_gis + +} // End of module LibHttp_XmlTemplates diff --git a/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn b/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn new file mode 100644 index 0000000..1d0d3c2 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn @@ -0,0 +1,1548 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the steps used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Steps { + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + // LibIms + import from LibIms_Templates all; + import from LibIms_Interface all; + import from LibIms_SIPTypesAndValues all; + + group externalfunctions { + } // end group externalfunctions + group parameterOperations { + + /** + * @desc Adds new Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewViaParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intVia; + var integer i := 0; + if (isvalue(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody); + while (i < v_intVia) { + p_message.msgHeader.via.viaBody[v_intVia] := p_message.msgHeader.via.viaBody[v_intVia - 1]; + v_intVia := v_intVia - 1; + } + vc_branch := c_branchCookie & f_getRndTag(); + p_message.msgHeader.via.viaBody[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); + vc_via := p_message.msgHeader.via; + } + } + + /** + * @desc Removes own Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_removeOwnViaParameter( + in Response p_message + ) runs on ImsComponent { + var integer v_intVia; + var Via v_via := c_empty_Via; + var integer i := 0; + + if (ispresent(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody) - 1; + + for (i := 0; i < v_intVia; i := i + 1) { + v_via.viaBody[i] := p_message.msgHeader.via.viaBody[i + 1]; + } + vc_via := v_via; + } + } + + /** + * @desc Adds new RecordRoute parameter and removes Route parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewRecordRouteAndRemoveRoutParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intRoute, v_intRecordRoute; + var integer i := 1; + var RouteBody v_route1; + var Route v_newRoute; + v_newRoute.fieldName := ROUTE_E; + if (isvalue(p_message.msgHeader.route)) { + v_intRoute := lengthof(p_message.msgHeader.route.routeBody); + v_route1 := p_message.msgHeader.route.routeBody[0]; + while (i < v_intRoute) { + v_newRoute.routeBody[i - 1] := p_message.msgHeader.route.routeBody[i]; + i := i + 1; + } + vc_route := v_newRoute; + } + + if (isvalue(p_message.msgHeader.recordRoute)) { + + v_intRecordRoute := lengthof(p_message.msgHeader.recordRoute.routeBody); + while (0 < v_intRecordRoute) { + p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute] := p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_message.msgHeader.recordRoute.routeBody[0] := v_route1; + vc_recordRoute := valueof(p_message.msgHeader.recordRoute); + } + } + + /** + * @desc Adds new RecordRoute parameter (IMS) + * @param p_rr The recordRoute parameter to add + */ + function f_addNewRecordRouteIMS( + in RecordRoute p_rr + ) runs on ImsComponent + return template RecordRoute { + var integer v_intRecordRoute; + var template RecordRoute v_recordRoute := omit; + + v_intRecordRoute := lengthof(p_rr.routeBody); + if (v_intRecordRoute > 0) { + while (0 < v_intRecordRoute) { + p_rr.routeBody[v_intRecordRoute] := p_rr.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_rr.routeBody[0] := valueof(m_routeBody_currIpAddr(vc_userprofile)); + vc_recordRoute := p_rr; + return vc_recordRoute; + } + else { + return (v_recordRoute); + } + } + + } // end group parameterOperations + + group fieldOperations { + + /** + * @desc Sets BYE header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersBYE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + } // end f_setHeadersBYE + + /** + * @desc Sets CANCEL header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + */ + function f_setHeadersCANCEL( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersCANCEL(p_cSeq_s); + } // end f_setHeadersCANCEL + + /** + * @desc Sets headers for forward request from AS in case if AS acts as Proxy + * @param p_cSeq_s The current cSeq + * @param p_proxyMode true = proxyMode, false = B2BMode + */ + function f_setHeadersForwardRequestFromAS( + inout CSeq p_cSeq_s, + boolean p_proxyMode + ) runs on ImsComponent { + var Request v_request; + v_request := vc_request; + + if (p_proxyMode) { + vc_requestUri2 := v_request.requestLine.requestUri; + vc_to := v_request.msgHeader.toField; + vc_contact := v_request.msgHeader.contact; + f_addNewViaParameter(v_request); + f_addNewRecordRouteAndRemoveRoutParameter(v_request); + } + else { + // B2Bmode + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + } + } // end function f_setHeadersForwardRequest + + /** + * @desc Sets header fields for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardResponseFromAS( + ) runs on ImsComponent { + var Response v_response; + v_response := vc_response; + + vc_caller_To := v_response.msgHeader.toField; + vc_to := v_response.msgHeader.toField; + vc_contact := v_response.msgHeader.contact; + + if (ispresent(v_response.msgHeader.recordRoute)) { + vc_recordRoute := v_response.msgHeader.recordRoute; + } + f_removeOwnViaParameter(v_response); + } // end function f_setHeadersForwardResponse + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersINVITE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); + } // end f_setHeadersINVITE + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersUPDATE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersUPDATE(p_cSeq_s); + } // end f_setHeadersUPDATE + + /** + * @desc Sets Message header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersMESSAGE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); + } // end f_setHeadersMESSAGE + + /** + * @desc Sets Notify header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersNOTIFY( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersNOTIFY(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of NOTIFY from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersNOTIFY + + /** + * @desc Sets Options header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersOPTIONS(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of OPTIONS from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersOPTIONS + + /** + * @desc Sets Publish header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersPUBLISH( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersPUBLISH(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + // contact header initialization for sending of PUBLISH from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersPUBLISH + + /** + * @desc Sets Subscribe header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersSUBSCRIBE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_to_user // SipUrl + } + }, // end addressField + toParams := omit + }; + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersSUBSCRIBE(p_cSeq_s); + } // end f_setHeadersSUBSCRIBE + + /** + * @desc Sets headers for ReINVITE method + * @param p_cSeq_s The current cSeq + * @param p_orginatingSide true in case of Re-INVITE is send from the orgination endpoint otherwise false. + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersReINVITE( + inout CSeq p_cSeq_s, + in boolean p_orginatingSide, + in SipUrl p_to_user + ) runs on ImsComponent { + var integer v_tmp, i, j, v_nbroute; + var Request v_request; + v_request := vc_request; + + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + vc_requestUri := p_to_user; + + if (p_orginatingSide) { + vc_to := vc_caller_To; + vc_from := vc_caller_From; + } + else { + vc_to := vc_callee_To; + vc_from := vc_callee_From; + + // get route from previous ACK request + // Route Management + if (isvalue(v_request.msgHeader.recordRoute)) { + vc_recordRoute := valueof(v_request.msgHeader.recordRoute); + v_nbroute := lengthof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else { + vc_boo_recordRoute := false; + vc_boo_route := false; + } + } + + v_tmp := str2int(vc_sdp_local.origin.session_id); + vc_sdp_local.origin.session_id := int2str(v_tmp + 1); + v_tmp := str2int(vc_sdp_local.origin.session_version); + vc_sdp_local.origin.session_version := int2str(v_tmp + 1); + } // end function f_setHeadersReINVITE + + /** + * @desc Sets component variables related to message header fields when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) (message type independent: CSeq, contact, via), function uses information from userprofile and interfaceprofile + * @param p_cSeq_s The CSeq parameter + * @param p_method The method name for cSeq header field + */ + function f_setHeadersGeneral_ICSCF( + inout CSeq p_cSeq_s, + in charstring p_method + ) runs on SipComponent { + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method; + vc_cSeq := p_cSeq_s; + + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_branch_ICSCF := c_branchCookie & f_getRndTag(); + + vc_via := { + fieldName := VIA_E, + viaBody := { + valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), + valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) + } + }; + } // end function f_setHeadersGeneral_ICSCF + + /** + * @desc Sets header field for the next outgoing REGISTER message from the visited P-CSCF to the home I-CSCF + * @param p_cSeq_s The CSeq parameter to be applied + */ + function f_setHeaders_REGISTER_PCSCF( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := { + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + } + }; + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + if (not vc_firstREGISTER_sent) { + v_params := { + { + id := c_expiresId, + paramValue := { + tokenOrHost := c_shortRegistration + } + } + }; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + } // end function setHeaders_REGISTER_PCSCF + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersREFER( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_uri The SipUrl for request URI and To header + */ + function f_setHeadersREFER_conf( + inout CSeq p_cSeq_s, + in SipUrl p_uri + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_uri // SipUrl + } + }, // end addressField + toParams := omit + }; + + vc_from := f_initFromHeader(p_uri, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_uri; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER_conf + + } // end group fieldOperations + + group awaitingMessage { + } + + group sendMessage { + + /** + * @desc Sends PRACK message + * @param p_mb The message body of the PRACK message + * @param p_rack_cseq The cSeq of the PRACK message + */ + function f_sendPRACK_sdp( + template(value) MessageBody p_mb, + CSeq p_rack_cseq + ) runs on SipComponent { + var integer v_responseNum := 1; + var template(value) PRACK_Request v_prackReq; + + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + if (isvalue(vc_response.msgHeader.rSeq.responseNum)) { + v_responseNum := vc_response.msgHeader.rSeq.responseNum; + } + vc_rAck := m_RAck(v_responseNum, p_rack_cseq.seqNumber, p_rack_cseq.method); + + v_prackReq := m_PRACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck, p_mb); + + // added route header if required + if (isvalue(vc_response.msgHeader.recordRoute)) { + v_prackReq.msgHeader.route := f_route(); + } + + SIPP.send(v_prackReq) to vc_sent_label; + } + + } + group globalSteps { + + //NOTE STF471: removed function f_init_userprofile, have to move up to specific ATS + + /** + * @desc Initializes the To header + * @param p_user Identifies the selected user's SIP URL + * @return The To header + */ + function f_initToHeader( + in SipUrl p_user + ) runs on ImsComponent + return To { + var To v_to := c_empty_To; + v_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + toParams := omit + }; + return (v_to); + } + + /** + * @desc Initializes the From header + * @param p_user Identifies the selected user' SIP URL + * @param p_tag_str The string value of the tag id + * @return The From header + */ + function f_initFromHeader( + in SipUrl p_user, + charstring p_tag_str + ) runs on ImsComponent + return From { + var From v_from := c_empty_From; + v_from := { + fieldName := FROM_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + fromParams := { + { + id := c_tagId, + paramValue := { + tokenOrHost := p_tag_str + } + } + } + }; + return v_from; + } + + //NOTE STF471: removed function f_initSipUrl, have to move up to specific ATS + + //NOTE STF471: removed function f_init_interfaceprofile, have to move up to specific ATS + + /** + * @desc Retrieves user DomainPort value of the user profile + * @param p_userProfile Identifies the selected user profile + * @return The Domain HostPort + */ + function f_get_userDomainPort( + in SipUserProfile p_userProfile + ) runs on ImsComponent + return HostPort { + return + { + p_userProfile.homeDomain, + p_userProfile.currPort + }; + } + + /** + * @desc Retrieves HostPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The HostPort + */ + function f_get_interfaceHostPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTIpaddr, + p_interface.SUTPort + }; + } + + /** + * @desc Retrieves DomainPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The Domain HostPort + */ + function f_get_interfaceDomainPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTHomeDomain, + p_interface.SUTPort + }; + } + + /** + * @desc Gets the receive template for the NameAddr of the interface + * @param p_interface Identifies the selected interface + * @return The NameAddr template + */ + function f_get_interfaceNameAddr( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return template NameAddr { + return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr, p_interface.SUTPort); + } + + } + + group registration { + + /** + * @desc Registration and authentication + * @param p_cSeq_s The current cseq + * @param p_auth flag indicating if authentication is needed + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_Registration_IMS( + inout CSeq p_cSeq_s, + in boolean p_auth, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_no}), p_host, p_port)); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_yes}), p_host, p_port)); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) { + tc_ack.stop; + log("*** " & __SCOPE__ & ": INCONC: Authorization was not requested as expected ***"); + setverdict(inconc); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } // end function f_Registration_IMS + + /** + * @desc awaiting UE1 registration (with authentication) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @param p_register The expected REGISTER_Request - default: mw_REGISTER_authorizedRequest_IMS + */ + function f_awaitingRegistration_IMS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop, + in template(present) REGISTER_Request p_register := + mw_REGISTER_authorizedRequest_IMS( + mw_Authorization_digest( + mw_digestResponse( + (c_Integrity_protected_yes, c_Integrity_protected_ip_assoc_pending) + ) + ) + ) + ) runs on ImsComponent { + var SipUrl v_passociated_url; + + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse( + m_Response_WWWauthenticate_IMS( + c_statusLine401, + vc_callId, + p_cSeq_s, + vc_caller_From, + vc_caller_To, + vc_via, + m_wwwAuthenticate( + f_calculatecChallenge_forWWWAuthorization( + p_qop, + valueof(vc_authorization.body[0].digestResponse) + ) + ) + ) + ); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(p_register); + + // 200OK to complete the request + if (isvalue(vc_request.msgHeader.contact)) { + vc_contact := valueof(vc_request.msgHeader.contact); + vc_contact.contactBody.contactAddresses[0].contactParams := { + { + "expires", + { + tokenOrHost := int2str(3600) + } + } + }; + } + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } // end function f_awaitingRegistration_IMS + + /** + * @desc Awaiting UE1 registration (with authentication, without security headers) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_awaitingRegistration_IMS_gm( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + vc_ignore_subscribe := true; // handle SUBSCRIBE during the call + + f_awaitingRegistration_IMS(p_cSeq_s, p_to_user, p_qop, mw_REGISTER_authorizedRequest_wo_securityheaders_IMS); + + vc_DeregDone := false; + } // end function f_awaitingRegistration_IMS_gm + + /** + * @desc Remove registration + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_removeRegistration_IMS( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + var template(value) REGISTER_Request v_request; + + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + // Re-send protected REGISTER + f_SendREGISTER(v_request); // LibSip + // awaiting 200 OK REGISTER + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + log("*** " & __SCOPE__ & ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + } + } // end f_RemoveRegistration_IMS + + } // end group registration + + group preambles { + + /** + * @desc Sets variables and default initialization for user profile where proxy role is present + * @param p_userprofile User profile of call + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_MGCF( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_boo_recordRoute := true; + vc_boo_route := true; + //NOTE STF471: removed f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); + + f_IMS_preamble_woRegistration(p_cSeq_s); + } + + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration_as( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withEmergencyRegistration( + inout CSeq p_cSeq_s, + template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, true); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistration( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistrationWoSubscription( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_IMS_preamble_withRegistrationBasic( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration_IMS(p_cSeq_s, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, p_host, p_port); + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_AS( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + vc_cSeq := p_cSeq_s; + + // Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate(a_altstep_AS()); + + // Preamble + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + } // end group preambles + + group postambles { + + /** + * @desc Terminates component and handles deregistration + * @param p_cSeq_s The current cseq + */ + function f_IMS_postamble_withDeRegistration( + CSeq p_cSeq_s + ) runs on ImsComponent { + f_RemoveRegistration(p_cSeq_s); + f_terminate_component(); + } + + /** + * @desc Terminates component and optionally handles deregistration on AS as TS + * @param p_deRegistration Handle deregistration? + */ + function f_IMS_postamble_AS_withDeRegistration( + boolean p_deRegistration + ) runs on ImsComponent { + + if (p_deRegistration == true) { + f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true); + } + f_terminate_component(); + } + + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_IMS1_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component without de-registration + */ + function f_IMS_postamble_withoutDeRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_SIP_postamble_IMS1_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_postamble_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + + /** + * @desc Awaits de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } + + //NOTE STF471: renamed f_SIP_postamble_UE(1|2)_withoutRegistration to f_SIP_postamble_UE_withoutRegistration + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_UE_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Sends BYE and awaits response (IMS) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + */ + function f_terminateCall_IMS( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_IMS + + /** + * @desc Sends BYE and awaits response (UE) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_recordRoute RecordRoute parameter for outgoing BYE - default: omit + */ + function f_terminateCall_UE( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + template RecordRoute p_recordRoute := omit + ) runs on ImsComponent { + var Route v_route; + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + if (ispresent(p_recordRoute)) { + v_route := {ROUTE_E, valueof(p_recordRoute.routeBody)}; + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, v_route)); + } + else { + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, vc_route)); + } + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_UE + + /** + * @desc Sends BYE and awaits response and De-registration + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_qop of the peer UE (alternatively) + */ + function f_terminateCall_UE_withDeReg( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + in charstring p_qop + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + action("Please de-register"); + f_IMS_awaitDeRegistration(p_requestUri, p_qop); + } // end function f_terminateCall_UE_withDeReg + + } + group defaults { + + /** + * @desc Altstep for clearing registration (IMS user) + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration_IMSuser( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var Response v_response; + var Request v_request; + var SUBSCRIBE_Request v_subscribe_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + var NOTIFY_Request v_notify_request; + var INFO_Request v_info_request; + var CSeq v_cSeq; + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + vc_callId := vc_callIdReg; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { + repeat; + } + [] SIPP.receive(mw_ACK_Request_Base(?)) { + repeat; + } + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { + repeat; + } + // ignore 181 if flag is set (following TS 183004 ����4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response sender vc_sent_label { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { + repeat; + } + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat; + } + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { + repeat; + } + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_info_request); + f_send200OK(); + repeat; + } + // awaiting of Notify + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_notify_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe from UE + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { + f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_subscribe_request); + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_awaitingOkResponse(vc_cSeq); + repeat; + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + // Answer to the CANCEL + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 4xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected 4xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 5xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected 5xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch invalid REGISTER + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected REGISTER received. ***"); + setverdict(fail); + f_componentStop(); + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + } + + /** + * @desc Main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_altstep_AS( + ) runs on SipComponent { + var Request v_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // handle REGISTER requests + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { + f_setHeadersOnReceiptOfREGISTER(v_register_request); + // vc_contact := vc_request.msgHeader.contact; + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact)); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + f_send200OK(); + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + } + [] SIPP.receive(mw_Response_Base(?, vc_callId, vc_cSeq)) -> value vc_response { + log("*** " & testcasename() & ": FAIL: Unexpected response message in " & __SCOPE__ & " received. ***"); + setverdict(fail); + repeat; + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + } + } + } +} // module LibIms_Steps diff --git a/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn b/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn new file mode 100644 index 0000000..cb866f3 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn @@ -0,0 +1,4632 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the templates used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Templates { + // LibCommon + import from LibCommon_DataStrings all; + + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + + // LibXMLTypes + import from XSD all; + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from urn_ietf_params_xml_ns_reginfo language "XSD" all except {type Contact;} + with { + extension "File:../xsd/regInfo.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from urn_ietf_params_xml_ns_common_policy language "XSD" all + with { + extension "File:../xsd/common-policy.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + + template(present) charstring mw_international_number_format := pattern "\\+\d+"; + + template(present) NameAddr mw_SipUrl_SUTinterface( + template(present) charstring p_host := ?, + template(present) integer p_port := ? + ) := { + displayName := *, + addrSpec := { + scheme := "sip:", + components := { + sip := { + userInfo := *, + hostPort := mw_hostPort(p_host, p_port) + } + }, + urlParameters := *, + headers := * + } + } + + template(present) Addr_Union mw_UE1_Addr_display( + template(present) DisplayName p_displayName + ) := { + nameAddr := { + displayName := p_displayName, + addrSpec := ? + } + } + + // MIME name application + template(value) charstring m_mimeMultipart := "multipart/mixed;boundary=""" & PX_SIP_MIME_BOUNDARY & """"; + + group subfields { + + template(value) SipUrl m_SipUrl_currIpaddr_CSCF( + template(value) SipUserProfile p_userprofile + ) := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, //* optional + hostPort := { + host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.currPort //* optional integer + } + } + }, + urlParameters := omit, + headers := omit + } + + template(present) SemicolonParam_List mw_semicolonParams_realm( + template GenValue p_realm + ) := + superset( + { + "realm", + p_realm + }, + { + "nonce", + ? + }, + { + "algorithm", + { tokenOrHost := "AKAv1-MD5" } + }, + { + "ik", + ? + }, + { + "ck", + ? + } + ); + + template(value) SemicolonParam_List m_semicolonParams_language( + template(omit) GenValue p_language := omit + ) := { + { + "language", + p_language + } + } + + template(present) SemicolonParam_List mw_semicolonParams_language( + template GenValue p_language + ) := { + { + "language", + p_language + } + } + + template(value) SemicolonParam_List m_semicolonParams_isub( + template(omit) GenValue p_address := omit + ) := { + { + "isub", + p_address + } + } + } + + group headerFieldTemplates { + + template(value) MinSE m_minSE( + template(value) DeltaSec p_ds + ) := { + fieldName := MIN_SE_E, + deltaSec := p_ds, + minSeParam := omit + } + + template(present) PathValue mw_pathvalue( + template(present) SipUrl p_sipUrl := ? + ) := { + nameAddr := { + displayName := *, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := * + } + + template(value) Path m_path( + template(value) charstring p_host, + template(value) integer p_port, + template(value) SipUrl p_sipUrl + ) modifies m_path_TS := { + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit + } + } + } + + template(value) Path m_path_TS( + template(value) charstring p_host, + template(value) integer p_port + ) := { + fieldName := PATH_E, + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "registrar", + password := omit + }, + hostPort := {p_host, p_port} + } + }, + urlParameters := { + { + id := "lr", + paramValue := omit + } + }, + headers := omit + } + }, + rrParam := omit + } + } + } + + /** + * @desc Path header field expectation with at least one path value + * @param p_sipUrl value of the last element in the list of path values + */ + template(present) Path mw_path( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := PATH_E, + pathValues := {mw_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl + } + + template(value) PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := { + fieldName := P_ACCESS_NETWORK_INFO_E, + accessType := "IEEE-802.11a", + genericParams := { + { + id := "extension-access-info", + paramValue := { tokenOrHost := "192.1.1.20" } + } + } + } + + template(value) PAssertedService m_pAssertedService( + template(value) PAssertedServiceValue p_pAssertedServiceValue + ) := { + fieldName := P_ASSERTED_SERVICE_E, + pAssertedServiceValue := p_pAssertedServiceValue + } + + template(value) PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := { + fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, + chargeAddrParams := { + { + id := "ccf", + paramValue := { tokenOrHost := "192.1.1.1" } + }, // value is fixed because it is deleted on proxy + { + id := "ecf", + paramValue := { tokenOrHost := "192.1.1.2" } + } // value is fixed because it is deleted on proxy + } + } + + template(value) PChargingVector m_pChargingVector( + template(value) charstring p_icidValue, + template(omit) SemicolonParam_List p_chargeParams := omit + ) modifies m_pChargingVector_icid_TS := { + icidValue := p_icidValue, + chargeParams := p_chargeParams + } + + // NOTE STF471 change: icidValue extracted from chargeParams, chargeParams removed + template(value) PChargingVector m_pChargingVector_icid_TS := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := c_icid_value, + chargeParams := omit + } + + template(value) PChargingVector m_pChargingVector_origIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_orig_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_termIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_term_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_accessNetwInfo( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_term_ioi, + paramValue := p_homeDomain + }, + { + id := c_access_network_charging_info, + paramValue := { tokenOrHost := "192.1.1.10" } + } + } + } + + // NOTE STF471 change: icidValue added + template(present) PChargingVector mw_pChargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, + chargeParams := + superset( + { + id := p_id, + paramValue := p_paramValue + } + ) + } + + template(value) PMediaAuthorization m_pMediaAuthorization_fixedValue := { + fieldName := P_MEDIA_AUTHORIZATION_E, + pMediaAuthorizations := {"A"} // example + } + + + template(value) PEarlyMedia m_pEarlyMedia_sup := { + fieldName := P_EARLY_MEDIA_E, + em_param := {"supported"} + } + + + template(value) ProxyRequire m_proxyRequire_secAgree := { + fieldName := PROXY_REQUIRE_E, + optionsTags := {"sec-agree"} + } + + template(value) PVisitedNetworkID m_pVisitedNetworkID_TS := { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := { + { + vNetworkSpecToken := "Visited ETSI 1", + genericParams := omit + } + } + } + + template(present) PVisitedNetworkID mw_pVisitedNetworkID( + template(present) charstring p_vNetworkSpecToken + ) modifies m_pVisitedNetworkID_TS := { + vNetWorkSpec := { + { + vNetworkSpecToken := p_vNetworkSpecToken, + genericParams := * + } + } + } + + template(value) RecordRoute m_recordRoute_notmatching := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Require m_require := { + fieldName := REQUIRE_E, + optionsTags := {} + } + + template(value) Require m_require_secAgree + modifies m_require := { + optionsTags := {"sec-agree"} + } + + template(present) Require mw_require_path + modifies m_require := { + optionsTags := superset("path") + } + + template(value) Route m_route_interface( + template(value) ImsInterfaceProfile p_interfaceprofile + ) modifies m_route_notmatching := { + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_interfaceprofile.SUTHomeDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Route m_route_notmatching := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + + template(value) SessionExpires m_se( + template(value) DeltaSec p_ds + ) modifies mw_se := { + deltaSec := p_ds + } + + template(present) SessionExpires mw_se := { + fieldName := SESSION_EXPIRES_E, + deltaSec := ?, + seParam := omit + } + + template(value) Supported m_supported := { + fieldName := SUPPORTED_E, + optionsTags := {} + } + + template(value) Supported m_supported_timer + modifies m_supported := { + optionsTags := {"timer"} + } + + template(value) Supported m_supported_histinfo + modifies m_supported := { + optionsTags := {"histinfo"} + } + + + template(value) Supported m_supported_fromChange + modifies m_supported := { + optionsTags := {"from-change"} + } + + template(value) To m_To_targetRefreshRequest( + template(value) To p_To + ) := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := p_To.addressField.nameAddr.displayName, + addrSpec := p_To.addressField.nameAddr.addrSpec + } + }, // end addressField + toParams := { + { + id := c_tagId, + paramValue := { tokenOrHost := f_getRndTag() } + } + } + } + + template(value) ViaBody m_ViaBody_virtualUEinPCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_userprofile.contactIpaddr, + portField := p_userprofile.contactPort + }, + viaParams := { + { + id := c_branchId, + paramValue := { + tokenOrHost := p_branch_val + } + } + } + } + + template(value) ViaBody m_ViaBody_virtual_XCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) modifies m_ViaBody_virtualUEinPCSCF := { + sentBy := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + + template(value) Via m_via_notmatching := { + fieldName := VIA_E, + viaBody := { + { + sentProtocol := m_SentProtocol("UDP"), + sentBy := { + host := "unknown.domain.name", + portField := 10000 + }, + viaParams := { + { + id := c_branchId, + paramValue := { tokenOrHost := "abcd0000" } + } + } + } + } + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(value) WwwAuthenticate m_wwwAuthenticate( + template(value) Challenge p_challenge + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := p_challenge + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(present) WwwAuthenticate mw_wwwAuthenticate( + template(present) SemicolonParam_List p_semicolonParam_List := ? + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := p_semicolonParam_List // set of GenericParam + } + } + + template(present) SemicolonParam_List mw_challenge := superset(mw_ck, mw_ik); + + template(present) GenericParam mw_ck := { + "ck", * + } + + template(present) GenericParam mw_ik := { + "ik", * + } + + /** + * @desc AcceptContact header field + * @param p_semicolonParam_List value + */ + template(value) AcceptContact m_acceptContact( + template(omit) SemicolonParam_List p_semicolonParam_List := omit + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + /** + * @desc Authenticate header field + * @param p_semicolonParam_List value + */ + template(present) AcceptContact mw_acceptContact( + template SemicolonParam_List p_semicolonParam_List + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + template(present) SubscriptionState mw_subscriptionState( + template(present) charstring p_state := ? + ) := { + fieldName := SUBSCRIPTION_STATE_E, + subState := p_state, + substateParams := omit + } + + // [3455/5.1 ] + template(value) PAssociatedURI m_pAssociatedURI( + template(value) NameAddr p_nameAddr + ) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + { + nameAddr := p_nameAddr, + genericParams := omit + } + } + } + + template(present) SecurityServer mw_securityServer( + template(present) SecurityMechanism_List p_securityMechanism_List := ? + ) := { + fieldName := SECURITY_SERVER_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityClient m_securityClient( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_CLIENT_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityVerify m_securityVerify( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_VERIFY_E, + securityMech := p_securityMechanism_List + } + + template(value) RSeq m_rseq9999 := { + fieldName := RSEQ_E, + responseNum := 9999 // Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + + template(value) Expires m_expires( + template(value) integer p_deltaSec + ) := { + fieldName := EXPIRES_E, + deltaSec := int2str(valueof(p_deltaSec)) + } + + + } // end group headerFieldTemplates + + group messageBodyTemplates { + + group xmlTemplates { + + template(value) XmlBody m_XmlBody_ConfInfo( + template(value) Conference_type p_confInfo + ) := { + conference := p_confInfo + } + + template(value) XmlBody m_XmlBody_CW( + template(value) Ims_cw p_cw + ) := { + cw := p_cw + } + + template(value) XmlBody m_XmlBody_CUG( + template(value) Cug p_cug + ) := { + cug := p_cug + } + + template(value) XmlBody m_XmlBody_MCID( + template(value) Mcid p_mcid + ) := { + mcid := p_mcid + } + + template(value) XmlBody m_XmlBody_PSTNTransit( + template(value) PSTN_transit p_pstn + ) := { + pstnTransit := p_pstn + } + + template(value) XmlBody m_XmlBody_simservs( + template(value) Simservs p_simservs + ) := { + simservs := p_simservs + } + + template(value) XmlBody m_XmlBody_ACR_ICB( + template(value) Incoming_communication_barring p_icb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_icb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_ACR_OCB( + template(value) Outgoing_communication_barring p_ocb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_ocb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_CDIVN( + template(value) Comm_div_info_type p_cdivn + ) := { + cdivn := p_cdivn + } + + template(value) XmlBody m_XmlBody_Reginfo( + template(value) Reginfo p_regInfo + ) := { + regInfo := p_regInfo + } + + template(value) XmlBody m_XmlBody_Presence( + template(value) Presence p_presence + ) := { + presence := p_presence + } + + template(value) MessageBody m_messageBodyXML( + template(value) XmlBody p_xmlBody + ) := { + xmlBody := p_xmlBody + } + + template(value) Reginfo m_reginfo( + template(value) XSD.AnyURI p_user + ) := { + full, + 0, + {m_registration(p_user)}, + {} + } + + template(value) Registration m_registration( + template(value) XSD.AnyURI p_user + ) := { + p_user, // XSD.anyURI aor + "a7", // XSD.string id + init, // enumerated {active,init,terminated} state, + {}, // record of Contact contact_list optional, + {} // record of anytype elem_list optional + } + + template(present) XmlBody mw_XmlBody_ConfInfo( + template(present) Conference_type p_confInfo := ? + ) := { + conference := p_confInfo + } + + template(present) XmlBody mw_XmlBody_CUG( + template(present) Cug p_cug := ? + ) := { + cug := p_cug + } + + template(present) XmlBody mw_XmlBody_MCID( + template(present) Mcid p_mcid := ? + ) := {mcid := p_mcid} + + template(present) XmlBody mw_XmlBody_PSTNTransit( + template(present) PSTN_transit p_pstn := ? + ) := { + pstnTransit := p_pstn + } + + template(present) XmlBody mw_XmlBody_CDIVN( + template(present) Comm_div_info_type p_cdivn := ? + ) := { + cdivn := p_cdivn + } + + template(present) XmlBody mw_XmlBody_simservs( + template(present) Simservs p_simservs := ? + ) := { + simservs := p_simservs + } + + template(present) XmlBody mw_XmlBody_ResourceLists( + template(present) Resource_lists p_resourceLists := ? + ) := { + resourceLists := p_resourceLists + } + + template(present) XmlBody mw_XmlBody_Reginfo( + template(present) Reginfo p_regInfo := ? + ) := { + regInfo := p_regInfo + } + + template(present) MessageBody mw_messageBodyXML( + template(present) XmlBody p_xmlBody := ? + ) := { + xmlBody := p_xmlBody + } + + + } // end group xmlTemplates + + group acrCbTemplates { + + template(value) Incoming_communication_barring m_ICB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) Outgoing_communication_barring m_OCB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) RuleType m_ruleType_actionFalse( + template(value) ConditionsType p_condition + ) := { + id := "rule66", + conditions := p_condition, + actions := { + elem_list := {""} + }, + transformations := omit + } + + template(value) ConditionsType m_conditionsType_identity( + template(value) charstring p_id + ) := { + { + { + identity_list := { + { + { + { + one := { + id := p_id, + elem := omit + } + } + } + } + } + } + } + } + + + } // end group acr_cbTemplates + + group cugTemplates { + + template(value) Cug m_CUG( + template(omit) CugRequestType p_crt := omit, + template(omit) NetworkIdentityType p_nit := omit, + template(omit) SixteenbitType p_cibc := omit, + template(omit) TwobitType p_cci := omit + ) := { + active := omit, + attr := omit, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(present) Cug mw_CUG( + template CugRequestType p_crt, + template NetworkIdentityType p_nit, + template SixteenbitType p_cibc, + template TwobitType p_cci + ) := { + active := omit, + attr := *, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(value) CugRequestType m_cugReqType( + template(value) boolean p_outAccessRequest, + template(value) CugIndexType p_cugIndex + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + template(present) CugRequestType mw_cugReqType( + template(present) boolean p_outAccessRequest := ?, + template(present) CugIndexType p_cugIndex := ? + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + } // end group cugTemplates + + group cwTemplates { + + template(value) Ims_cw m_CW( + template(value) TEmptyType p_cwi + ) := { + attr := omit, + communication_waiting_indication := p_cwi, + elem_list := {} + } + + template(present) Ims_cw mw_ims_cw( + template(present) TEmptyType p_cwi := ? + ) := { + attr := *, + communication_waiting_indication := p_cwi, + elem_list := ? + } + + } // end group cwTemplates + + group mcidTemplates { + + template(value) Mcid m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + mcidRequestIndicator := "1", + holdingIndicator := "0" + } + } + } + + template(value) Mcid m_mcid_request_mcidIndicatorTrue_holdIndTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := "1" + } + } + } + + template(present) Mcid mw_mcid_request_mcidIndicatorTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := ? + } + } + } + + template(value) Mcid m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + mcidResponseIndicator := "1", + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue + modifies m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := ? + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndFalse + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndTrue + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "1" + } + } + } + + } // end group mcidTemplates + + group pstnTemplates { + + template(value) PSTN_transit m_PSTN_transit_BC1( + template(value) BearerCapabilityType p_bct + ) := { + bearerInfomationElement_list := {p_bct}, + highLayerCompatibility_list := {}, + lowLayerCompatibility := omit, + progressIndicator_list := {}, + display_list := {} + } + + template(value) PSTN_transit m_PSTN_transit_BC2( + template(value) BearerCapabilityType p_bct, + template(value) BearerCapabilityType p_bct2 + ) modifies m_PSTN_transit_BC1 := { + bearerInfomationElement_list := {p_bct, p_bct2} + } + + template(present) PSTN_transit mw_PSTN_transit_bc( + template(present) BearerCapabilityType p_bct := ?, + template(present) BearerCapabilityType p_bct2 := ? + ) := { + bearerInfomationElement_list := {p_bct, p_bct2}, + highLayerCompatibility_list := {*, *}, + lowLayerCompatibility := *, + progressIndicator_list := ?, + display_list := ? + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc + ) modifies m_PSTN_transit_BC1 := { + highLayerCompatibility_list := {p_hlc} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC2( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) HighLayerCompatibilityType p_hlc2 + ) modifies m_PSTN_transit_BC1_HLC1 := { + highLayerCompatibility_list := {p_hlc, p_hlc2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_LLC( + template(value) BearerCapabilityType p_bct, + template(value) LowLayerCompatibilityType p_llc + ) modifies m_PSTN_transit_BC1 := { + lowLayerCompatibility := p_llc + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI2( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2 + ) modifies m_PSTN_transit_BC1_PI1 := { + progressIndicator_list := {p_pi1, p_pi2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI3( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2, + template(value) ProgressIndicatorType p_pi3 + ) modifies m_PSTN_transit_BC1_PI2 := { + progressIndicator_list := {p_pi1, p_pi2, p_pi3} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1_HLC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) BearerCapabilityType m_BearerCapabilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + bCoctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCabability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + bCoctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + bCoctet4_1 := omit, + bCoctet5 := omit, + bCoctet5a := omit, + bCoctet5bV110 := omit, + bCoctet5bV120 := omit, + bCoctet5c := omit, + bCoctet5d := omit, + bCoctet6 := omit, + bCoctet7 := omit, + bCoctet7a := omit, + bCoctet7b := omit + } + + template(present) BearerCapabilityType mw_BearerCapabilityType( + template(present) BCOctet3Type p_BCOctet3Type := ?, + template(present) BCOctet4Type p_BCOctet4Type := ? + ) := { + bCoctet3 := p_BCOctet3Type, + bCoctet4 := p_BCOctet4Type, + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(present) BearerCapabilityType mw_BearerCapabilityType_TrfCap( + template(value) Bit5 p_InfoTrfCap + ) modifies m_BearerCapabilityType := { + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(value) ProgressIndicatorType m_ProgressIndicatorType( + template(value) Bit7 p_progDesc + ) := { + progressOctet3 := { + codingStandard := "00", + location := "0000" + }, + progressOctet4 := { + progressDescription := bit2str(valueof(p_progDesc)) + } + } + + template(present) ProgressIndicatorType mw_ProgressIndicatorType( + template(present) ProgressOctet3Type p_ProgressOctet3Type := ?, + template(present) ProgressOctet4Type p_ProgressOctet4Type := ? + ) := { + progressOctet3 := p_ProgressOctet3Type, + progressOctet4 := p_ProgressOctet4Type + } + + template(value) LowLayerCompatibilityType m_LowLayerCompatibilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + lLOctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCapability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + lLOctet3a := omit, + lLOctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + lLOctet4_1 := omit, + lLOctet5 := omit, + lLOctet5a := omit, + lLOctet5bV110 := omit, + lLOctet5bV120 := omit, + lLOctet5c := omit, + lLOctet5d := omit, + lLOctet6 := omit, + lLOctet6aHDLC := omit, + lLOctet6aUserSpecific := omit, + lLOctet6b := omit, + lLOctet7 := { + layer3Identification := "11", + userInfoLayer3Protocol := "00010" + }, + lLOctet7aUserSpecific := omit, + lLOctet7aX25 := omit, + lLOctet7bX25 := omit, + lLOctet7c := omit, + lLOctet7aTR9577 := omit, + lLOctet7bTR9577 := omit + } + + template(present) LowLayerCompatibilityType mw_LowLayerCompatibilityType( + template(present) LLOctet3Type p_LLOctet3 := ?, + template(present) LLOctet4Type p_LLOctet4 := ?, + template(present) LLOctet7Type p_LLOctet7 := ? + ) := { + lLOctet3 := p_LLOctet3, + lLOctet3a := *, + lLOctet4 := p_LLOctet4, + lLOctet4_1 := *, + lLOctet5 := *, + lLOctet5a := *, + lLOctet5bV110 := *, + lLOctet5bV120 := *, + lLOctet5c := *, + lLOctet5d := *, + lLOctet6 := *, + lLOctet6aHDLC := *, + lLOctet6aUserSpecific := *, + lLOctet6b := *, + lLOctet7 := p_LLOctet7, + lLOctet7aUserSpecific := *, + lLOctet7aX25 := *, + lLOctet7bX25 := *, + lLOctet7c := *, + lLOctet7aTR9577 := *, + lLOctet7bTR9577 := * + } + + template(value) HighLayerCompatibilityType m_HighLayerCompatibilityType( + template(value) Bit7 p_HLOctet4 + ) := { + hLOctet3 := { + codingStandard := "00", + interpretation := "100", + presentationMethod := "01" + }, + hLOctet4 := { + highLayerCharacteristics := bit2str(valueof(p_HLOctet4)) + }, + hLOctet4aMaintenance := omit, + hLOctet4Audio := omit + } + + template(present) HighLayerCompatibilityType mw_HighLayerCompatibilityType( + template(present) HLOctet3Type p_HLOctet3 := ?, + template(present) HLOctet4Type p_HLOctet4 := ? + ) := { + hLOctet3 := p_HLOctet3, + hLOctet4 := p_HLOctet4, + hLOctet4aMaintenance := *, + hLOctet4Audio := * + } + + } // end group pstnTemplates + + group cdivnTemplates { + + /* general CDIVN subscription */ + template(value) Comm_div_info_type m_CDIVN_sub := { + entity := "comm-div-info", + comm_div_subs_info := { + attr := omit, + comm_div_selection_criteria := { + attr := omit, + originating_user_selection_criteria := omit, + diverting_user_selection_criteria := omit, + diverted_to_user_selection_criteria := omit, + diversion_time_selection_criteria := omit, + diversion_reason_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_trigger_criteria := omit, + comm_div_info_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_info := omit, + elem_list := {} + } + + } // end group cdivnTemplates + + group resourceListsTemplates { + + template(value) Resource_lists m_ResourceList_2Users( + template(value) EntryType p_user1, + template(value) EntryType p_user2 + ) := { + sequence_list := { + { + list := { + name := omit, + attr := omit, + display_name := omit, + sequence_list := { + { + choice := { + entry := p_user1 + } + }, + { + choice := { + entry := p_user2 + } + } + }, + elem_list := {} + } + } + } + } + + template(value) EntryType m_EntryUser( + template(value) SipUrl p_user + ) := { + uri := + valueof(p_user.components.sip.userInfo.userOrTelephoneSubscriber) + & "@" + & valueof(p_user.components.sip.hostPort.host), + attr := omit, + display_name := omit, + elem_list := {} + } + + } // end group resourceListsTemplates + + group ims3GppTemplates { + + template(present) TIMS3GPP mw_Ims_3gpp_CW := { + version := 1.0, + attr := *, + choice := { + alternative_service := { + attr := *, + type_ := ?, + reason := ?, + elem_list := ? + } + }, + elem_list := ? + } + + } // end group ims3gppTemplates + + group confTemplates { + + template(value) XSD.Boolean m_boolXSD_true := true; + + template(value) XSD.Boolean m_boolXSD_false := false; + + template(value) urn_ietf_params_xml_ns_conference_info.Media_type m_mediatype_status( + template(value) Media_status_type p_status + ) := { + id := "1", + attr := omit, + display_text := omit, + type_ := omit, + label_ := omit, + src_id := omit, + status := p_status, + elem_list := {} + } + + template(value) Endpoint_type m_endpoint( + template(omit) charstring p_Uri := omit, + template(omit) Endpoint_status_type p_epStatus := omit, + template(omit) Joining_type p_joinMethod := omit, + template(omit) Disconnection_type p_discMethod := omit, + template(value) urn_ietf_params_xml_ns_conference_info.Media_type p_mediastatus + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + referred := omit, + status := p_epStatus, + joining_method := p_joinMethod, + joining_info := omit, + disconnection_method := p_discMethod, + disconnection_info := omit, + media_list := {p_mediastatus}, // optional, + call_info := omit, + elem_list := {} + } + + template(value) User_type m_1user( + template(omit) charstring p_Uri := omit, + template(value) Endpoint_type p_endpoint + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + associated_aors := omit, + roles := omit, + languages := omit, + cascaded_focus := omit, + endpoint_list := {p_endpoint}, // optional, + elem_list := {} + } + + template(value) Users_type m_users_1user_full( + template(value) User_type p_user + ) := { + state := full, + attr := omit, + user_list := {p_user}, + elem_list := {} + } + + template(value) Users_type m_users_2user_full( + template(value) User_type p_user, + template(value) User_type p_user2 + ) modifies m_users_1user_full := { + user_list := {p_user, p_user2} + } + + template(value) Conference_state_type m_conference_state( + template(value) UnsignedInt p_nUsers, + template(value) boolean p_active, + template(value) boolean p_locked + ) := { + attr := omit, + user_count := p_nUsers, + active := p_active, + locked := p_locked, + elem_list := {} + } + + template(value) Conference_type m_ci_cUri_cState_userEntity( + template(value) charstring p_cUri, + template(value) Conference_state_type p_cState, + template(value) Users_type p_users + ) := { + entity := p_cUri, + state := full, + version := 1, + attr := omit, + conference_description := omit, + host_info := omit, + conference_state := p_cState, + users := p_users, + sidebars_by_ref := omit, + sidebars_by_val := omit, + elem_list := {} + } + + template(present) Conference_type mw_conferenceInfo_active := { + entity := ?, + state := *, + version := *, + attr := *, + conference_description := *, + host_info := *, + conference_state := ?, + users := { + state := ?, + attr := *, + user_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + associated_aors := *, + roles := *, + languages := *, + cascaded_focus := *, + endpoint_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + referred := *, + status := connected, + joining_method := dialed_in, + joining_info := *, + disconnection_method := *, + disconnection_info := *, + media_list := ?, + call_info := *, + elem_list := ? + } + }, + elem_list := ? + } + }, + elem_list := ? + }, + sidebars_by_ref := *, + sidebars_by_val := *, + elem_list := ? + } + } + + } // end group messageBodyTemplates + + group messageTemplates { + + group modifiedTemplates { + + group requestSend { + + template(value) ACK_Request m_ACK_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) ACK_Request m_ACK_Request_AS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_ACK_Request_IMS := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute + } + } + + template(value) ACK_Request m_ACK_Request_sdp_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + route := p_route + }, + messageBody := p_mb + } + + template(value) ACK_Request m_ACK_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := { + fieldName := CONTENT_LENGTH_E, + len := f_MessageBodyLength(valueof(p_mb)) + }, + contentType := { + fieldName := CONTENT_TYPE_E/*, + mediaType := m_mimeMultipart*/ + }, + route := p_route + }, + messageBody := p_mb + } + + template(value) BYE_Request m_BYE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute // used in case of AS as TS - for ISC interface + } + } // end of temlate m_BYE_Request_IMS + + template(value) BYE_Request m_BYE_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) GenValue p_cause + ) modifies m_BYE_Request_Base := { + msgHeader := { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template(value) BYE_Request m_BYE_Request_UserToUser_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) BYE_Request m_BYE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + route := p_route + } + } + + template(value) CANCEL_Request m_CANCEL_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) CANCEL_Request m_CANCEL_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) integer p_cause + ) modifies m_CANCEL_Request_IMS := { + msgHeader := {reason := m_Reason(p_cause)} + } + + template(value) CANCEL_Request m_CANCEL_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_IMS := { + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS_Base( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)) + }, + messageBody := p_mb + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + /** + * @desc INFO message + * @desc + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) INFO_Request m_INFO_Request_Xml_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_xmlApplication) + } + } + + template(value) INVITE_Request m_INVITE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) LibSip_SIPTypesAndValues.Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_noBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + } + } + + template(value) INVITE_Request m_INVITE_Request_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_UE := { + msgHeader := {allow := p_allow} + } + + template(value) INVITE_Request m_INVITE_Request_noBody_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := {allow := p_allow} + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_historyInfo + */ + template(value) INVITE_Request m_INVITE_Request_HistoryInfo_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + */ + template(value) INVITE_Request m_INVITE_Request_IMS_noBody( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedID + * @param p_privacy + */ + template(value) INVITE_Request m_INVITE_Request_Mime_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_Mime_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_acceptContact + * @param p_pAssertedID + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) AcceptContact p_acceptContact, + template(value) PAssertedID p_pAssertedID, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + acceptContact := p_acceptContact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_pAssertedID + * @param p_privacy + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + privacy := p_privacy, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedService + */ + template(value) INVITE_Request m_INVITE_Request_PAssertedService_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedService p_pAssertedService + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + pAssertedService := p_pAssertedService + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PEarlyMedia_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + pEarlyMedia := m_pEarlyMedia_sup + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_Privacy_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID, + privacy := p_privacy + } + } + + template(value) INVITE_Request m_INVITE_Request_SessionExpires_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) SessionExpires p_se + ) modifies m_INVITE_Request_UE := { + msgHeader := { + sessionExpires := p_se + } + } + + template(value) INVITE_Request m_INVITE_Request_minSE_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_UE := { + msgHeader := { + minSE := p_minSE + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_minSE + */ + template(value) INVITE_Request m_INVITE_Request_minSE_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_User2UserData_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_MBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText), + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) MESSAGE_Request m_MESSAGE_Request_NoBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) GenValue p_homeDomain + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingVector_origIoi_fixedValue(p_homeDomain) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pAccessNetworkInfo := omit, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(m_MBody_longPlainText)), + contentType := m_contentType(c_plainText) + }, + messageBody := m_MBody_longPlainText + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_Conference( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication), + event := { + fieldName := EVENT_E, + eventType := "conference", + eventParams := omit + }, + subscriptionState := { + fieldName := SUBSCRIPTION_STATE_E, + subState := "active", + substateParams := omit + }, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_RegInfo( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlreginfoApplication), + event := m_Event_reg, + subscriptionState := m_SubscriptionState_active, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) PRACK_Request m_PRACK_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) RAck p_RAck, + template(value) MessageBody p_mb + ) modifies m_PRACK_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_PUBLISH_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText /*c_sdpApplication*/), + cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), + event := p_event, + fromField := p_from, + route := p_route, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_PUBLISH_Request_UE := { + msgHeader := { + recordRoute := p_recordRoute, + pChargingVector := p_pChargingVector + } + } + + /** + * @desc REFER message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_contact + * @param p_from + * @param p_to + * @param p_via + * @param p_referTo + * @param p_referredBy + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) REFER_Request m_REFER_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(omit) ReferredBy p_referredBy := omit, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_REFER_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + referredBy := p_referredBy, + referTo := p_referTo, + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) REGISTER_Request m_REGISTER_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(omit) ProxyRequire p_proxyRequire := omit, + template(omit) Require p_require := omit, + template(omit) SecurityClient p_securityClient := omit, + template(omit) SecurityVerify p_securityVerify := omit, + template(omit) Supported p_supported := omit + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + proxyRequire := p_proxyRequire, + require := p_require, + securityClient := p_securityClient, + securityVerify := p_securityVerify, + supported := p_supported, + toField := p_to, + via := p_via + } + } + + + template(value) REGISTER_Request m_REGISTER_Request_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + path := m_path_TS(p_host, p_port), + pChargingVector := m_pChargingVector_icid_TS, + pVisitedNetworkID := m_pVisitedNetworkID_TS, + require := { + fieldName := REQUIRE_E, + optionsTags := {"path"} + }, + toField := p_to, + via := p_via + } + } + + template(value) REGISTER_Request m_REGISTER_Request_IMS_3party( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(omit) Path p_path := omit + ) modifies m_REGISTER_Request_IMS := { + msgHeader := {path := p_path} + } + + template(value) REGISTER_Request m_REGISTER_Request_expires_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(value) DeltaSec p_deltaSec + ) modifies m_REGISTER_Request_IMS := { + msgHeader := { + expires := m_expires(str2int(valueof(p_deltaSec))) + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_UE( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Route p_route := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000, + route := p_route + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + }, + messageBody := p_mb + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_event_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(value) Event p_event, + template(value) charstring p_contentType + ) modifies m_SUBSCRIBE_Request_mb_UE := { + msgHeader := { + contentType := m_contentType(p_contentType), + event := p_event + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Event p_event + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := p_event + } + } + + } // end group requestSend + + group requestReceive { + + template(present) ACK_Request mw_ACK_Request_noPaccessNetworkInfo( + template CallId p_callId + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) ACK_Request mw_ACK_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) BYE_Request mw_BYE_Request_noPChargingFunction_UE( + template CallId p_callId + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) BYE_Request mw_BYE_Request_via_PChargingVector_UE( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ?, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_via_UE( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_noPChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPCharging + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPChargingPreferred + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred( + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact( + template(present) PAssertedID p_pAssertedID := ?, + template(present) AcceptContact p_acceptContact := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + acceptContact := p_acceptContact + } + } + + template(present) INVITE_Request mw_INVITE_Request_RecordRoute_Via( + template(present) RecordRoute p_recordRoute := ?, + template(present) Via p_via := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + recordRoute := p_recordRoute, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_route( + template(present) Route p_route := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_require( + template(present) Require p_require := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + require := p_require + } + } + + template(present) INVITE_Request mw_INVITE_Request_supported( + template(present) Supported p_supported := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + supported := p_supported + } + } + + template(present) INVITE_Request mw_INVITE_Request_SessionExpires( + template(present) SessionExpires p_sessionExpires := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + sessionExpires := p_sessionExpires + } + } + + template(present) INVITE_Request mw_INVITE_Request_User2UserData( + template(present) UserToUser.uuiData p_U2UData := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + userToUser := mw_UserToUserData(p_U2UData) + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_requestLine( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) SipUrl p_requestUri := ? + ) modifies mw_INVITE_Request_IMS := { + requestLine := { + requestUri := p_requestUri + }, + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_PAsserted_noPPreferred( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_mb( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ? + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_cug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) Cug p_cug := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_CUG(p_cug)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_CUG(p_cug)) + ) + } + + /* TITAN compiler error: Restriction on template formal parameter does not allow usage of complemented list match without omit or AnyValueOrNone in the list + template(present) INVITE_Request mw_INVITE_Request_IMS_noCug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(complement(mw_XmlBody_CUG(?))), + mw_MBody_MIMESdpXml(?, complement(mw_XmlBody_CUG(?))) + ) + }*/ + + template(present) INVITE_Request mw_INVITE_Request_IMS_pstn( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PSTN_transit p_pstn := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)) + ) + } + + /** + * @desc Await INVITE using topology hiding + */ + template(present) INVITE_Request mw_INVITE_Request_TH + modifies mw_INVITE_Request_TH_R10 := { + msgHeader := { + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_TH_R10 + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * @desc Await INVITE without PAsserted and Privacy + * @param p_from + */ + template(present) INVITE_Request mw_INVITE_Request_noPasserted_noPrivacy( + template From p_from + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := omit, + pPreferredID := omit + } + } + + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_PassertedPrivacy( + template From p_from, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_noPasserted_noPrivacy := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_Passerted_ifPrivacy( + template From p_from, + template PAssertedID p_pAssertedID, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := p_pAssertedID, + privacy := p_privacy ifpresent + } + } + + /** + * @desc Await INVITE with history info + * @param p_historyInfo + */ + template(present) INVITE_Request mw_INVITE_Request_HistoryInfo( + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunctionPrefId_UE + modifies mw_MESSAGE_Request_noPchargingFunction_UE := { + msgHeader := { + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS := + mw_MESSAGE_Request_noPchargingFunction_UE; + + template(present) MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred( + template CallId p_callId, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + route := p_route + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_via( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + via := p_via + } + } + + template(present) NOTIFY_Request mw_NOTIFY_Request( + template CallId p_callId, + template(present) charstring p_state := ?, + template(present) charstring p_contentType := ?, + template Event p_event, + template MessageBody p_mb + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + subscriptionState := mw_subscriptionState(p_state), + contentType := mw_contentType(p_contentType), + event := p_event + }, + messageBody := p_mb + } + + template(present) PRACK_Request mw_PRACK_Request_sdp( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_PRACK_Request_Base := { + msgHeader := { + callId := p_callId + }, + messageBody := p_mb + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_PchargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := mw_pChargingVector(p_id, p_paramValue) + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + template(present) PUBLISH_Request mw_PUBLISH_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_PUBLISH_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_IMS( + template Path p_Path, + template PChargingVector p_pChargingVector, + template PVisitedNetworkID p_pVisitedNetworkID + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + securityClient := omit, + securityVerify := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := p_authorization + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_authorizedRequest_IMS := { + msgHeader := { + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_auth_via_nosecclient_IMS( + template(present) Authorization p_authorization := ?, + template(present) Via p_via + ) modifies mw_REGISTER_authorizedRequest_wo_securityclient_IMS := { + msgHeader := { + via := p_via + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityVerify := omit, + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := * + } + } + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS( + template(present) From p_from := ?, + template(present) To p_to := ?, + template PAssertedID p_pAssertedID, + template PChargingVector p_pChargingVector + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + pAccessNetworkInfo := *, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector + } + } + + template(present) UPDATE_Request mw_UPDATE_Request_fromChange( + template CallId p_callId, + template(present) From p_from := ? + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + callId := p_callId, + fromField := p_from + } + } + + } // end group requestReceive + + group responseSend { + + group responseSend1xx { + + template(value) Response m_Response_18x_Base( + template(value) StatusLine_18x p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_18XonINVITE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact // mandatory field due to 24 229 rel 7.9 + } + } + + template(value) Response m_Response_18XonINVITE_AlertInfo( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) AlertInfo p_alertInfo + ) modifies m_Response_18x_Base := { + msgHeader := { + alertInfo := p_alertInfo + } + } + + template(value) Response m_Response_18XonINVITE_sdp_require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + rSeq := m_rseq9999 + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_AS( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + recordRoute := p_recordRoute + } + } + + template(value) Response m_Response_18XonINVITE_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + rSeq := m_rseq9999 + } + } + + template(value) Response m_Response_18XonINVITE_HistoryInfo_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_18XonINVITE_PchargingVector( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_18XonINVITE_pEearlyMedia( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PEarlyMedia p_pEarlyMedia + ) modifies m_Response_18x_Base := { + msgHeader := { + pEarlyMedia := p_pEarlyMedia + } + } + + template(value) Response m_Response_18XonINVITE_pPreferred_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + template(value) Response m_Response_18XonINVITE_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported and p_privacy to be able to modify from m_Response_18XonINVITE_privacy_UE + template(value) Response m_Response_18XonINVITE_supported_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_18XonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_18XonINVITE_recordRoute_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) RecordRoute p_recordRoute + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + recordRoute := p_recordRoute // for INVITE response + } + } + + template(value) Response m_Response_18XonINVITE_Require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Require p_require + ) modifies m_Response_18x_Base := { + msgHeader := { + require := p_require + } + } + + // NOTE STF471: removed m_Response_18XonINVITE_Require_ifpresent as it is same as m_Response_18XonINVITE_Require + template(value) Response m_Response_18XonINVITE_UserToUser( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_18x_Base := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_18XonINVITE_Xml( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_Xml := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + // NOTE STF471: changed order of parameter p_require and p_mb to be able to modify from m_Response_18XonINVITE_sdp_UE + template(value) Response m_Response_18XonINVITE_require_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit, + template(omit) LibSip_SIPTypesAndValues.Allow p_allow := omit + ) modifies m_Response_18XonINVITE_sdp_UE := { + msgHeader := { + require := p_require, + allow := p_allow + } + } + + } // end group responseSend1xx + + group responseSend2xx { + + template(value) Response m_Response_2xx_Base( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_2xx_ext( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + route := p_route, // f_route(), + recordRoute := + p_recordroute // f_recordroute() + } + } + + template(value) Response m_Response_2xx_mbody( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_2xxonBYE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonINVITE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute // for INVITE response + }, + messageBody := p_mb + } + + // NOTE STF471: changed order of parameter p_historyInfo and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2xxonINVITE_HistoryInfo( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_2xxonINVITE_Mime( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) Response m_Response_2xxonINVITE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + } + + template(value) Response m_Response_2xxonINVITE_PchargingVector( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_mbody := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pPreferred_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pAsserted_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + // NOTE STF471: changed order of parameter p_pAssertedID/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_pAsserted_UE + template(value) Response m_Response_2XXonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_2XXonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_privacy and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_privacy_UE + template(value) Response m_Response_2XXonINVITE_supported_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_2XXonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_2xxonINVITE_UserToUser( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_2xxonREGISTER_IMS( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) SipUrl p_serviceroute_sip_url, + template(value) SipUrl p_passociated_uri + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := p_serviceroute_sip_url + }, + rrParam := omit + } + } + }, + pAssociatedURI := + m_pAssociatedURI( + { + displayName := omit, + addrSpec := p_passociated_uri + } + ) // PAssociatedURI RFC3455 + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xxonSUBSCRIBE_IMS := { + } + + template(value) Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xxonMESSAGE_PCharging_UE := { + } + + template(value) Response m_Response_2xxonMESSAGE_PMediaAuth_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) Response m_Response_2xxonMESSAGE_pPreferredID_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xx_Base := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_2xxonUPDATE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute + }, + messageBody := p_mb + } + + } // end group responseSend2xx + + group responseSend3xx { + + template(value) Response m_Response_3xx_Base( + template(value) StatusLine_3xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_3XXonINVITE( + template(value) StatusLine_3xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_3xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend3xx + + group responseSend4xx { + + template(value) Response m_Response_4xx_Base( + template(value) StatusLine_4xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_4XXonINVITE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_4XXonINVITE_UE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend4xx + + template(value) Response m_Response_onCANCEL( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Base := { + } + + template(value) Response m_Response_onMESSAGE_IMS( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE_Reason( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) GenValue p_cause + ) modifies m_Response_onINVITE := { + msgHeader := { + reason := mw_Reason(p_cause) + } + } + + template(value) Response m_Response_WWWauthenticate_IMS( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) WwwAuthenticate p_wwwAuthenticate + ) modifies m_Response_Base := { + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseSend + + group responseReceive { + + group responseReceive2xx { + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_noPChargingVector_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_SDP_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + messageBody := { + sdpMessageBody := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a 200.299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xxonMESSAGE_noPCharging_UE := { + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 200 status code + template(present) Response mw_Response_200onREGISTER_IMS( + template CallId p_callId, + template CSeq p_cSeq, + template SipUrl p_ue_uri, + template LibSip_SIPTypesAndValues.Contact p_contact, + template SipUrl p_sut_scscf_uri + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + *, + { + nameAddr := { + displayName := *, + addrSpec := p_ue_uri + }, + genericParams := * + }, + * + } + }, + path := ?, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_sut_scscf_uri + }, + rrParam := * + } + } + }, + pChargingFunctionAddresses := ?, + pChargingVector := ?, + contact := p_contact + } + } + + } // end group responseReceive2xx + + group responseReceive4xx { + + // NOTE STF471: removed statusline parameter as it is a fixed 401 status code + template(present) Response mw_Response_401onREGISTER_securityServer_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + securityServer := ?, + wwwAuthenticate := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 400 status code + template(present) Response mw_Response_401onREGISTER_WWWauthenticate_IMS( + template CallId p_callId, + template CSeq p_cSeq, + template(present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseReceive4xx + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_SecServer_WWWAuth_UE( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) SecurityServer p_securityServer := ?, + template WwwAuthenticate p_wwwAuthenticate + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + securityServer := p_securityServer, + wwwAuthenticate := p_wwwAuthenticate + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PpreferredID_PassertedID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PPreferredID p_pPreferredID := ?, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_Privacy_History( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ?, + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy, + historyInfo := p_historyInfo + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_ContentType( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) ContentType p_contentType := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + contentType := p_contentType + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector + } + } + + // NOTE STF471: changed name from mw_Response_PchargingVecFctadrId + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector_PchargingFunctionAddr_PpreferredID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ?, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ?, + template(present) PPreferredID p_preferredID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector, + pChargingFunctionAddresses := p_chargingFunctionAddresses, + pPreferredID := p_preferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingFunctionAddr( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingFunctionAddresses := p_chargingFunctionAddresses + } + } + + } // end group responseReceive + + } // end group modifiedTemplates + + } // end group messageTemplates + +} // end module LibIms_Templates diff --git a/ttcn/patch_lib_ims_titan/module.mk b/ttcn/patch_lib_ims_titan/module.mk new file mode 100644 index 0000000..c18d8f7 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/module.mk @@ -0,0 +1,6 @@ +sources := \ + ttcn/LibIms_Interface.ttcn \ + ttcn/LibIms_Library.ttcn \ + ttcn/LibIms_SIPTypesAndValues.ttcn \ + ../patch_ims_titan/LibIms_Steps.ttcn \ + ../patch_ims_titan/LibIms_Templates.ttcn diff --git a/ttcn/patch_lib_iot_titan/module.mk b/ttcn/patch_lib_iot_titan/module.mk new file mode 100644 index 0000000..bcb2f7d --- /dev/null +++ b/ttcn/patch_lib_iot_titan/module.mk @@ -0,0 +1,10 @@ +sources := \ + LibIot_Functions.ttcn \ + LibIot_TestConfiguration.ttcn \ + LibIot_TypesAndValues.ttcn \ + LibIot_VxLTE_PIXITS.ttcn \ + LibIot_PIXITS.ttcn \ + LibIot_TestInterface.ttcn \ + LibIot_VxLTE_Functions.ttcn \ + LibIot_VxLTE_Templates.ttcn \ + diff --git a/ttcn/patch_lib_msrp_titan/module.mk b/ttcn/patch_lib_msrp_titan/module.mk new file mode 100644 index 0000000..d7693ac --- /dev/null +++ b/ttcn/patch_lib_msrp_titan/module.mk @@ -0,0 +1,6 @@ +sources := \ + LibMsrp_Functions.ttcn \ + LibMsrp_PIXITS.ttcn \ + LibMsrp_Templates.ttcn \ + LibMsrp_TypesAndValues.ttcn \ + diff --git a/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn new file mode 100644 index 0000000..88beed8 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn @@ -0,0 +1,42 @@ +/** + * @author STF160, STF471 + * @version $Id: LibSip_Common.ttcn 488 2014-09-18 10:17:19Z rennoch $ + * @desc This module provides the common definitions for SIP messages. + * This module is part of LibSipV3. +*/ +module LibSip_Common { + + type set length (1..infinity) of charstring Charstring_List; + + // [20.1, 20.3, 20.4, 20.7, 20.9, 20.10, 20.11, 20.18, 20.20, 20.27, 20.28, 20.30, 20.31, + // 20.33, 20.34, 20.39, 20.42, 20.44] + + + type union GenValue { + charstring tokenOrHost, + charstring quotedString + } + + type record GenericParam + { + charstring id, + GenValue paramValue optional + } + + + type set of GenericParam GenericParam_List; + + // [?] + type set of GenericParam SemicolonParam_List; + + // [?] + type set of GenericParam AmpersandParam_List; + + // [?] + type set of GenericParam CommaParam_List; + //------------------------------------------------------------------------------ + +} +with { + encode "LibSip V3"; +} // end module LibSip_Common diff --git a/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn b/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn new file mode 100644 index 0000000..13c0f78 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn @@ -0,0 +1,120 @@ +module LibSip_EncdecDeclarations { + + import from LibSip_SIPTypesAndValues all; + import from LibSip_SMSTypesAndValues all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_MessageBodyTypes all; + + external function fx_enc_Request (Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_REGISTER_Request (REGISTER_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_INVITE_Request (INVITE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_OPTIONS_Request (OPTIONS_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_BYE_Request (BYE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + + external function fx_enc_CANCEL_Request (CANCEL_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_ACK_Request (ACK_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_PRACK_Request (PRACK_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_NOTIFY_Request (NOTIFY_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_SUBSCRIBE_Request (SUBSCRIBE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_PUBLISH_Request (PUBLISH_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_UPDATE_Request (UPDATE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_REFER_Request (REFER_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_MESSAGE_Request (MESSAGE_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_INFO_Request (INFO_Request p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_Response (Response p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_Raw (Raw p) return bitstring + with {extension "prototype(convert) encode(SIPCodec)"} + + external function fx_enc_SMS(SimpleMsgSummary pdu) return bitstring + with { extension "prototype(convert) encode(SIPCodec)" }; + + external function fx_enc_MessageBody(in MessageBody pdu) return bitstring + with { extension "prototype(convert) encode(SIPCodec)" }; + + external function fx_dec_Request (inout bitstring pdu, out Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_REGISTER_Request (inout bitstring pdu, out REGISTER_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_INVITE_Request (inout bitstring pdu, out INVITE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_OPTIONS_Request (inout bitstring pdu, out OPTIONS_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_BYE_Request (inout bitstring pdu, out BYE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_CANCEL_Request (inout bitstring pdu, out CANCEL_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_ACK_Request (inout bitstring pdu, out ACK_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_PRACK_Request (inout bitstring pdu, out PRACK_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_NOTIFY_Request (inout bitstring pdu, out NOTIFY_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_SUBSCRIBE_Request (inout bitstring pdu, out SUBSCRIBE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_PUBLISH_Request (inout bitstring pdu, out PUBLISH_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_UPDATE_Request (inout bitstring pdu, out UPDATE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_REFER_Request (inout bitstring pdu, out REFER_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_MESSAGE_Request (inout bitstring pdu, out MESSAGE_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_INFO_Request (inout bitstring pdu, out INFO_Request p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_Response (inout bitstring pdu, out Response p) return integer + with {extension "prototype(sliding) decode(SIPCodec)"} + + external function fx_dec_SMS(inout bitstring pdu, out SimpleMsgSummary p) return integer + with { extension "prototype(sliding) decode(SIPCodec)" }; + + external function fx_dec_MessageBody(inout bitstring pdu, out MessageBody p) return integer + with { extension "prototype(sliding) decode(SIPCodec)" }; + +} // End of module module LibSip_EncdecDeclarations diff --git a/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn new file mode 100644 index 0000000..332c989 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn @@ -0,0 +1,62 @@ +/****************************************************************************** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id: LibSip_MessageBodyTypes.ttcn 622 2014-07-10 14:50:54Z nikolajev $ + * @desc This module provides the types used for alternative SIP message + * body variants and combinations. + * This module is part of LibSipV3. + */ + +module LibSip_MessageBodyTypes { + import from LibSip_SDPTypes all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_XMLTypes all; + + /* + * Simple body types that can be used instead of the more detailed XML and SDP + * without codec support + * */ + //type charstring XmlBody; + //type charstring SDP_Message; + type octetstring MsdBody; + + group MIMETypes { + type union MIME_Encapsulated_Parts { + SDP_Message sdpMessageBody, + XmlBody xmlBody, // if there is XML body + MsdBody msdBody // RFC 8147: Minimum Set of Data octets + } + + type record MIME_Encapsulated_Part { + charstring content_type, + charstring content_disposition optional, + charstring content_id optional, + MIME_Encapsulated_Parts mime_encapsulated_part + } + + type record MIME_Message { + charstring boundary, // len: + MimeEncapsulatedList mimeEncapsulatedList + } + + type record of MIME_Encapsulated_Part MimeEncapsulatedList; + + + } // group MIMETypes + + type union MessageBody { + SDP_Message sdpMessageBody, // if there is only SDP part + // XMLMessage xmlMessage, // if there is XML message (with header and body) + XmlBody xmlBody, // if there is XML body + MIME_Message mimeMessageBody, // if there is SDP and encapsulated ISUP part + charstring sipfrag, // if content-Type is message/sipfrag (cp. NOTIFY, cp TS124147 A.4.3.1.2) + charstring textplain, // if content type is text/plain (for testing long messages) + SimpleMsgSummary simpleMsgSummary, // RFC 3842 + octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 + } with { + variant "" + } + +} with { + variant "" + encode "SIPCodec" +} diff --git a/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn new file mode 100644 index 0000000..3b9df4c --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn @@ -0,0 +1,149 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id$ + * @desc This module provides module parameters used within the SIP + * protocol for timers, SDP formats etc. + * This module is part of LibSipV3. + */ +module LibSip_PIXITS { + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // ____________________________ PIXIT-S_______________________________ + group SIP_PIXITparameters { + + /** + * @desc Does IUT use Base64 for WWW-AUTHENTICATE + */ + modulepar boolean PX_SIP_AUTH_BASE64 := false; // FIXME To be move in PICS + + group SDPParameter { + + /** + * @desc charstring for SDP user name + */ + modulepar charstring PX_SIP_SDP_USER_NAME := "voicesession"; + + /** + * @desc charstring for SDP session identifier + */ + modulepar charstring PX_SIP_SDP_SESSION_ID := "30000"; + + /** + * @desc charstring for SDP dynamic port + */ + modulepar charstring PX_SIP_SDP_DYN := "0"; + + /** + * @desc charstring for SDP bandwidth modifier + */ + modulepar charstring PX_SIP_SDP_B_MODIFIER := "AS"; + + /** + * @desc integer for SDP bandwidth value + */ + modulepar integer PX_SIP_SDP_B_BANDWIDTH := 64; + + /** + * @desc charstring for SDP media attribute encoding supported by the IUT + */ + modulepar charstring PX_SIP_SDP_ENCODING := "PCMU"; + + /** + * @desc charstring for SDP media attribute encoding clockrate supported by the IUT + */ + modulepar charstring PX_SIP_SDP_CLOCKRATE := "8000"; + + } // group SDP Parameter + group XMLCOnfiguration{ + + /** + * @desc boolean for MessageBody length calculation based on encvalue operation result + */ + modulepar boolean PX_MB_LENGTH_FROM_ENCVAL := true; + + /** + * @desc boolean for MessageBody length calculation to be performed by external function + */ + modulepar boolean PX_USE_FX_FOR_XML_LENGTH := false; + } + + group SupportedOptions { + + /** + * @desc charstring for Used Transport in upper case "UDP"/"TCP" + */ + modulepar charstring PX_SIP_TRANSPORT := "UDP"; + + + } // group SupportedOptions{ + + group RegistrationParameters { + + /** + * @desc boolean for the SIP user if it have to register itself before executing a test case + */ + modulepar boolean PX_SIP_REGISTRATION := false; + + /** + * @desc charstring for PX_AUTH_ALGORITHM security algorithm Possible values: MD5 or AKAv1-MD5 + */ + modulepar charstring PX_AUTH_ALGORITHM := "AKAv1-MD5"; + + + } // group Registration parameters + + group SwitchToEnableAuthentication { + /** + * @desc boolean for option controlling if authentication is enabled/disabled for REGISTER messages + */ + modulepar boolean PX_SIP_REGISTER_AUTHENTICATION_ENABLED := true; + + /** + * @desc boolean for option controlling if authentication is enabled/disabled for INVITE messages + */ + modulepar boolean PX_SIP_INVITE_AUTHENTICATION_ENABLED := false; + + + } // group SwitchToEnableAuthentication + + group SIP_Timers { + /** + * @desc float for TWait default value for waiting an operator action + */ + modulepar float PX_SIP_TWAIT := 30.0; + + /** + * @desc float for TAck default value for waiting an acknowledgement + */ + modulepar float PX_SIP_TACK := 8.0; + + /** + * @desc float for TResp default value for waiting for a response from the IUT + */ + modulepar float PX_SIP_TRESP := 15.0; + + /** + * @desc float for TNoAct default value for waiting no message from the IUT Value given for PX_TNOACT should be less than value of SHORT_REGISTRATION constant (which is currently "3" (seconds)) + */ + modulepar float PX_SIP_TNOACT := 1.0; + + } // group SIP_Timers + + group MimePart { + /** + * @desc charstring for delimiter value used in mime multipart message to separate message body parts + */ + modulepar charstring PX_SIP_MIME_BOUNDARY := "boundary1"; + + } // group MimePart + + } // group SIP_PIXITparameters + + /** + * @desc Set to true to force fixed random value (debug mode) + */ + modulepar boolean PX_SEED := false; + +} // end module LibSip_PIXITS diff --git a/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn new file mode 100644 index 0000000..1d866f5 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn @@ -0,0 +1,406 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id: LibSip_SDPTypes.ttcn 653 2017-12-14 11:16:59Z rennoch $ + * @desc This module defines message, attribute, structured and simple + * SDP types as well constants used by LipSip constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * This module is part of LibSipV3. + * @remark Adding of new attributes types is ok; Adding of new optional attributes in @see SDP_attribute type is ok; Existing attribute types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_SDPTypes { + import from LibSip_Common all; + group Constants { + group SimpleConstants { + // SDP net_type + const charstring c_in := "IN"; + + // SDP addr_type + const charstring c_ip4 := "IP4"; + const charstring c_ip6 := "IP6"; + + // SDP_media_desc: media + const charstring c_audio := "audio"; + const charstring c_image := "image"; + const charstring c_video := "video"; + const charstring c_text := "text"; + const charstring c_msrp := "msrp"; + + // SDP_media_desc: transport + const charstring c_rtpAvp := "RTP/AVP"; + const charstring c_rtpAvpf := "RTP/AVPF"; + const charstring c_msrpTcp := "TCP/MSRP"; + const charstring c_udptl := "Udptl"; + + // SDP_attribute_list constants: + const charstring c_local := "local"; + const charstring c_mandatory := "mandatory"; + const charstring c_optional := "optional"; + const charstring c_none := "none"; + const charstring c_qos := "qos"; + const charstring c_remote := "remote"; + const charstring c_sendrecv := "sendrecv"; + const charstring c_sendonly := "sendonly"; + const charstring c_inactive := "inactive"; + const charstring c_send := "send"; + const charstring c_recv := "recv"; + const charstring c_e2e := "e2e"; + } + } + group Types { + group SubTypes { + group AttributeTypes { + type record SDP_attribute_cat { + charstring attr_value + } + + type record SDP_attribute_keywds { + charstring attr_value + } + + type record SDP_attribute_tool { + charstring attr_value + } + + type record SDP_attribute_ptime { + charstring attr_value + } + + type record SDP_attribute_recvonly { + } + + type record SDP_attribute_sendrecv { + } + + type record SDP_attribute_sendonly { + } + + type record SDP_attribute_inactive { + } + + type record SDP_attribute_orient { + charstring attr_value + } + + type record SDP_attribute_type { + charstring attr_value + } + + type record SDP_attribute_charset { + charstring attr_value + } + + type record SDP_attribute_sdplang { + charstring attr_value + } + + type record SDP_attribute_lang { + charstring attr_value + } + + type record SDP_attribute_framerate { + charstring attr_value + } + + type record SDP_attribute_quality { + charstring attr_value + } + + type union SDP_attribute_fmtp_format_specific_params { + SemicolonParam_List paramList, + charstring unstructured + } + + type record SDP_attribute_fmtp { + charstring format, + SDP_attribute_fmtp_format_specific_params params + } + + type record SDP_attribute_curr { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_des { + charstring preconditionType, + charstring strength, + charstring statusType, + charstring direction + } + + type record SDP_attribute_conf { + charstring preconditionType, + charstring statusType, + charstring direction + } + + type record SDP_attribute_rtpmap_codec { + charstring encoding, + charstring clockrate, + charstring parameters optional + } + + type record SDP_attribute_rtpmap { + charstring payload_type, + SDP_attribute_rtpmap_codec codec + } + + type record SDP_attribute_rtcp { + integer portnumber, + SDP_connection connection optional + } + + type record SDP_attribute_msrp { + charstring attr_value + } + + type record SDP_attribute_unknown { + charstring name, + charstring attr_value optional + } + + type record SDP_attribute_maxptime { + charstring attr_value + } + + type record SDP_attribute_tcap { + integer trpr_cap_num, + Charstring_List proto_list + } + + type record SDP_attribute_pcfg { + integer config_number, + Charstring_List pot_cfg_list optional + } + + type record SDP_attribute_acfg { + integer config_number, + Charstring_List sel_cfg_list optional + } + + type record SDP_attribute_ecn_capable_rtp { + Charstring_List init_list, + Charstring_List parm_list optional + } + + type record SDP_attribute_rtcp_fb { + charstring rtcp_fb_pt, + charstring rtcp_fb_val + } + + type record SDP_attribute_rtcp_xr { + Charstring_List xr_format_list optional + } + + type record SDP_attribute_rtcp_rsize { + } + + type record SDP_attribute_3ge2ae { + charstring indicator + } + + type record SDP_attribute_crypto { + charstring tag, + charstring crypto_suite, + charstring key_params, + Charstring_List session_params optional + } + + type record SDP_attribute_content { + Charstring_List content_params + } + + type record SDP_attribute_keymgmt { + charstring prtcl_id, + charstring data + } + + type union SDP_attribute { + SDP_attribute_cat cat, + SDP_attribute_keywds keywds, + SDP_attribute_tool tool, + SDP_attribute_ptime ptime, + SDP_attribute_recvonly recvonly, + SDP_attribute_sendrecv sendrecv, + SDP_attribute_sendonly sendonly, + SDP_attribute_inactive inactive, + SDP_attribute_orient orient, + SDP_attribute_type sdp_type, + SDP_attribute_charset charset, + SDP_attribute_sdplang sdplang, + SDP_attribute_lang lang, + SDP_attribute_framerate framerate, + SDP_attribute_quality quality, + SDP_attribute_fmtp fmtp, + SDP_attribute_curr curr, + SDP_attribute_des des, + SDP_attribute_conf conf, + SDP_attribute_rtpmap rtpmap, + SDP_attribute_rtcp rtcp, + SDP_attribute_msrp msrp, + SDP_attribute_maxptime maxptime, + SDP_attribute_tcap tcap, + SDP_attribute_pcfg pcfg, + SDP_attribute_acfg acfg, + SDP_attribute_ecn_capable_rtp ecn_capable_rtp, + SDP_attribute_rtcp_fb rtcp_fb, + SDP_attribute_rtcp_xr rtcp_xr, + SDP_attribute_rtcp_rsize rtcp_rsize, + SDP_attribute_3ge2ae e2ae, + SDP_attribute_crypto crypto, + SDP_attribute_content content, + SDP_attribute_keymgmt keymgmt, + //* unknown has to be the last else encoding/decoding won't work! + SDP_attribute_unknown unknown + } + + } //* group AttributeTypes + + type set of SDP_attribute SDP_attribute_list; + + type record SDP_bandwidth { + charstring modifier, + integer bandwidth + } + + type set of SDP_bandwidth SDP_bandwidth_list; + + type record SDP_connection { + charstring net_type, + charstring addr_type, + SDP_conn_addr conn_addr + } + + type record SDP_conn_addr { + charstring addr, + integer ttl optional, + integer num_of_addr optional + } + + type set of SDP_connection SDP_connection_list; + + type record SDP_contact { + charstring addr_or_phone, + charstring disp_name optional + } + + type SDP_contact SDP_contact_tel; + + type SDP_contact SDP_contact_email; + + type set of SDP_contact_email SDP_email_list; + + type record of charstring SDP_fmt_list; + + type record SDP_key { + charstring method, + charstring key optional + } + + type record SDP_media_desc { + SDP_media_field media_field, + charstring information optional, + SDP_connection_list connections optional, + SDP_bandwidth_list bandwidth optional, + SDP_key key optional, + SDP_attribute_list attributes optional + } + + type set of SDP_media_desc SDP_media_desc_list; + + type record SDP_media_port { + integer port_number, + integer num_of_ports optional + } + + type record SDP_media_field { + charstring media, + SDP_media_port ports, + charstring transport, + SDP_fmt_list fmts + } + + type record SDP_time { + SDP_time_field time_field, + SDP_repeat_list time_repeat optional + } + + type record SDP_time_field { + charstring start_time, + //* field is numeric strings that may not fit into 32-bit signed int + charstring + stop_time //* field is numeric strings that may not fit into 32-bit signed int + } + + type record SDP_repeat { + SDP_typed_time repeat_interval, + SDP_typed_time active, + SDP_typed_time_list offsets + } + + type set of SDP_repeat SDP_repeat_list; + + type record SDP_typed_time { + integer time, + charstring unit optional + } + + type set of SDP_typed_time SDP_typed_time_list; + + type set of SDP_time SDP_time_list; + + type record SDP_timezone { + charstring adjustment_time, + SDP_typed_time offset + } + + type set of SDP_timezone SDP_timezone_list; + + type record SDP_Origin { + charstring user_name, + charstring session_id, + //* field is numeric strings that may not fit into 32-bit signed int + charstring session_version, + //* field is numeric strings that may not fit into 32-bit signed int + charstring net_type, + charstring addr_type, + charstring addr + } + + type set of SDP_contact_tel SDP_phone_list; + + } //* group SubTypes + + + group MessageTypes { + type record SDP_Message { + integer protocol_version, + SDP_Origin origin, + charstring session_name, + charstring information optional, + charstring uri optional, + SDP_email_list emails optional, + SDP_phone_list phone_numbers optional, + SDP_connection connection optional, + SDP_bandwidth_list bandwidth optional, + SDP_time_list times, + SDP_timezone_list timezone_adjustments optional, + SDP_key key optional, + SDP_attribute_list attributes optional, + SDP_media_desc_list media_list optional + } + with { + encode "SDPCodec"; + } + + } // group MessageTypes + + } // group Types +} +with { + variant "" + encode "SIPCodec" +} // end module LibSip_SDPTypes diff --git a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn new file mode 100644 index 0000000..dc9243c --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn @@ -0,0 +1,2001 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471, STF160 + * @version $Id: LibSip_SIPTypesAndValues.ttcn 658 2018-06-14 06:44:44Z genoudoli $ + * @desc This module defines message, header, structured and simple SIP + * types as well constants used by LipSip constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * This module is part of LibSipV3. + * @remark Adding of new message and header types is ok; Adding of new optional header fields in + * @see MessageHeader type is ok but should be done at same time as dummy template updates; Existing message or header types shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_SIPTypesAndValues { + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + group Constants { + group SimpleConstants { + // SIP name protocol plus version + const charstring c_sipNameVersion := "SIP/2.0"; + + // SIP name protocol + const charstring c_sipName := "SIP"; + + // SIP version + const charstring c_sipVersion := "2.0"; + + // SIP scheme + const charstring c_sipScheme := "sip"; + + // TEL scheme + const charstring c_telScheme := "tel"; + + // URN schema + const charstring c_urnScheme := "urn"; + + // TAG_ID + const charstring c_tagId := "tag"; + + // BRANCH_ID + const charstring c_branchId := "branch"; + + // BRANCH_COOKIE + const charstring c_branchCookie := "z9hG4bK"; + + // EXPIRES_ID + const charstring c_expiresId := "expires"; + + // MADDR_ID + const charstring c_maddrId := "maddr"; + + // METHOD_ID + const charstring c_methodId := "method"; + + // RECEIVED_ID + const charstring c_receivedId := "received"; + + // TTL_ID + const charstring c_ttlId := "ttl"; + + // USER_ID + const charstring c_userId := "user"; + + // SDP name application + const charstring c_sdpApplication := "application/sdp"; + + // XML name application + const charstring c_xmlApplication := "application/xml"; + + // XML name application + const charstring c_xmlreginfoApplication := "application/reginfo+xml"; + + // XML name resource-list + const charstring c_xmlresourcelistApplication := "application/resource-lists+xml"; + + // IMS 3GPP name application + const charstring c_ims3gppApplication := "application/3gpp-ims+xml"; + + // IMS 3GPP name CW application + const charstring c_ims3gppCwApplication := "application/vnd.3gpp.cw+xml"; + + // IMS ETSI name MCID application + const charstring c_imsEtsiMcidApplication := "application/vnd.etsi.mcid+xml"; + + // IMS ETSI name CUG application + const charstring c_imsEtsiCugApplication := "application/vnd.etsi.cug+xml"; + + // IMS ETSI name Simservs application(TIP/TIR, ACR, CDIV, OIP/OIR, CUG) + const charstring c_imsEtsiSimservsApplication := "application/vnd.etsi.simservs+xml"; + + const charstring c_imsEmergencyApplication := "application/pidf+xml"; + + // emergency-QueueState (ETSI TS 103 479) + const charstring c_emergency_QueueState := "application/vnd.emergency.queuestate+json"; + + // emergency-AbandonedCall (ETSI TS 103 479) + const charstring c_emergency_AbandonedCall := "application/vnd.emergency.abandonedcall+json"; + + // emergency-SecurityPosture (ETSI TS 103 479) + const charstring c_emergency_SecurityPosture := "application/vnd.emergency.securityposture+json"; + + // emergency-ElementState (ETSI TS 103 479) + const charstring c_emergency_ElementState := "application/vnd.emergency.elementstate+json"; + + // emergency-ServiceState (ETSI TS 103 479) + const charstring c_emergency_ServiceState := "application/vnd.emergency.Servicestate+json"; + + // OCTET-STREAM name application + const charstring c_octetApplication := "application/octet-stream"; + + // PLAIN-TEXT name application + const charstring c_plainText := "text/plain"; + + // SIP fragment message + const charstring c_sipfragMessage := "message/sipfrag"; + + // text content of 1300 bytes for messages with message body + const charstring c_longMessageContent_1300Bytes := + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & + "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789" & oct2char('0D'O) & oct2char('0A'O); // CRLF + // Default SIP port number : 5060 + const integer c_defaultSipPort := 5060; + + // Default SIP protocol : UDP + const charstring c_defaultSipProt := "UDP"; + + // Fixed IP multicast address + const charstring c_mcastSipIpaddr := "224.0.1.75"; + + // Short delta-second used in expires parameter to acknowledge a registration + const charstring c_shortRegistration := "3600"; + + // ([RFC3891 ] Sec 6.1) + const charstring c_earlyFlag := "early-only"; + + // option tag replaces ([RFC3261 ] ) + const charstring c_replaces := "replaces"; + + // option tag 100rel (reliable provisional response [RFC3262 ] ) + const charstring c_tag100rel := "100rel"; + + // option tag from-change ([RFC4916 ] ) + const charstring c_tagFromChange := "from-change"; + + // option tag precondition (ch.11 [RFC3312 ] ) + const charstring c_tagPrecond := "precondition"; + + // due to problem with TAU compiler because hardcoded return statement constant is created + const HostPort c_hostport_dummy := { + host := "", + portField := c_defaultSipPort + }; + + // CLIP/CLIR information + const PrivacyValue c_privacy_none := "none"; + const PrivacyValue c_privacy_id := "id"; + const PrivacyValue c_privacy_header := "header"; + const PrivacyValue c_privacy_user := "user"; + const PrivacyValue c_privacy_critical := "critical"; + const PrivacyValue c_privacy_session := "session"; + + // + const charstring c_AT := "@"; // MRO + const charstring c_SP := oct2char('20'O); + const charstring c_SLASH := oct2char('2F'O); + const charstring c_LT := oct2char('3C'O); + const charstring c_GT := oct2char('3E'O); + + // * (wildchard) sign + const charstring c_WILDCARD := "*"; + + const integer c_CRlen := 2; + // length of new line (0d0a) + const GenericParam c_Integrity_protected_yes := {"integrity-protected", {tokenOrHost := "yes"}}; + const GenericParam c_Integrity_protected_no := {"integrity-protected", {tokenOrHost := "no"}}; + const GenericParam c_Integrity_protected_ip_assoc_pending := {"integrity-protected", {tokenOrHost := "ip-assoc-pending"}}; + + const charstring c_algorithm := "MD5"; + + } // end group SimpleConstants + + group AuthorizationConstants { + + const charstring c_ik := ""; + const charstring c_ck := ""; + const charstring c_nonce := ""; + const charstring c_nonce_value := "0edff6c521cc3f407f2d9e01cf6ed82b"; + + + } // end group AuthorizationConstants + + group PChargingVectorConstants { + + const charstring c_icid := "icid-value"; + const charstring c_icid_value := "123abc"; + const charstring c_icid_generated_at := "icid-generated-at"; + const charstring c_orig_ioi := "orig-ioi"; + const charstring c_term_ioi := "term-ioi"; + const charstring c_access_network_charging_info := "access-network-charging-info"; + + + } // end group PChargingVectorConstants + + group HeaderFieldConstants { + + const CallId c_empty_CallId := { + fieldName := CALL_ID_E, + callid := "" + }; + + const ContentType c_empty_ContentType := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := "", + mParams := omit + }; + + const CSeq c_empty_cSeq := { + fieldName := CSEQ_E, + seqNumber := 0, + method := "EMPTY" + }; + + const From c_empty_From := { + fieldName := FROM_E, + addressField := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + } + } + }, + fromParams := omit + }; + + const MaxForwards c_maxForwards70 := { + fieldName := MAX_FORWARDS_E, + forwards := 70 + }; + + const SipUrl c_empty_RequestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + }; + + const SipUrl c_unavailableUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable", + password := omit + }, + hostPort := { + host := "anonymous.invalid", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + }; + + const To c_empty_To := { // value of To header + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := "127.0.0.1", + portField := c_defaultSipPort + } + } + }, + urlParameters := omit, + headers := omit + } + } + }, + toParams := omit + }; + + const Via c_empty_Via := { + fieldName := VIA_E, + viaBody := { + { + sentProtocol := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := c_defaultSipProt + }, + sentBy := { + host := "127.0.0.1", + portField := c_defaultSipPort + }, + viaParams := omit + } + } + }; + + + } + + + group UserProfileConstants { + // number of user profile from 1-10 for SIP profile + const integer c_userProfile_SIP1_home := 1; + const integer c_userProfile_SIP2_home := 2; + + + } // end group UserProfileConstants + + group StatusLines { + const StatusLine c_statusLine100 := {c_sipNameVersion, 100, "Trying"}; + const StatusLine c_statusLine180 := {c_sipNameVersion, 180, "Ringing"}; + const StatusLine c_statusLine181 := {c_sipNameVersion, 181, "Call Is Being Forwarded"}; + const StatusLine c_statusLine182 := {c_sipNameVersion, 182, "Queued"}; + const StatusLine c_statusLine183 := {c_sipNameVersion, 183, "Session Progress"}; + + const StatusLine c_statusLine200 := {c_sipNameVersion, 200, "OK"}; + const StatusLine c_statusLine202 := {c_sipNameVersion, 202, "Accepted"}; + + const StatusLine c_statusLine300 := {c_sipNameVersion, 300, "Multiple Choices"}; + const StatusLine c_statusLine301 := {c_sipNameVersion, 301, "Moved Permanently"}; + const StatusLine c_statusLine302 := {c_sipNameVersion, 302, "Moved Temporarily"}; + const StatusLine c_statusLine305 := {c_sipNameVersion, 305, "Use Proxy"}; + const StatusLine c_statusLine380 := {c_sipNameVersion, 380, "Alternative Service"}; + + const StatusLine c_statusLine400 := {c_sipNameVersion, 400, "Bad Request"}; + const StatusLine c_statusLine401 := {c_sipNameVersion, 401, "Unauthorized"}; + const StatusLine c_statusLine402 := {c_sipNameVersion, 402, "Payment Required"}; + const StatusLine c_statusLine403 := {c_sipNameVersion, 403, "Forbidden"}; + const StatusLine c_statusLine404 := {c_sipNameVersion, 404, "Not Found"}; + const StatusLine c_statusLine405 := {c_sipNameVersion, 405, "Method Not Allowed"}; + const StatusLine c_statusLine406 := {c_sipNameVersion, 406, "Not Acceptable"}; + const StatusLine c_statusLine407 := {c_sipNameVersion, 407, "Proxy Authentication Required"}; + const StatusLine c_statusLine408 := {c_sipNameVersion, 408, "Request Timeout"}; + const StatusLine c_statusLine410 := {c_sipNameVersion, 410, "Gone"}; + const StatusLine c_statusLine413 := {c_sipNameVersion, 413, "Request Entity Too Large"}; + const StatusLine c_statusLine414 := {c_sipNameVersion, 414, "Request-URI Too Long"}; + const StatusLine c_statusLine415 := {c_sipNameVersion, 415, "Unsupported Media Type"}; + const StatusLine c_statusLine416 := {c_sipNameVersion, 416, "Unsupported URI Scheme"}; + const StatusLine c_statusLine420 := {c_sipNameVersion, 420, "Bad Extension"}; + const StatusLine c_statusLine421 := {c_sipNameVersion, 421, "Extension Required"}; + const StatusLine c_statusLine422 := {c_sipNameVersion, 422, "Session Interval Too Small"}; + const StatusLine c_statusLine423 := {c_sipNameVersion, 423, "Interval Too Brief"}; + const StatusLine c_statusLine433 := {c_sipNameVersion, 433, "Anonymity Disallowed"}; + const StatusLine c_statusLine480 := {c_sipNameVersion, 480, "Temporarily Unavailable"}; + const StatusLine c_statusLine481 := {c_sipNameVersion, 481, "Call/Transaction Does Not Exist"}; + const StatusLine c_statusLine482 := {c_sipNameVersion, 482, "Loop Detected"}; + const StatusLine c_statusLine483 := {c_sipNameVersion, 483, "Too Many Hops"}; + const StatusLine c_statusLine484 := {c_sipNameVersion, 484, "Address Incomplete"}; + const StatusLine c_statusLine485 := {c_sipNameVersion, 485, "Ambiguous"}; + const StatusLine c_statusLine486 := {c_sipNameVersion, 486, "Busy Here"}; + const StatusLine c_statusLine487 := {c_sipNameVersion, 487, "Request Terminated"}; + const StatusLine c_statusLine488 := {c_sipNameVersion, 488, "Not Acceptable Here"}; + const StatusLine c_statusLine493 := {c_sipNameVersion, 493, "Undecipherable"}; + const StatusLine c_statusLine500 := {c_sipNameVersion, 500, "Server Internal Error"}; + const StatusLine c_statusLine501 := {c_sipNameVersion, 501, "Not implemented"}; + const StatusLine c_statusLine502 := {c_sipNameVersion, 502, "Bad Gateway"}; + const StatusLine c_statusLine503 := {c_sipNameVersion, 503, "Service Unavailable"}; + const StatusLine c_statusLine504 := {c_sipNameVersion, 504, "Server Time-out"}; + const StatusLine c_statusLine505 := {c_sipNameVersion, 505, "Version Not Supported"}; + const StatusLine c_statusLine513 := {c_sipNameVersion, 513, "Message Too Large"}; + const StatusLine c_statusLine580 := {c_sipNameVersion, 580, "Precondition Failure"}; + const StatusLine c_statusLine600 := {c_sipNameVersion, 600, "Busy Everywhere"}; + const StatusLine c_statusLine603 := {c_sipNameVersion, 603, "Decline"}; + const StatusLine c_statusLine604 := {c_sipNameVersion, 604, "Does Not Exist Anywhere"}; + const StatusLine c_statusLine606 := {c_sipNameVersion, 606, "Not Acceptable"}; + + + } // end StatusLines + + group SIPSyncPointNames { + const charstring c_Ringing := "Ringing"; + const charstring c_uPlane := "uPlane"; + const charstring c_sync1 := "sync1"; + const charstring c_sync2 := "sync2"; + const charstring c_sync3 := "sync3"; + const charstring c_sync4 := "sync4"; + const charstring c_uPlaneStop := "uPlaneStop"; + const charstring c_annoucA := "announcementA"; + const charstring c_annoucB := "announcementB"; + const charstring c_annouc := "announcement"; + const charstring c_voicem := "voiceMessage"; + } + + + } // end group Constants + + group Types { + group SubTypes { + // Subtypes + group TokenTypes // TokensTypes + { + // [20 ] + type enumerated FieldName { + ACCEPT_E, + ACCEPT_ENCODING_E, + ACCEPT_LANGUAGE_E, + ALERT_INFO_E, + ALLOW_E, + AUTHENTICATION_INFO_E, + AUTHORIZATION_E, + CALL_ID_E, + CALL_INFO_E, + CONTACT_E, + CONTENT_DISPOSITION_E, + CONTENT_ENCODING_E, + CONTENT_LANGUAGE_E, + CONTENT_LENGTH_E, + CONTENT_TYPE_E, + CSEQ_E, + DATE_E, + ERROR_INFO_E, + EXPIRES_E, + FROM_E, + IN_REPLY_TO_E, + MAX_FORWARDS_E, + MIME_VERSION_E, + MIN_EXPIRES_E, + ORGANIZATION_E, + PRIORITY_E, + PROXY_AUTHENTICATE_E, + PROXY_AUTHORIZATION_E, + PROXY_REQUIRE_E, + RECORD_ROUTE_E, + REPLY_TO_E, + REQUIRE_E, + RETRY_AFTER_E, + ROUTE_E, + SERVER_E, + SUBJECT_E, + SUPPORTED_E, + TIMESTAMP_E, + TO_E, + UNSUPPORTED_E, + USER_AGENT_E, + VIA_E, + WARNING_E, + WWW_AUTHENTICATE_E, + // [3262/7.1 ] + RACK_E, + RSEQ_E, + // [3265/7.2 ] + ALLOW_EVENTS_E, + EVENT_E, + SUBSCRIPTION_STATE_E, + // [3313 ] + P_MEDIA_AUTHORIZATION_E, + // [3323 ] + PRIVACY_E, + // [3325 ] + P_ASSERTED_ID_E, + P_PREFERRED_ID_E, + P_PREFERRED_SERVICE_E, + // [3326 ] + REASON_E, + // [3515 ] - REFER method + REFER_TO_E, + // [4488 ] - REFER method + REFER_SUB_E, + // [3891 ] + REPLACES_E, + // [3892 ] - REFER method + REFERRED_BY_E, + // [4244 ] + HISTORY_INFO_E, + // [3313 ] + P_MEDIA_AUTH_E, + // [3327 ] + PATH_E, + // [3329 ] + SECURITY_CLIENT_E, + SECURITY_SERVER_E, + SECURITY_VERIFY_E, + // [3455 ] + P_ACCESS_NETWORK_INFO_E, + P_ASSOCIATED_URI_E, + P_CALLED_PARTY_E, + P_CHARGING_FUNCTION_ADDRESSES_E, + P_CHARGING_VECTOR_E, + P_VISITED_NETWORK_E, + // [3608 ] + SERVICE_ROUTE_E, + // [3841 ] + ACCEPT_CONTACT_E, + REQUEST_DISPOSITION_E, + // [4028 ] + MIN_SE_E, + SESSION_EXPIRES_E, + P_ASSERTED_SERVICE_E, + // [5009 ] + P_EARLY_MEDIA_E, + // http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07 + // Transporting User to User Call Control Information in SIP for ISDN Interworking + USER_TO_USER_E, + // [6442 ] /* + GEOLOCATION_E, + GEOLOCATION_ROUTING_E, + SESSION_ID_E, + SIP_ETAG_E, + SIP_IF_MATCH_E, + FEATURE_CAPS_E, + // 6086 + RECV_INFO_E, + INFO_PACKAGE_E, + // 2616 + HOST_E, + // + RESOURCE_PRIORITY_E, //4412 + ANSWER_MODE_E, //5373 + PRIV_ANSWER_MODE_E, //5373 + TARGET_DIALOG_E, //4538 + P_ANSWER_STATE_E //4964 + } + + // [7.1 ] + type enumerated Method { + ACK_E, + BYE_E, + CANCEL_E, + INVITE_E, + OPTIONS_E, + REGISTER_E, + PRACK_E // Note: this element is not defined in [5 ] + , + SUBSCRIBE_E, + NOTIFY_E // [3265 ] + , + PUBLISH_E // [3903/12 ] + , + REFER_E // [3515 ] + , + UPDATE_E // [3311 ] + , + MESSAGE_E // [3428 ] + , + INFO_E // [2976 ] + , + UNKNOWN_METHOD_E + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39, 20.42, 20.43 ] + type record HostPort { + charstring host optional, // hostname, IPv4 or IPv6 + integer portField optional // represented as an integer + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + /** + * @desc identifier for user or telephone subscriber + * @member userOrTelephoneSubscriber provides the username or a phone name identifying the subscriber + * @member password related password information + */ + type record UserInfo { + charstring userOrTelephoneSubscriber, + charstring password optional + } + + // [19.1.1 ;used in: 20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + /** + * @desc Uniform Resource Identifier (URI) + * @member scheme distinguishes call types, e.g. voice, fax etc. or related address scheme, e.g. tel, sip + * @member userInfo Contains user information (also in non-SIP URLs) with optional parameter as passwords + * @member hostPort Hostname or IP address information and port identifier of the target + * @member urlParameters Contains either SIP or TEL URL parameters, separated by semicolons, e.g. transport=tcp or user=phone + * @member headers Additional information added after the parameters, e.g. priority=urgent + */ + type record SipUriComponents { // sip-uri acc. to RFC 3261 cl. 19.1 + UserInfo userInfo optional, + HostPort hostPort + } + + type record TelUriComponents { // tel-uri acc. to RFC 3966 + charstring subscriber + } + + type record UrnUriComponents { // urn-uri acc. to RFC 2141 + charstring namespaceId, // e.g. "service" as acc. to RFC 5031 + charstring namespaceSpecificString // e.g. "sos" + } + + type union UriComponents { + SipUriComponents sip, // scheme: "sip" or sips" + TelUriComponents tel, // scheme: "tel" + UrnUriComponents urn, // scheme: "urn" + charstring other // scheme: none of the above schemes + } + + type record SipUrl { + charstring scheme, // e.g "sip" or "tel" + UriComponents components, // corresponding to the scheme + SemicolonParam_List urlParameters optional, + AmpersandParam_List headers optional + } + + // [20.1, RFC2616 14.1 ] + type record AcceptBody { + charstring mediaRange, + SemicolonParam_List acceptParam optional + } + + // [20.1, RFC2616 14.1 ] + type set of AcceptBody AcceptBody_List; + + // [20.4 ] + type record AlertInfoBody { + charstring url, // any URI + SemicolonParam_List genericParams optional + } + + // [20.4 ] + type set of AlertInfoBody AlertInfoBody_List; + + // [20.8 ] + type charstring CallidString; + // token [" + // [20.8 ] + type set of CallidString CallidString_List; + + // [20.9 ] + type record CallInfoBody { + charstring url, // any URI + SemicolonParam_List infoParams optional + } + + // [20.9 ] + type set of CallInfoBody CallInfoBody_List; + + // [20.27, 20.44, .......10.32, 10.48; RFC2616 14.33, 14.47; RFC2617 1.2 ] + type union Challenge { + CommaParam_List digestCln, + OtherAuth otherChallenge + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + type union DisplayName + { + charstring token, + charstring quotedString + } + + // [20.10, 20.20, 20.30, 20.31, 20.34, 20.39 ] + type record NameAddr { + DisplayName displayName optional, + SipUrl addrSpec + } + + // [20.10, 20.20, 20.31, 20.39 ] + type union Addr_Union { + NameAddr nameAddr, + SipUrl addrSpecUnion // STS: "Union" added to filed name to avoid dangerous name equivalence with 2nd NameAddr field + } + + // [20.10 ] + type record ContactAddress { + Addr_Union addressField, + SemicolonParam_List contactParams optional + } + + // [20.10 ] + type set of ContactAddress ContactAddress_List; // 1 or more elements + // [20.10 ] + type union ContactBody { + charstring wildcard, + ContactAddress_List contactAddresses + } + + // [20.2, 20.12; RFC2616 14.3, 14.11 ] + type charstring ContentCoding; + + // [20.2, 20.12; RFC2616 14.3, 14.11 ] + type set of ContentCoding ContentCoding_List; + + // [20.7, 20.28; RFC2616 14.35 RFC2617 1.2 ] + type union Credentials { + CommaParam_List digestResponse, + OtherAuth otherResponse + } + + // allow multiple Authorization headers due to RFC3261 ch. 20.7 and 20.28 + type record of Credentials CredentialsList; + + // [20.19, 20.23, 20.33 ] + type charstring DeltaSec; // an external operation can handle this field + // [20.18 ] + type record ErrorInfoBody { + charstring uri, // any URI + SemicolonParam_List genericParams optional + } + + // [20.18 ] + type set of ErrorInfoBody ErrorInfoBody_List; + + // [20.3 RFC2616 14.4 ] + type record LanguageBody { + charstring languageRange, + SemicolonParam_List acceptParam optional + } + + // [20.3 RFC2616 14.4 ] + type set of LanguageBody LanguageBody_List; + + // [20.13; RFC2616 14.12 ] + type charstring LanguageTag; + + // [20.13; RFC2616 14.12 ] + type set of LanguageTag LanguageTag_List; + + // [20.5 ] + type set of charstring Method_List; + + // [20.29, 20.32, 20.37, 20.40 ] + type charstring OptionTag; + + // [20.29, 20.32, 20.37, 20.40 ] + type set of OptionTag OptionTag_List; + + // [20.7, 20.27, 20.28, 20.44 ; RFC2616 14.33, 14.47; RFC2617 1.2 ] + type record OtherAuth { + charstring authScheme, + CommaParam_List authParams + } + + type record Payload { + integer payloadlength, + charstring payloadvalue + } + + // [20.30,20.34 ] + type record RouteBody { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + // [20.30,20.34 ] + type record of RouteBody RouteBody_List; + + // [20.42 ] + type record SentProtocol { + charstring protocolName, + charstring protocolVersion, + charstring transport + } + + // [20.35, 20.41; RFC2616 14.43 ] + type charstring ServerVal; + + // [20.35, 20.41; RFC2616 14.43 ] + type set of ServerVal ServerVal_List; + + // [20.38 ] + type record TimeValue { + integer majorDigit, // represented as an integer + integer minorDigit optional // represented as an integer + } + + // [20.42 ] + type record ViaBody { + SentProtocol sentProtocol, + HostPort sentBy, + SemicolonParam_List viaParams optional + } + + // [20.42 ] + type record of ViaBody ViaBody_List; + + // [20.43 ] + type union WarnAgent { + HostPort hostPort, + charstring pseudonym + } + + // [20.43 ] + type record WarningValue { + integer warnCode, // represented as an integer + WarnAgent warnAgent, + charstring warnText + } + + // [20.43 ] + type set of WarningValue WarningValue_List; + + type Addr_Union PAssertedIDValue; + + type record of PAssertedIDValue PAssertedIDValue_List; + + type charstring PAssertedServiceValue; + + type Addr_Union PPreferredIDValue; + + type record of PPreferredIDValue PPreferredIDValue_List; + + type charstring PrivacyValue; + + type record of PrivacyValue PrivacyValue_List; + + type set of FcValue FcValue_List; + type record FcValue { + charstring wildcard(c_WILDCARD), + SemicolonParam_List fcParams optional + } + + + } // end group TokensType + + + group HeaderFieldTypes // Header Fields + { + group CommonHeaderFieldTypes { + // [20.1, RFC2616 14.1 ] + type record Accept { + FieldName fieldName (ACCEPT_E) , + AcceptBody_List acceptArgs optional + } + + // [20.2, RFC2616 14.3 ] + type record AcceptEncoding { + FieldName fieldName (ACCEPT_ENCODING_E) , + ContentCoding_List contentCoding optional + } + + // [20.3, RFC2616 14.4 ] + type record AcceptLanguage { + FieldName fieldName (ACCEPT_LANGUAGE_E) , + LanguageBody_List languageBody optional + } + + // [20.4 ] + type record AlertInfo { + FieldName fieldName (ALERT_INFO_E) , + AlertInfoBody_List alertInfoBody optional + } + + // [20.5 ] + type record Allow { + FieldName fieldName (ALLOW_E) , + Method_List methods optional + } + + // [20.6 ] + type record AuthenticationInfo { + FieldName fieldName (AUTHENTICATION_INFO_E) , + CommaParam_List ainfo + } + + // [20.7 RFC2617 3.2.2 ] + type record Authorization { + FieldName fieldName (AUTHORIZATION_E) , + CredentialsList body // changed from Credentials to allow multiple Authorization headers + } + + // [20.8 ] + type record CallId { + FieldName fieldName (CALL_ID_E) , + CallidString callid + } + + // [20.9 ] + type record CallInfo { + FieldName fieldName (CALL_INFO_E) , + CallInfoBody_List callInfoBody optional + } + + // [20.10 ] + type record Contact { + FieldName fieldName (CONTACT_E) , + ContactBody contactBody + } + + // [20.11 ] + type record ContentDisposition { + FieldName fieldName (CONTENT_DISPOSITION_E) , + charstring dispositionType, + SemicolonParam_List dispositionParams optional + } + + // [20.12 RFC2616 14.11 ] + type record ContentEncoding { + FieldName fieldName (CONTENT_ENCODING_E) , + ContentCoding_List contentCoding + } + + // [20.13 RFC2616 14.12 ] + type record ContentLanguage { + FieldName fieldName (CONTENT_LANGUAGE_E) , + LanguageTag_List languageTag + } + + // [20.14 ] + type record ContentLength { + FieldName fieldName (CONTENT_LENGTH_E) , + integer len // this field is represented as an integer + } + + // [20.15 ] + type record ContentType { + FieldName fieldName (CONTENT_TYPE_E) , + charstring mTypeSubtype , + SemicolonParam_List mParams optional + } + + // [20.16 ] + type record CSeq { + FieldName fieldName (CSEQ_E) , + integer seqNumber, // this field is represented as an integer + charstring method + } + + // [20.17 ] + type record Date { + FieldName fieldName (DATE_E) , + charstring sipDate + } + + // [20.18 ] + type record ErrorInfo { + FieldName fieldName (ERROR_INFO_E) , + ErrorInfoBody_List errorInfo optional + } + + // [20.19 ] + type record Expires { + FieldName fieldName (EXPIRES_E) , + DeltaSec deltaSec + } + + //[6809] + type record FeatureCaps { + FieldName fieldName(FEATURE_CAPS_E), + FcValue_List fcValues + } + + // [20.20 ] + type record From { + FieldName fieldName (FROM_E) , + Addr_Union addressField, + SemicolonParam_List fromParams optional + } + + // [2616] + type record Host { + FieldName fieldName(HOST_E), + charstring host, // an empty value is represented by the empty charstring "" + integer portField optional + } + + // [20.21 ] + type record InReplyTo { + FieldName fieldName (IN_REPLY_TO_E) , + CallidString_List callids + } + + // [20.22 ] + type record MaxForwards { + FieldName fieldName (MAX_FORWARDS_E) , + integer forwards // this field is represented as an integer + } + + // [20.23 ] + type record MinExpires { + FieldName fieldName (MIN_EXPIRES_E) , + DeltaSec deltaSec + } + + // [20.24 RFC2616 19.4.1 ] + type record MimeVersion { + FieldName fieldName (MIME_VERSION_E) , + integer majorNumber, // this field is represented as an integer + integer minorNumber // this field is represented as an integer + } + + // [20.25 ] + type record Organization { + FieldName fieldName (ORGANIZATION_E) , + charstring organization + } + + // [20.26 ] + type record Priority { + FieldName fieldName (PRIORITY_E) , + charstring priorityValue + } + + // [20.27 RFC2616 14.33 RFC2617 1.2 ] + type record ProxyAuthenticate { + FieldName fieldName (PROXY_AUTHENTICATE_E) , + Challenge challenge + } + + // [20.28 RFC2616 14.35 RFC2617 1.2 ] + type record ProxyAuthorization { + FieldName fieldName (PROXY_AUTHORIZATION_E) , + CredentialsList + credentials // changed from Credentials to allow multiple Authorization headers + } + + // [20.29 ] + type record ProxyRequire { + FieldName fieldName (PROXY_REQUIRE_E) , + OptionTag_List optionsTags + } + + // [20.30 ] + type record RecordRoute { + FieldName fieldName (RECORD_ROUTE_E) , + RouteBody_List routeBody + } + + type set of InfoPackage_Type InfoPackage_List; + + type record InfoPackage_Type { + charstring infoPackageName, + SemicolonParam_List infoPackageParams optional + + } + + //[6086] + type record RecvInfo { + FieldName fieldName(RECV_INFO_E), + InfoPackage_List infoPackageList + } + + //[6086] + type record InfoPackage { + FieldName fieldName(INFO_PACKAGE_E), + InfoPackage_Type infoPackageType + } + + // [20.31 ] + type record ReplyTo { + FieldName fieldName (REPLY_TO_E) , + Addr_Union addressField, + SemicolonParam_List replyToParams optional + } + + // [20.32 ] + type record Require { + FieldName fieldName (REQUIRE_E) , + OptionTag_List optionsTags + } + + // [20.33 ] + type record RetryAfter { + FieldName fieldName (RETRY_AFTER_E) , + DeltaSec deltaSec, + charstring comment optional, + SemicolonParam_List retryParams optional + } + + // [20.34 ] + type record Route { + FieldName fieldName (ROUTE_E) , + RouteBody_List routeBody + } + + // [20.35 RFC2616 14.38 ] + type record Server { + FieldName fieldName (SERVER_E) , + ServerVal_List serverBody + } + + // [20.36 ] + type record Subject { + FieldName fieldName (SUBJECT_E) , + charstring summary + } + + // [20.37 ] + type record Supported { + FieldName fieldName (SUPPORTED_E) , + OptionTag_List optionsTags optional + } + + // [20.38 ] + type record Timestamp { + FieldName fieldName (TIMESTAMP_E) , + TimeValue timeValue optional, + TimeValue delay optional + } + + // [20.39 ] + type record To { + FieldName fieldName (TO_E) , + Addr_Union addressField, + SemicolonParam_List toParams optional + } + + // [20.40 ] + type record Unsupported { + FieldName fieldName (UNSUPPORTED_E) , + OptionTag_List optionsTags + } + + // Undefined header field + type record UndefinedHeader { + charstring headerName, + charstring headerValue + } + + type set of UndefinedHeader UndefinedHeader_List; + + // [20.41 RFC2616 14.43 ] + type record UserAgent { + FieldName fieldName (USER_AGENT_E) , + ServerVal_List userAgentBody + } + + // [20.42 ] + type record Via { + FieldName fieldName (VIA_E) , + ViaBody_List viaBody + } + + // [20.43 ] + type record Warning { + FieldName fieldName (WARNING_E) , + WarningValue_List warningValue + } + + // [20.44 RFC2616 14.47 RFC2617 1.2 ] + type record WwwAuthenticate { + FieldName fieldName (WWW_AUTHENTICATE_E) , + Challenge challenge + } + + } // end group CommonHeaderFieldTypes + group RFC3262HeaderFieldTypes { + // [3262/7.1 ] + type record RSeq { + FieldName fieldName (RSEQ_E) , + integer responseNum + } + + // [3262/7.2 ] + type record RAck { + FieldName fieldName (RACK_E) , + integer responseNum, + integer seqNumber, + charstring method + } + + } // end group RFC3262HeaderFieldTypes + + group RFC3265HeaderFieldTypes { + // [3265/7.2 ] + type record AllowEvents { + FieldName fieldName (ALLOW_EVENTS_E) , + EventType_List eventTypes + } + + type set of EventType EventType_List; + type charstring EventType; + + // [3265/7.2 ] + type record Event { + FieldName fieldName (EVENT_E) , + EventType eventType, + SemicolonParam_List eventParams optional + } + + // [3265/7.2 ] + type record SubscriptionState { + FieldName fieldName (SUBSCRIPTION_STATE_E) , + SubState subState, + SemicolonParam_List substateParams optional + } + + type charstring SubState; + + } // end group RFC3265HeaderFieldTypes + + group RFC3313HeaderFieldTypes { + // [3313/5 ] + type record PMediaAuthorization { + FieldName fieldName (P_MEDIA_AUTHORIZATION_E) , + PMediaAuthorization_List pMediaAuthorizations + } + + type charstring PMediaAuthValue; // HEXDIG "0"-"9", "A"-"F" + type record of PMediaAuthValue PMediaAuthorization_List; + + + } // end group RFC3265HeaderFieldTypes + + group RFC3323HeaderFieldTypes { + // [3323 ] + type record Privacy { + FieldName fieldName (PRIVACY_E) , + PrivacyValue_List privValueList + } + + } // end group RFC3323HeaderFieldTypes + + group RFC3325HeaderFieldTypes { + // [3325 ] + type record PAssertedID { + FieldName fieldName (P_ASSERTED_ID_E) , + PAssertedIDValue_List pAssertedIDValueList + } + + // [3325 ] + type record PPreferredID { + FieldName fieldName (P_PREFERRED_ID_E) , + PPreferredIDValue_List pPreferredIDValueList + } + // draft-drage-sipping-service-identification-01 (July 2007) + type record PPreferredService { + FieldName fieldName (P_PREFERRED_SERVICE_E) , + charstring serviceId + } + + + } // end group RFC3325HeaderFieldTypes + + group RFC3326HeaderFieldTypes { + // [3326 ] + type record of ReasonValue ReasonValues; + + type record ReasonValue { + charstring token, + SemicolonParam_List reasonParams optional + } + + type record Reason { + FieldName fieldName (REASON_E) , + ReasonValues reasonValues + } + + } // end group RFC3326HeaderFieldTypes + + group RFC3327HeaderFieldTypes { + // [3327 ] + type record Path { + FieldName fieldName (PATH_E) , + PathValues pathValues + } + + type record of PathValue PathValues; + + type record PathValue { + NameAddr nameAddr, + SemicolonParam_List rrParam optional + } + + } // end group RFC3515HeaderFieldTypes + + + group RFC4488HeaderFieldTypes { + // [4488 ] + type record ReferSub { + FieldName fieldName (REFER_SUB_E) , + boolean referSubValue, + SemicolonParam_List referSubParams optional + } + + } // end group RFC4488HeaderFieldTypes + + group RFC3329HeaderFieldTypes { + // [RFC3329/2.2 ] + type record SecurityMechanism { + charstring mechName, + SemicolonParam_List mechParams optional + } + + type set of SecurityMechanism SecurityMechanism_List; + + type record SecurityClient { + FieldName fieldName (SECURITY_CLIENT_E) , + SecurityMechanism_List securityMech + } + + type record SecurityServer { + FieldName fieldName (SECURITY_SERVER_E) , + SecurityMechanism_List securityMech + } + + type record SecurityVerify { + FieldName fieldName (SECURITY_VERIFY_E) , + SecurityMechanism_List securityMech + } + + } // end group RFC3329HeaderFieldTypes + + group RFC3455HeaderFieldTypes { + type record of NameAddrParam NameAddrParam_List; + + type record NameAddrParam { + NameAddr nameAddr, + SemicolonParam_List genericParams optional + } + // [3455/5.1 ] + type record PAssociatedURI { + FieldName fieldName (P_ASSOCIATED_URI_E) , + NameAddrParam_List nameAddrList + } + // [3455/5.2 ] + type record PCalledPartyID { + FieldName fieldName (P_CALLED_PARTY_E) , + NameAddrParam nameAddParams + } + + type record of VnetworkSpec VnetworkSpec_List; + + type record VnetworkSpec { + charstring vNetworkSpecToken, + SemicolonParam_List genericParams optional + } + + // [3455/5.3 ] + type record PVisitedNetworkID { + FieldName fieldName (P_VISITED_NETWORK_E) , + VnetworkSpec_List vNetWorkSpec + } + + // [3455/5.4 ] + type record PAccessNetworkInfo { + FieldName fieldName (P_ACCESS_NETWORK_INFO_E) , + charstring accessType, + SemicolonParam_List genericParams optional + } + + // [3455/5.5 ] + type record PChargingFunctionAddresses { + FieldName fieldName (P_CHARGING_FUNCTION_ADDRESSES_E) , + SemicolonParam_List chargeAddrParams optional + } + + // [3455/5.6 ] + type record PChargingVector { + FieldName fieldName (P_CHARGING_VECTOR_E) , + charstring icidValue, + SemicolonParam_List chargeParams optional + } + + } // end group RFC33455HeaderFieldTypes + + group RFC3515HeaderFieldTypes { + // [3515 ] + type record ReferTo { + FieldName fieldName (REFER_TO_E) , + NameAddr nameAddr, + SemicolonParam_List referToParams optional + } + + } // end group RFC3515HeaderFieldTypes + + group RFC3608HeaderFieldTypes { + // [3608 ] + type record ServiceRoute { + FieldName fieldName (SERVICE_ROUTE_E) , + RouteBody_List routeBody + } + + } // end group RFC33608HeaderFieldTypes + + + group RFC3841HeaderFieldTypes { + // [3841 ] + type record AcceptContact { + FieldName fieldName (ACCEPT_CONTACT_E) , + AcRcValue_List acValues + } + + type set of AcRcValue AcRcValue_List; + + type record AcRcValue { + charstring wildcard (c_WILDCARD) , + SemicolonParam_List acRcParams optional + } + // [RFC 3841 ] + type charstring Directive; + type set of Directive Directive_List; + type record RequestDisposition { + FieldName fieldName (REQUEST_DISPOSITION_E) , + Directive_List directives + } + + + } // end group RFC3841HeaderFieldTypes + + group RFC3891HeaderFieldTypes { + // [3891 ] + type record Replaces { + FieldName fieldName (REPLACES_E) , + CallidString callid, + SemicolonParam_List replacesParams optional + } + + } // end group RFC3891HeaderFieldTypes + + group RFC3892HeaderFieldTypes { + // [3892 ] + type record ReferredBy { + FieldName fieldName (REFERRED_BY_E) , + NameAddr nameAddr, + SemicolonParam_List referredbyIdParams optional + } + + } // end group RFC3892HeaderFieldTypes + + group RFC4028HeaderFieldTypes { + // [4028 ] + type record MinSE { + FieldName fieldName (MIN_SE_E) , + DeltaSec deltaSec, + SemicolonParam_List minSeParam optional + } + // [4028 ] + type record SessionExpires { + FieldName fieldName (SESSION_EXPIRES_E) , + DeltaSec deltaSec, + SemicolonParam_List seParam optional + } + + } // end group RFC4028HeaderFieldTypes + + group RFC4244HeaderFieldTypes { + // [4244 ] + type record HistoryInfo { + FieldName fieldName (HISTORY_INFO_E) , + HistoryInfo_List historyInfoList + } + + type record of HistoryInfoEntry HistoryInfo_List; + + type record of integer IntegerList; + + type record HistoryInfoEntry { + NameAddr nameAddr, + IntegerList hiIndex optional, + SemicolonParam_List hiExtention optional + } + + type record of charstring StringList; + + } // end group RFC4244HeaderFieldTypes + + group RFC5009PEarlyMediaHeader { + // [5009 ] + type record PEarlyMedia { + FieldName fieldName (P_EARLY_MEDIA_E) , + EM_Param_List em_param + } + type charstring EM_Param; + type set of EM_Param EM_Param_List; + + } // end group RFC5009PEarlyMediaHeader + + // http://tools.ietf.org/html/draft-johnston-sipping-cc-uui-07, expires 16.Aug.2009 + // Transporting User to User Call Control Information in SIP for ISDN Interworking + // type definition of SIP header mechanism + group UserToUser_PreliminaryRFCDraft { + type record UserToUser { + FieldName fieldName (USER_TO_USER_E) , + charstring uuiData length(256), + /*length limitation due to ISDN, max of allowed 128 hex digits are represented by 256 characters*/ + GenericParam uuiParam + } + + + } // end group UserToUser_PreliminaryRFCDraft + + type record PAssertedService { + FieldName fieldName (P_ASSERTED_SERVICE_E) , + PAssertedServiceValue pAssertedServiceValue + } + + group RFC6442GeolocationConveyance { + // [6442 ] + type record Geolocation { + // RFC6442 clause 4.1 + FieldName fieldName (GEOLOCATION_E) , + SipUrl addrSpec, + SemicolonParam_List geolocParam optional + } + type enumerated GeolocationRoutingState { + GEOLOCATION_ROUTING_YES_E, GEOLOCATION_ROUTING_NO_E, GEOLOCATION_ROUTING_OTHER_E + } + type record GeolocationRouting { + // RFC6442 clause 4.2 + FieldName fieldName (GEOLOCATION_ROUTING_E) , + GeolocationRoutingState state, + GenericParam genericValue optional + } + + } // end group RFC6442GeolocationConveyance + + type charstring SessIdString length(32); + + type record SessionId { + FieldName fieldName (SESSION_ID_E) , + SessIdString sessid, + GenericParam sessidParam optional + } + + type charstring EntityTag; + + type record SIP_ETag { + FieldName fieldName (SIP_ETAG_E) , + EntityTag entityTag + } + + type record SIP_If_Match { + FieldName fieldName (SIP_IF_MATCH_E) , + EntityTag entityTag + } + + // RFC4412 + type record ResourcePriority { + FieldName fieldName (RESOURCE_PRIORITY_E) , + ResourcePriority_List resourcePriorityList + } + type set of R_Value ResourcePriority_List; + type record R_Value { + charstring namespace, + charstring rPriority + } + + // RFC5373 + type record AnswerMode { + FieldName fieldName (ANSWER_MODE_E), + AnswerMode_Value answerMode_Value, + SemicolonParam_List answerModeParams optional + } + type record PrivAnswerMode { + FieldName fieldName (PRIV_ANSWER_MODE_E), + AnswerMode_Value answerMode_Value, + SemicolonParam_List answerModeParams optional + } + type charstring AnswerMode_Value; + + // RFC4538 + type record TargetDialog { + FieldName fieldName (TARGET_DIALOG_E), + CallidString callid, + TdParam tdParam optional + } + type record TdParam { + charstring remoteParam optional, + charstring localParam optional, + SemicolonParam_List genericParams optional + } + + // RFC4964 + type record PAnswerState { + FieldName fieldName (P_ANSWER_STATE_E), + charstring answerType, + SemicolonParam_List genericParams optional + } + + + } // end group HeaderFieldTypes + + group MessageHeaderTypes { + + // Message-Header for all SIP requests and responses [20 ] + type set MessageHeader { + Accept accept optional, + AcceptContact acceptContact optional, + AcceptEncoding acceptEncoding optional, + AcceptLanguage acceptLanguage optional, + AlertInfo alertInfo optional, + Allow allow optional, + AllowEvents allowEvents optional, + // 3265/7.2 + AuthenticationInfo authenticationInfo optional, + // only in responses + Authorization authorization optional, + // only in requests + CallId callId optional, + // optional only in Invalid test cases mandatory otherwise + CallInfo callInfo optional, + Contact contact optional, + // optional in response and all requests except INVITE where mandatory + ContentDisposition contentDisposition optional, + ContentEncoding contentEncoding optional, + ContentLanguage contentLanguage optional, + ContentLength contentLength optional, + // optional in responses and all requests except ACK where mandatory + ContentType contentType optional, + CSeq cSeq optional, + // optional only in Invalid test cases mandatory otherwise + Date date optional, + ErrorInfo errorInfo optional, + // only in responses + Event event optional, + // 3265/7.2 + Expires expires optional, + FeatureCaps featureCaps optional, // 6809 + From fromField, + Geolocation geolocation optional, + // 6442 + GeolocationRouting geolocationRouting optional, + // 6442 + HistoryInfo historyInfo optional, + // 4244 + InfoPackage infoPackage optional, + // 6086 + InReplyTo inReplyTo optional, + // only in requests + MaxForwards maxForwards optional, + // mandatory in requests not required in responses! + MimeVersion mimeVersion optional, + MinExpires minExpires optional, + // only in responses + MinSE minSE optional, + // 4028 + Organization organization optional, + PAccessNetworkInfo pAccessNetworkInfo optional, + // 3455 + PAssertedID pAssertedID optional, + // 3325 + PAssertedService pAssertedService optional, + PAssociatedURI pAssociatedURI optional, + // 3455 + Path path optional, + // 3327 + PCalledPartyID pCalledPartyID optional, + // 3455 + PChargingFunctionAddresses pChargingFunctionAddresses optional, + // 3455 + PChargingVector pChargingVector optional, + // 3455 + PEarlyMedia pEarlyMedia optional, + // 5009 + PMediaAuthorization pMediaAuthorization optional, + // 3313 + PPreferredID pPreferredID optional, + // 3325 + PPreferredService pPreferredService optional, + // draft-drage-sipping-service-identification-01 (July 2007) + Priority priority optional, + // only in requests + Privacy privacy optional, + // 3323 + ProxyAuthenticate proxyAuthenticate optional, + // only in responses + ProxyAuthorization proxyAuthorization optional, + // only in requests + ProxyRequire proxyRequire optional, + // only in requests + PVisitedNetworkID pVisitedNetworkID optional, + // 3455 + RAck rAck optional, + // 3262/7.1 + RSeq rSeq optional, + // 3262/7.1 + Reason reason optional, + // 3326 + RecordRoute recordRoute optional, + RecvInfo recvInfo optional, + // 6086 + RequestDisposition requestDisposition optional, + // 3841 + ReferredBy referredBy optional, + // 3892 - REFER method + ReferTo referTo optional, + // 3515 - REFER method + ReferSub referSub optional, + // 4488 - REFER method + Replaces replaces optional, + // 3891 + ReplyTo replyTo optional, + // optional in responses and INVITE requests + Require require optional, + RetryAfter retryAfter optional, + // only in responses + Route route optional, + // only in requests + SecurityClient securityClient optional, + // 3329 + SecurityServer securityServer optional, + // 3329 + SecurityVerify securityVerify optional, + // 3329 + Server server optional, + // only in responses + ServiceRoute serviceRoute optional, + // 3608 + SessionExpires sessionExpires optional, + // 4028 + SessionId sessionId optional, + SIP_ETag sipETag optional, + SIP_If_Match sipIfMatch optional, + Subject subject optional, + // only in requests + SubscriptionState subscriptionState optional, + // 3265/7.2 + Supported supported optional, + Timestamp timestamp_ optional, + To toField, + Unsupported unsupported optional, + // only in responses + UserToUser userToUser optional, + UserAgent userAgent optional, + Via via, + Warning warning optional, + WwwAuthenticate wwwAuthenticate optional, + ResourcePriority resourcePriority optional, + // RFC4412 + AnswerMode answerMode optional, + // RFC5373 + PrivAnswerMode privAnswerMode optional, + // RFC5373 + TargetDialog targetDialog optional, + // RFC4538 + PAnswerState pAnswerState optional, + // RFC4964 + // only in responses + UndefinedHeader_List undefinedHeader_List optional + } + + + } // end group MessageHeaderTypes + + group StartLineTypes { + // Request-Line [7.1 ] + type record RequestLine { + Method method, + SipUrl requestUri, + charstring sipVersion + } + + // Status-Line [7.2 ] + type record StatusLine { + charstring sipVersion, + integer statusCode, + charstring reasonPhrase + } + + + } // end group StartLineTypes + + + group otherTypes { + + type record SipUserProfile { + /** + * @desc integer for the userprofile identifier + */ + integer id, + /** + * @desc integer for Port number to exchange SIP messages + */ + integer currPort, + /** + * @desc charstring for IP address to exchange SIP messages + */ + charstring currIpaddr, + /** + * @desc integer for Port number to exchange SIP messages + */ + integer contactPort, + /** + * @desc charstring for IP address to exchange SIP messages + */ + charstring contactIpaddr, + /** + * @desc charstring for IP address used by the TS to exchange media streams + */ + charstring bearerIpaddr, + /** + * @desc charstring for identity of the tester local domain + */ + charstring homeDomain, + /** + * @desc charstring for identity of the tester local user + */ + charstring publUsername, + /** + * @desc charstring for RFC 2617 3.2.1 qop options: Quoted string of one or more tokens indicating the "quality of protection" values supported by the server. The value "auth" indicates authentication; the value "auth-int" indicates authentication with integrity protection. + */ + charstring qop, + /** + * @desc charstring for RFC 2617 3.2.2 username for authentication The name of user in the specified realm + */ + charstring privUsername, + /** + * @desc charstring for RFC 2617 3.2.2.2 passwd: A known shared secret, the password of user of the specified username + */ + charstring passwd, + /** + * @desc charstring for registrar domain for authentication and request line + */ + charstring registrarDomain + } + + + + } // end group otherTypes + + + } // end group Subtypes + + + + group MSGtypes { + + group RequestTypes { + // [7.1 ] + /** + * @desc generic type of a SIP request message + * @member statusLine contains a method name, a Request-URI, and the protocol version + * @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards + * @member messageBody depends on the request method, includes e.g. SDP message. + * @member payload contains the whole message as it has been received in its text format + */ + type record Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // Note: the introduction of the following specific types is to enable better means for logging + // on the other side the generic type is useful for functions dealing with multiple SIP message types + type record REGISTER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INVITE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record OPTIONS_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record BYE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record CANCEL_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record ACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3262/7.1 ] + type record PRACK_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1 ] + type record NOTIFY_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3265/7.1 ] + type record SUBSCRIBE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3903/11.1 ] + type record PUBLISH_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + // [3311/7 ] + type record UPDATE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record REFER_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record MESSAGE_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type record INFO_Request { + RequestLine requestLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + type union RequestUnion { + REGISTER_Request Register, + INVITE_Request Invite, + OPTIONS_Request Options, + BYE_Request Bye, + CANCEL_Request Cancel, + ACK_Request Ack, + PRACK_Request Prack, + NOTIFY_Request Notify, + SUBSCRIBE_Request Subscribe, + PUBLISH_Request Publish, + UPDATE_Request Update, + REFER_Request Refer, + MESSAGE_Request Message, + INFO_Request Info// [2976 ] + } + + } // end group RequestTypes + + group ResponseTypes { + // [7.2 ] + /** + * @desc generic type of a SIP response message + * @member statusLine consists of the protocol version followed by a numeric Status-Code and its associated textual phrase + * @member msgHeader include all possible header fields that are allowed to be present according to RFCs and other standards + * @member messageBody depends on the response method, includes e.g. SDP message. + * @member payload contains the whole message as it has been received in its text format + */ + type record Response { + StatusLine statusLine, + MessageHeader msgHeader, + MessageBody messageBody optional, + Payload payload optional + } + + } // end group ResponseTypes + + // This MSG type is defined for sending synctactic variations, ans syntactically + // erroneous messages, and receving messages failed parsing. + group SyntacticTypes { + type charstring Raw; + + } // end group SyntacticTypes + + + // This type is defined for particular SIP message body types like SDP + } // end group MSGTypes + + } // end group Types +} +with { + encode "SIPCodec"; variant ""; +} // end module LibSip_TypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn new file mode 100644 index 0000000..7f1d2b8 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSFunctions.ttcn @@ -0,0 +1,48 @@ +/** + * @author STF 435, 471 + * @version $Id$ + * @desc This module provides the functions used by the test component + * for SIP-SMS over IMS as specified in 3GPP 24-341 tests. + * This module is part of LibSipV3. + */ +module LibSip_SMSFunctions { + import from LibSip_SMSTypesAndValues all; + + function f_IA5_2oct( + charstring p_ASCII_String + ) return octetstring { + var integer i; + var integer j; + var integer v_Length := lengthof(p_ASCII_String); + var integer v_Temp; + var octetstring v_Noctets := ''O; + var bitstring v_TempBitSrc := ''B; + var bitstring v_TempBitDes := ''B; + + if ((v_Length <= 0) or (v_Length > 160) or (((v_Length * 7) mod 8) != 0)) { + log("*** " & __SCOPE__ & "INFO: Invalid value of input string length ***"); + } + + for (i := 0; i < v_Length; i := i + 1) { + v_Temp := char2int(p_ASCII_String[i]); + v_TempBitSrc := int2bit(v_Temp, 8); + + for (j := 1; j <= 7; j := j + 1) { + + v_TempBitDes := v_TempBitSrc[8 - j] & v_TempBitDes; + + if (((7 * i + j) mod 8) == 0) { + + v_Noctets := v_Noctets & bit2oct(v_TempBitDes); + v_TempBitDes := ''B; + } + } + } + + return v_Noctets; + } // f_IA5_2oct + + external function fx_GetSC_TimeStamp( + integer p_TimeZone + ) return TP_ServiceCentreTimeStamp_Type; +} // End of module LibSip_SMSFunctions \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn new file mode 100644 index 0000000..ba48241 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn @@ -0,0 +1,304 @@ +/** + * @author STF 435, STF 471 + * @version $Id$ + * @desc This module provides the types used by the test component + * for SIP-SMS over IMS as specified in 3GPP 24-341 tests. + * This module is part of LibSipV3. + */ +module LibSip_SMSTemplates { + import from LibCommon_DataStrings all; + import from LibSip_SMSTypesAndValues all; + import from LibSip_SMSFunctions all; + + group SMS_Templates_Group { + + /* Non-SMS Type Constraints */ + template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlanAny := { + extBit := ?, + typeOfNumber := ?, + numberingPlanId := ? + } + + template(value) TypeOfNumberingPlan m_TypeOfNumberingPlan := { + extBit := '1'B, + typeOfNumber := '001'B, // international number + numberingPlanId := + '0001'B // ISDN/telephony numbering plan (Rec. E.164/E.163) + } + + template(present) TypeOfNumberingPlan mw_TypeOfNumberingPlan := mw_TypeOfNumberingPlanAny; + + /* End Non-SMS Type Constraints */ + template(value) RP_OriginatorAddress_dl m_RP_OriginatorAddress_dl := { + spare := omit, + iei := omit, + iel := '06'O, // 6 semi-octets + typeOfNumberingPlan := m_TypeOfNumberingPlan, + digits := '001122'O + } + + template(present) RP_OriginatorAddress_ul mw_RP_OriginatorAddress_ul := { + spare := omit, + iei := omit, + iel := '00'O + } + + template(present) RP_DestinationAddress_ul mw_RP_DestinationAddress_ul := { + spare := omit, + iei := omit, + iel := ?, + typeOfNumberingPlan := mw_TypeOfNumberingPlan, + digits := ? + } + template(omit) RP_DestinationAddress_dl m_RP_DestinationAddress_dl := { + spare := omit, + iei := omit, + iel := '00'O + } + + template(omit) RP_UserData m_RP_UserData_DELIVER( + octetstring p_Digits + ) := { + spare := omit, + iei := omit, + iel := int2oct((153 + lengthof(p_Digits)), 1), + tP_PDU := {SMS_DELIVER := m_SMS_DELIVER(p_Digits)} + } + + template(value) RP_UserData m_RP_UserData_SUBMIT_REPORT := { + spare := '0'B, + iei := c_IEI_RP_UserData, + iel := '0A'O, // the TPDU data length is 10 octets + tP_PDU := {SMS_SUBMIT_REPORT := m_SMS_SUBMIT_REPORT} + } + template(value) RP_UserData m_RP_UserData_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RecipientAddress, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) modifies m_RP_UserData_SUBMIT_REPORT := { + tP_PDU := {SMS_STATUS_REPORT := m_SMS_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP)} + } + + template(present) RP_UserData mw_RP_UserData_SUBMIT := { + spare := omit, + iei := omit, + iel := ?, + tP_PDU := {SMS_SUBMIT := mw_SMS_SUBMIT_VPF_REF} + } + + template(present) RP_UserData mw_RP_UserData_DELIVER_REPORT := { + spare := '0'B, + iei := c_IEI_RP_UserData, + iel := ?, + tP_PDU := {SMS_DELIVER_REPORT := mw_SMS_DELIVER_REPORT} + } + + /* End SM-RP Type Constraints */ + /* SM-RP PDU Constraints */ + template(value) RP_DATA_dl_Type m_RP_DATA_dl_base := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_DATA_dl, + rP_MessageReference := '00'O, + rP_OriginatorAddress := m_RP_OriginatorAddress_dl, + rP_DestinationAddress := m_RP_DestinationAddress_dl, + rP_UserData := m_RP_UserData_DELIVER('0000'O) + } + + template(value) RP_DATA_dl_Type m_RP_DATA_dl_DELIVER( + octetstring p_Digits + ) modifies m_RP_DATA_dl_base := {rP_UserData := m_RP_UserData_DELIVER(p_Digits)} + + template(value) RP_DATA_dl_Type m_RP_DATA_dl_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RecipientAddress, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) modifies m_RP_DATA_dl_base := { + rP_UserData := m_RP_UserData_STATUS_REPORT(p_MessageRef, p_RecipientAddress, p_SCTP) + } + + + template(present) RP_DATA_ul_Type mw_RP_DATA_ul_SUBMIT := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_DATA_ul, + rP_MessageReference := ?, + rP_OriginatorAddress := mw_RP_OriginatorAddress_ul, + rP_DestinationAddress := mw_RP_DestinationAddress_ul, + rP_UserData := mw_RP_UserData_SUBMIT + } + + template(value) RP_ACK_Type m_RP_ACK_SUBMIT_REPORT( + template(value) Oct1 p_msgReference := '00'O + ) := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_ACK_dl, + rP_MessageReference := p_msgReference, + rP_UserData := m_RP_UserData_SUBMIT_REPORT + } + + template(present) RP_ACK_Type mw_RP_ACK_DELIVER_REPORT := { + spare5 := '00000'B, + rP_MessageTypeIndicator := c_MT_RP_ACK_ul, + rP_MessageReference := ?, + rP_UserData := mw_RP_UserData_DELIVER_REPORT + } + + /* End SM-RP PDU Constraints */ + /* SM-TP Type Constraints */ + template(value) TP_ProtocolIdentifier_Type mw_TP_ProtocolIdentifier := { + pidType := '01'B, + interworking := '0'B, + pidValue := '00000'B + } + + template(value) TP_ProtocolIdentifier_Type m_TP_ProtocolIdentifier := { + pidType := '01'B, + interworking := '0'B, + pidValue := '00000'B + } + + template(value) TP_DataCodingScheme_Type m_TP_DataCodingScheme := { + codingGroup := '0000'B, + codeValue := '0000'B + } + + template(present) TP_Address_Type mw_TP_AddressAny := { + iel := ?, + typeOfNumberingPlan := mw_TypeOfNumberingPlanAny, + digits := * + } + + template(value) TP_Address_Type m_TP_Address( + octetstring p_Digits + ) := { + iel := int2oct(2 * lengthof(p_Digits), 1), + // length is number of useful semi-octets + // as p_digits is declared as octetstring the number must be even + typeOfNumberingPlan := m_TypeOfNumberingPlan, + digits := p_Digits + } + + template(value) TP_ParameterIndicator_Type m_TP_ParameterIndicator := { + extBit1 := '0'B, + spare4 := '0000'B, + tP_UDL := '0'B, + tP_DCS := '0'B, + tP_PID := '1'B + } + + /* End SM-TP Type Constraints */ + /* SM-TP PDU Constraints */ + template(value) SMS_DELIVER_Type m_SMS_DELIVER( + octetstring p_Digits + ) := { + tP_ReplyPath := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportIndication := '1'B, + spare2 := '00'B, + tP_MoreMessagesToSend := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_DELIVER, + tP_OriginatingAddress := m_TP_Address(p_Digits), + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := m_TP_DataCodingScheme, + tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed + tP_UserDataLength := int2oct(160, 1), + tP_UserData := f_IA5_2oct(c_Fox) + } + + template(present) SMS_DELIVER_REPORT_Type mw_SMS_DELIVER_REPORT := { + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := c_MT_SMS_DELIVER_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := ?, + tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := *, + tP_UserDataLength := *, + tP_UserData := * + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT := { + tP_ReplyPath := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportRequest := '1'B, + tP_ValidityPeriodFormat := '??'B, + tP_RejectDuplicates := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_SUBMIT, + tP_MessageReference := ?, + tP_DestinationAddress := mw_TP_AddressAny, + tP_ProtocolIdentifier := mw_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := ?, + tP_ValidityPeriod := *, + tP_UserDataLength := int2oct(160, 1), + tP_UserData := + ? // any data will do: 140 octets + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_NP modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '00'B, + tP_ValidityPeriod := omit + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_REF modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '10'B, + tP_ValidityPeriod := ? + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ENH modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '01'B, + tP_ValidityPeriod := ? + } + + template(present) SMS_SUBMIT_Type mw_SMS_SUBMIT_VPF_ABS modifies mw_SMS_SUBMIT := { + tP_ValidityPeriodFormat := '11'B, + tP_ValidityPeriod := ? + } + + template(value) SMS_SUBMIT_REPORT_Type m_SMS_SUBMIT_REPORT := { + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + spare4 := '0000'B, + tP_MessageTypeIndicator := c_MT_SMS_SUBMIT_REPORT, + tP_FailureCause := omit, + tP_ParameterIndicator := m_TP_ParameterIndicator, + tP_ServiceCentreTimeStamp := fx_GetSC_TimeStamp(0), // Time Zone 0 assumed + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := omit, + tP_UserDataLength := omit, + tP_UserData := omit + } + + template(value) SMS_STATUS_REPORT_Type m_SMS_STATUS_REPORT( + template(value) TP_MessageReference_Type p_MessageRef, + template(value) TP_Address_Type p_RA, + template(value) TP_ServiceCentreTimeStamp_Type p_SCTP + ) := { + // TS 34.229-1 clause A.7.5 + spare1 := '0'B, + tP_UserDataHeaderIndicator := '0'B, + tP_StatusReportQualifier := '0'B, + spare2 := '00'B, + tP_MoreMessagesToSend := '0'B, + tP_MessageTypeIndicator := c_MT_SMS_STATUS_REPORT, + tP_MessageReference := p_MessageRef, + tP_RecipientAddress := p_RA, + tP_ServiceCentreTimeStamp := p_SCTP, + tP_DischargeTime := '00000000000000'H, + tP_Status := { + reserved := '0'B, + status := '0000000'B + }, + tP_ParameterIndicator := m_TP_ParameterIndicator, + tP_ProtocolIdentifier := m_TP_ProtocolIdentifier, + tP_DataCodingScheme_Type := omit, + tP_UserDataLength := omit, + tP_UserData := omit + } + + + + + + /* End SM-TP PDU Constraints */ + } // group SMS_Templates_Group +} // End of module LibSip_SMSTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn new file mode 100644 index 0000000..71ddf4c --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn @@ -0,0 +1,485 @@ +/****************************************************************************** + * @author STF 435, STF471 + * @version $Id$ + * @desc This module contains the type definitions for SMS messages as specified in + * 3GPP 24-011 and 3GPP 23-040 Rel 8 and 9. + * SMS over IMS is specified in 3GPP 24-341. + * This module is part of LibSipV3. + */ +module LibSip_SMSTypesAndValues { + import from LibCommon_DataStrings all; + + group SMS_Declarations { + + const RP_MessageTypeIndicator_Type c_MT_RP_DATA_ul := '000'B; + /* RP_DATA_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_DATA_dl := '001'B; + /* RP_DATA_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_ACK_ul := '010'B; + /* RP_ACK_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_ACK_dl := '011'B; + /* RP_ACK_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_ul := '100'B; + /* RP_ERROR_ul */ + const RP_MessageTypeIndicator_Type c_MT_RP_ERROR_dl := '101'B; + /* RP_ERROR_dl */ + const RP_MessageTypeIndicator_Type c_MT_RP_SMMA := '110'B; + /* RP_SMMA */ + const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER := '00'B; + /* SMS DELIVER */ + const TP_MessageTypeIndicator_Type c_MT_SMS_DELIVER_REPORT := '00'B; + /* SMS DELIVER REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_STATUS_REPORT := '10'B; + /* SMS STATUS REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_COMMAND := '10'B; + /* SMS COMMAND */ + const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT := '01'B; + /* SMS SUBMIT, SMS SUBMIT REPORT */ + const TP_MessageTypeIndicator_Type c_MT_SMS_SUBMIT_REPORT := '01'B; + /* SMS SUBMIT, SMS SUBMIT REPORT */ + const Bit7 c_IEI_RP_UserData := '1000001'B; + /* 24.011 cl. 8.2.5.3 */ + const charstring c_Fox := "The quick brown fox jumps over the lazy dog's back. Kaufen Sie Ihrer Frau vier bequeme Pelze. - 0123456789 - THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG'S BACK."; + + + + type record TypeOfNumberingPlan { + /* 24.008 cl. 10.5.4.7, 10.5.4.9, 10.5.4.13 */ + Bit1 extBit, + /* Extension Bit */ + Bit3 typeOfNumber, + /* Type Of Number */ + Bit4 numberingPlanId /* Numbering Plan Identification */ + } + /* SM-RP Type Declarations */ + type Bit3 RP_MessageTypeIndicator_Type; + /* 24.011 cl. 8.2.2 */ + type Oct1 RP_MessageReference_Type; + /* 24.011 cl. 8.2.3 */ + type record RP_OriginatorAddress_dl { + /* 24.011 cl. 8.2.5.1 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + /* */ + octetstring digits length(1 .. 10) + } + + type record RP_OriginatorAddress_ul { + /* 24.011 cl. 8.2.5.1 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel /* 0 */ + } + + type record RP_DestinationAddress_ul { + /* 24.011 cl. 8.2.5.2 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + /* */ + octetstring digits length(1 .. 10) + } + type record RP_DestinationAddress_dl { + /* 24.011 cl. 8.2.5.2 */ + Bit1 spare optional, + /* 0 */ + Bit7 iei optional, + /* 0101 1110 */ + Oct1 iel /* 0 */ + } + + type record RP_UserData { + /* 24.011 cl. 8.2.5.3 */ + Bit1 spare optional, + /* 0, present in case of TLV; omit in case of LV */ + Bit7 iei optional, + /* 1000001, present in case of TLV; omit in case of LV */ + Oct1 iel, + /* */ + TP_PDU_Type tP_PDU /* <= 232 octets */ + } + + type record RP_Cause { + /* 24.011 cl. 8.2.5.4 */ + Bit1 spare optional, + /* present in case of TLV; omit in case of LV */ + Bit7 iei optional, + /* present in case of TLV; omit in case of LV */ + Oct1 iel, + /* 2 or 3 */ + Bit1 extBit1, + /* 0 */ + Bit7 causeValue1, + /* Table 8.4/3GPP TS 24.011 */ + Bit1 extBit2, + /* 0 */ + Bit7 causeValue2, + /* Table 8.4/3GPP TS 24.011 */ + Oct1 diagnostic optional /* Parameters included in the return error from MAP */ + } + + /* End SM-RP Type Declarations */ + /* SM-RP PDU Declarations */ + type record RP_DATA_dl_Type { + /* 24.011 cl. 7.3.1.1 + Direction: n -> ue */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_dl rP_OriginatorAddress, + /* cl. 8.2.5.1 M LV 1-12 octets */ + RP_DestinationAddress_dl rP_DestinationAddress, + /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ + } + + type record RP_DATA_ul_Type { + /* 24.011 cl. 7.3.1.2 + Direction: ue -> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_OriginatorAddress_ul rP_OriginatorAddress, + /* cl. 8.2.5.1 M LV 1 */ + RP_DestinationAddress_ul rP_DestinationAddress, + /* cl. 8.2.5.2 M LV 1 */ + RP_UserData rP_UserData /* cl. 8.2.5.3 M LV <= 233 octets */ + } + + type record RP_SMMA_Type { + /* 24.011 cl. 7.3.2 + Direction: ue -> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference /* cl. 8.2.3 M LV 1 */ + } + + type record RP_ACK_Type { + /* 24.011 cl. 7.3.3 + Direction: ue <-> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ + } + + type record RP_ERROR_Type { + /* 24.011 cl. 7.3.4 + Direction: ue <-> n */ + Bit5 spare5, + /* cl. 8.2.2 M V 5 bits */ + RP_MessageTypeIndicator_Type rP_MessageTypeIndicator, + /* cl. 8.2.2 M V 3 bits */ + RP_MessageReference_Type rP_MessageReference, + /* cl. 8.2.3 M LV 1 */ + RP_Cause rP_Cause, + /* cl. 8.2.5.4 M LV 2-3 */ + RP_UserData rP_UserData optional /* cl. 8.2.5.3 O TLV <= 234 octets */ + } + + type union RP_PDU_Type { + RP_DATA_dl_Type RP_DATA_dl, + RP_DATA_ul_Type RP_DATA_ul, + RP_SMMA_Type RP_SMMA, + RP_ACK_Type RP_ACK, + RP_ERROR_Type RP_ERROR + } + + /* End SM-RP PDU Declarations */ + /* SM-TP Type Declarations */ + type record TP_Address_Type { + /* 23.040 cl. 9.1.2.5 */ + Oct1 iel, + /* min value 2 and max value is 11 */ + TypeOfNumberingPlan typeOfNumberingPlan, + octetstring digits length(0 .. 10) optional + } + + type Bit2 TP_MessageTypeIndicator_Type; + /* 23.040 cl. 9.2.3.1 */ + type Oct1 TP_MessageReference_Type; + /* 23.040 cl. 9.2.3.6 */ + type Oct1 TP_UserDataLength_Type; + /* 23.040 cl. 9.2.3.16 */ + type record TP_ProtocolIdentifier_Type { + /* 23.040 cl. 9.2.3.9 */ + Bit2 pidType, + /* */ + Bit1 interworking, + /* */ + Bit5 pidValue /* */ + } + + type record TP_DataCodingScheme_Type { + /* 23.040 cl. 9.2.3.10 + 23.040 cl. 4 */ + Bit4 codingGroup, + /* */ + Bit4 codeValue /* */ + } + + type hexstring TP_ServiceCentreTimeStamp_Type length(14); + /* 23.040 cl. 9.2.3.11 */ + type Oct1 TP_ValidityPeriodRelative_Type; + /* 23.040 cl. 9.2.3.12.1 */ + type hexstring TP_ValidityPeriodAbsolute_Type length(14); + /* 23.040 cl. 9.2.3.12.2 */ + type record TP_ValidityPeriodEnhanced_Type { + /* 23.040 cl. 9.2.3.12.3 */ + Bit1 extBit, + /* */ + Bit1 singleShot, + /* */ + Bit3 spare3, + /* */ + Bit3 validityPeriodFormat, + /* */ + Oct6 validityPeriod /* */ + } + + type union TP_ValidityPeriod_Type { + /* 23.040 cl. 9.2.3.3 */ + TP_ValidityPeriodRelative_Type TP_ValidityPeriodRelative, + /* Relative format */ + TP_ValidityPeriodAbsolute_Type TP_ValidityPeriodAbsolute, + /* Absolute format */ + TP_ValidityPeriodEnhanced_Type TP_ValidityPeriodEnhanced /* Enhanced format */ + } + + type record TP_Status_Type { + /* 23.040 cl. 9.2.3.15 */ + Bit1 reserved, + /* */ + Bit7 status /* */ + } + + type Bit8 TP_Command_Type; + /* 23.040 cl. 9.2.3.19 */ + type record TP_ParameterIndicator_Type { + /* 23.040 cl. 9.2.3.27 */ + Bit1 extBit1, + /* */ + Bit4 spare4, + /* */ + Bit1 tP_UDL, + /* */ + Bit1 tP_DCS, + /* */ + Bit1 tP_PID /* */ + } + + /* End SM-TP Type Declarations */ + /* SM-TP PDU Declarations */ + type record SMS_DELIVER_Type { + /* 23.040 cl. 9.2.2.1 + Direction: n -> ue */ + Bit1 tP_ReplyPath, + /* 23.040 cl. 9.2.3.17 */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportIndication, + /* 23.040 cl. 9.2.3.4 */ + Bit2 spare2, + /* */ + Bit1 tP_MoreMessagesToSend, + /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_Address_Type tP_OriginatingAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, + /* 23.040 cl. 9.2.3.10 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_UserDataLength_Type tP_UserDataLength, + /* 23.040 cl. 9.2.3.16, derived from SUBMIT */ + octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24, derived from SUBMIT */ + } + + type record SMS_DELIVER_REPORT_Type { + /* 23.040 cl. 9.2.2.1a + Direction: ue -> n */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit4 spare4, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + Oct1 tP_FailureCause optional, + /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, + /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 159) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_SUBMIT_Type { + /* 23.040 cl. 9.2.2.2 + Direction: ue -> n */ + Bit1 tP_ReplyPath, + /* 23.040 cl. 9.2.3.17 */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportRequest, + /* 23.040 cl. 9.2.3.5 */ + Bit2 tP_ValidityPeriodFormat, + /* 23.040 cl. 9.2.3.3 */ + Bit1 tP_RejectDuplicates, + /* 23.040 cl. 9.2.3.25 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_DestinationAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type, + /* 23.040 cl. 9.2.3.10 */ + // one of the subsequent ValidityPeriod solutions has be removed + TP_ValidityPeriod_Type tP_ValidityPeriod optional, + /* 23.040 cl. 9.2.3.12 */ + // TP_ValidityPeriodRelative_Type tP_ValidityPeriodRelative optional, /* 23.040 cl. 9.2.3.12.1 */ + // TP_ValidityPeriodAbsolute_Type tP_ValidityPeriodAbsolute optional, /* 23.040 cl. 9.2.3.12.2 */ + // TP_ValidityPeriodEnhanced_Type tP_ValidityPeriodEnhanced optional, /* 23.040 cl. 9.2.3.12.3 */ + TP_UserDataLength_Type tP_UserDataLength, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 140) optional /* 23.040 cl. 9.2.3.24 */ + } + type record SMS_SUBMIT_REPORT_Type { + /* 23.040 cl. 9.2.2.2a + Direction: n -> ue */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit4 spare4, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + Oct1 tP_FailureCause optional, + /* 23.040 cl. 9.2.3.22, provided if RP_ERROR, not if RP_ACK */ + TP_ParameterIndicator_Type tP_ParameterIndicator, + /* 23.040 cl. 9.2.3.27 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 152) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_STATUS_REPORT_Type { + /* 23.040 cl. 9.2.2.3 + Direction: n -> ue */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatusReportQualifier, + /* 23.040 cl. 9.2.3.26 */ + Bit2 spare2, + /* */ + Bit1 tP_MoreMessagesToSend, + /* 23.040 cl. 9.2.3.2 */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_Address_Type tP_RecipientAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_ServiceCentreTimeStamp_Type tP_ServiceCentreTimeStamp, + /* 23.040 cl. 9.2.3.11 */ + TP_ServiceCentreTimeStamp_Type tP_DischargeTime, + /* 23.040 cl. 9.2.3.12 */ + TP_Status_Type tP_Status, + /* 23.040 cl. 9.2.3.15 */ + TP_ParameterIndicator_Type tP_ParameterIndicator optional, + /* 23.040 cl. 9.2.3.27 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier optional, + /* 23.040 cl. 9.2.3.9 */ + TP_DataCodingScheme_Type tP_DataCodingScheme_Type optional, + /* 23.040 cl. 9.2.3.10 */ + TP_UserDataLength_Type tP_UserDataLength optional, + /* 23.040 cl. 9.2.3.16 */ + octetstring tP_UserData length(0 .. 143) optional /* 23.040 cl. 9.2.3.24 */ + } + + type record SMS_COMMAND_Type { + /* 23.040 cl. 9.2.2.4 + Direction: ue -> n */ + Bit1 spare1, + /* */ + Bit1 tP_UserDataHeaderIndicator, + /* 23.040 cl. 9.2.3.23 */ + Bit1 tP_StatRptReq, + /* Table 8.4/3GPP TS 24.011 */ + Bit3 spare3, + /* */ + TP_MessageTypeIndicator_Type tP_MessageTypeIndicator, + /* 23.040 cl. 9.2.3.1 */ + TP_MessageReference_Type tP_MessageReference, + /* 23.040 cl. 9.2.3.6 */ + TP_ProtocolIdentifier_Type tP_ProtocolIdentifier, + /* 23.040 cl. 9.2.3.9 */ + TP_Command_Type tP_CommandType, + /* 23.040 cl. 9.2.3.19 */ + TP_MessageReference_Type tP_MessageNumber, + /* 23.040 cl. 9.2.3.18 */ + TP_Address_Type tP_DestinationAddress, + /* 23.040 cl. 9.1.2.5 */ + TP_UserDataLength_Type tP_CommandDataLength, + /* 23.040 cl. 9.2.3.20 (number of octets) */ + octetstring tP_CommandData length(0 .. 156) optional /* 23.040 cl. 9.2.3.21 */ + } + + type union TP_PDU_Type { + SMS_DELIVER_Type SMS_DELIVER, + SMS_DELIVER_REPORT_Type SMS_DELIVER_REPORT, + SMS_SUBMIT_Type SMS_SUBMIT, + SMS_SUBMIT_REPORT_Type SMS_SUBMIT_REPORT, + SMS_STATUS_REPORT_Type SMS_STATUS_REPORT, + SMS_COMMAND_Type SMS_COMMAND + } + + + + /* End SM-TP PDU Declarations */ + } + with { + encode "SMSTypes"; + } // group SMS_Declarations +} // End of module LibSip_SMSTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn new file mode 100644 index 0000000..a4ecf1d --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn @@ -0,0 +1,61 @@ +/** + * @author STF 406, 471 + * @version $Id: LibSip_SimpleMsgSummaryTypes.ttcn 488 2010-11-08 10:17:19Z pintar $ + * @desc This module provides the SMS type system for SIP tests. + * This module is part of LibSipV3. +*/ +module LibSip_SimpleMsgSummaryTypes { + // RFC 3842 + group SMSConstants { + + // IMS ETSI name MWI application + const charstring c_imsEtsiMwiApplication := "application/simple-message-summary"; + + // msg_status line := "Message-Waiting" + const charstring c_messageWaiting := "Message-Waiting"; + + // msg_status line := "Message-Account" + const charstring c_messageAccount := "Message-Account"; + + // msg_summary line := "Voice-Message" + const charstring c_voiceMessage := "Voice-Message"; + + } + + group SMSTypes { + type record SimpleMsgSummary { + // Simple_message_summary + Msg_status_line msg_status_line, + Msg_account msg_account optional, + Msg_summary_line_list msg_summary_line_list optional, + Opt_msg_headers opt_msg_headers optional + } + + type record Msg_status_line { + charstring msg_type, + charstring msg_status + } + + type record Msg_account { + charstring msg_type_account, + charstring account_URI + } + + type set of Msg_summary_line Msg_summary_line_list; + + type record Msg_summary_line { + charstring msg_context_class, + charstring msgs, + charstring urgent_msgs optional + } + + type set of charstring Opt_msg_headers; + + + // type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes + } +} +with { + variant "" + encode "SIPCodec" +} \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn new file mode 100644 index 0000000..66c2f2e --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn @@ -0,0 +1,5042 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id: LibSip_Steps.ttcn 645 2016-12-01 13:50:32Z pintar $ + * @desc This module provides the functions, altsteps and external functions used + * for SIP-IMS tests. + * This module is part of LibSipV3. +*/ +module LibSip_Steps { + // LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Templates all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_Common all; + + group externalfunctions { + + /** + * @desc External function to return random charstring + */ + external function fx_rndStr( + ) return charstring; + + /** + * @desc External function to return the equivalent string in lower case + */ + external function fx_putInLowercase( + charstring p_string + ) return charstring; + + /** + * @desc External function to get IP address. + */ + external function fx_getIpAddr( + charstring p_host_name + ) return charstring; + + /** + * @desc External function to generate a digest response. + * @reference RFC 2617 HTTP Authentication: Basic and Digest Access Authentication, and RFC 1321 The MD5 Message-Digest Algorithm + * @see RFC 2617, chapter 5 Sample implementation, for example usage, as the signature of calculateDigestResponse is according to the example given in the RFC. + */ + external function fx_calculateDigestResponse( + charstring p_nonce, + charstring p_cnonce, + charstring p_user, + charstring p_realm, + charstring p_passwd, + charstring p_alg, + charstring p_nonceCount, + charstring p_method, + charstring p_qop, + charstring p_URI, + charstring p_HEntity + ) return charstring; + + /** + * @desc External function to encode Base64 + */ + external function fx_encodeBase64( + in charstring p_value + ) return charstring; + + /** + * @desc External function to decode Base64 + */ + external function fx_decodeBase64( + in charstring p_value + ) return charstring; + + } + + group ParameterOperations { + + /** + * @desc function to generate a 32 bits random number as a charstring for tag field (used as e.g.: tag in from-header field, or branch parameter in via header) + * @return random value with at least 32 bits of randomness + */ + function f_getRndTag( + ) return charstring { + var charstring v_tag_value; + // tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + if (PX_SEED == false) { + v_tag_value := fx_rndStr() & fx_rndStr(); + } else { + v_tag_value := "12345"; + } + return (v_tag_value); + } + + /** + * @desc Function to prepare credentials for request that has an empty entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_algorithm Algorthm to be used. Default: omit + * @return Credentials field + */ + function f_calculatecCredentials_empty( + in SipUserProfile p_userprofile, + in boolean p_algorithm := false + ) return Credentials { + var Credentials v_result; + + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm := p_userprofile.registrarDomain; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + var CommaParam_List v_digestResponse := {}; + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + + if (p_algorithm) { + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := v_response } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); // nonceCount + if (v_opaque != "") { + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := v_opaque } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message. NO RESPONSE value to cause an error! + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentials_wo_response( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := v_username } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); // nonceCount + if (v_opaque == "") { + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := v_opaque } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + /** + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_authorization parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorizationBody( + in charstring p_qop, + in Authorization p_authorization + ) return Challenge { + var CommaParam_List v_challenge; + + if (ischosen(p_authorization.body[0].digestResponse)) { + v_challenge := p_authorization.body[0].digestResponse; + } + else { + v_challenge := p_authorization.body[0].otherResponse.authParams; + } + + return (f_calculatecChallenge_forWWWAuthorization(p_qop, v_challenge)); + } + + /** + * @desc Function to calculate credentials for response 401 - WWW-Authorization + * @param p_qop of the peer UE (alternatively ) + * @param p_challenge parameter from 1st REGISTER request + * @return Credentials field + * @verdict + */ + function f_calculatecChallenge_forWWWAuthorization( + in charstring p_qop, + in CommaParam_List p_challenge + ) return Challenge { + var Challenge v_result; + + var charstring v_realm; + + var charstring v_qop := p_qop; + + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + + // Construct credentials for an Authorization field of a request. + v_result := { + digestCln := { + { + id := "realm", + paramValue := { quotedString := v_realm } + }, + { + id := "nonce", + paramValue := { quotedString := "0edff6c521cc3f407f2d9e01cf6ed82b" } + }, + { + id := "algorithm", + paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } + }, // algorithm is not enclosed with " characters + { + id := "ck", + paramValue := { quotedString := "00112233445566778899aabbccddeeff" } + }, + { + id := "ik", + paramValue := { quotedString := "ffeeddccbbaa99887766554433221100" } + }, // already enclosed to " characters + { + /** + * This directive is optional, but is made so only for backward compatibility with RFC 2069 + * it SHOULD be used by all implementations compliant with this version of the Digest scheme + */ + id := "qop", + paramValue := { tokenOrHost := v_qop } + } // qop + } + }; + + return v_result; + } + + /** + * @desc Function to calculate credentials for request that has an empty entity body such as a REGISTER message and at the end put different private name + * @param p_userprofile to get important parameters + * @param p_method (can be "REGISTER", "INVITE",....) + * @param p_challenge parameter from 4xx response + * @return Credentials field + * @verdict + */ + function f_calculatecCredentialsAndChangeUserName( + in SipUserProfile p_userprofile, + in charstring p_method, + in CommaParam_List p_challenge + ) return Credentials { + var Credentials v_result; + var charstring v_nonce := ""; + var charstring v_cnonce := int2str(float2int(int2float(13172657659 - 1317266) * rnd()) + 1317265); + + // RFC 2617 3.2.2 username: + // The name of user in the specified realm. + var charstring v_username := p_userprofile.privUsername; + var charstring v_realm; + + // RFC 2617 3.2.2.2 passwd: + // A known shared secret, the password of user of the specified + // username. + var charstring v_passwd := p_userprofile.passwd; + var charstring v_algorithm; + + + // a new pseudo-random cnonce value is used every time + // that assumes it is only used once + const charstring cl_nonceCount := "00000001"; + var charstring v_qop := p_userprofile.qop; + var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; + + + // MD5 hash of empty entity body. + const charstring cl_hEntity := "d41d8cd98f00b204e9800998ecf8427e"; + var charstring v_response; + var charstring v_opaque; + var CommaParam_List v_digestResponse := {}; + + + // extract nonce, realm, algorithm, and opaque from challenge + v_nonce := f_extractParamValueFromChallenge(p_challenge, "nonce"); + v_realm := f_extractParamValueFromChallenge(p_challenge, "realm"); + v_algorithm := f_extractParamValueFromChallenge(p_challenge, "algorithm"); + v_opaque := f_extractParamValueFromChallenge(p_challenge, "opaque"); + + // calculate a digest response for the Authorize header + v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); + + // Construct credentials for an Authorization field of a request. + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "username", + paramValue := { quotedString := "DifferentToPrivateUser" } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "realm", + paramValue := { quotedString := v_realm } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nonce", + paramValue := { quotedString := v_nonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "uri", + paramValue := { quotedString := v_uri } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "response", + paramValue := { quotedString := v_response } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "algorithm", + paramValue := { tokenOrHost := "md5" } + }); // algorithm is not enclosed to " characters + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "cnonce", + paramValue := { quotedString := v_cnonce } + }); + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "qop", + paramValue := { tokenOrHost := v_qop } + }); // qop + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "nc", + paramValue := { tokenOrHost := cl_nonceCount } + }); + if (v_opaque != "") { + v_digestResponse := f_addCommaParameter(v_digestResponse, { + id := "opaque", + paramValue := { quotedString := "" } + }); // already enclosed to " characters + } + v_result := {digestResponse := v_digestResponse}; + + return v_result; + } + + + /** + * @desc Function to check if param related to id from CommanParam_List exist containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm", "ck", "ik"...) + * @return parameter p_id value + */ + function f_checkParamValueFromChallengeIfPresent( + in CommaParam_List p_challenge, + in charstring p_id + ) return boolean { + var boolean v_result := false; + var integer v_len := lengthof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + var integer i; + + for (i := 0; i < v_len; i := i + 1) { + if (fx_putInLowercase(p_challenge[i].id) == v_id) { + v_result := true; + } + } + + return v_result; + } + + /** + * @desc Function to check if tag is present in SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return boolean true if tag is present + */ + function f_checkTagPresent( + SemicolonParam_List p_param_l + ) runs on SipComponent + return boolean { + var integer v_numberOfParams; + var integer i := 0; + + v_numberOfParams := lengthof(p_param_l); + while (i < v_numberOfParams) { + if (fx_putInLowercase(p_param_l[i].id) == c_tagId) { + return (true); + } + i := i + 1; + } + return (false); + } + + /** + * @desc Function to remove a parameter from SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return SemicolonParam_List new parameter list + */ + function f_removeParameter( + SemicolonParam_List p_param_l, + charstring p_id + ) runs on SipComponent + return SemicolonParam_List { + var integer v_numberOfParams; + var integer i := 0; + var integer j := 0; + var SemicolonParam_List v_newParamList; + + v_numberOfParams := lengthof(p_param_l); + while (i < v_numberOfParams) { + if (not fx_putInLowercase(p_param_l[i].id) == p_id) { + v_newParamList[j] := p_param_l[i]; + j := j + 1; + } + i := i + 1; + } + return v_newParamList; + } + + /** + * @desc Function to add a parameter to SemicolonParam_List + * @param p_param_l SemicolonParam_List + * @return SemicolonParam_List new parameter list + */ + function f_addParameter( + SemicolonParam_List p_param_l, + GenericParam p_genparam + ) + return SemicolonParam_List { + var SemicolonParam_List v_newParamList := p_param_l; + var integer v_numberOfParams := lengthof(p_param_l); + v_newParamList[v_numberOfParams] := p_genparam; + return v_newParamList; + } + + /** + * @desc Function to add a parameter to CommaParam_List + * @param p_param_l SemicolonParam_List + * @return SemicolonParam_List new parameter list + */ + function f_addCommaParameter( + CommaParam_List p_param_l, + GenericParam p_genparam + ) + return CommaParam_List { + var CommaParam_List v_newParamList := p_param_l; + var integer v_numberOfParams := lengthof(p_param_l); + v_newParamList[v_numberOfParams] := p_genparam; + return v_newParamList; + } + + /** + * @desc Function to extract paramValue related to id from CommanParam_List containing challenge. + * @param p_challenge parameter from 4xx response + * @param p_id name of parameter("nonce", "realm",...) + * @return parameter p_id value + */ + function f_extractParamValueFromChallenge( + in CommaParam_List p_challenge, + in charstring p_id + ) return charstring { + var charstring v_result := ""; + var integer v_len := lengthof(p_challenge); + var charstring v_id := fx_putInLowercase(p_id); + var integer i; + var charstring v_tmpchar; + + for (i := 0; i < v_len; i := i + 1) { + if (fx_putInLowercase(p_challenge[i].id) == v_id) { + if (isvalue(p_challenge[i].paramValue)) { + if(ischosen(p_challenge[i].paramValue.quotedString)) { + v_result := valueof(p_challenge[i].paramValue.quotedString); + } else { + v_result := valueof(p_challenge[i].paramValue.tokenOrHost); + } + } + } + } + + if (v_result == "") { + if (match(p_id, "algorithm")) { + v_result := "MD5"; + } + else if (match(p_id, "opaque")) { + v_result := ""; + } + else { + v_tmpchar := "Cannot acquire value from credentials."; + log("*** " & __SCOPE__ &": INFO: Cannot acquire value from credentials ***"); + setverdict(inconc); + stop; + } + } + + return v_result; + } + + /** + * @desc Return the updated component variable of via header + * @return component variable of via header + */ + function f_updateViaHeaderAS( + in Via p_via + ) runs on SipComponent + return Via { + var Via v_via; + var ViaBody_List v_viaBody_List := p_via.viaBody; + var integer v_size_via := lengthof(v_viaBody_List); + var integer v_size_via_updated := v_size_via + 1; + var ViaBody_List v_viaBody_List_updated; + var integer i; + vc_branch := c_branchCookie & f_getRndTag(); + v_viaBody_List_updated[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); + // p_viaBody_List_updated[0 ] := vc_request.msgHeader.route.routeBody[0 ] ; + for (i := 1; i < v_size_via_updated; i := i + 1) { + v_viaBody_List_updated[i] := v_viaBody_List[i - 1]; + } + v_via.fieldName := p_via.fieldName; + v_via.viaBody := v_viaBody_List_updated; + return (v_via); + } + + /** + * @desc Return the updated component variable of route header + * @return component variable of route header + */ + function f_updateRouteHeaderAS( + in Route p_route + ) runs on SipComponent + return Route { + var Route v_route; + var RouteBody_List v_routeBody_List := p_route.routeBody; + var integer v_size_route := lengthof(v_routeBody_List); + var integer v_size_route_updated := v_size_route - 1; + var RouteBody_List v_routeBody_List_updated; + var integer i; + + for (i := 0; i < v_size_route_updated; i := i + 1) { + v_routeBody_List_updated[i] := v_routeBody_List[i + 1]; + } + v_route.fieldName := p_route.fieldName; + v_route.routeBody := v_routeBody_List_updated; + return (v_route); + } + + /** + * @desc Return the updated component variable of record route header + * @return component variable of record route header + */ + function f_updateRecordRouteHeaderAS( + in template(value) RecordRoute p_recordRoute + ) runs on SipComponent + return RecordRoute { + var + RecordRoute + v_recordRoute := + valueof( + m_recordRoute_currIpAddr_params( + vc_userprofile, + { + { + "lr", + omit + } + } + ) + ); + var integer v_size_recordRoute := 0; + var integer i; + + if (isvalue(p_recordRoute)) { + v_size_recordRoute := lengthof(valueof(p_recordRoute.routeBody)); + } + for (i := 1; i < v_size_recordRoute + 1; i := i + 1) { + v_recordRoute.routeBody[i] := valueof(p_recordRoute.routeBody[i - 1]); + } + + return (v_recordRoute); + } + + + + } // end group ParameterOperations + + group FieldOperations { + + /** + * @desc function adds "Tag"-parameter in "To"-headerfield + * @param p_to To header field that should get a Tag parameter + */ + function f_addTagInTo( + inout To p_to + ) runs on SipComponent { + f_addParameterTagIfNotPresent(c_tagId, { tokenOrHost := f_getRndTag() }, p_to); + } + + /** + * @desc addition of a single parameter in the via header field + * @param p_parameter_name name of parameter to be added + * @param p_parameter_value value of parameter to be added + * @param p_viaBody the via parameter to be extended + * @verdict + */ + function f_addParameterIfNotPresent( + in charstring p_parameter_name, + in GenValue p_parameter_value, + inout ViaBody p_viaBody + ) { + if (isvalue(p_viaBody.viaParams)) { + return; + } + p_viaBody.viaParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * @desc function to addd a parameter to the "To" header field (if there is not any parameter) + * @param p_parameter_name name of the parameter to be added + * @param p_parameter_value value of the paramter to be added + * @param p_to "To" header field to be extended + * @verdict + */ + function f_addParameterTagIfNotPresent( + in charstring p_parameter_name, + in GenValue p_parameter_value, + inout To p_to + ) { + if (isvalue(p_to.toParams)) { + return; + } + p_to.toParams := { + { + p_parameter_name, + p_parameter_value + } + }; + } + + /** + * @desc function compares the IP address of two hosts + * @param p_host1 hostname + * @param p_host2 hostname + * @return boolean value that is true if the IP addresses are identical + * @verdict + */ + function f_equivalentHostAddr( + in charstring p_host1, + in charstring p_host2 + ) return boolean { + // A DNS server may be used + return (fx_getIpAddr(p_host1) == fx_getIpAddr(p_host2)); + } + + + /** + * @desc function checks if Require contains Precondition + * @param p_message (request or response) SIP message to be analysed + * @return true if p_id parameter exist + */ + function f_checkRequirePrecondition( + in Request p_message + ) { + var boolean v_precondition_found; + var integer i; + if (isvalue(p_message.msgHeader.require)) { + v_precondition_found := false; + for (i := 0; i < lengthof(p_message.msgHeader.require.optionsTags); i := i + 1) { + if (match(p_message.msgHeader.require.optionsTags[i], c_tagPrecond)) { + v_precondition_found := true; + } + } + if (not (v_precondition_found)) { + setverdict(fail); + log("*** " & __SCOPE__ & ": FAIL: precondition not found in Require options list! ***"); + } + } + else { + setverdict(fail); + log("*** " & __SCOPE__ & ": FAIL: Require options is not present! ***"); + } + } + + /** + * @desc function checks if P-Charging-Vector contains a particular parameter + * @param p_message (request or response) SIP message to be analysed + * @param p_id name of parameter + * @return true if p_id parameter exist + */ + function f_checkPChargingVectorHeaderParamId( + in Request p_message, + charstring p_id + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.pChargingVector)) { + for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { + if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { + return (true); + } + } + } + return (false); + } + + /** + * @desc function checks if P-Charging-Vector contains a particular parameter + * @param p_message (request or response) SIP message to be analysed + * @param p_id name of parameter + * @return true if p_id parameter exist + */ + function f_checkPChargingVectorHeaderParamIdResponse( + in Response p_message, + charstring p_id + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.pChargingVector)) { + for (i := 0; i < lengthof(p_message.msgHeader.pChargingVector.chargeParams); i := i + 1) { + if (p_message.msgHeader.pChargingVector.chargeParams[i].id == p_id) { + return true; + } + } + } + return (false); + } + + /** + * @desc function returns the Host/Port of a given Contact header field + * @param p_contact contact header field to be analysed + * @return Host/Port record from the contact header field + */ + function f_getContactUri( + in ContactAddress p_contact + ) runs on SipComponent + return SipUrl { + var SipUrl v_SipUrl; + + if (ischosen(p_contact.addressField.nameAddr)) { + v_SipUrl := p_contact.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_contact.addressField.addrSpecUnion; + } + + return (v_SipUrl); + } // end f_getContactUri + + /** + * @desc function returns the Host/Port of a given Contact header field + * @param p_contact contact header field to be analysed + * @return Host/Port record from the contact header field + */ + function f_getContactAddr( + in ContactAddress p_contact + ) runs on SipComponent + return HostPort { + var HostPort v_locAddr; + var SipUrl v_SipUrl; + + if (ischosen(p_contact.addressField.nameAddr)) { + v_SipUrl := p_contact.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_contact.addressField.addrSpecUnion; + } + + v_locAddr.host := v_SipUrl.components.sip.hostPort.host; + + if (isvalue(v_SipUrl.components.sip.hostPort.portField)) { + v_locAddr.portField := v_SipUrl.components.sip.hostPort.portField; + } + else { + v_locAddr.portField := c_defaultSipPort; + } + + return (v_locAddr); + } // end f_getContactAddr + + /** + * @desc function checks if History-Info-Header of the p_message contains a particular URI + * @param p_message (request or response) SIP message to be analysed + * @param p_URI name of parameter + * @return true if p_URI parameter exist + */ + function f_checkHeaderInfoURI( + in Response p_message, + SipUrl p_URI + ) return boolean { + var integer i; + + if (isvalue(p_message.msgHeader.historyInfo)) { + for (i := 0; i < lengthof(p_message.msgHeader.historyInfo.historyInfoList); i := i + 1) { + if (p_message.msgHeader.historyInfo.historyInfoList[i].nameAddr.addrSpec == p_URI) { + return (true); + } + } + } + return (false); + } + + /** + * @desc function returns the Userinfo from a given To header field + * @param p_to To header field to be analysed + * @return Userinfo from the To header field as a charstring + */ + function f_getUserfromTo( + in To p_to + ) runs on SipComponent + return charstring { + var SipUrl v_SipUrl; + + if (ischosen(p_to.addressField.nameAddr)) { + v_SipUrl := p_to.addressField.nameAddr.addrSpec; + } + else { + v_SipUrl := p_to.addressField.addrSpecUnion; + } + + return (v_SipUrl.components.sip.userInfo.userOrTelephoneSubscriber); + } // end f_getUserfromTo + + /** + * @desc function to generate a 32 bits random number as a charstring for tag field + * @param p_cSeq_s CSeq parameter used to modify the tag field value + * @return tag value + */ + function f_getRndCallId( + ) return charstring { + var charstring v_tag_value; + if (PX_SEED == false) { + v_tag_value := fx_rndStr() & fx_rndStr(); + } else { + v_tag_value := "w6TwtB9L64FzfYrTBBuamJX9PE7rBdCWZI7AyTWwrAYw"; + } + // v_tag_value is initialized with a random value with at least 32 bits of randomness + // 4294967296 is a 32 bits integer + // v_tag_value := int2str(float2int(4294967296.0*rnd()) + loc_CSeq_s.seqNumber ); + return (v_tag_value); + } + + /** + * @desc function give access to the top element of the Path header field. + * @param p_Request SIP message to be analysed + * @return NameAddr (e.g. ) or omit + */ + function f_getPathHeaderTop( + inout Request p_Request + ) return template(omit) NameAddr { + if (isvalue(p_Request.msgHeader.path)) { + if (lengthof(p_Request.msgHeader.path.pathValues) > 0) { + return (p_Request.msgHeader.path.pathValues[0].nameAddr); + } + } + return (omit); + } + + /** + * @desc function updates first element of a Via headerfield list + * @param p_viaBody_List address list of a Via header field + * @param p_source_address address to be inserted in the top element + */ + function f_getViaReplyAddr( + inout ViaBody_List p_viaBody_List, + inout Address4SIP p_source_address + ) runs on SipComponent { + var ViaBody v_viaBody; + // The address to send message shall be updated after getting information + // in the Via header fied and according to 18.2.2 + v_viaBody := p_viaBody_List[0]; + + // received parameter has to be addded to the via hader field + // Be careful it could be an Host name and not an IP Address + // One of the reasons this error can occur is if no DNS server is available. + // As a workaround, it is possible to adapt the configuration on the local machine the test + // suite is running on (e.g. under Windows the following file could be configured: + // C:\WINDOWS\system32\drivers\etc\hosts). + // Check if host address can be rosolved + if (not f_equivalentHostAddr(valueof(v_viaBody.sentBy.host), valueof(p_source_address.host))) { + f_addParameterIfNotPresent(c_receivedId, { tokenOrHost := valueof(p_source_address.host) }, v_viaBody); + } + if (isvalue(v_viaBody.sentBy.portField)) { + p_source_address.portField := valueof(v_viaBody.sentBy.portField); + } + else { + p_source_address.portField := c_defaultSipPort; + } + } + + /** + * @desc functions give access to an element of the Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of Route record element to be retrieved + * @return HostPort value of the Route element or omit + */ + function f_getRouteHeaderElementAddressFromRequest( + in Request p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.route)) { + if (lengthof(p_message.msgHeader.route.routeBody) > p_index) { + return (p_message.msgHeader.route.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromRequest( + in Request p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.recordRoute)) { + if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { + return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Record-Route header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of recordRoute record element to be retrieved + * @return HostPort value of the Record-Route element or omit + */ + function f_getRecordRouteHeaderElementAddressFromResponse( + in Response p_message, + in integer p_index + ) return HostPort { + if (isvalue(p_message.msgHeader.recordRoute)) { + if (lengthof(p_message.msgHeader.recordRoute.routeBody) > p_index) { + return (p_message.msgHeader.recordRoute.routeBody[p_index].nameAddr.addrSpec.components.sip.hostPort); + } + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Via header field (record). + * @param p_message (request) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPort( + in Request p_message, + in integer p_index + ) return HostPort { + + if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { + return (p_message.msgHeader.via.viaBody[p_index].sentBy); + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc functions give access to an element of the Via header field (record). + * @param p_message (response) SIP message to be analysed + * @param p_index index of via record element to be retrieved + * @return HostPort value of the Via element or omit + */ + function f_getViaHeaderElementHostPortResponse( + in Response p_message, + in integer p_index + ) return HostPort { + + if (lengthof(p_message.msgHeader.via.viaBody) > p_index) { + return (p_message.msgHeader.via.viaBody[p_index].sentBy); + } + setverdict(fail); + return (c_hostport_dummy); + } + + /** + * @desc function checks indicators if topology hiding (TH) has been applied: - second element in via-header record has tokenized-by parameter + * @param p_Request SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHiding( + inout Request p_request + ) runs on SipComponent + return boolean { + var GenericParam v_viaParameter; + + if (lengthof(p_request.msgHeader.via.viaBody) <2 ) { + return (false); + } + v_viaParameter := p_request.msgHeader.via.viaBody[1].viaParams[0]; + // second element + if (not v_viaParameter.id == "tokenized-by") { + return (false); + } + return (true); + } + + /** + * @desc function checks indicators if topology hiding (TH) has been applied: - any element in via-header record has tokenized-by parameter + * @param Response SIP message to be analysed + * @return boolean value (true indicate TH, false otherwise) + */ + function f_topologyHidingResponse( + inout Response p_response + ) runs on SipComponent + return boolean { + var GenericParam v_viaParameter; + var integer i; + + for (i := 0; i < lengthof(p_response.msgHeader.via.viaBody); i := i + 1) { + + v_viaParameter := p_response.msgHeader.via.viaBody[i].viaParams[0]; // first parameter + if (not v_viaParameter.id == "tokenized-by") { + return (false); + } + } + return (true); + } + + + + group SetHeaders { + + + /** + * @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersGeneral( + inout CSeq p_cSeq_s, + in charstring p_method + ) runs on SipComponent { + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method; + vc_cSeq := p_cSeq_s; + + vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile))); + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersGeneral + + + + /** + * @desc function for setting of component variables related to message header fields (message type independent: CSeq, contact, via), function uses information from userprofile + * @param p_cSeq_s CSeq parameter + * @param p_method method name for cSeq header field + */ + function f_setHeadersACK( + ) runs on SipComponent { + // vc_requestUri.hostPort := vc_reqHostPort; + if (vc_response.statusLine.statusCode >= 200 and vc_response.statusLine.statusCode <= 299) + // ref. RFC3261 8.1.1.7 Via + { + vc_branch := c_branchCookie & f_getRndTag(); + } + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersGeneral + + /** + * @desc setting of general and basic Bye header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersBYE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "BYE"); // cseq, contact, branch, via + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + f_addTagInTo(vc_to); + + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersBYE + + /** + * @desc setting of general and basic CANCEL header fields + * @param p_cSeq_s + */ + function f_setHeadersCANCEL( + inout CSeq p_cSeq_s + ) runs on SipComponent { + + p_cSeq_s.method := "CANCEL"; + // vc_branch := c_branchCookie & f_getRndTag(); // STF 406: CANCEL and ACK should have the same branch as the INVITE + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + } // end function f_setHeadersCANCEL + + /** + * @desc function sets header field for the next outgoing REGISTER message + * @param p_cSeq_s CSeq parameter to be applied + * @param p_emergency Set to true in case of emergency + */ + function f_setHeaders_REGISTER( + inout CSeq p_cSeq_s, + boolean p_emergency := false + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_callIdReg := vc_callId; // remember callId for de-registration + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + vc_cancel_To := vc_to; + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + if (not vc_firstREGISTER_sent) { + if (p_emergency) { + v_params := { + { + "sos", + omit + } + }; + vc_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion.urlParameters := v_params; + } + else { + v_params := { + { + id := c_expiresId, + paramValue := { + tokenOrHost := c_shortRegistration + } + } + }; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + } + + vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + + vc_via_REG := vc_via; + } // end function setHeaders_REGISTER + + /** + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var CommaParam_List v_challenge; + + // Increment CSeq sequence number + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + vc_cSeq := p_cSeq_s; + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + // new branch tag due to different branch tag in new REGISTER method + vc_branch := c_branchCookie & f_getRndTag(); + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER + + /** + * @desc function sets via, cseq and authorization header for the next outgoing (protected) REGISTER NO response in Authorization header to cause an error + * @verdict + */ + function f_setHeaders_2ndREGISTER_wo_response( + ) runs on SipComponent { + var CommaParam_List v_challenge; + + vc_branch := c_branchCookie & f_getRndTag(); + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + if (ischosen(vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge)) + // Extract challenge and calculate credentials for a response. + { + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + } + else { + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; + } + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_wo_response(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER_wo_response + + /** + * @desc function sets via, cseq and authorization header with different private name for the next outgoing (protected) REGISTER + * @verdict + */ + function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName( + ) runs on SipComponent { + var CommaParam_List v_challenge; + + vc_branch := c_branchCookie & f_getRndTag(); + + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_via_REG := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + // Extract challenge and calculate credentials for a response. + v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.otherChallenge.authParams; + + // Increment CSeq sequence number + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + + // Prepair right answer + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentialsAndChangeUserName(vc_userprofile, "REGISTER", v_challenge)} + }; + } // end function f_setHeaders_2ndREGISTER_authorizationWithDifferentUserName + + + /** + * @desc function sets header fields for the next outgoing REGISTER (de-registration) + * @param p_cSeq_s cSeq to be used + * @verdict + */ + function f_setHeaders_deREGISTER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + // reset authorization header to not use nonce from registration (otherwise we have to increase nc) + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + vc_contact := { + fieldName := CONTACT_E, + contactBody := {wildcard := "*"} + }; + } // end function f_setHeaders_deREGISTER + + + /** + * @desc setting of general and basic Invite header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersINVITE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + if (ischosen(vc_requestUri.components.sip)) { + // sip/sips call + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } + else if (ischosen(vc_requestUri.components.urn)) { + // Emergency call + vc_reqUrnUri := vc_requestUri.components.urn; + } + else { + log("*** " & __SCOPE__ &": INFO:f_setHeadersINVITE: unsupported field: ", vc_requestUri," ***"); + setverdict(fail); + } + } + + /** + * @desc setting of general and basic Update header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersUPDATE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "UPDATE"); // cseq, contact, branch, via + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersUPDATE + + /** + * @desc setting of general and basic Message header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersMESSAGE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersMESSAGE + + /** + * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersNOTIFY( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "NOTIFY"); // cseq, contact, branch, via + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersNOTIFY + + /** + * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "OPTIONS"); // cseq, contact, branch, via + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersOPTIONS + + /** + * @desc setting of general and basic Publish header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersPUBLISH( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "PUBLISH"); // cseq, contact, branch, via + // after SUBSCRIBE message callid shall be same + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersPUBLISH + + /** + * @desc function sets header field for the next outgoing SUBSCRIBE message + * @param p_cSeq_s CSeq parameter to be applied + */ + function f_setHeaders_SUBSCRIBE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params := {}; + + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + vc_requestUri := valueof(m_SipUrl_currDomain(vc_userprofile)); + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + // store callId from Subscribe message + vc_callIdSub := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + vc_cancel_To := vc_to; + v_params := f_addParameter(v_params, + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + }); + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + } // end function setHeaders_SUBSCRIBE + + /** + * @desc setting of general and basic Subscribe header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersSUBSCRIBE( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersMESSAGE + + /** + * @desc setting of general and basic REFER header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersREFER( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "REFER"); // cseq, contact, branch, via + // vc_callId := { fieldName:=CALL_ID_E, callid:=f_getRndCallId(p_cSeq_s) & c_AT & vc_userprofile.currIpaddr }; + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersREFER + + /** + * @desc This function reads all necessary headers from the received REGISTER message and generate the tag for the answer + * @param p_Request REGISTER that has been received + */ + function f_setHeadersOnReceiptOfREGISTER( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact) and (not ischosen(p_Request.msgHeader.contact.contactBody.wildcard))) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + if (ispresent(p_Request.msgHeader.authorization)) { + vc_authorization := valueof(p_Request.msgHeader.authorization); + } + } // end f_setHeadersOnReceiptOfREGISTER + + /** + * @desc This function reads all necessary headers from the received SUBSCRIBE message and generate the tag for the answer + * @param p_Request SUBSCRIBE that has been received + */ + function f_setHeadersOnReceiptOfSUBSCRIBE( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + vc_caller_From := vc_from; + f_addTagInTo(vc_to); + vc_caller_To := vc_to; + vc_requestUri := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + } // end f_setHeadersOnReceiptOfSUBSCRIBE + + function f_setHeadersOnReceiptOfREFER( + Request p_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_requestUri := p_Request.requestLine.requestUri; + vc_cancel_To := p_Request.msgHeader.toField; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + } // end f_setHeadersOnReceiptOfREFER + + /** + * @desc function reads all necessary headers from the received INVITE message and generate the tag for the answer + * @param p_Request received INVITE message + * @verdict + */ + function f_setHeadersOnReceiptOfINVITE( + Request p_Request + ) runs on SipComponent { + var integer i, j; + var integer v_length; + + f_setHeadersOnReceiptOfRequest(p_Request); + + vc_callId := p_Request.msgHeader.callId; + + vc_requestUri2 := p_Request.requestLine.requestUri; + + vc_cancel_To := p_Request.msgHeader.toField; + f_addTagInTo(vc_to); + vc_caller_From := vc_from; + vc_caller_To := vc_to; + + if (isvalue(p_Request.msgHeader.contact)) { + vc_reqHostPort := f_getContactAddr(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + vc_requestUri := f_getContactUri(p_Request.msgHeader.contact.contactBody.contactAddresses[0]); + } + + // update callee information and pick up tag if the call need to be canceled + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + if (isvalue(p_Request.msgHeader.privacy)) { + vc_privacy := p_Request.msgHeader.privacy; + } + + if (isvalue(p_Request.messageBody)) { + // cleaning of attributes before assignment + if (isvalue(vc_sdp_remote.media_list)) { + v_length := lengthof(vc_sdp_remote.media_list); + for (i := 0; i < v_length; i := i + 1) { + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + vc_sdp_remote.media_list[i].attributes := omit; + } + } + } + + // save SDP if present + if (ischosen(p_Request.messageBody.sdpMessageBody)) { + vc_sdp_remote := p_Request.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + f_prepare_SDP_answer(); + } + + // save XML if present + if (ischosen(p_Request.messageBody.xmlBody)) { + vc_xml_remote := p_Request.messageBody.xmlBody; + } + + if (ischosen(p_Request.messageBody.mimeMessageBody)) { + + for (j := 0; j < lengthof(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { + if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { + vc_sdp_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; + vc_sdp_remote_is_valid := true; + f_prepare_SDP_answer(); + } + if (match(p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { + vc_xml_remote := p_Request.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; + } + } + } + } + + if (isvalue(p_Request.msgHeader.supported.optionsTags)) { + for (i := lengthof(p_Request.msgHeader.supported.optionsTags); i > 0; i := i - 1) { + if (p_Request.msgHeader.supported.optionsTags[i - 1] == "100rel") { + vc_supported_100rel := true; + } + if (p_Request.msgHeader.supported.optionsTags[i - 1] == "precondition") { + vc_supported_precondition := true; + } + } + } + } // end f_setHeadersOnReceiptOfINVITE + + /** + * @desc function reads header field of a received BYE message + * @param p_Request received BYE + */ + function f_setHeadersOnReceiptOfBYE( + Request p_BYE_Request + ) runs on SipComponent { + + f_setHeadersOnReceiptOfRequest(p_BYE_Request); + vc_callId := p_BYE_Request.msgHeader.callId; + } // end f_setHeadersOnReceiptOfBYE + + /** + * @desc function reads header field from an incoming Request message + * @param p_Request received Request message + */ + function f_setHeadersOnReceiptOfRequest( + Request p_Request + ) runs on SipComponent { + vc_request := p_Request; + vc_callId := p_Request.msgHeader.callId; + vc_cSeq := valueof(p_Request.msgHeader.cSeq); // CSeq is mandatory + vc_iut_CSeq := p_Request.msgHeader.cSeq; + vc_from := p_Request.msgHeader.fromField; + vc_caller_From := p_Request.msgHeader.fromField; + vc_to := p_Request.msgHeader.toField; + vc_caller_To := p_Request.msgHeader.toField; + vc_via := p_Request.msgHeader.via; + // update sent_label according to received via header field + f_getViaReplyAddr(vc_via.viaBody, vc_sent_label); + + // Catch route + vc_boo_recordRoute := false; + + // add tag field into To header if tag is not present + if (not (isvalue(p_Request.msgHeader.toField.toParams))) { + vc_to.toParams := { + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + } + }; + vc_caller_To := vc_to; + } + if (ispresent(p_Request.msgHeader.recordRoute.fieldName)) {//Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present + vc_boo_recordRoute := true; + vc_recordRoute := p_Request.msgHeader.recordRoute; + } + } // end f_setHeadersOnReceiptOfRequest + + /** + * @desc functions reads header fields from an incoming Response message + * @param p_cSeq + * @param p_response received response message + * @verdict + */ + function f_setHeadersOnReceiptOfResponse( + Response p_response + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) Contact v_contact; + // only for local purpose + vc_response := p_response; + // vc_cSeq := p_cSeq; //must not save global c_seq because it can overwrite temporary cSeq + vc_to := p_response.msgHeader.toField; + vc_from := p_response.msgHeader.fromField; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + if (isvalue(p_response.msgHeader.contact)) { + v_contact := p_response.msgHeader.contact; + if (ischosen(v_contact.contactBody.contactAddresses)) { + vc_reqHostPort := f_getContactAddr(valueof(v_contact.contactBody.contactAddresses[0])); + vc_requestUri := f_getContactUri(valueof(v_contact.contactBody.contactAddresses[0])); + } + } + else { + if (ischosen(vc_to.addressField.addrSpecUnion.components.sip)) { + // sip/sips call + vc_reqHostPort := vc_to.addressField.addrSpecUnion.components.sip.hostPort; + } + else if (ischosen(vc_to.addressField.addrSpecUnion.components.urn)) { + // Emergency call + vc_reqUrnUri := vc_to.addressField.addrSpecUnion.components.urn; + } + else { + log("*** f_setHeadersOnReceiptOfResponse: INFO: unsupported field: ", vc_to, " ***"); + setverdict(fail); + } + vc_requestUri := vc_to.addressField.addrSpecUnion; + } + + vc_callee_To := { + fieldName := TO_E, + addressField := vc_caller_From.addressField, + toParams := vc_caller_From.fromParams + }; + + vc_callee_From := { + fieldName := FROM_E, + addressField := vc_caller_To.addressField, + fromParams := vc_caller_To.toParams + }; + + vc_via := p_response.msgHeader.via; + + // Route Management + if (isvalue(p_response.msgHeader.recordRoute)) { + vc_recordRoute := p_response.msgHeader.recordRoute; + v_nbroute := lengthof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else { + vc_boo_recordRoute := false; + vc_boo_route := false; + } + + + // extentions due to new fields in PRACK and UPDATE messages + if (isvalue(p_response.msgHeader.rSeq)) { + vc_rAck := { + fieldName := RACK_E, + responseNum := valueof(p_response.msgHeader.rSeq.responseNum), + seqNumber := valueof(p_response.msgHeader.cSeq.seqNumber), + method := valueof(p_response.msgHeader.cSeq.method) + }; + } + + // extentions due to new HistoryInfo fields 180 or 200OK messages + if (isvalue(p_response.msgHeader.historyInfo)) { + vc_historyInfoList := valueof(p_response.msgHeader.historyInfo.historyInfoList); + vc_history_is_valid := true; + } + else { + vc_history_is_valid := false; + } + + // sdpMessageBody answer + if (isvalue(p_response.messageBody)) { + if (ischosen(p_response.messageBody.sdpMessageBody)) { + vc_sdp_remote := p_response.messageBody.sdpMessageBody; + vc_sdp_remote_is_valid := true; + } + + if (ischosen(p_response.messageBody.xmlBody)) { + vc_xml_remote := p_response.messageBody.xmlBody; + } + + if (ischosen(p_response.messageBody.mimeMessageBody)) { + + for (j := 0; j < lengthof(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList); j := j + 1) { + if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_sdpApplication)) { + vc_sdp_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.sdpMessageBody; + } + if (match(p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].content_type, c_xmlApplication)) { + vc_xml_remote := p_response.messageBody.mimeMessageBody.mimeEncapsulatedList[j].mime_encapsulated_part.xmlBody; + } + } + } + } + } // end function f_setHeadersOnReceiptOfResponse + + /** + * @desc functions reads ServiceRoute header field from an incoming 200 Response message in registration + * @param p_cSeq + * @param p_response received response message + */ + function f_getServiceRouteMapIntoRouteInRegistration( + Response p_response + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) ServiceRoute v_serviceRoute; + + // Sanity check + if (ispresent(p_response.msgHeader.serviceRoute) == false) { + log("WARNING f_getServiceRouteMapIntoRouteInRegistration: Service-Route header not present"); + vc_route := omit; + vc_route_REG := omit; + vc_boo_route := false; + return; + } + + // Route Management + if (isvalue(p_response.msgHeader.serviceRoute.fieldName)) {////Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present + v_serviceRoute := p_response.msgHeader.serviceRoute; + v_nbroute := lengthof(v_serviceRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := v_serviceRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_route_REG := vc_route; + vc_boo_route := true; + } + } // end function f_getServiceRouteMapIntoRouteInRegistration + + /** + * @desc functions reads Route header field from an incoming Request message and generate RecordRoute + * @param p_cSeq + * @param p_request received request message + */ + function f_getRouteMapIntoRecordRoute( + Request p_request + ) runs on SipComponent { + var integer i, j, v_nbroute; + var template(omit) Route v_route; + + // Route Management + if (isvalue(p_request.msgHeader.route)) { + v_route := p_request.msgHeader.route; + v_nbroute := lengthof(v_route.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_recordRoute.routeBody[j] := v_route.routeBody[i]; + } + vc_recordRoute.fieldName := RECORD_ROUTE_E; + + vc_boo_recordRoute := true; + } + } // end function f_getRouteMapIntoRecordRoute + + + } // end group SetHeaders + + + + } // end group FieldOperations + + group SDPOperations { + + /** + * @desc check if message body include SDP attribute (2nd parameter) for any media + */ + function f_check_attribute( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return boolean { + var integer i, j; + + if (isvalue(p_sdp.media_list)) { + for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { + if (isvalue(p_sdp.media_list[j].attributes)) { + for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { + if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { + return (true); + } + } + } + } + } + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + return (true); + } + } + } + + return (false); + } + + /** + * @desc check if message body include SDP (session level) attribute (2nd parameter) for any media + */ + function f_check_session_attribute( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return boolean { + var integer j; + + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + return (true); + } + } + } + + return (false); + } + + /** + * @desc identify an SDP direction attribute (session or first media attribute) in a SDP message and return its answer value + * @param p_sdp the SDP message that has been received + * @param p_attribute incoming SDP attribute that need to be used for the SDP direction (answer) + * @return the new attribute (to be send out) derived from the incoming SDP value + * @verdict + */ + function f_get_attribute_answer( + in SDP_Message p_sdp, + in template SDP_attribute p_attribute + ) runs on SipComponent + return SDP_attribute { + var integer i, j; + var template SDP_attribute v_attribute := p_attribute; + + // check if the selected attribute is included in the SDP offer (session attributes) + if (isvalue(p_sdp.attributes)) { + for (j := 0; j < lengthof(p_sdp.attributes); j := j + 1) { + if (match(p_sdp.attributes[j], p_attribute)) { + v_attribute := p_sdp.attributes[j]; + } + } + } + else + // check if the selected attribute is included in the SDP offer (any of the media attributes) + { + if (isvalue(p_sdp.media_list)) { + for (j := 0; j < lengthof(p_sdp.media_list); j := j + 1) { + if (isvalue(p_sdp.media_list[j].attributes)) { + for (i := 0; i < lengthof(p_sdp.media_list[j].attributes); i := i + 1) { + if (match(p_sdp.media_list[j].attributes[i], p_attribute)) { + v_attribute := p_sdp.media_list[j].attributes[i]; + } + } + } + } + } + } + + select (valueof(v_attribute)) { + case (mw_attribute_sendonly) { + return (valueof(m_attribute_recvonly)); + } + case (mw_attribute_sendrecv) { + return (valueof(m_attribute_sendrecv)); + } // MRO + case (mw_attribute_inactive) { + return (valueof(m_attribute_inactive)); + } // MRO + case (mw_attribute_recvonly) { + return (valueof(m_attribute_sendonly)); + } // MRO + } + return (valueof(m_attribute_sendrecv)); // the default return value in case of missing attribute offer + } + + /** + * @desc check if message body include SDP bandwidth (2nd parameter) either for the session or a media description + */ + function f_check_bandwidth( + in SDP_Message p_loc_sdp, + in template SDP_bandwidth p_loc_bandw + ) runs on SipComponent + return boolean { + var integer i, j; + if (isvalue(p_loc_sdp.bandwidth)) { + for (j := 0; j < lengthof(p_loc_sdp.bandwidth); j := j + 1) { + if (match(p_loc_sdp.bandwidth[j], p_loc_bandw)) { + return (true); + } + } + } + if (isvalue(p_loc_sdp.media_list)) { + for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { + if (isvalue(p_loc_sdp.media_list[j].bandwidth)) { + for (i := 0; i < lengthof(p_loc_sdp.media_list[j].bandwidth); i := i + 1) { + if (match(p_loc_sdp.media_list[j].bandwidth[i], p_loc_bandw)) { + return (true); + } + } + } + } + } + + return (false); + } + + /** + * @desc check if message body include SDP media (2nd parameter) + */ + function f_check_media( + in SDP_Message p_loc_sdp, + in template(present) SDP_media_desc p_loc_media + ) runs on SipComponent + return boolean { + var integer j; + if (isvalue(p_loc_sdp.media_list)) { + for (j := 0; j < lengthof(p_loc_sdp.media_list); j := j + 1) { + if (match(p_loc_sdp.media_list[j].media_field.transport, p_loc_media.media_field.transport) and match(p_loc_sdp.media_list[j].media_field.fmts, p_loc_media.media_field.fmts)) { + return (true); + } + } + } + return (false); + } + + /** + * @desc check if message body include precondition mechanism (a=des and a=curr) retrun true, else false + * @param loc_sdp SDP message + */ + function f_check_precondition( + in SDP_Message p_loc_sdp + ) runs on SipComponent + return boolean { + if (f_check_attribute(p_loc_sdp, mw_attribute_des) or f_check_attribute(p_loc_sdp, mw_attribute_curr)) { + return (true); + } + + return (false); + } + + + /** + * @desc check if message body include SDP media direction return true, else false + */ + function f_check_media_direction( + in SDP_Message p_loc_sdp + ) runs on SipComponent + return boolean { + + if (f_check_attribute(p_loc_sdp, mw_attribute_sendonly) or f_check_attribute(p_loc_sdp, mw_attribute_recvonly) or f_check_attribute(p_loc_sdp, mw_attribute_sendrecv) or f_check_attribute(p_loc_sdp, mw_attribute_inactive)) { + return (true); + } + + return (false); + } + + /** + * @desc copy media/attribute lines from remote to local SDP variable + */ + function f_check_SDP( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent + return boolean { + var SDP_media_desc v_media := f_prepare_media(p_loc_sdp, p_loc_codec); + if (vc_sdp_remote.media_list[0].media_field.media != v_media.media_field.media) { + return false; + } + if (vc_sdp_remote.media_list[0].media_field.transport != v_media.media_field.transport) { + return false; + } + if (vc_sdp_remote.media_list[0].media_field.fmts != v_media.media_field.fmts) { + return false; + } + + return true; + } + + /** + * @desc replace the first curr media attribute with the given value. + * @param p_sdp SDP message to modify + * @param p_curr new curr attribute + */ + function f_replace_curr_attribute( + inout SDP_Message p_sdp, + in SDP_attribute_curr p_curr + ) { + var integer i; + var integer v_mn; + if (isvalue(p_sdp.media_list)) { + v_mn := lengthof(p_sdp.media_list[0].attributes); + for (i := 0; i < v_mn; i := i + 1) { + if (ischosen(p_sdp.media_list[0].attributes[i].curr)) { + p_sdp.media_list[0].attributes[i].curr := p_curr; + i := v_mn; + } + } + } + } + + /** + * @desc append new media attribute to the first media description. + * @param p_sdp SDP message to modify + * @param p_att SDP attribute to appand + */ + function f_append_media_attribute( + inout SDP_Message p_sdp, + in SDP_attribute p_att + ) { + var integer v_mn := 0; + if (isvalue(p_sdp.media_list)) { + if(ispresent(p_sdp.media_list[0].attributes)) { + v_mn := lengthof(p_sdp.media_list[0].attributes); + } + p_sdp.media_list[0].attributes[v_mn] := p_att; + } + } + + + /** + * @desc append new media to the existing media list in SDP + */ + function f_append_media( + inout SDP_Message p_loc_SDP, + template(value) SDP_media_desc p_loc_media + ) { + var integer v_mn := lengthof(p_loc_SDP.media_list); + p_loc_SDP.media_list[v_mn] := valueof(p_loc_media); + } + + /** + * @desc append new connection to the existing connection list in SDP + */ + function f_set_connectiom( + inout SDP_Message p_loc_SDP, + template(value) SDP_connection p_connection + ) { + p_loc_SDP.connection := valueof(p_connection); + } + + /** + * @desc repare media/attribute lines + */ + function f_prepare_media( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent + return SDP_media_desc { + var SDP_attribute_rtpmap_codec v_codecs[32] := { + {"PCMU", "8000", omit}, {"GSM", "8000", omit}, {"G723", "8000", omit}, {"DVI4", "8000", omit}, + {"DVI4", "16000", omit}, {"LPC", "8000", omit}, {"PCMA", "8000", omit}, {"G722", "8000", omit}, + {"L16", "44100", "2"}, {"L16", "44100", omit}, {"QCELP", "8000", omit}, {"CN","8000", omit}, + {"MPA", "90000", omit}, {"G728", "8000", omit}, {"DVI4", "11025", omit}, {"DVI4", "22050", omit}, + {"G729", "8000", omit}, {"G726-40", "8000", omit}, {"G726-32", "8000", omit}, {"G726-24", "8000", omit}, + {"G726-16", "8000", omit}, {"G726D", "8000", omit}, {"G726E", "8000", omit}, {"GSM-EFR", "8000", omit}, + {"CelB", "90000", omit}, {"JPEG", "90000", omit}, {"Nv", "90000", omit}, {"H261", "90000", omit}, + {"MPV", "90000", omit}, {"MP2T" ,"90000", omit}, {"H263", "90000", omit}, {"H263-1998", "90000", omit}}; + var SDP_media_desc v_media := { + media_field := { + media := "audio", + ports := { + port_number := 10000, + num_of_ports := omit + }, + transport := "RTP/AVP", + fmts := {"0"} + }, // m=audio + // 8500 + // RTP/AVP + // 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + }; + + if (32 < p_loc_codec or p_loc_codec < 1) { + log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); + setverdict(inconc); + return (v_media); + } + + if (p_loc_sdp == 1) { + } + else if (p_loc_sdp == 2) { + v_media.media_field.fmts := {PX_SIP_SDP_DYN}; // { "98", "0" }; + v_media.attributes := { + { + rtpmap := { + payload_type := PX_SIP_SDP_DYN, + codec := v_codecs[p_loc_codec - 1] + } + } + }; + } + else if (p_loc_sdp == 3) { + v_media.media_field.fmts := {"8"}; + } + else if (p_loc_sdp == 4) { + v_media.media_field.fmts := {"99", "8"}; + v_media.attributes := { + { + rtpmap := { + payload_type := "99", + codec := v_codecs[p_loc_codec - 1] + } + } + }; + } + else if (p_loc_sdp == 5) { + v_media.media_field.media := "image"; + v_media.media_field.transport := "udptl"; + v_media.media_field.fmts := {"t38"}; + } + else if (p_loc_sdp == 6) { + v_media.media_field.media := "image"; + v_media.media_field.transport := "tcptl"; + v_media.media_field.fmts := {"t38"}; + } + else { + log("*** " & __SCOPE__ & ": INFO: Unexpected SDP variant ***"); + setverdict(inconc); + } + + return (v_media); + } + + /** + * @desc repare media/attribute lines + */ + function f_prepare_SDP( + integer p_loc_sdp, + integer p_loc_codec + ) runs on SipComponent { + + vc_sdp_local.media_list := {f_prepare_media(p_loc_sdp, p_loc_codec)}; + } + + /** + * @desc function that copy media/attribute lines from remote to local SDP variable + */ + function f_prepare_SDP_answer( + ) runs on SipComponent { + var integer v_mn, v_cn := 0, i, j, k := 0; + var charstring v_PT; + var SDP_attribute_rtpmap_codec v_rtpmap := { "", "", omit}; + var SDP_attribute_list v_mediaAttributes := {}; + // increase session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); + // if more than one codec, select the firs one + v_mn := lengthof(vc_sdp_remote.media_list); + for (i := 0; i < v_mn; i := i + 1) { + // for every single media + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); + } + if (lengthof(vc_sdp_remote.media_list[i].media_field.fmts) > 0) { + // select the first one + v_PT := vc_sdp_remote.media_list[i].media_field.fmts[0]; + vc_sdp_local.media_list[i].media_field.fmts := {v_PT}; + for (j := 0; j < v_cn; j := j + 1) { + if (ischosen(vc_sdp_remote.media_list[i].attributes[j].rtpmap)) { + if (v_PT == vc_sdp_remote.media_list[i].attributes[j].rtpmap.payload_type) { + v_rtpmap := vc_sdp_remote.media_list[i].attributes[j].rtpmap.codec; + v_mediaAttributes[k] := {rtpmap := {v_PT, v_rtpmap}}; + k := k + 1; + } // else line is not copied + } + else { + // simple copy of attribute + v_mediaAttributes[k] := vc_sdp_remote.media_list[i].attributes[j]; + k := k + 1; + } + } + vc_sdp_local.media_list[i].attributes := v_mediaAttributes; + + if (isvalue(vc_sdp_local.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_local.media_list[i].attributes); + for (j := 0; j < v_cn; j := j + 1) { + // simplified handling of status attributes (copy/keep status from peer): + // a) copy/keep SDP_attribute_curr (invert tags if applicable) + if (ischosen(vc_sdp_local.media_list[i].attributes[j].curr)) { + // invert local/remote status tags + if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "local") { + vc_sdp_local.media_list[i].attributes[j].curr.statusType := "remote"; + } + if (vc_sdp_local.media_list[i].attributes[j].curr.statusType == "remote") { + vc_sdp_local.media_list[i].attributes[j].curr.statusType := "local"; + } + // invert send/recv direction tags + if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "send") { + vc_sdp_local.media_list[i].attributes[j].curr.direction := "recv"; + } + if (vc_sdp_local.media_list[i].attributes[j].curr.direction == "recv") { + vc_sdp_local.media_list[i].attributes[j].curr.direction := "send"; + } + } + else + if ( + // b) copy/keep SDP_attribute_des (keep strength, invert tags if applicable) + ischosen(vc_sdp_local.media_list[i].attributes[j].des) + ) { + // invert local/remote status tags + if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "local") { + vc_sdp_local.media_list[i].attributes[j].des.statusType := "remote"; + } + if (vc_sdp_local.media_list[i].attributes[j].des.statusType == "remote") { + vc_sdp_local.media_list[i].attributes[j].des.statusType := "local"; + } + // invert send/recv direction tags + if (vc_sdp_local.media_list[i].attributes[j].des.direction == "send") { + vc_sdp_local.media_list[i].attributes[j].des.direction := "recv"; + } + if (vc_sdp_local.media_list[i].attributes[j].des.direction == "recv") { + vc_sdp_local.media_list[i].attributes[j].des.direction := "send"; + } + } + else + if ( + // c) simplification: assume no SDP_attribute_conf + ischosen(vc_sdp_local.media_list[i].attributes[j].conf) + ) { + // handle SDP_attribute_conf + } + } + } + } + } + // add handling of prenegotiation, change ports if required etc. + // if prenegotiation... + } + + /** + * @desc reject SDP offer by setting media ports to 0 + */ + function f_reject_SDP_offer( + ) runs on SipComponent { + var integer mn, i; + f_copy_SDP(); // TO BE DONE with more details! + // increase session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); + // if more than one codec, select the firs one + mn := lengthof(vc_sdp_local.media_list); + for (i := 0; i < mn; i := i + 1) { + vc_sdp_local.media_list[i].media_field.ports := {0, omit}; + vc_sdp_local.media_list[i].attributes := omit; // {}; + } + } + + /** + * @desc copies SDP message elements from remote to local component variable: - bandwidth - session version (will be incremented) - media list modify the direction attribute of an SDP media list entry within an SDP message (vc_sdp_local) + * @param p_medianum list position number of the media (if value 0 identifies first media list element) + * @param p_direction the new direction attribute to be included in the media entry + * @verdict + */ + function f_SIP_modMediaDirection( + integer p_medianum, + template(value) SDP_attribute p_direction + ) runs on SipComponent { + var boolean v_set_direction; + + // flag indicates if direction attribute has been modified + var integer v_mn := 0; + + // length of media list (number of entries) + var integer v_cn := 0; + + // number of attributes of a media entry + var integer i, j, k := 0; + var SDP_attribute_list v_mediaAttributes := {}; + // collect the media attributes (to be assigned at end of function) + f_copy_SDP(); // copy SDP session bandwidth and media list from remote to local component variable + // increment session version + vc_sdp_local.origin.session_version := int2str(str2int(vc_sdp_local.origin.session_version) + 1); + + // if more than one codec, select the first one + v_mn := lengthof(vc_sdp_local.media_list); + + if (p_medianum == 0) + // specific media requested + { + p_medianum := 1; // start checking from first media + } + if (p_medianum > 0) + // specific media requested + { + if (not (p_medianum > v_mn)) { + v_mn := p_medianum; + } + } + + // handling of media list elements + for (i := 0; i < v_mn; i := i + 1) { + v_cn := 0; // initialize the number of attributes of the media list entry + if (isvalue(vc_sdp_local.media_list)) + // media_list is optional + { + // log("vc_sdp_local.media_list[i ] ",vc_sdp_local.media_list[i ] ); + if (isvalue(vc_sdp_local.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_local.media_list[i].attributes); + } + + v_set_direction := false; + + // if (lengthof(vc_sdp_local.media_list[i ] .media_field.fmts)>1) + // select the first one + for (j := 0; j < v_cn; j := j + 1) { + if (ischosen(vc_sdp_local.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_local.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_local.media_list[i].attributes[j].sendrecv)) { + v_mediaAttributes[k] := valueof(p_direction); + v_set_direction := true; + } + else + // non-direction attributes will be copied + { + v_mediaAttributes[k] := vc_sdp_local.media_list[i].attributes[j]; + } + k := k + 1; + } + + if (not v_set_direction) { + v_mediaAttributes[k] := valueof(p_direction); + } + vc_sdp_local.media_list[i].attributes := v_mediaAttributes; + // } + } + } + // add handling of prenegotiation, change ports if required etc. + // if prenegotiation... + } + + /** + * @desc modify session and media attributes direction + */ + function f_SIP_modSessionDirection( + template(value) SDP_attribute p_direction + ) runs on SipComponent { + var boolean v_set_direction := false; + var integer v_mn := 0, i := 0; + + if (isvalue(vc_sdp_local.attributes)) { + v_mn := lengthof(vc_sdp_local.attributes); + + for (i := 0; i < v_mn; i := i + 1) { + // for every single attribute (that is not omit) + if (ischosen(vc_sdp_local.attributes[i].recvonly) or ischosen(vc_sdp_local.attributes[i].sendonly) or ischosen(vc_sdp_local.attributes[i].inactive) or ischosen(vc_sdp_local.attributes[i].sendrecv)) { + vc_sdp_local.attributes[i] := valueof(p_direction); + v_set_direction := true; + } + } + if (not v_set_direction) + // if not sent before + { + vc_sdp_local.attributes[v_mn] := valueof(p_direction); + } + } + else { + vc_sdp_local.attributes[0] := valueof(p_direction); + } + } + + /** + * @desc check (from remote) and set (local) the session/media attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checksetSDPreqDirection( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + else { + setverdict(pass); + log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); + } + if (not(isbound(p_direction_out))) + // STF549 if (match(omit, p_direction_out)) + { + v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session/media attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checkResponsesetSDPreqDirection( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + else { + setverdict(pass); + log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); + } + if (not(isbound(p_direction_out))) + // STF549 if (match(omit, p_direction_out)) + { + v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checksetSDPreqDirectionSession( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_request.messageBody) and (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_request.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + if (not(isbound(p_direction_out))) + // STF549 if (match(omit, p_direction_out)) + { + v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + /* + * + * @desc check (from remote) and set (local) the session attribute lines on directions + * @param p_direction_in incoming SDP attribute that need to be checked + * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer) + * @return + * @verdict + */ + function f_SIP_checkResponsesetSDPreqDirectionSession( + template(value) SDP_attribute p_direction_in, + template(value) SDP_attribute p_direction_out + ) runs on SipComponent { + var template(value) SDP_attribute v_direction_out := p_direction_out; + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in)))) { + if (match(valueof(p_direction_in), mw_attribute_sendrecv) and not (f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendrecv) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_sendonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_recvonly) or f_check_session_attribute(vc_response.messageBody.sdpMessageBody, mw_attribute_inactive))) { + log("*** " &__SCOPE__& ": INFO: no direction attributes with expectation: ", p_direction_in, " ***"); + } + else { + setverdict(fail); + } + } + if (not(isbound(p_direction_out))) + // STF549 if (match(omit, p_direction_out)) + { + v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); + } + f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session + } + + + /* + * + * @desc check (from remote) and set (local)the session/media attribute lines on directions + * @param p_direction_in attribute to be check + * @param p_direction_out attrubyte to be + * @return + * @verdict + */ + function f_SIP_checkSDPrespDirection( + template SDP_attribute p_direction_in + ) runs on SipComponent { + // check incoming SDP attribute + if (not (isvalue(vc_response.messageBody) and f_check_attribute(vc_response.messageBody.sdpMessageBody, p_direction_in))) { + setverdict(fail); + } + } + + /** + * @desc check media/attribute lines from remote + */ + function f_SIP_checkMediaDirection( + integer p_medianum, + template SDP_attribute p_direction + ) runs on SipComponent + return boolean { + var integer v_mn, v_cn := 0, i, j; + var boolean v_result := false; + // increase session version + vc_sdp_remote.origin.session_version := int2str(str2int(vc_sdp_remote.origin.session_version) + 1); + // if more than one codec, select the firs one + v_mn := lengthof(vc_sdp_remote.media_list); + if (p_medianum == 0) + // specific media requested + { + p_medianum := 1; // start checking from first media + } + if (p_medianum > 0) + // specific media requested + { + if (p_medianum > v_mn) { + return false; + } + else { + v_mn := p_medianum; + } + } + for (i := p_medianum - 1; i < v_mn; i := i + 1) { + // for every single media + if (isvalue(vc_sdp_remote.media_list[i].attributes)) { + v_cn := lengthof(vc_sdp_remote.media_list[i].attributes); + } + if (lengthof(vc_sdp_remote.media_list[i].attributes) > 0) { + // select the first one + for (j := 0; j < lengthof(vc_sdp_remote.media_list[i].attributes); j := j + 1) { + if (ischosen(vc_sdp_remote.media_list[i].attributes[j].recvonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendonly) or ischosen(vc_sdp_remote.media_list[i].attributes[j].inactive) or ischosen(vc_sdp_remote.media_list[i].attributes[j].sendrecv)) { + if (match(vc_sdp_remote.media_list[i].attributes[j], p_direction)) { + v_result := true; + } + else { + return false; + } + } + } + } + } + return v_result; + } + + /** + * @desc copy media/attribute lines from remote to local SDP variable + */ + function f_copy_SDP( + ) runs on SipComponent { + if (isvalue(vc_sdp_remote.connection)) { + vc_sdp_local.connection := vc_sdp_remote.connection; + } + else { + vc_sdp_local.connection := omit; + } + + vc_sdp_local.origin := vc_sdp_remote.origin; + vc_sdp_local.session_name := vc_sdp_remote.session_name; + + if (isvalue(vc_sdp_remote.bandwidth)) { + vc_sdp_local.bandwidth := vc_sdp_remote.bandwidth; + } + else { + vc_sdp_local.bandwidth := {}; + } + + if (isvalue(vc_sdp_remote.media_list)) { + // // cleaning of media before assignment + // if (isvalue(vc_sdp_local.media_list)) + // { + // for (var integer i:=0; i value v_request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfREGISTER(v_request); + } + [] tc_wait.timeout { + setverdict(fail); + f_componentStop(); + } + } + } + + /** + * @desc function awaits SUBSCRIBE + * @param p_register expected SUBSCRIBE request + */ + function f_awaitingSUBSCRIBE( + in template(present) SUBSCRIBE_Request p_subscribe := ? + ) runs on SipComponent { + var SUBSCRIBE_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_subscribe) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + } + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + setverdict(fail); + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + // f_send200OK(); + } + } + } + + /** + * @desc function awaits REGISTER and sends a 200 OK response + * @param p_reply flag used to avoid the 200OK response sending + */ + function f_awaitingREGISTER_sendReply( + in template(present) REGISTER_Request p_register := ?, + in boolean p_reply + ) runs on SipComponent { + var REGISTER_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_register) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_request := v_request; + f_setHeadersOnReceiptOfREGISTER(v_request); + // Answer to the Request + if (p_reply) { + f_send200OK(); + } + } + [] tc_wait.timeout { + setverdict(fail); + f_componentStop(); + } + } + } + + + /** + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponse( + inout CSeq p_cSeq_s + ) runs on SipComponent { + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + setverdict(pass); + } + } + } // end awaitingOkResponse + + /** + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponse( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + a_awaitingResponse(p_Response); + } // end f_awaitingResponse + + altstep a_awaitingResponse( + in template(present) Response p_Response := ? + ) runs on SipComponent { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // setverdict(pass) + } + } // end f_awaitingResponse + + /** + * @desc Function waiting for a response, repeat if 100 Trying is received + * @param p_Response expected response message + */ + function f_awaitingResponseIgnore100Trying( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // setverdict(pass) + } + [] SIPP.receive(mw_Response_Base(c_statusLine100, vc_callId, vc_cSeq)) -> value vc_response { + log("f_awaitingResponseIgnore100Trying: Skip 100"); + repeat; + } + } + } // end f_awaitingResponseIgnore100Trying + + /** + * @desc Function waiting for a response and send ACK on FailureResponses 4xx,5xx,6xx + * @param p_Response expected response message + */ + function f_awaitingResponseSendACK( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + setverdict(pass); + } + } + } // end f_awaitingResponse + + /** + * @desc Function waiting for a response + * @param p_Response expected response message + */ + function f_awaitingResponsePassOnTimeout( + in template(present) Response p_Response := ? + ) runs on SipComponent { + tc_resp.start; + alt { + [] SIPP.receive(p_Response) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + vc_boo_response := true; + // setverdict(pass) + } + [] tc_resp.timeout { + vc_boo_response := false; + // setverdict (pass) + } + } + } // end f_awaitingResponsePassOnTimeout + + /** + * @desc Function waiting for a 200 OK response + * @param p_cSeq_s current cSeq expectation + */ + function f_awaitingOkResponseAndNOTIFY_sendReply( + inout CSeq p_cSeq_s, + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + + var boolean v_received_OK := false; + var boolean v_received_NOTIFY := false; + var NOTIFY_Request v_MSG; + tc_resp.start; + tc_wait.start(PX_SIP_TWAIT); + + log(">>> function f_awaitingOkResponseAndNOTIFY_sendReply: ", vc_sent_label); + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + vc_subscribed := true; + f_setHeadersOnReceiptOfResponse(vc_response); + v_received_OK := true; + setverdict(pass); + if (not (v_received_NOTIFY)) { + repeat; + } + } + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + v_received_NOTIFY := true; + if (not (v_received_OK)) { + repeat; + } + } + } + } // end f_awaitingOkResponseAndNOTIFY_sendReply + + /** + * @desc await INFO request reply with 200 OK + */ + function f_awaitingINFO_sendReply( + in template(value) INFO_Request p_info + ) runs on SipComponent { + var INFO_Request v_request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_info) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_request); + // Answer to the INFO + f_send200OK(); + } + } + } // end of f_awaitingINFO_sendReply + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + [vc_interface_isc] SIPP.receive(mw_INVITE_Request_Base) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + setverdict(fail); + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + // clear session - send 486 and await ACK + f_sendResponse(m_Response_Base(c_statusLine486, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + f_awaitingACK(mw_ACK_Request_Base(?)); + // await 486 which go towards and send ACK + f_awaitingResponse(mw_Response_Base(c_statusLine486, ?, ?)); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + syncPort.send(m_syncClientStop); + stop; + } + } + } // end f_awaitingINVITE + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_No100Response( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + // SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + } + } // end f_awaitingInviteRequest + + /** + * @desc function awaiting for an incoming INVITE + * @param p_request expected message + */ + function f_awaitingINVITE_PassOnTimeout( + template(present) INVITE_Request p_request := ? + ) runs on SipComponent { + var INVITE_Request v_INVITE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_invite := true; + vc_first_recv := true; // communication has started + vc_boo_request := true; + f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); + SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; + } + [] tc_wait.timeout { + vc_boo_request := false; + } + } + } // end f_awaitingInviteRequest + + /** + * @desc function awaiting ACK request + */ + function f_awaitingACK( + in template(present) ACK_Request p_ACK := ? + ) runs on SipComponent { + f_awaitingACK_setHeaders(p_ACK, false); + } // end f_awaitingACK + + /** + * @desc function awaiting ACK request + */ + function f_awaitingACK_setHeaders( + in template(present) ACK_Request p_ACK := ?, + in boolean p_setHeaders + ) runs on SipComponent { + var ACK_Request v_ACK_Request; + tc_ack.start; + + alt { + [] SIPP.receive(p_ACK) -> value v_ACK_Request { + tc_ack.stop; + if (p_setHeaders) { + f_setHeadersOnReceiptOfRequest(v_ACK_Request); + } + } + } + } // end f_awaitingACK_setHeaders + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + // f_send200OK(); + } + } + } // end f_awaitingBYE + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + } + } // end f_awaitingBYE_sendReply + + /** + * @desc function awaiting BYE and sending 200OK response + * @param p_BYE expected BYE + */ + function f_awaitingBYE_sendReply_PassOnTimeout( + in template(present) BYE_Request p_BYE := ? + ) runs on SipComponent { + var BYE_Request v_BYE_Request; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + vc_ignore_bye := true; + vc_boo_request := true; + f_setHeadersOnReceiptOfBYE(v_BYE_Request); + f_send200OK(); + } + [] tc_wait.timeout { + vc_boo_request := false; + } + } + } // end f_awaitingBYE_sendReply_PassOnTimeout + + /** + * @desc function awaiting CANCEL + * @param p_CANCEL expected CANCEL + */ + function f_awaitingCANCEL( + in template(present) CANCEL_Request p_CANCEL := ? + ) runs on SipComponent { + var CANCEL_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_CANCEL) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end f_awaitingCANCEL + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE( + in template(present) MESSAGE_Request p_MSG := ? + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + log("*** " &__SCOPE__& ": INFO: Received MESSAGE not as expected! ***"); + setverdict(fail); + } + } + } // end of f_awaitingMESSAGE + + /** + * @desc await MESSAGE request reply with 200 OK + */ + function f_awaitingMESSAGE_sendReply( + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the MESSAGE + f_send200OK(); + } + } + } // end of f_awaitingMESSAGE_sendReply + + /** + * @desc await MESSAGE request + */ + function f_awaitingMESSAGE_sendReply_PassOnTimeout( + in template(present) MESSAGE_Request p_MSG := ? + ) runs on SipComponent { + var MESSAGE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the MESSAGE + // f_send200OK(); + vc_boo_request := true; + f_send200OK(); + // setverdict (pass); + } + [] tc_wait.timeout { + vc_boo_request := false; + // setverdict (pass); + } + } + } // end of f_awaitingMESSAGE_PassOnTimeout + + /** + * @desc await NOTIFY request + */ + function f_awaitingNOTIFY( + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingNOTIFY + + /** + * @desc await NOTIFY request reply with 200 OK + */ + function f_awaitingNOTIFY_sendReply( + in template(present) NOTIFY_Request p_MSG := ?, + out NOTIFY_Request p_MSG_recv + ) runs on SipComponent { + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value p_MSG_recv /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(p_MSG_recv); + f_setHeadersOnReceiptOfRequest(p_MSG_recv); + // Answer to the NOTIFY + f_send200OK(); + } + } + } // end of f_awaitingNOTIFY_sendReply + + function f_awaitingNOTIFY_sendReply_postamble( + in template(present) NOTIFY_Request p_MSG := ? + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + + tc_wait.start(5.0); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + } + [] tc_wait.timeout { + // do nothing as receiving the Notify in de-registration is not part of the test body + } + } + } // end of f_awaitingNOTIFY_sendReply_postamble + + /** + * @desc await PRACK request reply with 200 OK + */ + function f_awaitingPRACK_sendReply( + in template(present) PRACK_Request p_MSG := ? + ) runs on SipComponent { + var PRACK_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the PRACK + if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { + f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); + } + else { + f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); + } + } + } + } // end of f_awaitingPRACK_sendReply + + function f_awaitingPRACK( + in template(present) PRACK_Request p_MSG := ? + ) runs on SipComponent { + var PRACK_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingPRACK + + /** + * @desc await PUBLISH request reply with 200 OK + */ + function f_awaitingPUBLISH_sendReply( + in template(present) PUBLISH_Request p_MSG := ? + ) runs on SipComponent { + var PUBLISH_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the PUBLISH + f_send200OK(); + } + } + } // end of f_awaitingPUBLISH_sendReply + + /** + * @desc await UPDATE request + */ + function f_awaitingUPDATE( + in template(present) UPDATE_Request p_MSG := ? + ) runs on SipComponent { + var UPDATE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + } + } + } // end of f_awaitingUPDATE + + /** + * @desc await UPDATE request reply with 200 OK + */ + function f_awaitingUPDATE_sendReply( + in template(present) UPDATE_Request p_MSG := ? + ) runs on SipComponent { + var UPDATE_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the UPDATE + if (isvalue(vc_request.messageBody) and ischosen(vc_request.messageBody.sdpMessageBody)) { + f_sendResponse(m_Response_mbody(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute(), m_MBody_SDP(vc_sdp_local))); + } + else { + f_sendResponse(m_Response_ext(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, omit, f_recordroute())); + } + } + } + } // end of f_awaitingUPDATE_sendReply + + + /** + * @desc await REFER request + */ + function f_awaitingREFER( + in template(present) REFER_Request p_MSG := ? + ) runs on SipComponent { + var REFER_Request v_MSG; + + tc_wait.start(PX_SIP_TWAIT); + alt { + [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + tc_wait.stop; + f_setHeadersOnReceiptOfREFER(v_MSG); + } + } + } // end of f_awaitingUPDATE + + + + } // end AwaitingMessage + + group SendMessage { + + /** + * @desc send ACK message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendACK( + template(value) ACK_Request p_request + ) runs on SipComponent { + // p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + // n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + log(">>> f_SendACK: vc_sent_label=", vc_sent_label); + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send BYE message, update the route and recordRoute header fields depending on boolean flags + * @param p_request template of the message to be sent + */ + function f_SendBYE( + template(value) BYE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send CANCEL message + * @param p_request template of the message to be sent + */ + function f_SendCANCEL( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send INFO message + * @param p_request template of the message to be sent + */ + function f_SendINFO( + template(value) INFO_Request p_request + ) runs on SipComponent { + f_setHeadersGeneral(vc_cSeq, "INFO"); // cseq, contact, branch, via + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send INVITE message + * @param p_request template of the message to be sent + */ + function f_SendINVITE( + template(value) INVITE_Request p_request + ) runs on SipComponent { + vc_requestFor407 := valueof(p_request); + log(">>> f_SendINVITE: vc_sent_label=", vc_sent_label); + SIPP.send(p_request) to vc_sent_label; + vc_request := vc_requestFor407; + if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { + a_altstep_401or407(); + } + } + + /** + * @desc send PRACK message + * @param p_request template of the message to be sent + */ + function f_SendPRACK( + ) runs on SipComponent { + var integer responseNum := 1; + var PRACK_Request prackReq; + if (isvalue(vc_response.msgHeader.rSeq) and + isvalue(vc_response.msgHeader.rSeq.responseNum)){ + responseNum := vc_response.msgHeader.rSeq.responseNum; + } + vc_rAck := valueof(m_RAck(vc_response.msgHeader.rSeq.responseNum, vc_cSeq.seqNumber, vc_cSeq.method)); + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + prackReq := valueof(m_PRACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck)); + if (isvalue(vc_response.msgHeader.recordRoute)){ + prackReq.msgHeader.route := valueof(f_route()); + } + SIPP.send(prackReq) to vc_sent_label; + } + + /** + * @desc send PUBLISH message + * @param p_request template of the message to be sent + */ + function f_SendPUBLISH( + template(value) PUBLISH_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send REGISTER message + * @param p_request template of the message to be sent + */ + function f_SendREGISTER( + template(value) REGISTER_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send SUBSCRIBE message + * @param p_request template of the message to be sent + */ + function f_SendSUBSCRIBE( + template(value) SUBSCRIBE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send UPDATE message + * @param p_request template of the message to be sent + */ + function f_SendUPDATE( + template(value) UPDATE_Request p_request + ) runs on SipComponent { + f_setHeadersGeneral(vc_cSeq, "UPDATE"); // cseq, contact, branch, via + p_request.msgHeader.cSeq := vc_cSeq; + p_request.msgHeader.contact := vc_contact; + p_request.msgHeader.via := vc_via; + vc_requestFor407 := valueof(p_request); + SIPP.send(p_request) to vc_sent_label; + if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { + a_altstep_401or407(); + } + } + + /** + * @desc function send MESSAGE message + * @param p_request template of the message to be sent + */ + function f_SendMESSAGE( + template(value) MESSAGE_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc function send NOTIFY message + * @param p_request template of the notify to be sent + */ + function f_SendNOTIFY( + template(value) NOTIFY_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc function send OPTIONS message + * @param p_request template of the notify to be sent + */ + function f_SendOPTIONS( + template(value) OPTIONS_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send REFER message + * @param p_request template of the message to be sent + */ + function f_SendREFER( + template(value) REFER_Request p_request + ) runs on SipComponent { + SIPP.send(p_request) to vc_sent_label; + } + + /** + * @desc send 100 TRYING + */ + function f_send100TRYING( + ) runs on SipComponent { + log(">>> f_send100TRYING"); + f_sendResponse(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + } + + /** + * @desc send 200 OK + */ + function f_send200OK( + ) runs on SipComponent { + log(">>> f_send200OK"); + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + } + + /** + * @desc send response + * @param p_request template of the message to be sent + */ + function f_sendResponse( + template(value) Response p_response + ) runs on SipComponent { + p_response.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route + p_response.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + SIPP.send(p_response) to vc_sent_label; + } + + + + } // end SendMessage + + group GlobalSteps { + /** + * @desc component initialization + * @param p_cSeq_s cSeq value to be assigned to the component variable + */ + function f_init_component( + inout CSeq p_cSeq_s + ) runs on SipComponent { + // Variables + vc_cSeq := p_cSeq_s; + + // Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate(a_clearRegistration()); + } + + /** + * @desc component termination + */ + function f_terminate_component( + ) runs on SipComponent { + log("*** " &__SCOPE__& ": INFO: component terminated - forced! ***"); + deactivate; + stop; + } + + /** + * @desc component termination + */ + function f_componentStop( + ) runs on SipComponent { + syncPort.send(m_syncClientStop); + SIPP.clear; + stop; + } + + /** + * @desc function waits for particular time that allows the SUT to return to idle state + */ + function f_awaitSUTidle( + ) runs on SipComponent { + vc_ignore4xx := true; // allow 4xx in default + tc_noAct.start; + alt { + [] tc_noAct.timeout { + } + } + } + + /** + * @desc function waits for particular time before next expected message + */ + function f_wait( + float p_time + ) runs on SipComponent { + tc_noAct.start(p_time); + alt { + [] tc_noAct.timeout { + } + } + } + + /** + * @desc function cause termination of a PTC + * @param p_syncPoint dummy parameter (copied from the common lib) + */ + function f_check2Null( + in charstring p_syncPoint + ) runs on SipComponent { + // != pass does not work, because in case of "none" execution shall continue + if (getverdict == inconc or getverdict == fail) { + log("*** f_check2Null: INFO: Verdict evaluated to fail or inconc. Stopping test execution now ***"); + f_selfOrClientSyncAndVerdict(p_syncPoint, e_error); + } // end if + } + + /* + * + * @desc original copied from older LibCommon_VerdictControl + */ + function f_getVerdict( + ) return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + + + + } // end group GlobalSteps + + group Registration { + + /** + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + * @param p_emergency Set to true in case of emergency call + */ + function f_Registration( + inout CSeq p_cSeq_s, + out template(value) REGISTER_Request p_register, + in boolean p_auth, + in boolean p_emergency := false + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + f_setHeaders_REGISTER(p_cSeq_s, p_emergency); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + f_SendREGISTER(p_register); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + // Re-send protected REGISTER + f_SendREGISTER(p_register); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } + } // end function f_Registration + + /** + * @desc registration and authentication with MD5 + * @param p_cSeq_s cseq parameter + * @param p_register register template + * @param p_auth flag indicating if authentication is needed + */ + function f_Registration_withTemplate( + inout CSeq p_cSeq_s, + inout template(value) REGISTER_Request p_register, + in boolean p_auth + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + if(not isbound(p_register)){ + f_setHeaders_REGISTER(p_cSeq_s); + p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization); + } + f_SendREGISTER(p_register); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + // p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, + // vc_authorization); + // Re-send protected REGISTER + p_register.requestLine.requestUri := vc_requestUri; + p_register.msgHeader.cSeq := vc_cSeq; + p_register.msgHeader.via := vc_via_REG; + p_register.msgHeader.authorization := vc_authorization; + f_SendREGISTER(p_register); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + log("*** " &__SCOPE__& ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } + } // end function f_Registration_withTemplate + + + /** + * @desc remove registration + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration( + inout CSeq p_cSeq + ) runs on SipComponent { + var template(value) REGISTER_Request v_request; + var boolean v_receivedNotify := false; + + // + if (vc_DeregDone) { + f_componentStop(); + } + else { + vc_DeregDone := true; + } + + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq); + v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq); + v_request := m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization, "0"); + // v_request.msgHeader.route := f_route(); + // Re-send protected REGISTER + f_SendREGISTER(v_request); // LibSip + // awaiting 200 OK REGISTER + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) -> value vc_response { + tc_resp.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + // log ("Authorization was not requested as expected"); + } + [] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { + } + } + } + else { + tc_resp.start; + alt { + [] a_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)) { + } + [] a_awaitNotify(mw_NOTIFY_Request_Base(vc_callIdSub), v_receivedNotify) { + } + } + } + + // await NOTIFY and send reply 200 OK + if (vc_subscribed and v_receivedNotify == false) { + f_awaitingNOTIFY_sendReply_postamble(mw_NOTIFY_Request_Base(vc_callIdReg)); + } + } + } // end f_RemoveRegistration + + /** + * @desc remove registration without authorization + * @param p_cSeq_s cseq parameter + */ + function f_RemoveRegistration_wo_authorization( + inout CSeq p_cSeq + ) runs on SipComponent { + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq); + f_SendREGISTER(m_REGISTER_Request_expires(vc_requestUri, vc_callIdReg, p_cSeq, vc_from, vc_to, vc_via, vc_contact, vc_authorization, "0")); + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq)); + } + } // end f_RemoveRegistration_wo_authorization + + + + } // end group Registration + + group Subscription { + + /** + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + */ + function f_Subscription( + inout CSeq p_cSeq_s, + template(value) SUBSCRIBE_Request p_subscribe + ) runs on SipComponent { + // send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + // await NOTIFY and send reply 200 OK + f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, mw_NOTIFY_Request_Base(vc_callId)); + } // end function f_Subscription + + /** + * @desc UE send subscrbe, await on 200 OK, await notify and send 200 OK + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + * @param p_notify notify template + */ + function f_SubscriptionWithNotification( + inout CSeq p_cSeq_s, + template(value) SUBSCRIBE_Request p_subscribe, + template(present) NOTIFY_Request p_notify := ? + ) runs on SipComponent { + f_setHeaders_SUBSCRIBE(p_cSeq_s); + // send SUBSCRIBE + f_SendSUBSCRIBE(p_subscribe); + // awaiting 200 OK SUBSCRIBE + // await NOTIFY and send reply 200 OK + f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, p_notify); + } // end function f_SubscriptionWithNotification + + /** + * @desc UE await subscrbe, send on 200 OK; possibility to handle also other SUBSCRIBE methods where event is different than reg + * @param p_cSeq_s cseq parameter + * @param p_subscribe subscribe template + */ + function f_awaitingSubscription( + template(present) SUBSCRIBE_Request p_subscribe := ? + ) runs on SipComponent { + var SUBSCRIBE_Request v_request; + + tc_wait.start(2.0); // awaiting of all SUBSCRIBES + alt { + [] SIPP.receive(p_subscribe) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + f_send200OK(); + repeat; + } + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_request); + f_send200OK(); + repeat; + } + [] tc_wait.timeout { + setverdict(pass); + } + } + } // end function f_awaitingSubscription + + + + } // end group Subscription + + group Preambles { + + /** + * @desc Set variables and default initialization for user profile + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + */ + function f_SIP_preamble_woREG( + inout CSeq p_cSeq_s + ) runs on SipComponent { + // varables and altsteps + f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + } + + /** + * @desc Set variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_userprofile user profile of call + * @param p_cSeq_s cseq parameter + * @param p_register register template + */ + function f_SIP_preamble_withREG( + inout CSeq p_cSeq_s, + template(value) REGISTER_Request p_register + ) runs on SipComponent { + // preamble + f_SIP_preamble_woREG(p_cSeq_s); + + // Registration, Awaiting + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + } + + + + } // end group Preambles + + group Postambles { + + /** + * @desc function send BYE and awaits reponse + * @param p_CallId parameter for outgoing BYE + * @param p_cSeq parameter for outgoing BYE + * @param p_from parameter for outgoing BYE + * @param p_to parameter for outgoing BYE + * @param p_reqHostPort parameter for outgoing BYE + * @param p_byeCause parameter for Release cause to be used + * in BYE and in Failure messages, former PX_SIP_BYE_CAUSE + */ + function f_terminateCall( + SipUrl p_requestUri, + CallId p_CallId, + inout CSeq p_cSeq, + From p_from, + template(value) To p_to, + integer p_byeCause + ) runs on SipComponent { + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_cause(p_requestUri, p_CallId, p_cSeq, p_from, p_to, vc_via, p_byeCause)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_CallId, p_cSeq)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_CallId, p_cSeq)) { + tc_resp.stop; + } + } + } // end function f_terminateCall + + function f_cancelCall( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + // Sending of a CANCEL request with the same Cseq + f_setHeadersCANCEL(vc_cSeq); + f_SendCANCEL(p_request); + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)) { + tc_resp.stop; + } + } + } + + function f_cancelCall_await487( + template(value) CANCEL_Request p_request + ) runs on SipComponent { + // This function is called to bring back the IUT in idle condition + // in case of errors or unexpected behaviour. + // Sending of a CANCEL request with the same Cseq + f_cancelCall(p_request); + // set method on INVITE + vc_cSeq.method := "INVITE"; + + // await on 487 response and send ACK + f_awaitingResponse(mw_Response_Base(c_statusLine487, vc_callId, vc_cSeq)); + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + + function f_awaitCancelCall_send487( + template(present) CANCEL_Request p_request := ? + ) runs on SipComponent { + f_awaitingCANCEL(p_request); + f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + + // set method on INVITE + vc_cSeq.method := "INVITE"; + + // send 487 response and await ACK + f_sendResponse(m_Response_Base(c_statusLine487, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); + // await ACK + f_awaitingACK(mw_ACK_Request_Base(vc_callId)); + } + + altstep a_receiveCANCELorNothing( + in template(present) CANCEL_Request p_CANCEL := ? + ) runs on SipComponent { + var CANCEL_Request v_MSG; + [] SIPP.receive(p_CANCEL) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the CANCEL + f_send200OK(); + } + } + + altstep a_awaitNotify( + in template(present) NOTIFY_Request p_MSG := ?, + inout boolean p_receivedNotify + ) runs on SipComponent { + var NOTIFY_Request v_MSG; + [vc_subscribed] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + p_receivedNotify := true; + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); + // Answer to the NOTIFY + f_send200OK(); + repeat; + } + } + + + + } // end group Postambles + + group SipChecks { + + + /** + * @desc check the presence of conversation at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_Conversation( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if conversation at SIP port"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_conversation: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_conversation: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_conversation: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_uPlane, f_getVerdict()); // Note: implemented in test bodies + return; + } // end of f_check_Conversation + + /** + * @desc check the presence of conversation at SIP side + * @param p_checkRinging boolean to perform check if ringing check is implemented. + * former PX_SIP_CHECK_RINGING + */ + function f_check_Ringing( + boolean p_checkRinging := false + ) runs on SipComponent { + var charstring v_question := "confirm if ringing at SIP port"; + + if (p_checkRinging) { + opPort + .call( + s_SIP_ringing: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_ringing: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_ringing: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_Ringing, f_getVerdict()); + return; + } // end of f_check_Ringing + + /** + * @desc check the announcement at SIP side (UE A) + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_AnnouncementUE_A( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at UE A"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcementA: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcementA: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcementA: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annoucA, f_getVerdict()); + return; + } // end of f_check_AnnouncementUE_A + + /** + * @desc check the announcement at SIP side (UE B) + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_AnnouncementUE_B( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at UE B"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcementB: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcementB: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcementB: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annoucB, f_getVerdict()); + return; + } // end of f_check_AnnouncementUE_B + + /** + * @desc check the announcement at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_Announcement( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if announcement at SIP side"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_announcement: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_announcement: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_announcement: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_annouc, f_getVerdict()); + return; + } // end of f_check_Announcement + + /** + * @desc check the Voice message at SIP side + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_VoiceMessage( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if voice message at SIP side"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_voiceMessage: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_voiceMessage: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_voiceMessage: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_voicem, f_getVerdict()); + return; + } // end of f_check_Announcement + + /** + * @desc check the stop of media stream + * @param p_checkConversation boolean to perform check if conversation check is implemented. + * former PX_SIP_CHECK_CONVERSATION + */ + function f_check_MediaStopped( + boolean p_checkConversation := false + ) runs on SipComponent { + var charstring v_question := "confirm if media stream stopped"; + + if (p_checkConversation) { + opPort + .call( + s_SIP_mediastopped: + { + v_question, + - + } + ) { + [] opPort + .getreply( + s_SIP_mediastopped: + { + -, + true + } + ) { + } + [] opPort + .getreply( + s_SIP_mediastopped: + { + -, + false + } + ) { + all timer.stop; + setverdict(fail); + syncPort.send(m_syncClientStop); + stop; + } + }; + } + + f_selfOrClientSyncAndVerdict(c_uPlaneStop, f_getVerdict()); + return; + } // end of f_check_MediaStopped + + } + + group DefaultsTestStep { + + + /** + * @desc This default handles receiving of the sync server STOP message and calls the RT HUT postamble. (copy from common lib) + */ + altstep a_Sip_catchSyncStop( + ) runs on SipComponent { + [] syncPort.receive(m_syncServerStop) { + tc_sync.stop; + log("*** a_Sip_catchSyncStop: INFO: Test component received STOP signal from MTC - going to IDLE state *** "); + syncPort.send(m_syncClientStop); + // in case if deregistration was not done + // f_RemoveRegistration(vc_cSeq); + f_terminate_component(); + log("*** a_Sip_catchSyncStop: INFO: TEST COMPONENT NOW STOPPING ITSELF! *** "); + setverdict(inconc); + stop; + } + } + + + /** + * @desc main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration( + ) runs on SipComponent { + var Response v_response; + var Request v_request; + var INFO_Request v_info_request; + var NOTIFY_Request v_notify_request; + var SUBSCRIBE_Request v_subscribe_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + var REGISTER_Request v_register_request; + var CSeq v_cSeq; + [] any timer.timeout { + setverdict(fail); + all timer.stop; + // f_SendCANCEL(m_CANCEL_Request(vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_reqHostPort, vc_via )); // difference between registration + // state or transaction state + vc_callId := vc_callIdReg; + f_RemoveRegistration(vc_cSeq); + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { + repeat; + } + [] SIPP.receive(mw_ACK_Request_Base(?)) { + repeat; + } + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { + repeat; + } + // ignore 181 if flag is set (following TS 183004 4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { + repeat; + } + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat; + } + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { + repeat; + } + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_info_request); + f_send200OK(); + repeat; + } + // awaiting of Notify + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_notify_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe from UE + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*TODO Dynami error: sender vc_sent_label*/ { + f_setHeadersOnReceiptOfRequest(v_subscribe_request); + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + // f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via + // f_SendNOTIFY(m_NOTIFY_Request_contact(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_contact)); + f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_awaitingOkResponse(vc_cSeq); + repeat; + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request /*TODO Dynami error: sender vc_sent_label*/ { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request /*TODO Dynami error: sender vc_sent_label*/ { + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + // Answer to the CANCEL + f_send200OK(); + f_RemoveRegistration(vc_cSeq); + } + // catch 4xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + setverdict(fail); + if (v_response.msgHeader.cSeq.method == "INVITE") { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + } + f_RemoveRegistration(vc_cSeq); + } + // catch 5xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + setverdict(fail); + if (v_response.msgHeader.cSeq.method == "INVITE") { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + } + f_RemoveRegistration(vc_cSeq); + } + // catch invalid REGISTER + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request /*TODO Dynami error: sender vc_sent_label*/ { + setverdict(fail); + f_componentStop(); + } + // any + [] SIPP.receive { + setverdict(fail); + all timer.stop; + // f_setHeadersCANCEL(vc_cSeq); + // f_SendCANCEL(m_CANCEL_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_cancel_To, vc_via )); // difference between + // registration state or transaction state + f_RemoveRegistration(vc_cSeq); + } + } + + /** + * @desc altstep handle authentication for INVITE message + */ + altstep a_altstep_401or407( + ) runs on SipComponent { + var CommaParam_List v_challenge; + var Credentials v_Credentials; + var Response v_Response; + var Request v_Request := vc_requestFor407; + [] any port.check(receive) { + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base((c_statusLine401, c_statusLine407), vc_callId, vc_cSeq)) -> value v_Response { + tc_resp.stop; + // get tag from To header if available + vc_to := v_Response.msgHeader.toField; + if (vc_cSeq.method == "INVITE") { + // send ACK + f_SendACK(m_ACK_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)); + } + // resent the INVITE message with Proxyauthorization header include + // Extract challenge and calculate credentials for a response. + if ( + ischosen( + v_Response.msgHeader.proxyAuthenticate.challenge + .otherChallenge // instead of digestCln (changed by axr to comply to alcatel) + ) + ) { + v_challenge := v_Response.msgHeader.proxyAuthenticate.challenge.otherChallenge.authParams; + v_Credentials := f_calculatecCredentials(vc_userprofile, vc_requestFor407.msgHeader.cSeq.method, v_challenge); + } + else { + log("*** " &__SCOPE__& ": INFO: No scheme in Proxy Authenticate header!!! ***"); + setverdict(inconc); + stop; + } + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile))} + }; + + v_Request.msgHeader.via := vc_via; + // Increment CSeq sequence number of and add the credentials + // to the original saved INVITE message. + vc_cSeq.method := vc_requestFor407.msgHeader.cSeq.method; + vc_cSeq.seqNumber := vc_cSeq.seqNumber + 1; + v_Request.msgHeader.cSeq.seqNumber := vc_cSeq.seqNumber; + v_Request.msgHeader.proxyAuthorization.fieldName := PROXY_AUTHORIZATION_E; + v_Request.msgHeader.proxyAuthorization.credentials := {v_Credentials}; + + // Re-send the saved INVITE with Authorization header + // included. + SIPP.send(v_Request) to vc_sent_label; + } + } + } + } + + } // end of group DefaultsTestStep +} // end module LibSip_Steps diff --git a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn new file mode 100644 index 0000000..938ad29 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn @@ -0,0 +1,4691 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF450, STF471 + * @version $Id: LibSip_Templates.ttcn 656 2018-02-16 08:32:25Z genoudoli $ + * @desc This module defines SIP Templates for message, header, and + * structured types.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions. + * This module is part of LibSipV3. + * @remark Any additions to the templates shall follow the design rules and always modify base templates only; Existing templates shall not be changed or removed - change requests shall be made to http://t-ort.etsi.org + */ +module LibSip_Templates { + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_SDPTypes all; + import from LibSip_Interface all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_SimpleMsgSummaryTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + group SubFields { + + template(value) Addr_Union m_AddrUnion_NameAddr(template(value) NameAddr p_nameAddr) := {nameAddr := p_nameAddr} + + template(value) Addr_Union m_AddrUnion_DisplayAndSipUrl( + template(value) DisplayName p_displayName, + template(value) SipUrl p_addrSpec + ) := { + nameAddr := m_CallingAddr(p_displayName, p_addrSpec) + } + + template(value) NameAddr m_NameAddr( + template(omit) DisplayName p_displayName := omit, + template(value) SipUrl p_addrSpec + ) := { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template(value) NameAddr m_CallingAddr( + template(value) DisplayName p_displayName, + template(value) SipUrl p_addrSpec + ) := m_NameAddr(p_displayName, p_addrSpec); + + template(present) NameAddr mw_NameAddr( + template DisplayName p_displayName, + template(present) SipUrl p_addrSpec := ? + ) := { + displayName := p_displayName, + addrSpec := p_addrSpec + } + + template(present) CommaParam_List mw_digestResponse( + template(present) GenericParam p_genericParam := ? + ) := superset(p_genericParam); + + //* c_Integrity_protected_yes + /** + * @desc send template for parameter list with CPC set to a specific value + * @param p_ISUP_CPC_value CPC parameter value + * former PX_SIP_ISUP_CPC_VALUE + */ + template(value) SemicolonParam_List m_cpc( + template(value) charstring p_ISUP_CPC_value := "prison" + ) := { + { + "cpc", + {tokenOrHost := p_ISUP_CPC_value} + } + } + + template(value) SemicolonParam_List m_ReasonParams( + template(omit) GenValue p_cause := omit, + template(value) GenValue p_text + ) := { + m_Cause(p_cause), m_Text(p_text) + } + + template(present) SemicolonParam_List mw_ReasonParams( + template GenValue p_cause, + template GenValue p_text + ) := { + mw_Cause_base(p_cause), mw_Text(p_text) + } + + template(value) ReasonValue m_ReasonValue_Base := { + token := "", + reasonParams := omit + } + + template(present) ReasonValue mw_ReasonValue_Base := { + token := ?, + reasonParams := * + } + + template(value) ReasonValue m_ReasonValue_param( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_Base := { + reasonParams := m_ReasonParams(p_cause, p_text) + } + + template(present) ReasonValue mw_ReasonValue_param( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_Base := { + reasonParams := mw_ReasonParams(p_cause, p_text) + } + + template(value) ReasonValue m_ReasonValue( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_param := { + token := "Q.850" + } + + template(present) ReasonValue mw_ReasonValue( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_param := { + token := "Q.850" + } + + template(value) ReasonValue m_ReasonValueSIP( + template(value) GenValue p_cause, + template(value) GenValue p_text + ) modifies m_ReasonValue_param := { + token := "SIP" + } + + template(present) ReasonValue mw_ReasonValueSIP( + template GenValue p_cause, + template GenValue p_text + ) modifies mw_ReasonValue_param := { + token := "SIP" + } + + template(present) RouteBody mw_routeBody( + template(present) SipUrl p_sipurl := ? + ) := { + nameAddr := mw_NameAddr(*, p_sipurl), + rrParam := * + } + + template(value) SentProtocol m_SentProtocol( + template(value) charstring p_protocol + ) := { + protocolName := c_sipName, + protocolVersion := c_sipVersion, + transport := p_protocol + } + + template(value) SipUrl m_BasicSipUrl := { + scheme := (c_sipScheme), + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "", //* charstring + password := + omit //* optional charstring + }, + hostPort := { + host := omit, //* hostname, IPv4 or IPv6 as a charstring + portField := + omit //* p_userprofile.currPort - optional integer + } + } + }, + urlParameters := omit, + headers := omit + } + + template(value) SipUrl m_SipUrl_currDomain_Base( + template(value) SipUserProfile p_userprofile + ) modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := p_userprofile.publUsername + } + } + } + } + + template(value) SipUrl m_SipUrl_currDomain( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := + p_userprofile + .homeDomain //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(value) SipUrl m_SipUrl_contactIpaddr( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := p_userprofile.contactIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := + p_userprofile + .contactPort //* optional integer + } + } + } + } + /** + * @desc send template with SIP userinfo + * @param p_userprofile SIP user profile values + * @param p_ISUP_CPC_value CPC parameter value + * former PX_SIP_ISUP_CPC_VALUE + */ + template(value) SipUrl m_SipUrl_contactIpaddrAndCpc( + template(value) SipUserProfile p_userprofile, + template(value) charstring p_ISUP_CPC_value := "prison" + ) modifies m_SipUrl_contactIpaddr := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := + valueof(p_userprofile.publUsername) & "; cpc=" & + valueof(p_ISUP_CPC_value) + } + } + } + } + + template(value) SipUrl m_SipUrl_currIpaddr( + template(value) SipUserProfile p_userprofile + ) modifies m_SipUrl_currDomain_Base := { + components := { + sip := { + hostPort := { + host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := + p_userprofile + .currPort //* optional integer + } + } + } + } + + template(value) SipUrl m_SipUrl_Anonymous modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := + "Anonymous" //* charstring + }, + hostPort := { + host := + "Anonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(value) SipUrl m_SipUrl_NumberHostHeader( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_BasicSipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_number}, + hostPort := {host := p_host} + } + }, + urlParameters := p_urlParameters + } + + template(value) SipUrl m_SipUrl_NumberHostParam( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_SipUrl_NumberHostHeader := { + components := {sip := {hostPort := {portField := c_defaultSipPort}}} + } + + template(value) SipUrl m_SipUrl_NumberHostParam_woPort( + template(value) charstring p_number, + template(value) charstring p_host, + template(omit) AmpersandParam_List p_urlParameters := omit + ) modifies m_SipUrl_NumberHostParam := { + components := {sip := {hostPort := {portField := omit}}} + } + + template(present) SipUrl m_BasicTelUrl := { + scheme := (c_telScheme), + components := {tel := {subscriber := ""}}, + urlParameters := omit, + headers := omit + } + + template(value) SipUrl m_TelUrl_publUser( + template(value) SipUserProfile p_userprofile + ) modifies m_BasicTelUrl := { + components := { + tel := { + subscriber := + p_userprofile + .publUsername //* charstring + } + } + } + + template(present) SipUrl mw_TelUrl := { + scheme := c_telScheme, + components := {tel := {subscriber := ?}}, + urlParameters := *, + headers := * + } + + template(present) SipUrl mw_SipUrl := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := ?, + password := * + }, + hostPort := { + host := *, + portField := * + } + } + }, + urlParameters := *, + headers := * + } + + template(present) SipUrl mw_TelSip_unavailableInvalidUri := (mw_TelSip_unavailableInvalidUri1, mw_TelSip_unavailableInvalidUri2); + + template(present) SipUrl mw_TelSip_unavailableInvalidUri1 modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable" + }, + hostPort := { + host := "anonymous.invalid", + portField := c_defaultSipPort + } + } + } + } + template(present) SipUrl mw_TelSip_unavailableInvalidUri2 modifies mw_TelUrl := { + components := {tel := {subscriber := "unavailable"}} + } + + template(present) SipUrl mw_TelSip_unavailableUri( + template(value) charstring p_host + ) := (mw_TelSip_unavailableUri1, mw_TelSip_unavailableUri2(p_host)); + + template(present) SipUrl mw_TelSip_unavailableUri1 modifies mw_TelUrl := { + components := {tel := {subscriber := "unavailable"}} + } + + template(present) SipUrl mw_TelSip_unavailableUri2( + template(value) charstring p_host + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unavailable" + }, + hostPort := { + host := p_host, + portField := c_defaultSipPort + } + } + } + } + + template(present) SipUrl mw_SipUrl_Number( + template(present) charstring p_number := ? + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_number}, + hostPort := ? + } + } + } + + template(present) SipUrl mw_TelSipUrl_Number( + template(present) charstring p_number := ? + ) := (mw_SipUrl_Number(p_number), mw_TelSipUrl_Number2(p_number)); + + template(present) SipUrl mw_TelSipUrl_Number1( + template(present) charstring p_number := ? + ) := mw_SipUrl_Number(p_number); + + template(present) SipUrl mw_TelSipUrl_Number2( + template(present) charstring p_number := ? + ) modifies mw_TelUrl := { + components := { + tel := { + subscriber := p_number + } + } + } + + template(present) SipUrl mw_SipUrl_Host( + template charstring p_host + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := *, + hostPort := {host := p_host} + } + } + } + + template(present) SipUrl mw_SipUrl_User_Host( + template(present) charstring p_user := ?, + template charstring p_host + ) modifies mw_SipUrl := { + components := { + sip := { + userInfo := {userOrTelephoneSubscriber := p_user}, + hostPort := { + host := + p_host //* hostname, IPv4 or IPv6 as a charstring + } + } + }, + urlParameters := {m_UserPhone} + } + + template(present) SipUrl mw_SipUrl_Anonymous modifies mw_SipUrl := { + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := pattern "[a,A][n,N][o,O][n,N][y,Y][m,M][o,O][u,U][s,s]" //* charstring + }, + hostPort := { + host := + pattern + "[a,A]nonymous.invalid" //* hostname, IPv4 or IPv6 as a charstring + } + } + } + } + + template(present) SipUrl mw_SipUrl_urlParam( + template SemicolonParam_List p_urlParameters + ) modifies mw_SipUrl := { + urlParameters := p_urlParameters + } + + template(present) ContactAddress mw_ContactAddress := { + addressField := ?, + contactParams := * + } + + template(present) HostPort mw_hostPort( + template charstring p_host, + template integer p_portField + ) := { + host := p_host, + portField := p_portField + } + + template(present) StatusLine mw_statusLine_any := { + sipVersion := c_sipNameVersion, + statusCode := ?, + reasonPhrase := ? + } + + template(present) StatusLine mw_statusLine( + in template(present) integer p_statusCode := ?, + in template(present) charstring p_reasonPhrase := ? + ) modifies mw_statusLine_any := { + statusCode := p_statusCode, + reasonPhrase := p_reasonPhrase + } + + template(present) StatusLine mw_statusLine1xx modifies mw_statusLine_any := {statusCode := (100 .. 199)} + + template(present) StatusLine mw_statusLine2xx modifies mw_statusLine_any := {statusCode := (200 .. 299)} + + template(present) StatusLine mw_statusLine3xx modifies mw_statusLine_any := {statusCode := (300 .. 399)} + + template(present) StatusLine mw_statusLine4xx modifies mw_statusLine_any := {statusCode := (400 .. 499)} + + template(present) StatusLine mw_statusLine5xx modifies mw_statusLine_any := {statusCode := (500 .. 599)} + + template(present) StatusLine mw_statusLine6xx modifies mw_statusLine_any := {statusCode := (600 .. 699)} + + template(present) StatusLine mw_statusLineFinal modifies mw_statusLine_any := {statusCode := (200 .. 699)} + + template(present) NameAddr mw_NameAddr_DispName_User_Host( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + displayName := p_dn, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := p_user, + password := * + }, + hostPort := { + host := p_host, //* hostname, IPv4 or IPv6 as a charstring + portField := + * //* optional integer + } + } + }, + urlParameters := {m_UserPhone}, + headers := * + } + } + + template(present) Addr_Union mw_AddrUnion_Nameaddr( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + nameAddr := mw_NameAddr_DispName_User_Host(p_dn, p_user, p_host) + } + + template(present) Addr_Union mw_AddrUnion_SipUrl( + template(present) charstring p_user := ?, + template charstring p_host + ) := { + addrSpecUnion := mw_SipUrl_User_Host(p_user, p_host) + } + + + } //* end group Subfields + + group HeaderFieldTemplates { + template(value) LibSip_SIPTypesAndValues.Allow m_Allow( + template(value) Method_List p_methods + ) := { + fieldName := ALLOW_E, + methods := p_methods + } + + template(present) LibSip_SIPTypesAndValues.Allow mw_Allow( + template(value) charstring p_method + ) := { + fieldName := ALLOW_E, + methods := superset(p_method) + } + + template(value) GenericParam m_Cause( + template(omit) GenValue p_cause := omit + ) := { + id := "cause", + paramValue := p_cause + } + + template(present) GenericParam mw_Cause_base( + template GenValue p_cause + ) := { + id := "cause", + paramValue := p_cause + } + + template(present) GenericParam mw_Cause( + template(value) charstring p_cause + ) := { + id := ?, + paramValue := { tokenOrHost := pattern "*{p_cause}*" } + } + + template(value) Authorization m_Authorization( + template(value) Credentials p_credentials + ) := { + fieldName := AUTHORIZATION_E, + body := {p_credentials} + } + + template(value) Authorization m_Authorization_digest( + template(value) CommaParam_List p_commaParam_List + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := p_commaParam_List}} + } + + template(present) Authorization mw_Authorization_digest( + template(present) CommaParam_List p_commaParam_List := ? + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := p_commaParam_List}} + } + + template(value) Authorization m_add_Authorization_digest( + template(value) Authorization p_auth, + template(value) CommaParam_List p_commaParam_List + ) := { + fieldName := AUTHORIZATION_E, + body := {{digestResponse := f_merge_CommaParam_List(p_auth.body[0].digestResponse, p_commaParam_List)}} + } + + template(present) Authorization mw_Authorization_other := { + fieldName := AUTHORIZATION_E, + body := {{otherResponse := ?}} + } + + template(value) Contact m_Contact( + template(value) SipUrl p_sipUrl + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := p_sipUrl}, + contactParams := omit + } + } + } //* end contactBody + } //* end m_Contact + + template(value) Contact m_Contact_profile( + template(value) SipUserProfile p_userprofile + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := omit + } + } + } //* end + //* contactBody + } //* end m_Contact + + + template(value) Contact m_Contact_profile_expires( + template(value) SipUserProfile p_userprofile, + template(value) GenValue p_expires + ) := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := {addrSpecUnion := m_SipUrl_contactIpaddr(p_userprofile)}, + contactParams := { + { + "expires", + p_expires + } + } + } + } + } //* end contactBody + } //* end m_Contact + + template(value) From m_From( + template(value) NameAddr p_nameAddr, + template(value) GenValue p_tag_str + ) := { + fieldName := FROM_E, + addressField := {nameAddr := p_nameAddr}, //* end addressField + fromParams := { + { + id := c_tagId, + paramValue := p_tag_str + } + } + } + + template(value) From m_From_Anonymous( + template(value) GenValue p_tag_str + ) := { + fieldName := FROM_E, + addressField := { + nameAddr := + m_NameAddr( + {token:="Anonymous"}, + //* optional charstring + m_SipUrl_Anonymous //* SipUrl + ) + }, //* end addressField + fromParams := { + { + id := c_tagId, + paramValue := p_tag_str + } + } + } + + template(value) From m_From_SipUrl( + template(value) SipUrl p_sipUrl + ) := { + fieldName := FROM_E, + addressField := { + nameAddr := + m_NameAddr( + omit, + //* optional charstring + p_sipUrl //* SipUrl + ) + }, //* end addressField + fromParams := omit + } + + template(value) Event m_Event_base := { + fieldName := EVENT_E, + eventType := "", + eventParams := omit + } + + template(value) Event m_Event_refer modifies m_Event_base := {eventType := "refer"} + + template(value) Event m_Event_conference modifies m_Event_base := {eventType := "conference"} + + template(value) Event m_Event_presence modifies m_Event_base := {eventType := "presence"} + + template(value) Event m_Event_reg modifies m_Event_base := {eventType := "reg"} + + template(value) Event m_Event_cdiv modifies m_Event_base := {eventType := "comm-div-info"} + + template(value) Event m_Event_QueueState modifies m_Event_base := {eventType := "emergency-QueueState"} + + template(value) Event m_Event_mcid := m_Event_cdiv; + + template(value) Expires m_Expires_base := { + fieldName := EXPIRES_E, + deltaSec := "" + } + + template(value) Expires m_Expires_600000 modifies m_Expires_base := {deltaSec := "600000"} + + template(value) Expires m_Expires( + template(value) charstring p_deltaSec + ) modifies m_Expires_base := { + deltaSec := p_deltaSec + } + + template(present) Expires mw_Expires( + template(present) charstring p_deltaSec := ? + ) := { + fieldName := EXPIRES_E, + deltaSec := p_deltaSec + } + + template(value) HistoryInfo m_HistoryInfo( + template(value) HistoryInfo_List p_HistoryInfo_List + ) := { + fieldName := HISTORY_INFO_E, + historyInfoList := p_HistoryInfo_List + } + + template(present) HistoryInfo mw_HistoryInfo( + template(present) HistoryInfo_List p_HistoryInfo_List := ? + ) := { + fieldName := HISTORY_INFO_E, + historyInfoList := p_HistoryInfo_List + } + + template(value) HistoryInfoEntry m_HistoryInfoEntry( + template(value) SipUrl p_Url, + template(omit) IntegerList p_index := omit, + template(omit) SemicolonParam_List p_paramlist := omit + ) := { + nameAddr := m_NameAddr(omit, p_Url), + hiIndex := p_index, + hiExtention := p_paramlist + } + + template(present) HistoryInfoEntry mw_HistoryInfoEntry( + template(present) SipUrl p_Url := ?, + template IntegerList p_index, + template SemicolonParam_List p_paramlist + ) := { + nameAddr := mw_NameAddr(*, p_Url), + hiIndex := p_index, + hiExtention := p_paramlist + } + + template(value) PAssertedID m_PAssertedID( + template(value) Addr_Union p_pAssertedIDValue + ) := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + } + + template(value) PAssertedID m_PAssertedID_2x( + template(value) Addr_Union p_pAssertedIDValue, + template(value) Addr_Union p_pAssertedIDValue2 + ) modifies m_PAssertedID := { + pAssertedIDValueList := {p_pAssertedIDValue, p_pAssertedIDValue2} + } + + template(present) PAssertedID mw_PAssertedID( + template(present) PAssertedIDValue p_pAssertedIDValue := ? + ) := { + fieldName := P_ASSERTED_ID_E, + pAssertedIDValueList := {p_pAssertedIDValue} + } + + template(present) PAssertedIDValue mw_PAssertedIDValue( + template(present) SipUrl p_SipUrl := ? + ) := { + nameAddr := { + displayName := *, + addrSpec := p_SipUrl + } + } + + template(value) PPreferredID m_PPreferredID( + template(value) Addr_Union p_pPreferredIDValue + ) := { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := {p_pPreferredIDValue} + } + + template(value) Privacy m_Privacy( + template(value) PrivacyValue p_privacy + ) := { + fieldName := PRIVACY_E, + privValueList := {p_privacy} + } + + template(present) Privacy mw_Privacy_Base( + template(present) charstring p_value := ? + ) := { + fieldName := PRIVACY_E, + privValueList := {*, p_value, *} + } + + template(present) Privacy mw_Privacy_id := mw_Privacy_Base("id"); + + template(present) Privacy mw_Privacy_user := mw_Privacy_Base("user"); + + template(value) RAck m_RAck( + integer p_responseNum, + integer p_seqNumber, + charstring p_method + ) := { + fieldName := RACK_E, + responseNum := p_responseNum, + seqNumber := p_seqNumber, + method := p_method + } + + template(value) Reason m_Reason( + template(value) integer p_cause + ) := { + fieldName := REASON_E, + reasonValues := {m_ReasonValue({tokenOrHost := int2str(valueof(p_cause))}, { tokenOrHost := "dummy"})} + } + + template(value) Reason m_Reason21 := { + fieldName := REASON_E, + reasonValues := {m_ReasonValue({tokenOrHost := int2str(21)}, { tokenOrHost := "call reject"})} + } + + template(present) Reason mw_Reason_Base := { + fieldName := REASON_E, + reasonValues := {} + } + + template(present) Reason mw_Reason( + template(value) GenValue p_cause + ) modifies mw_Reason_Base := { + reasonValues := {mw_ReasonValue(p_cause, ?)} + } + + template(present) Reason mw_ReasonSIP( + template(value) GenValue p_cause + ) modifies mw_Reason_Base := { + reasonValues := {mw_ReasonValueSIP(p_cause, ?)} + } + + template(value) RecordRoute m_recordRoute_currIpAddr( + template(value) SipUserProfile p_userprofile + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) RecordRoute m_recordRoute_currIpAddr_params( + template(value) SipUserProfile p_userprofile, + template(value) SemicolonParam_List p_urlParameters + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + }, + urlParameters := p_urlParameters, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) RouteBody m_routeBody_currIpAddr( + template(value) SipUserProfile p_userprofile + ) := { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_userprofile.homeDomain, + portField := p_userprofile.currPort + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + + template(value) ReferredBy m_ReferredBy_SipUrl( + template(value) SipUrl p_sipUrl + ) := { + fieldName := REFERRED_BY_E, + nameAddr := + m_NameAddr( + // STF471 {displayName + omit, + // := omit, + p_sipUrl // addrSpec:=p_sipUrl} + ), + referredbyIdParams := omit + } + + template(value) ReferTo m_ReferTo_SipUrl( + template(value) SipUrl p_sipUrl, + template(value) GenValue p_method + ) := { + fieldName := REFER_TO_E, + nameAddr := + m_NameAddr( + // STF471 {displayName + omit, + // := omit, + p_sipUrl // addrSpec:=p_sipUrl} + ), + referToParams := { + { + id := "method", + paramValue := p_method + } + } + } + + template(value) ReferSub m_ReferSub( + template(value) boolean p_value + ) := { + fieldName := REFER_SUB_E, + referSubValue := p_value, + referSubParams := omit + } + + template(value) Replaces m_Replaces( + template(value) charstring p_callId, + template(value) GenValue p_toTag, + template(value) GenValue p_fromTag + ) := { + fieldName := REPLACES_E, + callid := p_callId, + replacesParams := { + { + id := "to-tag", + paramValue := p_toTag + }, + { + id := "from-tag", + paramValue := p_fromTag + } + } + } + + template(value) Require m_Require_empty := { + fieldName := REQUIRE_E, + optionsTags := {""} + } + + template(value) Require m_Require_replaces modifies m_Require_empty := {optionsTags := {c_replaces}} + + template(value) Require m_Require_100rel modifies m_Require_empty := {optionsTags := {c_tag100rel}} + + template(value) Require m_Require_prec modifies m_Require_empty := {optionsTags := {c_tagPrecond}} + + template(value) SubscriptionState m_SubscriptionState_active := { + fieldName := SUBSCRIPTION_STATE_E, + subState := "active", + substateParams := { + { + id := "expires", + paramValue := {tokenOrHost := "60000"} + } + } + } + + template(value) Supported m_Supported_empty := { + fieldName := SUPPORTED_E, + optionsTags := {""} + } + + template(value) Supported m_Supported_fromChange modifies m_Supported_empty := {optionsTags := {c_tagFromChange}} + + template(value) Supported m_Supported_prec modifies m_Supported_empty := {optionsTags := {c_tagPrecond}} + + template(value) Supported m_Supported_100rel modifies m_Supported_empty := {optionsTags := {c_tag100rel}} + + template(value) Supported m_Supported_100rel_prec modifies m_Supported_empty := {optionsTags := {c_tag100rel, c_tagPrecond}} + + template(value) GenericParam m_Text( + template(value) GenValue p_text + ) := { + id := "text", + paramValue := p_text + } + + template(present) GenericParam mw_Text( + template GenValue p_text + ) := { + id := "text", + paramValue := p_text + } + + template(value) GenericParam m_UserPhone := { + id := "user", + paramValue := { quotedString := "phone" } + } + + template(value) GenericParam m_UserToUserEncodingHex := { + id := "encoding", + paramValue := { quotedString := "hex" } + } + + template(value) UserToUser m_UserToUserData( + template(value) UserToUser.uuiData p_U2UData + ) := { + fieldName := USER_TO_USER_E, + uuiData := p_U2UData, + uuiParam := m_UserToUserEncodingHex + } + + template(value) To m_To( + template(value) SipUrl p_sipUrl + ) := { + fieldName := TO_E, + addressField := { + nameAddr := + m_NameAddr( + {token:="ETSI Tester"}, + //* optional charstring + p_sipUrl //* SipUrl + ) + }, //* end addressField + toParams := omit + } + + template(value) To m_To_SipUrl( + template(value) SipUrl p_sipUrl + ) modifies m_To := { + addressField := { + nameAddr := { + displayName := + omit //* optional charstring + } + } //* end addressField + } + + template(present) To mw_To_NameAddr_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), + toParams := * + } + + template(present) To mw_To( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := TO_E, + addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, + toParams := * + } + + template(present) From mw_From( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := FROM_E, + addressField := {nameAddr := mw_NameAddr(*, p_sipUrl)}, + fromParams := * + } + + template(present) From mw_From_NameAddr_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), + fromParams := * + } + template(value) ViaBody m_ViaBody_currIpaddr( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + }, + viaParams := { + { + id := c_branchId, + paramValue := { + tokenOrHost := p_branch_val + } + } + } + } + + template(present) ViaBody mw_ViaBody_interface( + template(present) HostPort p_hostport := ? + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_hostport.host, + portField := p_hostport.portField + }, + viaParams := * + } + + template(present) Via mw_Via( + template(present) ViaBody p_viabody := ? + ) := { + fieldName := VIA_E, + viaBody := {*, p_viabody, *} // superset(p_viabody) + } + + template(present) CallId mw_CallId_any := { + fieldName := CALL_ID_E, + callid := ? + } + + template(present) Require mw_Require_Base := { + fieldName := REQUIRE_E, + optionsTags := {} + } + + template(present) Require mw_Require_not_100rel modifies mw_Require_Base := {optionsTags := superset(complement(c_tag100rel))} + + template(present) Require mw_require_100rel modifies mw_Require_Base := {optionsTags := superset(c_tag100rel)} + + template(present) RecordRoute mw_recordroute( + template(present) RouteBody p_routeBody := ? + ) := { + fieldName := RECORD_ROUTE_E, + routeBody := {*, p_routeBody, *} // superset(p_routeBody) + } + + template(present) Route mw_route( + template(present) RouteBody_List p_routeBody := ? + ) := { + fieldName := ROUTE_E, + routeBody := p_routeBody + } + + template(present) Supported mw_Supported_Base := { + fieldName := SUPPORTED_E, + optionsTags := {} + } + + template(present) Supported mw_Supported_100rel_prec modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel, c_tagPrecond)} + + template(present) Supported mw_Supported_100rel modifies mw_Supported_Base := {optionsTags := superset(c_tag100rel)} + + template(present) Supported mw_Supported_fromChange modifies mw_Supported_Base := {optionsTags := superset(c_tagFromChange)} + + template(present) UserToUser mw_UserToUserData( + template(present) UserToUser.uuiData p_U2UData := ? + ) := { + fieldName := USER_TO_USER_E, + uuiData := p_U2UData, + uuiParam := ? + } + + template(present) Contact mw_Contact_conference := { + fieldName := CONTACT_E, + contactBody := { + contactAddresses := { + { + addressField := { + nameAddr := { + displayName := *, + addrSpec := { + scheme := ?, + components := ?, + urlParameters := { + { + "isfocus", + * + }, + * + }, + headers := * + } + } + }, + contactParams := * + } + } + } + } + + template(value) AlertInfo m_AlertInfo_Base := { + fieldName := ALERT_INFO_E, + alertInfoBody := {} + } + + template(value) AlertInfo m_AlertInfo( + template(value) charstring p_urn + ) modifies m_AlertInfo_Base := { + alertInfoBody := { + { + p_urn, + omit + } + } + } + + template(present) AlertInfo mw_AlertInfo( + template(present) charstring p_urn := ? + ) modifies m_AlertInfo_Base := { + alertInfoBody := + superset( + { + p_urn, + omit + } + ) + } + + /* template (omit) Geolocation m_geolocation( */ + /* in template (value) SipUrl p_addrSpec, */ + /* in template (omit) SemicolonParam_List p_geolocParam := omit */ + /* ) := { */ + /* fieldName := GEOLOCATION_E, */ + /* addrSpec := p_addrSpec, */ + /* geolocParam := p_geolocParam */ + /* } // End of template m_geolocation */ + + /* template Geolocation mw_geolocation( */ + /* template (present) SipUrl p_addrSpec := ?, */ + /* template SemicolonParam_List p_geolocParam := * */ + /* ) := { */ + /* fieldName := GEOLOCATION_E, */ + /* addrSpec := p_addrSpec, */ + /* geolocParam := p_geolocParam */ + /* } // End of template mw_geolocation */ + + } //* end of group HeaderFieldTemplates + + + group MessageTemplates { + + group dummy_templates { + + group dummy_parameter_send { + + template(value) RequestLine m_requestLine_dummy( + template(value) Method p_method + ) := { + method := p_method, + requestUri := c_unavailableUri, + sipVersion := c_sipNameVersion + } + + template(value) MessageHeader m_msgHeader_dummy := { + accept := omit, + acceptContact := omit, + acceptEncoding := omit, + acceptLanguage := omit, + alertInfo := omit, + allow := omit, + allowEvents := omit, //* RFC3265 + authenticationInfo := omit, + authorization := omit, + callId := c_empty_CallId, + callInfo := omit, + contact := omit, + contentDisposition := omit, + contentEncoding := omit, + contentLanguage := omit, + contentLength := { + fieldName := CONTENT_LENGTH_E, + len := 0 + }, + contentType := omit, //* if message body present m, + //* else not present + cSeq := c_empty_cSeq, + date := omit, + errorInfo := omit, + event := omit, //* RFC3265 + expires := omit, + featureCaps := omit, + fromField := c_empty_From, + geolocation := omit, + geolocationRouting := omit, + historyInfo := omit, //* RFC4244 + infoPackage := omit, + inReplyTo := omit, + maxForwards := c_maxForwards70, + mimeVersion := omit, + minExpires := omit, + minSE := omit, //* RFC4028 + organization := omit, + pAccessNetworkInfo := omit, //* RFC3455 + pAssertedID := omit, + pAssertedService := omit, + pAssociatedURI := omit, + path := omit, //* RFC3327 + pCalledPartyID := omit, //* RFC3455 + pChargingFunctionAddresses := omit, //* RFC3455 + pChargingVector := omit, //* RFC3455 + pEarlyMedia := omit, //* RFC5009 + pMediaAuthorization := omit, //* RFC3313 + pPreferredID := omit, + pPreferredService := omit, + priority := omit, + privacy := omit, + proxyAuthenticate := omit, + proxyAuthorization := omit, + proxyRequire := omit, + pVisitedNetworkID := omit, //* RFC3455 + rAck := omit, + rSeq := omit, + reason := omit, + recordRoute := omit, + recvInfo := omit, + requestDisposition := omit, + referredBy := omit, //* RFC3892 - REFER method + referTo := omit, //* RFC3515 - REFER method + referSub := omit, //* RFC4488 - REFER method + replaces := omit, //* RFC3891 + replyTo := omit, + require := omit, + retryAfter := omit, + route := omit, + securityClient := omit, //* RFC3329 + securityServer := omit, //* RFC3329 + securityVerify := omit, //* RFC3329 + server := omit, + serviceRoute := omit, //* RFC3608 + sessionExpires := omit, //* RFC4028 + sessionId := omit, + sipETag := omit, + sipIfMatch := omit, + subject := omit, + subscriptionState := omit, //* RFC3265 + supported := omit, + timestamp_ := omit, + toField := c_empty_To, + unsupported := omit, + userToUser := omit, + userAgent := omit, + via := c_empty_Via, + warning := omit, + wwwAuthenticate := omit, + resourcePriority := omit, + answerMode := omit, + privAnswerMode := omit, + targetDialog := omit, + pAnswerState := omit, + undefinedHeader_List := omit + } + + + } //* group dummy_parameter_send + + group dummy_parameter_receive { + + template(present) RequestLine mw_requestLine_dummy( + Method p_method + ) := { + method := p_method, + requestUri := ?, + sipVersion := c_sipNameVersion + } + + template(present) MessageHeader mw_msgHeader_dummy := { + accept := *, + acceptContact := *, + acceptEncoding := *, + acceptLanguage := *, + alertInfo := *, + allow := *, + allowEvents := *, //* RFC3265 + authenticationInfo := *, + authorization := *, + callId := ?, + callInfo := *, + contact := *, + contentDisposition := *, + contentEncoding := *, + contentLanguage := *, + contentLength := ?, + contentType := *, + cSeq := ?, + date := *, + errorInfo := *, + event := *, //* RFC3265 + expires := *, + featureCaps := *, + fromField := ?, + geolocation := *, + geolocationRouting := *, + historyInfo := *, //* RFC4244 + infoPackage := *, + inReplyTo := *, + maxForwards := *, + mimeVersion := *, + minExpires := *, + minSE := *, //* RFC4028 + organization := *, + pAccessNetworkInfo := *, //* RFC3455 + pAssertedID := *, + pAssertedService := *, + pAssociatedURI := *, + path := *, //* RFC3327 + pCalledPartyID := *, //* RFC3455 + pChargingFunctionAddresses := *, //* RFC3455 + pChargingVector := *, //* RFC3455 + pEarlyMedia := *, //* RFC5009 + pMediaAuthorization := *, //* RFC3313 + pPreferredID := *, + pPreferredService := *, + priority := *, + privacy := *, + proxyAuthenticate := *, + proxyAuthorization := *, + proxyRequire := *, + pVisitedNetworkID := *, //* RFC3455 + rAck := *, + rSeq := *, + reason := *, + recordRoute := *, + recvInfo := *, + requestDisposition := *, + referredBy := *, //* RFC3892 - REFER method + referTo := *, //* RFC3515 - REFER method + referSub := *, //* RFC4488 - REFER method + replaces := *, //* RFC 3891 + replyTo := *, + require := *, + retryAfter := *, + route := *, + securityClient := *, //* RFC3329 + securityServer := *, //* RFC3329 + securityVerify := *, //* RFC3329 + server := *, + serviceRoute := *, //* RFC3608 + sessionExpires := *, //* RFC4028 + sessionId := *, + sipETag := *, + sipIfMatch := *, + subject := *, + subscriptionState := *, //* RFC3265 + supported := *, + timestamp_ := *, + toField := ?, + unsupported := *, + userToUser := *, + userAgent := *, + via := ?, + warning := *, + wwwAuthenticate := *, + resourcePriority := *, + answerMode := *, + privAnswerMode := *, + targetDialog := *, + pAnswerState := *, + undefinedHeader_List := * + } + + + } //* end group dummy_parameter_receive + + group dummy_request_templates_send { + + template(value) ACK_Request m_ACK_Dummy := { + requestLine := m_requestLine_dummy(ACK_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) BYE_Request m_BYE_Dummy := { + requestLine := m_requestLine_dummy(BYE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) CANCEL_Request m_CANCEL_Dummy := { + requestLine := m_requestLine_dummy(CANCEL_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) INFO_Request m_INFO_Dummy := { + requestLine := m_requestLine_dummy(INFO_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) INVITE_Request m_INVITE_Dummy := { + requestLine := m_requestLine_dummy(INVITE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) MESSAGE_Request m_MESSAGE_Dummy := { + requestLine := m_requestLine_dummy(MESSAGE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) NOTIFY_Request m_NOTIFY_Dummy := { + requestLine := m_requestLine_dummy(NOTIFY_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) OPTIONS_Request m_OPTIONS_Dummy := { + requestLine := m_requestLine_dummy(OPTIONS_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) PRACK_Request m_PRACK_Dummy := { + requestLine := m_requestLine_dummy(PRACK_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) PUBLISH_Request m_PUBLISH_Dummy := { + requestLine := m_requestLine_dummy(PUBLISH_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) REGISTER_Request m_REGISTER_Dummy := { + requestLine := m_requestLine_dummy(REGISTER_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) REFER_Request m_REFER_Dummy := { + requestLine := m_requestLine_dummy(REFER_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Dummy := { + requestLine := m_requestLine_dummy(SUBSCRIBE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + template(value) UPDATE_Request m_UPDATE_Dummy := { + requestLine := m_requestLine_dummy(UPDATE_E), + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + + } //* end group dummy_request_templates_send + group dummy_request_templates_receive { + + template(present) ACK_Request mw_ACK_Dummy := { + requestLine := mw_requestLine_dummy(ACK_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) BYE_Request mw_BYE_Dummy := { + requestLine := mw_requestLine_dummy(BYE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) CANCEL_Request mw_CANCEL_Dummy := { + requestLine := mw_requestLine_dummy(CANCEL_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) INFO_Request mw_INFO_Dummy := { + requestLine := mw_requestLine_dummy(INFO_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) INVITE_Request mw_INVITE_Dummy := { + requestLine := mw_requestLine_dummy(INVITE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) MESSAGE_Request mw_MESSAGE_Dummy := { + requestLine := mw_requestLine_dummy(MESSAGE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) OPTIONS_Request mw_OPTIONS_Dummy := { + requestLine := mw_requestLine_dummy(OPTIONS_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) NOTIFY_Request mw_NOTIFY_Dummy := { + requestLine := mw_requestLine_dummy(NOTIFY_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) PRACK_Request mw_PRACK_Dummy := { + requestLine := mw_requestLine_dummy(PRACK_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) PUBLISH_Request mw_PUBLISH_Dummy := { + requestLine := mw_requestLine_dummy(PUBLISH_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) REFER_Request mw_REFER_Dummy := { + requestLine := mw_requestLine_dummy(REFER_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) REGISTER_Request mw_REGISTER_Dummy := { + requestLine := mw_requestLine_dummy(REGISTER_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Dummy := { + requestLine := mw_requestLine_dummy(SUBSCRIBE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + template(present) UPDATE_Request mw_UPDATE_Dummy := { + requestLine := mw_requestLine_dummy(UPDATE_E), + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + + } //* end group dummy_request_templates_receive + + group dummy_response_templates_send { + + template(value) Response m_Response_Dummy := { + statusLine := c_statusLine100, + msgHeader := m_msgHeader_dummy, + messageBody := omit, + payload := omit + } + + + } //* group dummy_response_templates_send + + group dummy_response_templates_receive { + + template(present) Response mw_Response_Dummy := { + statusLine := ?, + msgHeader := mw_msgHeader_dummy, + messageBody := *, + payload := * + } + + + } //* group dummy_response_templates_receive + } + + group base_templates { + + template(value) CSeq m_cSeq( + template(value) integer p_seqNumber, + template(value) charstring p_method + ) := { + fieldName := CSEQ_E, + seqNumber := p_seqNumber, + method := p_method + } + + template(value) ContentLength m_contentLength( + template(value) integer p_len + ) := { + fieldName := CONTENT_LENGTH_E, + len := p_len + } + + template(value) ContentType m_contentType( + template(value) charstring p_mTypeSubtype + ) := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := p_mTypeSubtype, + mParams := omit + } + + template(present) ContentType mw_contentType( + in template(present) charstring p_mTypeSubtype := ? + ) := { + fieldName := CONTENT_TYPE_E, + mTypeSubtype := p_mTypeSubtype, + mParams := * + } + + group request_send { + + template(value) ACK_Request m_ACK_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_ACK_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "ACK"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "ACK"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) ACK_Request m_ACK_Request_withRecordRoute( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route + ) modifies m_ACK_Request_Base := { + msgHeader := { + route := p_route, + contentLength := m_contentLength(0) + } + } + + template(value) BYE_Request m_BYE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_BYE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) CANCEL_Request m_CANCEL_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_CANCEL_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) INFO_Request m_INFO_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_INFO_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) INVITE_Request m_INVITE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact + ) modifies m_INVITE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_MESSAGE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(omit) NOTIFY_Request m_NOTIFY_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_NOTIFY_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "NOTIFY"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "NOTIFY"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) OPTIONS_Request m_OPTIONS_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_OPTIONS_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "OPTIONS"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "OPTIONS"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) PRACK_Request m_PRACK_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) RAck p_RAck + ) modifies m_PRACK_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "PRACK"}, + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := omit + } + + template(value) PUBLISH_Request m_PUBLISH_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb + ) modifies m_PUBLISH_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_plainText), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubType + // := + // c_plainText/*c_sdp*/}, + cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "PUBLISH"}, + event := p_event, + rAck := p_RAck, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) REFER_Request m_REFER_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) ReferTo p_referTo := omit, + template(omit) ReferredBy p_referredBy := omit + ) modifies m_REFER_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "REFER"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "REFER"}, + fromField := p_from, + referTo := p_referTo, + referredBy := p_referredBy, + toField := p_to, + via := p_via + } + } + + template(value) REFER_Request m_REFER_Request_replaces( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(value) ReferredBy p_referredBy, + template(value) Replaces p_replaces, + template(omit) Require p_require := omit + ) modifies m_REFER_Request_Base := { + msgHeader := { + replaces := p_replaces, + require := p_require + } + } + + template(value) REGISTER_Request m_REGISTER_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(omit) Authorization p_authorization := omit + ) modifies m_REGISTER_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + supported := { + fieldName := SUPPORTED_E, + optionsTags := {"path"} + }, + via := p_via + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_SUBSCRIBE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "SUBSCRIBE"}, + fromField := p_from, + toField := p_to, + via := p_via + } + } + + template(value) UPDATE_Request m_UPDATE_Request_Base( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_UPDATE_Dummy := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // c_sdp}, + cSeq := m_cSeq(p_cSeq.seqNumber, "UPDATE"), // STF471 + // {fieldName:=CSEQ_E, + // seqNumber:= + // p_cSeq.seqNumber, + // method:= + // "UPDATE"}, + fromField := p_from, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + + } //* end of group message_send + + group request_receive { + + template(present) ACK_Request mw_ACK_Request_Base( + template CallId p_callId + ) modifies mw_ACK_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) BYE_Request mw_BYE_Request_Base( + template CallId p_callId + ) modifies mw_BYE_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) CANCEL_Request mw_CANCEL_Request_Base( + template CallId p_callId + ) modifies mw_CANCEL_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) INFO_Request mw_INFO_Request_Base( + template CallId p_callId + ) modifies mw_INFO_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) INVITE_Request mw_INVITE_Request_Base modifies mw_INVITE_Dummy := {requestLine := {method := INVITE_E}} + + template(present) MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy := {msgHeader := {contact := *}} + + template(present) NOTIFY_Request mw_NOTIFY_Request_Base( + template CallId p_callId + ) modifies mw_NOTIFY_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) OPTIONS_Request mw_OPTIONS_Request_Base( + template CallId p_callId + ) modifies mw_OPTIONS_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) PRACK_Request mw_PRACK_Request_Base( + template CallId p_callId + ) modifies mw_PRACK_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) PUBLISH_Request mw_PUBLISH_Request_Base( + template CallId p_callId + ) modifies mw_PUBLISH_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) REFER_Request mw_REFER_Request_Base( + template CallId p_callId + ) modifies mw_REFER_Dummy := { + msgHeader := {callId := p_callId} + } + + template(present) REFER_Request mw_REFER_Request( + template CallId p_callId, + template(value) SipUrl p_requestUri, + template(value) SipUrl p_referredBy + ) modifies mw_REFER_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + referredBy := { + fieldName := REFERRED_BY_E, + nameAddr := mw_NameAddr(*, p_referredBy), // STF471 + // {displayName + // := + // *, + // addrSpec + // := + // p_referredBy}, + referredbyIdParams := * + } + } + } + + template(present) INVITE_Request mw_INVITE_Request( + template Require p_require, + template(value) SipUrl p_referredBy + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + require := p_require, + referredBy := { + fieldName := REFERRED_BY_E, + nameAddr := mw_NameAddr(*, p_referredBy), // STF471 + // {displayName + // := + // *, + // addrSpec + // := + // p_referredBy}, + referredbyIdParams := * + } + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_Base modifies mw_REGISTER_Dummy := {requestLine := {method := REGISTER_E}} + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_Base modifies mw_SUBSCRIBE_Dummy := {requestLine := {method := SUBSCRIBE_E}} + + template(present) UPDATE_Request mw_UPDATE_Request_Base(template CallId p_callId) modifies mw_UPDATE_Dummy := {msgHeader := {callId := p_callId}} + + + } //* end group request_receive + + group response_send { + + template(value) Response m_Response_Base( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + + } //* end group response_send + + group response_receive { + + template(present) Response mw_Response_Base( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template(present) Response mw_Response_StatusCode_Base( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Dummy := { + statusLine := mw_statusLine(p_statusCode, ?), + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template(present) Response mw_Response_1xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Dummy := { + statusLine := mw_statusLine1xx, + msgHeader := { + callId := p_callId, + contentLength := *, + cSeq := p_cSeq, + fromField := ?, + maxForwards := *, + toField := ?, + via := ? + } + } + + template(present) Response mw_Response_2xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine2xx + } + + template(present) Response mw_Response_3xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine3xx + } + + template(present) Response mw_Response_4xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine4xx + } + + template(present) Response mw_Response_5xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine5xx + } + + template(present) Response mw_Response_6xx_Base( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_1xx_Base := { + statusLine := mw_statusLine6xx + } + + template(present) Response mw_Response_Algorithm( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) CredentialsList p_credentialsList + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + authorization := { + fieldName := AUTHORIZATION_E, + body := p_credentialsList + } + } + } + + + } //* end group message_receive + + + } //* end group full_templates + + group modified_templates { + + group request_send { + + template(value) ACK_Request m_ACK_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) ACK_Request m_ACK_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) BYE_Request m_BYE_Request_cause( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) integer p_cause + ) modifies m_BYE_Request_Base := { + msgHeader := {reason := m_Reason(p_cause)} + } + + template(value) INVITE_Request m_INVITE_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_ResourceList( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(p_mb)}, + contentType := m_contentType(c_xmlresourcelistApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // "application/resource-lists+xml"}, + contentDisposition := { + fieldName := CONTENT_DISPOSITION_E, + dispositionType := "recipient-list", + dispositionParams := omit + }, + require := { + fieldName := REQUIRE_E, + optionsTags := {"recipient-list-invite"} + } + }, + messageBody := p_mb + } + + template(value) REFER_Request m_REFER_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(omit) Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(value) ReferredBy p_referredBy, + template(value) Route p_route + ) modifies m_REFER_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) REGISTER_Request m_REGISTER_Request_expires( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_expires + ) modifies m_REGISTER_Request_Base := { + msgHeader := { + authorization := p_authorization, + expires := m_Expires(p_expires) + } + } + + template(value) NOTIFY_Request m_NOTIFY_Request_contact( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + event := m_Event_reg, + subscriptionState := m_SubscriptionState_active + } + } + + template(value) NOTIFY_Request m_NOTIFY_QueueState( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_messageBody, + template(omit) Contact p_contact := omit + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_messageBody)), + contentType := m_contentType(c_emergency_QueueState), + event := m_Event_QueueState, + subscriptionState := m_SubscriptionState_active + }, + messageBody := p_messageBody + } + +// FIXME STF549: : Titan error: Restriction on template definition does not allow usage of any value + +// template(omit) NOTIFY_Request m_NOTIFY_Request_sipfrag( +// template(value) SipUrl p_requestUri, +// template(omit) CallId p_callId := omit, +// template(omit) CSeq p_cSeq := omit, +// template(value) From p_from, +// template(value) To p_to, +// template(value) Via p_via, +// template(value) charstring p_state, +// template(value) charstring p_sipfrag +// ) modifies m_NOTIFY_Request_Base := { +// requestLine := { +// method := NOTIFY_E, +// requestUri := { +// scheme := ?, +// components := { +// sip := { +// userInfo := omit, +// hostPort := p_requestUri.components.sip.hostPort +// } +// } +// } +// }, +// msgHeader := { +// contentLength := m_contentLength(lengthof(p_sipfrag)), // STF471 +// // {fieldName +// // := +// // CONTENT_LENGTH_E, +// // len:= +// // lengthof(p_sipfrag)}, +// contentType := m_contentType(c_sipfragMessage), // STF471 +// // {fieldName +// // := +// // CONTENT_TYPE_E, +// // mTypeSubtype +// // := +// // "message/sipfrag"}, +// subscriptionState := { +// fieldName := SUBSCRIPTION_STATE_E, +// subState := p_state, +// substateParams := omit +// }, +// event := m_Event_refer +// }, +// messageBody := {sipfrag := p_sipfrag} +// } + + template(omit) UPDATE_Request m_UPDATE_Request_route( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit, + template(value) MessageBody p_mb, + template(value) Route p_route + ) modifies m_UPDATE_Request_Base := { + msgHeader := {route := p_route} + } + + + } //* end group request_send + + + group request_receive { + + template(present) BYE_Request mw_BYE_Request_Reason( + template CallId p_callId, + template(value) GenValue p_cause + ) modifies mw_BYE_Request_Base := { + msgHeader := {reason := mw_Reason(p_cause)} + } + + template(present) BYE_Request mw_BYE_Request_ReasonSIP( + template CallId p_callId, + template(value) GenValue p_cause + ) modifies mw_BYE_Request_Base := { + msgHeader := {reason := mw_ReasonSIP(p_cause)} + } + + template(present) BYE_Request mw_BYE_Request_headerfieldlist( + template CallId p_callId, + template(present) SipUrl p_requestUri, + template(present) To p_to := ?, + template(present) From p_from := ?, + template CSeq p_cSeq, + template Route p_route, + template RecordRoute p_recordRoute, + template Reason p_reason + ) modifies mw_BYE_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + toField := p_to, + fromField := p_from, + cSeq := p_cSeq, + route := p_route, + recordRoute := p_recordRoute, + reason := p_reason + } + } + + template(present) BYE_Request mw_BYE_Request_UserToUser( + template CallId p_callId + ) modifies mw_BYE_Request_Base := { + msgHeader := {userToUser := ?} + } + + + template(present) INVITE_Request mw_INVITE_Request_RequestURI( + template(present) SipUrl p_sipUrl := ? + ) modifies mw_INVITE_Dummy := { + requestLine := { + requestUri := p_sipUrl, + sipVersion := c_sipNameVersion + } + } + + template(present) INFO_Request mw_INFO_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_INFO_Request_Base := { + messageBody := p_mb + } + + template(present) INVITE_Request mw_INVITE_Request_expires modifies mw_INVITE_Request_Base := {msgHeader := {expires := ?}} + + template(present) INVITE_Request mw_INVITE_Request_callid( + template CallId p_callId + ) modifies mw_INVITE_Request_Base := { + msgHeader := {callId := p_callId} + } + + template(present) INVITE_Request mw_INVITE_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_INVITE_Request_callid := { + messageBody := p_mb + } + + template(present) INVITE_Request mw_INVITE_Request_noPaccessNetworkInfo( + template CallId p_callId + ) modifies mw_INVITE_Request_callid := { + msgHeader := {pAccessNetworkInfo := omit} + } + + template(present) INVITE_Request mw_INVITE_Request_PaccessNetworkInfo( + template CallId p_callId + ) modifies mw_INVITE_Request_callid := { + msgHeader := {pAccessNetworkInfo := ?} + } + + template(present) INVITE_Request mw_INVITE_MSRP_Session( + template(present) SDP_media_field p_media_MSRP := ? + ) modifies mw_INVITE_Request_Base := { + messageBody := { + sdpMessageBody := { + protocol_version := ?, + origin := ?, + session_name := ?, + information := *, + uri := *, + emails := *, + phone_numbers := *, + connection := *, + bandwidth := *, + times := ?, + timezone_adjustments := *, + key := *, + attributes := *, + media_list := { + { + media_field := p_media_MSRP, + information := *, + connections := *, + bandwidth := *, + key := *, + attributes := { + { + msrp := { + attr_value := + pattern + "path:msrp://*" + } + } + } + } + } + } + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_ISC( + template PAccessNetworkInfo p_access, + template PVisitedNetworkID p_visited + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + pAccessNetworkInfo := p_access, + pVisitedNetworkID := p_visited + } + } + + template(present) UPDATE_Request mw_UPDATE_Request_SDP( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_UPDATE_Request_Base := { + messageBody := p_mb + } + + template(present) NOTIFY_Request mw_NOTIFY_Request_MB( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_NOTIFY_Request_Base := { + messageBody := p_mb + } + + + } //* end group request_receive + + group response_send { + + template(value) Response m_Response_AlertInfo( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Contact p_contact, + template(value) AlertInfo p_alertInfo + ) modifies m_Response_Contact := { + msgHeader := {alertInfo := p_alertInfo} + } + + template(value) Response m_Response_Contact( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := {contact := p_contact} + } + + template(value) Response m_Response_ext( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit + ) modifies m_Response_Base := { + msgHeader := { + route := p_route, // f_route(), + recordRoute := + p_recordroute // f_recordroute() + } + } + + template(value) Response m_Response_mbody( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_mbody_contact ( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb, + template(value) Contact p_contact + ) modifies m_Response_mbody := { + msgHeader := { + contact := p_contact + } + } + + + template(value) Response m_Response_PAsserted_Privacy( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route, + template(value) RecordRoute p_recordroute, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_ext := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + template(present) Response mw_Response_PAsserted_Privacy_Supported( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template PAssertedID p_pAssertedID, + template Privacy p_privacy, + template Supported p_supported + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy, + supported := p_supported + } + } + + template(value) Response m_Response_PAsserted_Privacy_mbody( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Route p_route, + template(value) RecordRoute p_recordroute, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy, + template(value) MessageBody p_mb + ) modifies m_Response_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // f_MessageBodyLength(valueof(p_mb))}, + contentType := m_contentType(c_sdpApplication), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // c_sdpApplication + // }, + pAssertedID := p_pAssertedID, + privacy := p_privacy + }, + messageBody := p_mb + } + + + } //* end group response_send + + + group response_receive { + + template(present) Response mw_Response_Expires( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) DeltaSec p_deltaSec := ? + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {expires := mw_Expires(p_deltaSec)} + } + + template(present) Response mw_Response_PAsserted_Privacy( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template PAssertedID p_pAssertedID, + template Privacy p_privacy + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + template(present) Response mw_Response_Reason( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(value) GenValue p_cause + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {reason := mw_Reason(p_cause)} + } + + template(present) Response mw_Response_RecordRoute( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template RecordRoute p_recordRoute + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {recordRoute := p_recordRoute} + } + + template(present) Response mw_Response_Via( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) Via p_via := ? + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {via := p_via} + } + + template(present) Response mw_Response_Contact( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Contact p_contact + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {contact := p_contact} + } + + template(present) Response mw_Response_AlertInfo( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template AlertInfo p_alertInfo + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {alertInfo := p_alertInfo} + } + + template(present) Response mw_Response_HistoryInfo( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template HistoryInfo p_historyInfo + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {historyInfo := p_historyInfo} + } + + template(present) Response mw_Response_messageBody( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Require p_require, + template MessageBody p_mb + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require}, + messageBody := p_mb + } + + template(present) Response mw_Response_Require( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Require p_require + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require} + } + + template(present) Response mw_Response_Require_ifpresent( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) Require p_require + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {require := p_require ifpresent} + } + + template(present) Response mw_Response_Supported( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq, + template Supported p_supported + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {supported := p_supported} + } + + template(present) Response mw_Response_UserToUser( + template(present) StatusLine p_statusLine := ?, + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_Base := { + statusLine := mw_statusLine(p_statusLine.statusCode, ?), + msgHeader := {userToUser := ?} + } + + + } //* end group response_receive + + + } //* end group modified_templates + + + } //* end group MessageTemplates + + group SDP_Templates { + + group SDP_Messages { + + group base_templates { + + template(value) SDP_Message m_SDP_base := { + protocol_version := 0, //* v=0 + origin := { + user_name := PX_SIP_SDP_USER_NAME, + session_id := PX_SIP_SDP_SESSION_ID, + session_version := "0", + net_type := c_in, + addr_type := c_ip4, + addr := "" + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + session_name := "Voice Session", //* s=Voice Session + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := omit, + bandwidth := omit, + times := { + { + time_field := {"0", "0"}, + time_repeat := omit + } + }, //* t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := omit + } + + template(value) SDP_Message m_SDP( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP_base := { + origin := { + addr := p_userprofile.contactIpaddr + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { + addr := p_userprofile.bearerIpaddr, + ttl := omit, + num_of_addr := omit + } + }, //* c=IN + //* IP4 + //* 172.27.1.219 + media_list := {p_media} + } + + template(value) SDP_Message m_SDP_mediaList( + template(value) SDP_media_desc_list p_media_list, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP_base := { + origin := { + addr := p_userprofile.contactIpaddr + }, + //* o=voicesession 12345 12345 IN IP4 172.27.1.219 + connection := { + net_type := c_in, + addr_type := c_ip4, + conn_addr := { + addr := p_userprofile.bearerIpaddr, + ttl := omit, + num_of_addr := omit + } + }, //* c=IN + //* IP4 + //* 172.27.1.219 + media_list := p_media_list + } + + template(value) SDP_Message m_SDP_media_attr_preconditions( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile, + template(value) SDP_attribute_list p_attribute_list + ) modifies m_SDP := { + media_list := { + { + media_field := { + media := c_audio, + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, + fmts := {"0"} + }, //* m=audio + //* 8500 + //* RTP/AVP + //* 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := p_attribute_list + } + } + } + + template(value) SDP_Message m_SDP_attribute( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile, + template(value) SDP_attribute p_loc_attribute + ) modifies m_SDP := { + attributes := {p_loc_attribute} + } + + template(present) SDP_Message mw_SDP := { + protocol_version := 0, //* v=0 + origin := ?, + session_name := ?, + information := omit, + uri := omit, + emails := omit, + phone_numbers := omit, + connection := ?, + bandwidth := omit, + times := { + { + time_field := {"0", "0"}, + time_repeat := omit + } + }, //* t=0 0 + timezone_adjustments := omit, + key := omit, + attributes := omit, + media_list := ? + } + + + } //* end group base_templates + + group modified_templates { + template(value) SDP_Message m_SDP_bandwidth( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + } + } + + template(value) SDP_Message m_SDP_unacceptable( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + protocol_version := 1, //* v=1 unacceptable version of + //* SDP + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + } + } + + template(value) SDP_Message m_SDP_encrypted( + template(value) SDP_media_desc p_media, + template(value) SipUserProfile p_userprofile + ) modifies m_SDP := { + bandwidth := { + { + PX_SIP_SDP_B_MODIFIER, + PX_SIP_SDP_B_BANDWIDTH + } + }, + key := { + method := "base64", // prompt + key := "blablabla" + } + } + + + } //* end group modified_templates + + + } //* end group SDP_Messages + + group SDP_Fields { + + template(value) SDP_media_desc m_media(template(value) SDP_media_field p_mf) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := omit + } + + template(value) SDP_media_desc m_mediaFieldBandwdthAttributes( + template(value) SDP_media_field p_mf, + template(omit) SDP_bandwidth_list p_bw_l := omit, + template(omit) SDP_attribute_list p_attributes := omit + ) := { + media_field := p_mf, + information := omit, + connections := omit, + bandwidth := p_bw_l, + key := omit, + attributes := p_attributes + } + + template(value) SDP_media_desc m_media_dynPT( + template(value) charstring p_payloadType, + template(value) charstring p_encoding, + template(value) charstring p_clockrate, + template(omit) charstring p_parameters := omit, + template(omit) SDP_key p_sdpKey := omit + ) := { + media_field := { + media := c_audio, //* "audio", + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, //* "RTP/AVP", + fmts := { p_payloadType } + }, //* m=audio 8500 RTP/AVP 8 + information := omit, + connections := omit, + bandwidth := omit, + key := p_sdpKey, + attributes := {{rtpmap := { + payload_type := p_payloadType, + codec := { + encoding := p_encoding, + clockrate := p_clockrate, + parameters := p_parameters + } + } + }} //* a=rtpmap:8 PCMA/8000 + } + + /** + * @desc send template with specific media transport and attribute values + * @param p_mediaAttribute parameter for SDP media transport supported by the IUT + * former PX_SIP_SDP_media_transport + * @param p_mediaAttribute parameter for SDP media attribute supported by the IUT, + * former PX_SIP_SDP_media_attribute_Exp & PX_SIP_SDP_media_transport_Exp + * @param p_mTypeSubtype parameter for SDP media type supported by the IUT, + * former PX_SIP_SDP_MEDIA_VIDEO + */ + template(value) SDP_media_desc m_media_unsupported( + template(value) charstring p_mediaTransport, + template(value) SDP_attribute_rtpmap p_mediaAttribute, + template(value) charstring p_mTypeSubtype := "video" + ) := { + media_field := { + media := p_mTypeSubtype, + ports := { + port_number := 11500, + num_of_ports := omit + }, + transport := p_mediaTransport, + fmts := {"99"} + }, //* m=audio 8500 RTP/AVP 0 + information := omit, + connections := omit, + bandwidth := omit, + key := omit, + attributes := {{rtpmap := p_mediaAttribute}} + } + + template(value) SDP_bandwidth m_bandwidth( + template(value) charstring p_loc_m, + template(value) integer p_loc_b + ) := { + modifier := p_loc_m, + bandwidth := p_loc_b + } + + template(value) SDP_bandwidth m_bandwidth_as_64 := { + modifier := "AS", + bandwidth := 64 + } + + template(present) SDP_bandwidth mw_bandwidth_rs := { + modifier := "RS", + bandwidth := ? + } + + template(present) SDP_bandwidth mw_bandwidth_rr := { + modifier := "RR", + bandwidth := ? + } + + template(value) SDP_media_field m_media_field( + template(value) charstring p_media, + template(value) integer p_portNum, + template(value) charstring p_transport, + template(value) charstring p_fmts + ) := { + media := p_media, + ports := { + port_number := p_portNum, + num_of_ports := omit + }, + transport := p_transport, + fmts := {p_fmts} + } + + template(present) SDP_media_field mw_media_PCMU := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {"0"} + } + + template(present) SDP_media_field mw_media_PCMA := { + media := c_audio, + ports := { + port_number := 8500, + num_of_ports := omit + }, + transport := c_rtpAvp, + fmts := {"8"} + } + + template(present) SDP_media_field mw_media_PCMA_U_DPT := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {*} + } + + template(present) SDP_media_field mw_media_T38 := { + media := c_image, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := pattern "*ptl", //* udptl,tcptl + fmts := {"t38"} + } + + template(present) SDP_media_field mw_media_G722 := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := "RTP/AVP", + fmts := {"9"} + } + + template(present) SDP_media_field mw_media_AMR_DPT := { + media := c_audio, + ports := { + port_number := ?, + num_of_ports := * + }, + transport := c_rtpAvp, + fmts := {*} + } + + template(present) SDP_media_field mw_media_MSRP := { + media := c_msrp, + ports := { + port_number := ?, + num_of_ports := omit + }, + transport := c_msrpTcp, + fmts := {*} + } + + template(value) SDP_attribute m_attribute_sendonly := {sendonly := {}} + template(present) SDP_attribute mw_attribute_sendonly := {sendonly := {}} + // MRO + template(value) SDP_attribute m_attribute_recvonly := {recvonly := {}} + template(present) SDP_attribute mw_attribute_recvonly := {recvonly := {}} + // MRO + template(value) SDP_attribute m_attribute_sendrecv := {sendrecv := {}} + template(present) SDP_attribute mw_attribute_sendrecv := {sendrecv := {}} + // MRO + template(value) SDP_attribute m_attribute_inactive := {inactive := {}} + template(present) SDP_attribute mw_attribute_inactive := {inactive := {}} + // MRO + template(present) SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly, mw_attribute_inactive); + template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly, *); + template(value) SDP_attribute m_attribute_base( + template(value) SDP_attribute_rtpmap p_attr_value + ) := { + rtpmap := p_attr_value + } + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_AMR + */ + template(value) SDP_attribute m_attribute_AMR_DPT(//"0 AMR" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"AMR", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_CLE + */ + template(value) SDP_attribute m_attribute_CLEARMODE_DPT(//"0 CLEARMODE/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"CLEARMODE", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_G222 + */ + template(value) SDP_attribute m_attribute_G722(//"9 G722/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"9", {"G722", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMU + */ + template(value) SDP_attribute m_attribute_PCMU(//"0 PCMU/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMU + */ + template(value) SDP_attribute m_attribute_PCMU_DPT(//"0 PCMU/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMU", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_ENCODING_ATTRIBUTE_PCMA + */ + template(value) SDP_attribute m_attribute_PCMA(//"8 PCMA/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"8", {"PCMA", "8000", omit}} + ) := m_attribute_base(p_attr_value); + /** + * @desc send template for a specific media attribute + * @param attribte value, former PX_SIP_SDP_DYN & " " & PX_SIP_SDP_MEDIA_TRANSPORT_PCMA + */ + template(value) SDP_attribute m_attribute_PCMA_DPT(//"0 PCMA/8000" + template(value) SDP_attribute_rtpmap p_attr_value := {"0", {"PCMA", "8000", omit}} + ) := m_attribute_base(p_attr_value); + + template(present) SDP_attribute mw_attribute_T38 := { + unknown := { + name := ?, + attr_value := pattern "*t38*" + } + } + + template(value) SDP_attribute m_attribute_curr( + template(value) charstring p_preconditionType, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + curr := { + preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction + } + } + + template(present) SDP_attribute mw_attribute_curr := {curr := ?} + + template(value) SDP_attribute m_attribute_des( + template(value) charstring p_preconditionType, + template(value) charstring p_strength, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + des := { + preconditionType := p_preconditionType, + strength := p_strength, + statusType := p_statusType, + direction := p_direction + } + } + + template(present) SDP_attribute mw_attribute_des := {des := ?} + + template(value) SDP_attribute m_attribute_conf( + template(value) charstring p_preconditionType, + template(value) charstring p_statusType, + template(value) charstring p_direction + ) := { + conf := { + preconditionType := p_preconditionType, + statusType := p_statusType, + direction := p_direction + } + } + + + } //* end group SDP_Fields + + + } //* end group SDP_Templates + + group SimpleMsgSummary_Templates { + + template(value) SimpleMsgSummary m_SMS( + template(value) Msg_summary_line_list p_summaryLineList, + template(value) charstring p_uri + ) := { + msg_status_line := m_msgStatusLine_yes, + msg_account := m_msgAccount(p_uri), + msg_summary_line_list := p_summaryLineList, + opt_msg_headers := omit + } + + template(present) SimpleMsgSummary mw_SMS := { + msg_status_line := ?, + msg_account := *, + msg_summary_line_list := *, + opt_msg_headers := * + } + + template(present) SimpleMsgSummary mw_SMS_yes modifies mw_SMS := { + msg_status_line := mw_msgStatusLine_yes + } + + template(present) SimpleMsgSummary mw_SMS_yesUri modifies mw_SMS_yes := { + msg_account := mw_msgAccount + } + + template(present) SimpleMsgSummary mw_SMS_yesVoice modifies mw_SMS_yes := { + msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} + } + + template(present) SimpleMsgSummary mw_SMS_yesUriVoice modifies mw_SMS_yesUri := { + msg_summary_line_list := {mw_msgSummaryLine(c_voiceMessage)} + } + + template(value) Msg_status_line m_msgStatusLine_yes := { + msg_type := c_messageWaiting, + msg_status := "yes" + } + + template(present) Msg_status_line mw_msgStatusLine_yes := { + msg_type := c_messageWaiting, + msg_status := "yes" + } + + template(value) Msg_account m_msgAccount( + template(value) charstring p_uri + ) := { + msg_type_account := c_messageAccount, + account_URI := + p_uri // m_SipUrl_NumberHostParam(PX_IMS_SUT_UE2_PUBLIC_USER,PX_IMS_SUT_UE2_HOME_DOMAIN,omit) + } + + template(present) Msg_account mw_msgAccount := { + msg_type_account := c_messageAccount, + account_URI := ? + } + + template(value) Msg_summary_line m_msgSummaryLine( + template(value) charstring p_msgContexClass, + template(value) charstring p_msgs, + template(value) charstring p_urgent_msgs + ) := { + msg_context_class := p_msgContexClass, + msgs := p_msgs, + urgent_msgs := p_urgent_msgs + } + + template(present) Msg_summary_line mw_msgSummaryLine( + template(present) charstring p_msgContexClass := ? + ) := { + msg_context_class := p_msgContexClass, + msgs := ?, + urgent_msgs := * + } + + + } // end group Templates_SMS + + group MessageBodies { + + template(value) MessageBody m_MBody_SDP( + template(value) SDP_Message p_SDP + ) := { + sdpMessageBody := p_SDP + } + + template(value) MessageBody m_MBody_XML( + template(value) XmlBody p_xmlBody + ) := { + xmlBody := p_xmlBody + } + + template(value) MessageBody m_mBody_SMS( + template(value) SimpleMsgSummary p_SMS + ) := { + simpleMsgSummary := p_SMS + } + + template(value) MessageBody m_MBody_longPlainText := {textplain := c_longMessageContent_1300Bytes} + + template(value) MessageBody m_mBody_plainText( + template(value) charstring p_plaitext + ) := { + textplain := p_plaitext + } + + template(value) MessageBody m_MBody_sipfrag( + template(value) charstring p_sipfrag + ) := { + sipfrag := p_sipfrag + } + + template(value) MessageBody m_MBody_MIMESdpXml( + template(value) SDP_Message p_sdp, + template(value) XmlBody p_xmlBody + ) := { + mimeMessageBody := { + boundary := "--" & PX_SIP_MIME_BOUNDARY, + mimeEncapsulatedList := { + { + content_type := c_sdpApplication, + content_disposition := omit, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + }, + { + content_type := c_ims3gppCwApplication, + content_disposition := omit, + mime_encapsulated_part := {xmlBody := p_xmlBody} + } + } + } + } + + template(value) MessageBody m_MBody_MIMESdpXml_Emergency( + template(value) SDP_Message p_sdp, + template(value) XmlBody p_xmlBody + ) := { + mimeMessageBody := { + boundary := "--" & PX_SIP_MIME_BOUNDARY, + mimeEncapsulatedList := { + { + content_type := c_sdpApplication, + content_disposition := omit, + content_id := omit, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + }, + { + content_type := c_imsEmergencyApplication, + content_disposition := omit, + content_id := omit, + mime_encapsulated_part := {xmlBody := p_xmlBody} + } + } + } + } + + template(value) MessageBody m_MBody_MIMESdpEncrypted( + template(value) SDP_Message p_sdp + ) := { + mimeMessageBody := { + boundary := "--" & PX_SIP_MIME_BOUNDARY, + mimeEncapsulatedList := { + { + content_type := "application/sdp", + content_disposition := "attachment;handling=required;filename=smime.p7", + mime_encapsulated_part := {sdpMessageBody := p_sdp} + } + } + } + } + + template(present) MessageBody mw_MBody_SDP( + template(present) SDP_Message p_SDP := ? + ) := { + sdpMessageBody := p_SDP + } + + template(present) MessageBody mw_MBody_XML( + template(present) XmlBody p_xmlBody := ? + ) := { + xmlBody := p_xmlBody + } + + template(present) MessageBody mw_mBody_SMS( + template(present) SimpleMsgSummary p_SMS := ? + ) := { + simpleMsgSummary := p_SMS + } + + template(present) MessageBody mw_MBody_MIMESdpXml( + template(present) SDP_Message p_sdp := ?, + template(present) XmlBody p_xmlBody := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + { + content_type := ?, + content_disposition := *, + mime_encapsulated_part := {sdpMessageBody := p_sdp} + }, + { + content_type := ?, + content_disposition := *, + mime_encapsulated_part := {xmlBody := p_xmlBody} + } + } + } + } + + template(present) MessageBody mw_MBody_MIME_Ims3gpp( + template charstring p_disposition, + template(present) Ims_3gpp p_ims3gpp := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + *, + { + content_type := c_ims3gppApplication, + content_disposition := p_disposition, + mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} + }, + * + } + } + } + + template(present) MessageBody mw_MBody_MIME_Ims3gppCW( + template charstring p_disposition, + template(present) Ims_3gpp p_ims3gpp := ? + ) := { + mimeMessageBody := { + boundary := ?, + mimeEncapsulatedList := { + *, + { + content_type := c_ims3gppCwApplication, + content_disposition := p_disposition, + mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} + }, + * + } + } + } + + } + /* + * + * @desc group TemplatePreparationFunctions contain functions which are used for templates + */ + group TemplatePreparationFunctions { + + group MessageBody_Calculation { + + /** + * @desc Calculation of Message Body length + * @param p_mb_par contain message body part + * @return message body length + */ + function f_MessageBodyLength( + template(value) MessageBody p_mb_par + ) return integer { + + var integer v_result := 0; + log(">>> f_MessageBodyLength:", p_mb_par); + if (PX_MB_LENGTH_FROM_ENCVAL) { + // by default it is set to true + // in case the codec encodes the variant selector, this + // needs to be changed to ischosen... + v_result := lengthof(encvalue(p_mb_par)) / 8; // length + // in + // bytes, + // let get + // length + // of + // encoded + // value + } + else { + + // assume SDP_Message ONLY in the message body + if (ischosen(p_mb_par.sdpMessageBody)) { + v_result := f_SDPlength(valueof(p_mb_par.sdpMessageBody)); + } + + // assume XML_Body ONLY in the message body + if (ischosen(p_mb_par.xmlBody)) { + v_result := f_XMLBody_Length(valueof(p_mb_par.xmlBody), PX_USE_FX_FOR_XML_LENGTH); + } + + // assume simpleMsgSummary_Body ONLY in the message body + if (ischosen(p_mb_par.simpleMsgSummary)) { + v_result := f_simpleMsgSummaryBody_Length(valueof(p_mb_par.simpleMsgSummary)); + } + + // assume MIME_Message in the message body + if (ischosen(p_mb_par.mimeMessageBody)) { + v_result := f_MIMElength(valueof(p_mb_par.mimeMessageBody)); + } + + // assume sipfrag in the message body + if (ischosen(p_mb_par.sipfrag)) { + v_result := f_TextPlainLength(p_mb_par); // same + // function + // due to + // same + // type + // with + // textplain + } + + // assume textplain in the message body + if (ischosen(p_mb_par.textplain)) { + v_result := f_TextPlainLength(p_mb_par); + } + } + + return v_result; + } + + + group SDP_Len_calculation { + /** + * @desc Calculation of SDP length + * @param p_mb contain sdp message + * @return sdp_lenght + */ + function f_SDPlength( + SDP_Message p_mb + ) return integer { + var integer i, j, k, v_len_con0, v_len_con1, v_len_con2, v_len_attr; + var integer v_result := 2; + //* due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2 + c_CRlen + lengthof(int2str(p_mb.protocol_version)); //* "v=" + v_auxstring := p_mb.origin.user_name & " " & p_mb.origin.session_id & " " & p_mb.origin.session_version & " " & p_mb.origin.net_type & " " & p_mb.origin.addr_type & " " & p_mb.origin.addr; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "o=" + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.session_name); //* "s=" + if (isvalue(p_mb.information)) { + v_auxstring := valueof(p_mb.information); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); + } //* "i= " + if (isvalue(p_mb.uri)) { + v_auxstring := valueof(p_mb.uri); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); + } //* "u=" + if (isvalue(p_mb.emails)) { + for (i := 0; i < lengthof(p_mb.emails); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.emails[i].addr_or_phone); //* "e=" + if (isvalue(p_mb.emails[i].disp_name)) { + v_auxstring := valueof(p_mb.emails[i].disp_name); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + + if (isvalue(p_mb.phone_numbers)) { + for (i := 0; i < lengthof(p_mb.phone_numbers); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.phone_numbers[i].addr_or_phone); //* "p= + //* " + if (isvalue(p_mb.phone_numbers[i].disp_name)) { + v_auxstring := valueof(p_mb.phone_numbers[i].disp_name); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + + if (isvalue(p_mb.connection)) { + v_len_con0 := f_SDPlength_connection(valueof(p_mb.connection)); + v_result := v_result + v_len_con0; + } //* "c=" + if (isvalue(p_mb.bandwidth)) { + for (i := 0; i < lengthof(p_mb.bandwidth); i := i + 1) { + //* "b= " + v_auxstring := p_mb.bandwidth[i].modifier & " "; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring) + lengthof(int2str(p_mb.bandwidth[i].bandwidth)); + } + } + + for (i := 0; i < lengthof(p_mb.times); i := i + 1) { + v_auxstring := p_mb.times[i].time_field.start_time & " " & p_mb.times[i].time_field.stop_time; + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "t=" + if (isvalue(p_mb.times[i].time_repeat)) { + for (j := 0; j < lengthof(p_mb.times[i].time_repeat); j := j + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(int2str(p_mb.times[i].time_repeat[j].repeat_interval.time)); //* "r=" + if (isvalue(p_mb.times[i].time_repeat[j].repeat_interval.unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].repeat_interval.unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + + v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].active.time)); + if (isvalue(p_mb.times[i].time_repeat[j].active.unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].active.unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + + for (k := 0; k < lengthof(p_mb.times[i].time_repeat[j].offsets); k := k + 1) { + v_result := v_result + 1 + lengthof(int2str(p_mb.times[i].time_repeat[j].offsets[k].time)); + if (isvalue(p_mb.times[i].time_repeat[j].offsets[k].unit)) { + v_auxstring := valueof(p_mb.times[i].time_repeat[j].offsets[k].unit); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + } + } + + if (isvalue(p_mb.timezone_adjustments)) { + log("*** " & __SCOPE__ & ": INFO: timezone adjustments have not been considered in SDP length calculation yet ***"); + } //* "z=" + if (isvalue(p_mb.key)) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.key.method); //* "k= + //* " + if (isvalue(p_mb.key.key)) { + v_auxstring := valueof(p_mb.key.key); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + if (isvalue(p_mb.attributes)) { + for (i := 0; i < lengthof(p_mb.attributes); i := i + 1) { + + + //* "a= " + v_len_con1 := f_SDPlength_attribute(p_mb.attributes[i]); + v_result := v_result + v_len_con1; + } + } //* "a=" + if (isvalue(p_mb.media_list)) { + for (i := 0; i < lengthof(p_mb.media_list); i := i + 1) { + //* "m= " + //* for each media_field + //* log("p_mb.media_list[i ] ",p_mb.media_list[i + //* ] ); + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].media_field.media) + 1 + lengthof(int2str(p_mb.media_list[i].media_field.ports.port_number)); + + + if (isvalue(p_mb.media_list[i].media_field.ports.num_of_ports)) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_mb.media_list[i].media_field.ports.num_of_ports))); + } + v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.transport); + for (j := 0; j < lengthof(p_mb.media_list[i].media_field.fmts); j := j + 1) { + v_result := v_result + 1 + lengthof(p_mb.media_list[i].media_field.fmts[j]); + } + + if (isvalue(p_mb.media_list[i].information)) { + v_auxstring := valueof(p_mb.media_list[i].information); + v_result := v_result + 2 + c_CRlen + lengthof(v_auxstring); //* "i= " + } + if (isvalue(p_mb.media_list[i].connections)) { + for (j := 0; j < lengthof(p_mb.media_list[i].connections); j := j + 1) { + v_len_con2 := f_SDPlength_connection(p_mb.media_list[i].connections[j]); + v_result := v_result + v_len_con2; + } //* end for + } + if (isvalue(p_mb.media_list[i].bandwidth)) { + //* "b= " + for (j := 0; j < lengthof(p_mb.media_list[i].bandwidth); j := j + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.media_list[i].bandwidth[j].modifier) + 1 + lengthof(int2str(p_mb.media_list[i].bandwidth[j].bandwidth)); + } //* end for + } + if (isvalue(p_mb.media_list[i].key)) { + //* "k= " + v_result := v_result + 1 + lengthof(p_mb.media_list[i].key.method); + if (isvalue(p_mb.media_list[i].key.key)) { + v_auxstring := valueof(p_mb.media_list[i].key.key); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + if (isvalue(p_mb.media_list[i].attributes)) { + for (j := 0; j < lengthof(p_mb.media_list[i].attributes); j := j + 1) { + + //* "a= " + v_len_attr := f_SDPlength_attribute(p_mb.media_list[i].attributes[j]); + v_result := v_result + v_len_attr; + } //* end for j + } + } //* end for i + } //* end if media_list + return v_result; + } + //* end function f_SDPlength + function f_SDPlength_connection( + SDP_connection p_element + ) return integer { + //* "c=" + var integer v_result := 0; + v_result := v_result + 2 + c_CRlen + lengthof(p_element.net_type & " " & p_element.addr_type & " " & p_element.conn_addr.addr); + if (isvalue(p_element.conn_addr.ttl) and p_element.conn_addr.ttl > 0) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.ttl))); + } + if (isvalue(p_element.conn_addr.num_of_addr) and p_element.conn_addr.num_of_addr > 0) { + v_result := v_result + 1 + lengthof(int2str(valueof(p_element.conn_addr.num_of_addr))); + } + return v_result; + } //* f_SDPlength_connection + + function f_SDPlength_attribute( + SDP_attribute p_element + ) return integer { + //* "a=" + var integer v_result := 0; + if (ischosen(p_element.cat)) { + v_result := v_result + 2 + c_CRlen + lengthof("cat:" & p_element.cat.attr_value); + } + if (ischosen(p_element.keywds)) { + v_result := v_result + 2 + c_CRlen + lengthof("keywds:" & p_element.keywds.attr_value); + } + if (ischosen(p_element.tool)) { + v_result := v_result + 2 + c_CRlen + lengthof("tool:" & p_element.tool.attr_value); + } + if (ischosen(p_element.ptime)) { + v_result := v_result + 2 + c_CRlen + lengthof("ptime:" & p_element.ptime.attr_value); + } + if (ischosen(p_element.recvonly)) { + v_result := v_result + c_CRlen + lengthof("recvonly"); + } + if (ischosen(p_element.sendrecv)) { + v_result := v_result + c_CRlen + lengthof("sendrecv"); + } + if (ischosen(p_element.sendonly)) { + v_result := v_result + c_CRlen + lengthof("sendonly"); + } + if (ischosen(p_element.inactive)) { + v_result := v_result + c_CRlen + lengthof("inactive"); + } + if (ischosen(p_element.orient)) { + v_result := v_result + 2 + c_CRlen + lengthof("orient:" & p_element.orient.attr_value); + } + if (ischosen(p_element.sdp_type)) { + v_result := v_result + 2 + c_CRlen + lengthof("type:" & p_element.sdp_type.attr_value); + } + if (ischosen(p_element.charset)) { + v_result := v_result + 2 + c_CRlen + lengthof("charset" & p_element.charset.attr_value); + } + if (ischosen(p_element.sdplang)) { + v_result := v_result + 2 + c_CRlen + lengthof("sdplang:" & p_element.sdplang.attr_value); + } + if (ischosen(p_element.lang)) { + v_result := v_result + 2 + c_CRlen + lengthof("lang:" & p_element.lang.attr_value); + } + if (ischosen(p_element.framerate)) { + v_result := v_result + 2 + c_CRlen + lengthof("framerate:" & p_element.framerate.attr_value); + } + if (ischosen(p_element.quality)) { + v_result := v_result + 2 + c_CRlen + lengthof("quality:" & p_element.quality.attr_value); + } + if (ischosen(p_element.fmtp)) { + v_result := v_result + 2 + c_CRlen + lengthof("fmtp:" & p_element.fmtp.format & " " & f_fmtpparams_to_charstring(p_element.fmtp.params)); + } + if (ischosen(p_element.curr)) { + v_result := v_result + 2 + c_CRlen + lengthof("curr:" & p_element.curr.preconditionType & " " & p_element.curr.statusType & " " & p_element.curr.direction); + } + if (ischosen(p_element.des)) { + v_result := v_result + 2 + c_CRlen + lengthof("des:" & p_element.des.preconditionType & " " & p_element.des.strength & " " & p_element.des.statusType & " " & p_element.des.direction); + } + if (ischosen(p_element.conf)) { + v_result := v_result + 2 + c_CRlen + lengthof("conf:" & p_element.conf.preconditionType & " " & p_element.conf.statusType & " " & p_element.conf.direction); + } + if (ischosen(p_element.rtpmap)) { + v_result := v_result + 2 + c_CRlen + lengthof("rtpmap:" & f_rtpmap_to_charstring(p_element.rtpmap)); + } + if (ischosen(p_element.rtcp)) { + v_result := v_result + 2 + c_CRlen + lengthof("rtcp:" & f_rtcp_to_charstring(p_element.rtcp)); + } + if (ischosen(p_element.unknown)) { + v_result := v_result + 2 + c_CRlen + lengthof(p_element.unknown.name); + if (isvalue(p_element.unknown.attr_value)) { + v_result := v_result + lengthof(":" & p_element.unknown.attr_value); + } + } + //* log("axr: length attribute=", v_result); + return v_result; + } //* f_SDPlength_attribute + + function f_fmtpparams_to_charstring( + SDP_attribute_fmtp_format_specific_params p_params + ) return charstring { + var charstring v_result := ""; + if(ischosen(p_params.unstructured)){ + v_result := p_params.unstructured; + } + else + { + for(var integer v_idx := 0; v_idx < lengthof(p_params.paramList); v_idx := v_idx + 1) { + if(v_idx != 0) + { + v_result := v_result & "; " + } + v_result := v_result & p_params.paramList[v_idx].id; + if(ispresent(p_params.paramList[v_idx].paramValue)){ + if(ischosen(p_params.paramList[v_idx].paramValue.tokenOrHost)) + { + v_result := v_result & "=" & p_params.paramList[v_idx].paramValue.tokenOrHost; + } + else + { + v_result := v_result & "=""" & p_params.paramList[v_idx].paramValue.quotedString & """"; + } + } + } + } + return v_result; + } + + function f_rtpmap_to_charstring( + SDP_attribute_rtpmap p_rtpmap + ) return charstring { + var charstring v_result := ""; + v_result := p_rtpmap.payload_type & " " & p_rtpmap.codec.encoding & "/" & p_rtpmap.codec.clockrate; + if(ispresent(p_rtpmap.codec.parameters)) + { + v_result := v_result & "/" & p_rtpmap.codec.parameters; + } + return v_result; + } + + function f_rtcp_to_charstring( + SDP_attribute_rtcp p_rtcp + ) return charstring { + var charstring v_result := int2str(p_rtcp.portnumber); + if(ispresent(p_rtcp.connection)) + { + v_result := v_result & " " & p_rtcp.connection.net_type & " " & p_rtcp.connection.addr_type & " " & p_rtcp.connection.conn_addr.addr; + if(ispresent(p_rtcp.connection.conn_addr.ttl)) + { + v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.ttl); + if(ispresent(p_rtcp.connection.conn_addr.num_of_addr)) + { + v_result := v_result & "/" & int2str(p_rtcp.connection.conn_addr.num_of_addr); + } + } + } + return v_result; + } + + } //* group SDPlen_calculation + + group XML_Len_calculation { + + /** + * @desc Declaration of external functions to calculate length of message bodies switching of internal or external functions are made by boolean module parameter/PIXIT USE_FX_FOR_XML_LENGTH declared at top of this module + */ + external function fx_calculateXMLBodyLen( + XmlBody p_mb + ) return integer; + + /** + * @desc Calculation of XML body length + * @param p_mb contain XML body + * @return xml_length + */ + function f_XMLBody_Length( + XmlBody p_mb, + boolean p_ext_func + ) return integer { + var integer v_result := 0; + + if (p_ext_func) { + v_result := fx_calculateXMLBodyLen(p_mb); + } + else { + // assume ConferenceInfo ONLY in the XML message + // body + if (ischosen(p_mb.conference)) { + v_result := f_XMLBody_ConferenceInfo_Length(p_mb.conference); + } + + // assume CUG ONLY in the XML message body + if (ischosen(p_mb.cug)) { + v_result := f_XMLBody_Cug_Length(p_mb.cug); + } + + // assume MCID ONLY in the XML message body + if (ischosen(p_mb.mcid)) { + v_result := f_XMLBody_Mcid_Length(p_mb.mcid); + } + + // assume CW ONLY in the XML message body + if (ischosen(p_mb.cw)) { + v_result := f_XMLBody_Cw_Length(p_mb.cw); + } + + // assume CDIV ONLY in the XML message body + if (ischosen(p_mb.cdivn)) { + v_result := f_XMLBody_Cdivn_Length(p_mb.cdivn); + } + + // assume PSTNTransit ONLY in the XML message body + if (ischosen(p_mb.pstnTransit)) { + v_result := f_XMLBody_PSTNTransit_Length(p_mb.pstnTransit); + } + + // assume Simservs ONLY in the XML message body + if (ischosen(p_mb.simservs)) { + v_result := f_XMLBody_Simservs_Length(p_mb.simservs); + } + + // assume ResourceLists ONLY in the XML message body + if (ischosen(p_mb.resourceLists)) { + v_result := f_XMLBody_ResourceList_Length(p_mb.resourceLists); + } + + // assume Ims3GPP ONLY in the XML message body + if (ischosen(p_mb.ims3gpp)) { + v_result := f_XMLBody_Ims3GPP_Length(p_mb.ims3gpp); + } + /** + * Add aditional checks regarding to new variants, also implement appropriate function for calculation + */ + } + return v_result; + } //* f_XMLBodyLength + + group XMLBodies_calculation { + + /** + * @desc Calculation of XML ConferenceInfo element length + * @param p_mb contain XML ConfInfo body + * @return xml_length + */ + function f_XMLBody_ConferenceInfo_Length( + template(value) Conference_type p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_ConferenceInfo_Length + + /** + * @desc Calculation of XML CUG element length + * @param p_mb contain XML CUG body + * @return xml_length + */ + function f_XMLBody_Cug_Length( + template(value) Cug p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Cug_Length + + /** + * @desc Calculation of XML MCID element length + * @param p_mb contain XML MCID body + * @return xml_length + */ + function f_XMLBody_Mcid_Length( + template(value) Mcid p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Mcid_Length + + /** + * @desc Calculation of XML CW element length + * @param p_mb contain XML CW body + * @return xml_length + */ + function f_XMLBody_Cw_Length( + template(value) Ims_cw p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Cw_Length + + /** + * @desc Calculation of XML CDIVN element length + * @param p_mb contain XML CDIVN body + * @return xml_length + */ + function f_XMLBody_Cdivn_Length( + template(value) Comm_div_info_type p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + + return v_result; + } //* f_XMLBody_Cdivn_Length + + /** + * @desc Calculation of XML PSTNTransit element length + * @param p_mb contain XML PSTNTransit body + * @return xml_length + */ + function f_XMLBody_PSTNTransit_Length( + template(value) PSTN_transit p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_PSTNTransit_Length + + /** + * @desc Calculation of XML Simservs element length + * @param p_mb contain XML Simservs body + * @return xml_length + */ + function f_XMLBody_Simservs_Length( + template(value) Simservs p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Simservs_Length + + /** + * @desc Calculation of XML ResourceList length + * @param p_mb contain XML ResourceList body + * @return xml_length + */ + function f_XMLBody_ResourceList_Length( + template(value) Resource_lists p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_ResourceList_Length + + /** + * @desc Calculation of XML Ims3GPP length + * @param p_mb contain XML Ims3GPP body + * @return xml_length + */ + function f_XMLBody_Ims3GPP_Length( + template(value) TIMS3GPP p_mb + ) return integer { + var integer v_result := lengthof(encvalue(p_mb)) / 8; + return v_result; + } //* f_XMLBody_Ims3GPP_Length + + + } //* XMLBodies_calculation + + + } //* group XMLlen_calculation + + group simpleMsgSummaryBody_Length { + + function f_simpleMsgSummaryBody_Length( + SimpleMsgSummary p_mb + ) return integer { + var integer i; + var integer v_result := 2; + + + //* due to empty line beginning of message body + var charstring v_auxstring; + + v_result := 2 + lengthof(p_mb.msg_status_line.msg_type) + 2 + lengthof(p_mb.msg_status_line.msg_status) + c_CRlen; //* "Message-Waiting: + //* yes" + if (isvalue(p_mb.msg_account)) + //* "Message-Account" + { + v_result := v_result + 2 + lengthof(p_mb.msg_account.msg_type_account) + 2 + lengthof(p_mb.msg_account.account_URI) + c_CRlen; + } + if (isvalue(p_mb.msg_summary_line_list)) { + for (i := 0; i < lengthof(p_mb.msg_summary_line_list); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.msg_summary_line_list[i].msg_context_class) + 2 + lengthof(p_mb.msg_summary_line_list[i].msgs); + if (isvalue(p_mb.msg_summary_line_list[i].urgent_msgs)) { + v_auxstring := valueof(p_mb.msg_summary_line_list[i].urgent_msgs); + v_result := v_result + 1 + lengthof(v_auxstring); + } + } + } + if (isvalue(p_mb.opt_msg_headers)) { + for (i := 0; i < lengthof(p_mb.opt_msg_headers); i := i + 1) { + v_result := v_result + 2 + c_CRlen + lengthof(p_mb.opt_msg_headers[i]); + } + } + return v_result; + } + } + + group MIME_Len_calculation { + /** + * @desc Calculation of MIME length + * @param p_mb contain MIME message + * @return xml_length + */ + function f_MIMElength( + MIME_Message p_mb + ) return integer { + var integer i; + var integer v_result := 2; + // 0d0a + v_result := v_result + lengthof(p_mb.boundary) + 2 /*0d0a*/; + + for (i := 0; i < lengthof(p_mb.mimeEncapsulatedList); i := i + 1) { + + v_result := v_result + lengthof("Content-Type: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_type) + 2 /*0d0a*/; + + if (isvalue(p_mb.mimeEncapsulatedList[i].content_disposition)) { + v_result := v_result + lengthof("Content-Disposition: ") + lengthof(p_mb.mimeEncapsulatedList[i].content_disposition) + 2 /*0d0a*/; + } + + // v_result := v_result +2/*0d0a*/; ??? to check + // assume SDP_Message ONLY in the message body + if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody)) { + v_result := v_result + f_SDPlength(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.sdpMessageBody); + } + + // assume XML_Body ONLY in the message body + if (ischosen(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody)) { + v_result := v_result + f_XMLBody_Length(p_mb.mimeEncapsulatedList[i].mime_encapsulated_part.xmlBody, PX_USE_FX_FOR_XML_LENGTH); + } + // //assume XML_Message ONLY in the message body + // if (ischosen(p_mb.mimeEncapsulatedList[i ] + // .mime_encapsulated_part.xmlMessage)) + // { + // v_result := v_result + + // f_XMLlength(p_mb.mimeEncapsulatedList[i ] + // .mime_encapsulated_part.xmlMessage, + // USE_FX_FOR_XML_LENGTH ); + // }; + // v_result := v_result +2/*0d0a*/; ??? to check + } + + // v_result := v_result +2/*0d0a*/; ??? to check + return v_result; + } //* f_MIMElength + + + } //* group MIMElen_calculation + + group TextPlain_Len_calculation { + /** + * @desc Calculation of messagebody-textplain type length + * @param p_mb contain textplain message + * @return lenght + */ + function f_TextPlainLength( + template(value) MessageBody p_mb + ) return integer { + var integer v_result := 0; + + v_result := v_result + lengthof(p_mb.textplain); + + return v_result; + } //* end function f_TextPlainLength + + + } //* end group TextPlainLen_calculation + + + } //* group MessageBody_Calculation + + + group GiveHeaders { + /** + * @desc Return component variable of recordRoute header if vc_boo_recordRoute is true + * @return component variable of recordRoute header + */ + function f_recordroute( + ) runs on SipComponent + return template(omit) RecordRoute { + var template(omit) RecordRoute v_recordRoute := omit; + if (vc_boo_recordRoute) { + return vc_recordRoute; + } + else { + return (v_recordRoute); + } + } + + /** + * @desc Return component variable of Route header if vc_boo_route is true + * @return component variable of recordRoute header + */ + function f_route( + ) runs on SipComponent + return template(omit) Route { + var template(omit) Route v_route := omit; + if ((vc_boo_route) and isbound(vc_route)) { + return vc_route; + } + else { + return (v_route); + } + } + + + } //* end group GiveHeaders + + group others { + + /* + * + * @desc function combines two comma parameter lists + * @param p_list1 first list + * @param p_list2 second list + * @return comma parameter list that contains parameters from both input lists + * @verdict + */ + function f_merge_CommaParam_List( + template(value) CommaParam_List p_list1, + template(value) CommaParam_List p_list2 + ) return template(value) CommaParam_List { + var template(value) CommaParam_List p_result; + var integer i, v_limit1 := lengthof(p_list1); + for (i := 0; i < v_limit1; i := i + 1) { + p_result[i] := p_list1[i]; + } + for (i := 0; i < lengthof(p_list2); i := i + 1) { + p_result[i + v_limit1] := p_list2[i]; + } + return p_result; + } + + + } //* end group others + + + } //* group TemplatePreparationFunctions +} //* end module LibSip_Templates diff --git a/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn new file mode 100644 index 0000000..af46476 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/LibSip_XMLTypes.ttcn @@ -0,0 +1,113 @@ +/** + * @author STF 346, STF366, STF368, STF369, STF471 + * @version $Id$ + * @desc + * This module provides the XML type system for SIP tests. The types have been generated automatically, followed by manual modifications: - bitType substituted by OneBitType - twobitType substituted by TwoBitType - addition of pattern for: OneBitType, TwoBitType, ThreeBitType, FourBitType, FourBitType, SixBitType - application of enumerated for: State_type, Endpoint_status_type, Joining_type, Disconnection_type, Media_status_type, Originating_identity_presentation_restriction, Terminating_identity_presentation_restriction - addition of length value: NetworkIdentityType, SixteenbitType - addition of value restriction: CugIndexType - substitution of "content" by "choice": Call_type, Mcid - additional type renaming (upper first letter): AbsService, Anonymous, Busy, Communication_diverted, + * Conference_description_type, Conference_info, Conference_media_type, Conference_medium_type, Conference_state_type, Conference_type, Cug, CugRequestType, Empty_element_type, Endpoint_type, Execution_type, Host_type, Keywords_type, Media, Media_type, No_answer, Not_reachable, Not_registered, Originating_identity_presentation, Presence_status, Presence_status_activity_type, RequestType, ResponseType, Roaming, Rule_deactivated, Sidebars_by_val_type, Simservs, SimservType, Terminating_identity_presentation, Uri_type, Uris_type, User_roles_type, User_languages_type, User_type, Users_type - new group CDIV added by STF369 - new group ACR_CD added by STF38 - new types RegInfo and Pidf_Lo added by STF160. + * This module is part of LibSipV3. + */ +module LibSip_XMLTypes { + import from http_www_w3_org_XML_1998_namespace language "XSD" all + with { + extension "File:../xsd/xml.xsd"; + } + + import from urn_ietf_params_xml_ns_common_policy language "XSD" all + with { + extension "File:../xsd/common-policy.xsd"; + } + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_oma_xml_xdm_common_policy language "XSD" all + with { + extension "File:../xsd/xdm_commonPolicy-v1_0.xsd"; + } + // RFC 3680 Registration Info + import from urn_ietf_params_xml_ns_reginfo language "XSD" all + with { + extension "File:../xsd/regInfo.xsd"; + } + // RFC 3863 Presence Information Data Format + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + // RFC 4119 Presence Information Data Format, Location Object extension + import from urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy language "XSD" all + with { + extension "File:../xsd/geopriv10basic.xsd"; + } + + // RFC 4119 Presence Information Data Format, Location Object extension + import from urn_ietf_params_xml_ns_pidf_geopriv10 language "XSD" all + with { + extension "File:../xsd/pidf_lo.xsd"; + } + + group XmlTypes { + type union XmlBody { + Mcid mcid, + // if there is XML Mcid + Comm_div_info_type cdivn, + // if there is XML cdivn + Simservs simservs, + // if there is XML simservs (Oip/r, Tip/r, Call Diversion, ICB, OCB ...) + Conference_type conference, + // if there is XML conf + Ims_cw cw, + // if there is XML cw (defined in X_3gpp_ns_cw_1_0.ttcn3view) + Cug cug, + // if there is XML cug (defined in org_etsi_uri__ngn_params_xml_simservs_xcap.ttcn3view) + TIMS3GPP ims3gpp, + // if there is XML IMS 3GPP + PSTN_transit pstnTransit, + // if there is XML PSTN_transit + Resource_lists resourceLists, + // if there is XML Resource List data + Reginfo regInfo, + // if it is a NG 112 event + Presence presence, // if it is a Presence Information Data Format Location Object + // if it is a registration event + Geopriv geopriv // if it is a Presence Information Data Format Location Object + } + } +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn new file mode 100644 index 0000000..7b45b70 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn @@ -0,0 +1,389 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - CDIVN.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/comm-div-info" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_comm_div_info { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +/* This import brings in the XML language definition */ + + +/* Communication Diversion Information. This is the top-level XML element */ + + +type Comm_div_info_type Comm_div_info +with { + variant "name as 'comm-div-info'"; + variant "element"; +}; + + +/* Communication Diversion Information Type. This is the top-level XML element */ + + +type record Comm_div_info_type +{ + XSD.AnyURI entity, + Comm_div_subs_info_type comm_div_subs_info optional, + Comm_div_ntfy_info_type comm_div_ntfy_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-info-type'"; + variant (entity) "attribute"; + variant (comm_div_subs_info) "name as 'comm-div-subs-info'"; + variant (comm_div_ntfy_info) "name as 'comm-div-ntfy-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* - + Communication Diversion Subscription Type. + Used at Subscription time to + select Communication Diversions for notification, + when to notify them and + what to notify. */ + + +type record Comm_div_subs_info_type +{ + record of XSD.String attr optional, + Comm_div_selection_criteria_type comm_div_selection_criteria optional, + Comm_div_ntfy_trigger_criteria_type comm_div_ntfy_trigger_criteria optional, + Comm_div_info_selection_criteria_type comm_div_info_selection_criteria optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-subs-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (comm_div_selection_criteria) "name as 'comm-div-selection-criteria'"; + variant (comm_div_ntfy_trigger_criteria) "name as 'comm-div-ntfy-trigger-criteria'"; + variant (comm_div_info_selection_criteria) "name as 'comm-div-info-selection-criteria'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* - + Communication Diversion Notification Information Type + Used while notifying the User about the Communication Diversion */ + + +type record Comm_div_ntfy_info_type +{ + record of XSD.String attr optional, + User_info_type originating_user_info optional, + XSD.AnyURI diverting_user_info optional, + XSD.AnyURI diverted_to_user_info optional, + XSD.DateTime diversion_time_info optional, + Diversion_reason_info_type diversion_reason_info optional, + Diversion_rule_info_type diversion_rule_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-ntfy-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (originating_user_info) "name as 'originating-user-info'"; + variant (diverting_user_info) "name as 'diverting-user-info'"; + variant (diverted_to_user_info) "name as 'diverted-to-user-info'"; + variant (diversion_time_info) "name as 'diversion-time-info'"; + variant (diversion_reason_info) "name as 'diversion-reason-info'"; + variant (diversion_rule_info) "name as 'diversion-rule-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION SELECTION CRITERIA */ + + +type record Comm_div_selection_criteria_type +{ + record of XSD.String attr optional, + User_selection_criteria_type originating_user_selection_criteria optional, + XSD.AnyURI diverting_user_selection_criteria optional, + XSD.AnyURI diverted_to_user_selection_criteria optional, + Time_range_selection_criteria_type diversion_time_selection_criteria optional, + Diversion_reason_selection_criteria_type diversion_reason_selection_criteria optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (originating_user_selection_criteria) "name as 'originating-user-selection-criteria'"; + variant (diverting_user_selection_criteria) "name as 'diverting-user-selection-criteria'"; + variant (diverted_to_user_selection_criteria) "name as 'diverted-to-user-selection-criteria'"; + variant (diversion_time_selection_criteria) "name as 'diversion-time-selection-criteria'"; + variant (diversion_reason_selection_criteria) "name as 'diversion-reason-selection-criteria'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION NOTIFICATION TRIGGER CRITERIA */ + + +type record Comm_div_ntfy_trigger_criteria_type +{ + record of XSD.String attr optional, + Time_range_selection_criteria_type notification_time_selection_criteria optional, + Presence_status_selection_criteria_type presence_status_selection_criteria optional, + XSD.Integer notification_buffer_interval (-infinity .. 86400) optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-ntfy-trigger-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (notification_time_selection_criteria) "name as 'notification-time-selection-criteria'"; + variant (presence_status_selection_criteria) "name as 'presence-status-selection-criteria'"; + variant (notification_buffer_interval) "name as 'notification-buffer-interval'"; + variant (notification_buffer_interval) "defaultForEmpty as '86400'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* COMMUNICATION DIVERSION INFORMATION SELECTION CRITERIA */ + + +type record Comm_div_info_selection_criteria_type +{ + record of XSD.String attr optional, + XSD.Boolean disable_originating_user_info optional, + XSD.Boolean disable_diverting_user_info optional, + XSD.Boolean disable_diverted_to_user_info optional, + XSD.Boolean disable_diversion_time_info optional, + XSD.Boolean disable_diversion_reason_info optional, + XSD.Boolean disable_diversion_rule_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'comm-div-info-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (disable_originating_user_info) "name as 'disable-originating-user-info'"; + variant (disable_originating_user_info) "defaultForEmpty as 'false'"; + //variant (disable_originating_user_info) "text 'true' as '1'"; + //variant (disable_originating_user_info) "text 'false' as '0'"; + variant (disable_diverting_user_info) "name as 'disable-diverting-user-info'"; + variant (disable_diverting_user_info) "defaultForEmpty as 'false'"; + //variant (disable_diverting_user_info) "text 'true' as '1'"; + //variant (disable_diverting_user_info) "text 'false' as '0'"; + variant (disable_diverted_to_user_info) "name as 'disable-diverted-to-user-info'"; + variant (disable_diverted_to_user_info) "defaultForEmpty as 'false'"; + //variant (disable_diverted_to_user_info) "text 'true' as '1'"; + //variant (disable_diverted_to_user_info) "text 'false' as '0'"; + variant (disable_diversion_time_info) "name as 'disable-diversion-time-info'"; + variant (disable_diversion_time_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_time_info) "text 'true' as '1'"; + //variant (disable_diversion_time_info) "text 'false' as '0'"; + variant (disable_diversion_reason_info) "name as 'disable-diversion-reason-info'"; + variant (disable_diversion_reason_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_reason_info) "text 'true' as '1'"; + //variant (disable_diversion_reason_info) "text 'false' as '0'"; + variant (disable_diversion_rule_info) "name as 'disable-diversion-rule-info'"; + variant (disable_diversion_rule_info) "defaultForEmpty as 'false'"; + //variant (disable_diversion_rule_info) "text 'true' as '1'"; + //variant (disable_diversion_rule_info) "text 'false' as '0'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; +}; + + +/* User Info Type */ + + +type record User_info_type +{ + record of XSD.String attr optional, + XSD.String user_name optional, + XSD.AnyURI user_URI +} +with { + variant "name as 'user-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (user_name) "name as 'user-name'"; + variant (user_URI) "name as 'user-URI'"; +}; + + +/* DIVERSION REASON INFO */ + + +type record of Diversion_reason_info_type Diversion_reason_info_types +with { + variant "name as 'diversion-reason-info-types'"; + variant "list"; +}; + + +type enumerated Diversion_reason_info_type +{ + int302(302), + int404(404), + int408(408), + int480(480), + int486(486), + int487(487), + int503(503) +} +with { + variant "useNumber"; + variant "name as 'diversion-reason-info-type'"; +}; + + +/* DIVERSION RULE INFO */ + + +type record Diversion_rule_info_type +{ + record of XSD.String attr optional, + XSD.String diversion_rule +} +with { + variant "name as 'diversion-rule-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (diversion_rule) "name as 'diversion-rule'"; +}; + + +/* ORIGINATING USER SELECTION CRITERIA */ + + +type record User_selection_criteria_type +{ + record of XSD.String attr optional, + record of User_info_type user_info_list +} +with { + variant "name as 'user-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (user_info_list) "untagged"; + variant (user_info_list[-]) "name as 'user-info'"; +}; + + +/* DIVERSION REASON SELECTION CRITERIA */ + + +type record Diversion_reason_selection_criteria_type +{ + record of XSD.String attr optional, + Diversion_reason_info_types diversion_reason_info +} +with { + variant "name as 'diversion-reason-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (diversion_reason_info) "name as 'diversion-reason-info'"; +}; + + +/* TIME RANGE SELECTION CRITERIA */ + + +type record Time_range_selection_criteria_type +{ + record of XSD.String attr optional, + record of Time_range_type time_range_list +} +with { + variant "name as 'time-range-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (time_range_list) "untagged"; + variant (time_range_list[-]) "name as 'time-range'"; +}; + + +/* TIME RANGE INFO */ + + +type record Time_range_type +{ + record of XSD.String attr optional, + XSD.DateTime start_time, + XSD.DateTime end_time +} +with { + variant "name as 'time-range-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (start_time) "name as 'start-time'"; + variant (end_time) "name as 'end-time'"; +}; + + +/* PRESENCE STATUS SELECTION CRITERIA */ + + +type record Presence_status_selection_criteria_type +{ + record of XSD.String attr optional, + record of Presence_status_info_type presence_status_info_list +} +with { + variant "name as 'presence-status-selection-criteria-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (presence_status_info_list) "untagged"; + variant (presence_status_info_list[-]) "name as 'presence-status-info'"; +}; + + +/* PRESENCE STATUS INFo */ + + +type record Presence_status_info_type +{ + record of XSD.String attr optional, + XSD.String presence_status +} +with { + variant "name as 'presence-status-info-type'"; + variant (attr) "anyAttributes except unqualified, 'http://uri.etsi.org/ngn/params/xml/comm-div-info'"; + variant (presence_status) "name as 'presence-status'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/comm-div-info' prefix 'tns'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn new file mode 100644 index 0000000..050f791 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn @@ -0,0 +1,105 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - MCID.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/mcid" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_mcid { + + +import from XSD all; + + +/* XML Schema Definition to the mcid request-response to the Malicious Communication */ +/* Identification simulation service */ + + +/* Definition of simple types */ + + +type XSD.String BitType (pattern "[0-1]") +with { + variant "name as uncapitalized"; +}; + + +/* Definition of complex types */ + + +type record RequestType +{ + BitType mcidRequestIndicator, + BitType holdingIndicator +} +with { + variant "name as uncapitalized"; + variant (mcidRequestIndicator) "name as capitalized"; + variant (holdingIndicator) "name as capitalized"; +}; + + +type record ResponseType +{ + BitType mcidResponseIndicator, + BitType holdingProvidedIndicator +} +with { + variant "name as uncapitalized"; + variant (mcidResponseIndicator) "name as capitalized"; + variant (holdingProvidedIndicator) "name as capitalized"; +}; + + +/* Definition of document structure */ + + +type record Mcid +{ + union { + RequestType request, + ResponseType response + } choice +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (choice) "untagged"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/mcid'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn new file mode 100644 index 0000000..3d6f1fd --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn @@ -0,0 +1,689 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - PSTN.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/pstn" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_pstn { + + +import from XSD all; + + +/* XML Schema definition for mapping of some PSTN into SIP MIME Bodies */ + + +/* Definition of simple types */ + + +type XSD.String OneBitType (pattern "[0-1]"); + + +type XSD.String TwoBitType (pattern "[0-1][0-1]"); + + +type XSD.String ThreeBitType (pattern "[0-1][0-1][0-1]"); + + +type XSD.String FourBitType (pattern "[0-1][0-1][0-1][0-1]"); + + +type XSD.String FiveBitType (pattern "[0-1][0-1][0-1][0-1][0-1]"); + + +type XSD.String SixBitType (pattern "[0-1][0-1][0-1][0-1][0-1][0-1]"); + + +type XSD.String SevenBitType (pattern "[0-1][0-1][0-1][0-1][0-1][0-1][0-1]"); + + +/* Definition of complex types */ + + +/* Definition of BearerCapability Octets */ + + +type record BCOctet3Type +{ + TwoBitType codingStandard, + FiveBitType informationTransferCabability +} +with { + variant (codingStandard) "name as capitalized"; + variant (informationTransferCabability) "name as capitalized"; +}; + + +type record BCOctet4Type +{ + TwoBitType transferMode, + FiveBitType informationTransferRate +} +with { + variant (transferMode) "name as capitalized"; + variant (informationTransferRate) "name as capitalized"; +}; + + +type record BCOctet4_1Type +{ + SevenBitType rateMultiplier +} +with { + variant "name as 'BCOctet4-1Type'"; + variant (rateMultiplier) "name as capitalized"; +}; + + +type record BCOctet5Type +{ + TwoBitType layer1Identification, + FiveBitType userInfoLayer1Protocol +} +with { + variant (layer1Identification) "name as capitalized"; + variant (userInfoLayer1Protocol) "name as capitalized"; +}; + + +type record BCOctet5aType +{ + OneBitType synchronousAsynchronous, + OneBitType negotiation, + FiveBitType userRate +} +with { + variant (synchronousAsynchronous) "name as capitalized"; + variant (negotiation) "name as capitalized"; + variant (userRate) "name as capitalized"; +}; + + +type record BCOctet5bV110Type +{ + TwoBitType intermediateRate, + OneBitType nIConTX, + OneBitType nIConRX, + OneBitType flowControlOnTX, + OneBitType flowControlOnRX +} +with { + variant (intermediateRate) "name as capitalized"; + variant (nIConTX) "name as capitalized"; + variant (nIConRX) "name as capitalized"; + variant (flowControlOnTX) "name as capitalized"; + variant (flowControlOnRX) "name as capitalized"; +}; + + +type record BCOctet5bV120Type +{ + OneBitType rateAdaptionHeader, + OneBitType multipleFrameEstablishmentSupport, + OneBitType modeOfOperation, + OneBitType logicalLinkIdentifier, + OneBitType assignor, + OneBitType inbandOutbandNegotiation +} +with { + variant (rateAdaptionHeader) "name as capitalized"; + variant (multipleFrameEstablishmentSupport) "name as capitalized"; + variant (modeOfOperation) "name as capitalized"; + variant (logicalLinkIdentifier) "name as capitalized"; + variant (assignor) "name as capitalized"; + variant (inbandOutbandNegotiation) "name as capitalized"; +}; + + +type record BCOctet5cType +{ + TwoBitType numberOfStopBits, + TwoBitType numberOfDataBits, + ThreeBitType parity +} +with { + variant (numberOfStopBits) "name as capitalized"; + variant (numberOfDataBits) "name as capitalized"; + variant (parity) "name as capitalized"; +}; + + +type record BCOctet5dType +{ + OneBitType duplexMode, + SixBitType modemType +} +with { + variant (duplexMode) "name as capitalized"; + variant (modemType) "name as capitalized"; +}; + + +type record BCOctet6Type +{ + TwoBitType layer2Identification, + FiveBitType userInfoLayer2Protocol +} +with { + variant (layer2Identification) "name as capitalized"; + variant (userInfoLayer2Protocol) "name as capitalized"; +}; + + +type record BCOctet7Type +{ + TwoBitType layer3Identification, + FiveBitType userInfoLayer3Protocol +} +with { + variant (layer3Identification) "name as capitalized"; + variant (userInfoLayer3Protocol) "name as capitalized"; +}; + + +type record BCOctet7aType +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record BCOctet7bType +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +/* Definition of High Layer Compatibility Octets */ + + +type record HLOctet3Type +{ + TwoBitType codingStandard, + ThreeBitType interpretation, + TwoBitType presentationMethod +} +with { + variant (codingStandard) "name as capitalized"; + variant (interpretation) "name as capitalized"; + variant (presentationMethod) "name as capitalized"; +}; + + +type record HLOctet4Type +{ + SevenBitType highLayerCharacteristics +} +with { + variant (highLayerCharacteristics) "name as capitalized"; +}; + + +type record HLOctet4aMaintenanceType +{ + SevenBitType highLayerCharacteristics +} +with { + variant (highLayerCharacteristics) "name as capitalized"; +}; + + +type record HLOctet4aAudioType +{ + SevenBitType videoTelephonyCharacteristics +} +with { + variant (videoTelephonyCharacteristics) "name as capitalized"; +}; + + +/* Definition of Low Layer Compatibility Octets */ + + +type record LLOctet3Type +{ + TwoBitType codingStandard, + FiveBitType informationTransferCapability +} +with { + variant (codingStandard) "name as capitalized"; + variant (informationTransferCapability) "name as capitalized"; +}; + + +type record LLOctet3aType +{ + OneBitType negotiationIndicator +} +with { + variant (negotiationIndicator) "name as capitalized"; +}; + + +type record LLOctet4Type +{ + TwoBitType transferMode, + FiveBitType informationTransferRate +} +with { + variant (transferMode) "name as capitalized"; + variant (informationTransferRate) "name as capitalized"; +}; + + +type record LLOctet4_1Type +{ + SevenBitType rateMultiplier +} +with { + variant "name as 'LLOctet4-1Type'"; + variant (rateMultiplier) "name as capitalized"; +}; + + +type record LLOctet5Type +{ + TwoBitType layer1Identification, + FiveBitType userInfoLayer1Protocol +} +with { + variant (layer1Identification) "name as capitalized"; + variant (userInfoLayer1Protocol) "name as capitalized"; +}; + + +type record LLOctet5aType +{ + OneBitType synchronousAsynchronous, + OneBitType negotiation, + FiveBitType userRate +} +with { + variant (synchronousAsynchronous) "name as capitalized"; + variant (negotiation) "name as capitalized"; + variant (userRate) "name as capitalized"; +}; + + +type record LLOctet5bV110Type +{ + TwoBitType intermediateRate, + OneBitType nIConTX, + OneBitType nIConRX, + OneBitType flowControlOnTX, + OneBitType flowControlOnRX +} +with { + variant (intermediateRate) "name as capitalized"; + variant (nIConTX) "name as capitalized"; + variant (nIConRX) "name as capitalized"; + variant (flowControlOnTX) "name as capitalized"; + variant (flowControlOnRX) "name as capitalized"; +}; + + +type record LLOctet5bV120Type +{ + OneBitType rateAdaptionHeader, + OneBitType multipleFrameEstablishmentSupport, + OneBitType modeOfOperation, + OneBitType logicalLinkIdentifier, + OneBitType assignor, + OneBitType inbandOutbandNegotiation +} +with { + variant (rateAdaptionHeader) "name as capitalized"; + variant (multipleFrameEstablishmentSupport) "name as capitalized"; + variant (modeOfOperation) "name as capitalized"; + variant (logicalLinkIdentifier) "name as capitalized"; + variant (assignor) "name as capitalized"; + variant (inbandOutbandNegotiation) "name as capitalized"; +}; + + +type record LLOctet5cType +{ + TwoBitType numberOfStopBits, + TwoBitType numberOfDataBits, + ThreeBitType parity +} +with { + variant (numberOfStopBits) "name as capitalized"; + variant (numberOfDataBits) "name as capitalized"; + variant (parity) "name as capitalized"; +}; + + +type record LLOctet5dType +{ + OneBitType duplexMode, + SixBitType modemType +} +with { + variant (duplexMode) "name as capitalized"; + variant (modemType) "name as capitalized"; +}; + + +type record LLOctet6Type +{ + TwoBitType layer2Identification, + FiveBitType userInfoLayer2Protocol +} +with { + variant (layer2Identification) "name as capitalized"; + variant (userInfoLayer2Protocol) "name as capitalized"; +}; + + +type record LLOctet6aHDLCType +{ + TwoBitType mode +} +with { + variant (mode) "name as capitalized"; +}; + + +type record LLOctet6aUserSpecificType +{ + SevenBitType userSpecificLayer2Information +} +with { + variant (userSpecificLayer2Information) "name as capitalized"; +}; + + +type record LLOctet6bType +{ + SevenBitType windowSize +} +with { + variant (windowSize) "name as capitalized"; +}; + + +type record LLOctet7Type +{ + TwoBitType layer3Identification, + FiveBitType userInfoLayer3Protocol +} +with { + variant (layer3Identification) "name as capitalized"; + variant (userInfoLayer3Protocol) "name as capitalized"; +}; + + +type record LLOctet7aUserSpecificType +{ + SevenBitType optionalLayer3Information +} +with { + variant (optionalLayer3Information) "name as capitalized"; +}; + + +type record LLOctet7aX25Type +{ + TwoBitType mode +} +with { + variant (mode) "name as capitalized"; +}; + + +type record LLOctet7bX25Type +{ + FourBitType defaultPacketSize +} +with { + variant (defaultPacketSize) "name as capitalized"; +}; + + +type record LLOctet7cType +{ + SevenBitType packetWindowSize +} +with { + variant (packetWindowSize) "name as capitalized"; +}; + + +type record LLOctet7aTR9577Type +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record LLOctet7bTR9577Type +{ + FourBitType additionalLayer3Info +} +with { + variant (additionalLayer3Info) "name as capitalized"; +}; + + +type record DispOctet3Type +{ + SevenBitType displayInformation +} +with { + variant (displayInformation) "name as capitalized"; +}; + + +/* Definition of the information elements */ + + +type record BearerCapabilityType +{ + BCOctet3Type bCoctet3, + BCOctet4Type bCoctet4, + BCOctet4_1Type bCoctet4_1 optional, + BCOctet5Type bCoctet5 optional, + BCOctet5aType bCoctet5a optional, + BCOctet5bV110Type bCoctet5bV110 optional, + BCOctet5bV120Type bCoctet5bV120 optional, + BCOctet5cType bCoctet5c optional, + BCOctet5dType bCoctet5d optional, + BCOctet6Type bCoctet6 optional, + BCOctet7Type bCoctet7 optional, + BCOctet7aType bCoctet7a optional, + BCOctet7bType bCoctet7b optional +} +with { + variant (bCoctet3) "name as capitalized"; + variant (bCoctet4) "name as capitalized"; + variant (bCoctet4_1) "name as 'BCoctet4-1'"; + variant (bCoctet5) "name as capitalized"; + variant (bCoctet5a) "name as capitalized"; + variant (bCoctet5bV110) "name as capitalized"; + variant (bCoctet5bV120) "name as capitalized"; + variant (bCoctet5c) "name as capitalized"; + variant (bCoctet5d) "name as capitalized"; + variant (bCoctet6) "name as capitalized"; + variant (bCoctet7) "name as capitalized"; + variant (bCoctet7a) "name as capitalized"; + variant (bCoctet7b) "name as capitalized"; +}; + + +type record HighLayerCompatibilityType +{ + HLOctet3Type hLOctet3, + HLOctet4Type hLOctet4, + HLOctet4aMaintenanceType hLOctet4aMaintenance optional, + HLOctet4aAudioType hLOctet4Audio optional +} +with { + variant (hLOctet3) "name as capitalized"; + variant (hLOctet4) "name as capitalized"; + variant (hLOctet4aMaintenance) "name as capitalized"; + variant (hLOctet4Audio) "name as capitalized"; +}; + + +type record LowLayerCompatibilityType +{ + LLOctet3Type lLOctet3, + LLOctet3aType lLOctet3a optional, + LLOctet4Type lLOctet4, + LLOctet4_1Type lLOctet4_1 optional, + LLOctet5Type lLOctet5 optional, + LLOctet5aType lLOctet5a optional, + LLOctet5bV110Type lLOctet5bV110 optional, + LLOctet5bV120Type lLOctet5bV120 optional, + LLOctet5cType lLOctet5c optional, + LLOctet5dType lLOctet5d optional, + LLOctet6Type lLOctet6 optional, + LLOctet6aHDLCType lLOctet6aHDLC optional, + LLOctet6aUserSpecificType lLOctet6aUserSpecific optional, + LLOctet6bType lLOctet6b optional, + LLOctet7Type lLOctet7, + LLOctet7aUserSpecificType lLOctet7aUserSpecific optional, + LLOctet7aX25Type lLOctet7aX25 optional, + LLOctet7bX25Type lLOctet7bX25 optional, + LLOctet7cType lLOctet7c optional, + LLOctet7aTR9577Type lLOctet7aTR9577 optional, + LLOctet7bTR9577Type lLOctet7bTR9577 optional +} +with { + variant (lLOctet3) "name as capitalized"; + variant (lLOctet3a) "name as capitalized"; + variant (lLOctet4) "name as capitalized"; + variant (lLOctet4_1) "name as 'LLOctet4-1'"; + variant (lLOctet5) "name as capitalized"; + variant (lLOctet5a) "name as capitalized"; + variant (lLOctet5bV110) "name as capitalized"; + variant (lLOctet5bV120) "name as capitalized"; + variant (lLOctet5c) "name as capitalized"; + variant (lLOctet5d) "name as capitalized"; + variant (lLOctet6) "name as capitalized"; + variant (lLOctet6aHDLC) "name as capitalized"; + variant (lLOctet6aUserSpecific) "name as capitalized"; + variant (lLOctet6b) "name as capitalized"; + variant (lLOctet7) "name as capitalized"; + variant (lLOctet7aUserSpecific) "name as capitalized"; + variant (lLOctet7aX25) "name as capitalized"; + variant (lLOctet7bX25) "name as capitalized"; + variant (lLOctet7c) "name as capitalized"; + variant (lLOctet7aTR9577) "name as capitalized"; + variant (lLOctet7bTR9577) "name as capitalized"; +}; + + +type record DisplayType +{ + DispOctet3Type dispOctet3 +} +with { + variant (dispOctet3) "name as capitalized"; +}; + + +/* Definition of progress indicator */ + + +type record ProgressOctet3Type +{ + TwoBitType codingStandard, + FourBitType location +} +with { + variant (codingStandard) "name as capitalized"; + variant (location) "name as capitalized"; +}; + + +type record ProgressOctet4Type +{ + SevenBitType progressDescription +} +with { + variant (progressDescription) "name as capitalized"; +}; + + +type record ProgressIndicatorType +{ + ProgressOctet3Type progressOctet3, + ProgressOctet4Type progressOctet4 +} +with { + variant (progressOctet3) "name as capitalized"; + variant (progressOctet4) "name as capitalized"; +}; + + +/* Definition of document structure */ + + +type record PSTN_transit +{ + record length(1 .. 2) of BearerCapabilityType bearerInfomationElement_list, + record length(0 .. 2) of HighLayerCompatibilityType highLayerCompatibility_list, + LowLayerCompatibilityType lowLayerCompatibility optional, + record of ProgressIndicatorType progressIndicator_list, + record of DisplayType display_list +} +with { + variant "name as 'PSTN-transit'"; + variant "element"; + variant (bearerInfomationElement_list) "untagged"; + variant (bearerInfomationElement_list[-]) "name as 'BearerInfomationElement'"; + variant (highLayerCompatibility_list) "untagged"; + variant (highLayerCompatibility_list[-]) "name as 'HighLayerCompatibility'"; + variant (lowLayerCompatibility) "name as capitalized"; + variant (progressIndicator_list) "untagged"; + variant (progressIndicator_list[-]) "name as 'ProgressIndicator'"; + variant (display_list) "untagged"; + variant (display_list[-]) "name as 'Display'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/pstn'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn new file mode 100644 index 0000000..230df4e --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn @@ -0,0 +1,621 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - ACR_CB.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - CDIV.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - OIP-OIR.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - SupplementaryServices.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - TIP-TIR.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - cug.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +// - simservs.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://uri.etsi.org/ngn/params/xml/simservs/xcap" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_uri_etsi_org_ngn_params_xml_simservs_xcap { + + +import from XSD all; + + +import from urn_ietf_params_xml_ns_common_policy all; + + +import from urn_oma_xml_xdm_common_policy all; + + +/* import common policy definitions */ + + +/* import OMA common policy extensions */ + + +/* incoming communication barring rule set based on the common policy rule set. */ + + +/* This is the incoming communication barring configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Incoming_communication_barring +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'incoming-communication-barring'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* outgoing communication barring rule set based on the common policy rule set. */ + + +/* This is the outgoing communication barring configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Outgoing_communication_barring +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'outgoing-communication-barring'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* communication barring specific extensions to IETF common policy actions */ + + +type Allow_action_type Allow +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* communication barring specific type declarations */ + + +/* */ + + +type XSD.Boolean Allow_action_type +with { + variant "name as 'allow-action-type'"; + //variant "text 'true' as '1'"; + //variant "text 'false' as '0'"; +}; + + +/* import common policy definitions */ + + +/* import OMA common policy extensions */ + + +/* communication diversion specific extensions to IETF common policy conditions. The +cp:conditionsType is expanded with the elements: ss:not-registered, ss:busy, ss:no-answer, ss:notreachable, +ss:media as optional elements */ + + +/* communication diversion rule set based on the common policy rule set. */ + + +/* This is the communication diversion configuration */ +/* document. */ +/* add service specific elements here */ +/* service specific attributes can be defined here */ +type record Communication_diversion +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + Ruleset ruleset optional +} +with { + variant "name as 'communication-diversion'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (ruleset) "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; +}; + + +/* communication diversion specific extensions to IETF common policy actions */ + + +type Forward_to_type Forward_to +with { + variant "name as 'forward-to'"; + variant "element"; +}; + + +type enumerated Reveal_URIoptions_type +{ + false_, + not_reveal_GRUU, + true_ +} +with { + variant "text 'false_' as 'false'"; + variant "text 'not_reveal_GRUU' as 'not-reveal-GRUU'"; + variant "text 'true_' as 'true'"; + variant "name as 'reveal-URIoptions-type'"; +}; + + +/* communication diversion specific type declarations */ + + +type record Forward_to_type +{ + XSD.AnyURI target, + XSD.Boolean notify_caller optional, + Reveal_URIoptions_type reveal_identity_to_caller optional, + Reveal_URIoptions_type reveal_served_user_identity_to_caller optional, + XSD.Boolean notify_served_user optional, + XSD.Boolean notify_served_user_on_outbound_call optional, + Reveal_URIoptions_type reveal_identity_to_target optional, + NoReplyTimer noReplyTimer optional +} +with { + variant "name as 'forward-to-type'"; + variant (notify_caller) "name as 'notify-caller'"; + variant (notify_caller) "defaultForEmpty as 'true'"; + //variant (notify_caller) "text 'true' as '1'"; + //variant (notify_caller) "text 'false' as '0'"; + variant (reveal_identity_to_caller) "name as 'reveal-identity-to-caller'"; + variant (reveal_identity_to_caller) "defaultForEmpty as 'true'"; + variant (reveal_served_user_identity_to_caller) "name as 'reveal-served-user-identity-to-caller'"; + variant (reveal_served_user_identity_to_caller) "defaultForEmpty as 'true'"; + variant (notify_served_user) "name as 'notify-served-user'"; + variant (notify_served_user) "defaultForEmpty as 'false'"; + //variant (notify_served_user) "text 'true' as '1'"; + //variant (notify_served_user) "text 'false' as '0'"; + variant (notify_served_user_on_outbound_call) "name as 'notify-served-user-on-outbound-call'"; + variant (notify_served_user_on_outbound_call) "defaultForEmpty as 'false'"; + //variant (notify_served_user_on_outbound_call) "text 'true' as '1'"; + //variant (notify_served_user_on_outbound_call) "text 'false' as '0'"; + variant (reveal_identity_to_target) "name as 'reveal-identity-to-target'"; + variant (reveal_identity_to_target) "defaultForEmpty as 'true'"; + variant (noReplyTimer) "name as capitalized"; +}; + + +type XSD.PositiveInteger NoReplyTimer (5 .. 180) +with { + variant "element"; +}; + + +/* Originating Identity presentation Restriction */ +type record Originating_identity_presentation_restriction +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + enumerated { + presentation_restricted, + presentation_not_restricted + } default_behaviour optional +} +with { + variant "name as 'originating--identity--presentation--restriction'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (default_behaviour) "name as 'default--behaviour'"; + variant (default_behaviour) "defaultForEmpty as 'presentation--restricted'"; + variant (default_behaviour) "text 'presentation_not_restricted' as 'presentation--not--restricted'"; + variant (default_behaviour) "text 'presentation_restricted' as 'presentation--restricted'"; +}; + + +/* Originating Identity Presentation */ +type SimservType Originating_identity_presentation +with { + variant "name as 'originating--identity--presentation'"; + variant "element"; +}; + + +/* Terminating Identity presentation Restriction */ +type record Terminating_identity_presentation_restriction +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + enumerated { + presentation_restricted, + presentation_not_restricted + } default_behaviour optional +} +with { + variant "name as 'terminating-identity-presentation-restriction'"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; + variant (default_behaviour) "name as 'default-behaviour'"; + variant (default_behaviour) "defaultForEmpty as 'presentation-restricted'"; + variant (default_behaviour) "text 'presentation_not_restricted' as 'presentation-not-restricted'"; + variant (default_behaviour) "text 'presentation_restricted' as 'presentation-restricted'"; +}; + + +/* Terminating Identity Presentation */ +type SimservType Terminating_identity_presentation +with { + variant "name as 'terminating-identity-presentation'"; + variant "element"; +}; + + +/* XML Schema Definition for the closed user group */ +/* parameter */ + + +/* Definition of simple types */ + + +type XSD.String TwobitType (pattern "[0-1][0-1]") +with { + variant "name as uncapitalized"; +}; + + +type XSD.HexBinary NetworkIdentityType length(1) +with { + variant "name as uncapitalized"; +}; + + +type XSD.HexBinary SixteenbitType length(2) +with { + variant "name as uncapitalized"; +}; + + +type XSD.Integer CugIndexType (0 .. 32767) +with { + variant "name as uncapitalized"; +}; + + +/* Definition of complex types */ + + +type record CugRequestType +{ + XSD.Boolean outgoingAccessRequest, + CugIndexType cugIndex +} +with { + variant "name as uncapitalized"; + //variant (outgoingAccessRequest) "text 'true' as '1'"; + //variant (outgoingAccessRequest) "text 'false' as '0'"; +}; + + +/* Definition of document structure */ + + +type record Cug +{ + XSD.Boolean active optional, + record of XSD.String attr optional, + CugRequestType cugCallOperation optional, + NetworkIdentityType networkIndicator optional, + SixteenbitType cugInterlockBinaryCode optional, + TwobitType cugCommunicationIndicator optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; +}; + + +/* The element "simservs" maps to the Common Parts of an NGN PSTN/ISDN Simulation services document */ + + +/* XML Schema for data manipulation of ETSI */ +/* NGN PSTN/ISDN Simulation Services */ +/* xs:group ref="ss:absServiceGroup" minOccurs="0" maxOccurs="unbounded" / */ +type record Simservs +{ + record of XSD.String attr optional, + record of AbsService_group absService_list, + record { + record of XSD.String elem_list + } extensions optional +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (attr) "anyAttributes"; + variant (absService_list) "untagged"; + variant (extensions.elem_list) "untagged"; + variant (extensions.elem_list[-]) "anyElement except unqualified, 'http://uri.etsi.org/ngn/params/xml/simservs/xcap'"; +}; + + +type record SimservType +{ + XSD.Boolean active optional, + record of XSD.String attr optional +} +with { + variant "name as uncapitalized"; + variant (active) "defaultForEmpty as 'true'"; + variant (active) "attribute"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + variant (attr) "anyAttributes"; +}; + + +/* service specific IETF common policy condition elements */ + + +type Empty_element_type Anonymous +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Presence_status_activity_type Presence_status +with { + variant "name as 'presence-status'"; + variant "element"; +}; + + +type Media_type1 Media +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Empty_element_type Communication_diverted +with { + variant "name as 'communication-diverted'"; + variant "element"; +}; + + +type Empty_element_type Rule_deactivated +with { + variant "name as 'rule-deactivated'"; + variant "element"; +}; + + +type Empty_element_type Not_registered +with { + variant "name as 'not-registered'"; + variant "element"; +}; + + +type Empty_element_type Busy +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type Empty_element_type No_answer +with { + variant "name as 'no-answer'"; + variant "element"; +}; + + +type Empty_element_type Not_reachable +with { + variant "name as 'not-reachable'"; + variant "element"; +}; + + +type Empty_element_type Roaming +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +/* service specific type declarations */ + + +type XSD.String Media_type1 +with { + variant "name as 'media-type1'"; +}; + + +type XSD.String Presence_status_activity_type +with { + variant "name as 'presence-status-activity-type'"; +}; + + +type record Empty_element_type +{ + +} +with { + variant "name as 'empty-element-type'"; +}; + + +/* ETSI substitutionGroup workaround, because TTCN-3 does not support mapping of substitutionGroup */ + + +/* xs:group name="absServiceGroup"> + + + + */ + + +/* /xs:choice */ + + +/* /xs:group */ + + +type union AbsService_group +{ + SimservType absService, + /* This is the communication diversion configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Communication_diversion communication_diversion, + Cug cug, + /* This is the incoming communication barring configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Incoming_communication_barring incoming_communication_barring, + /* Originating Identity Presentation */ + Originating_identity_presentation originating_identity_presentation, + /* Originating Identity presentation Restriction */ + Originating_identity_presentation_restriction originating_identity_presentation_restriction, + /* This is the outgoing communication barring configuration */ + /* document. */ + /* add service specific elements here */ + /* service specific attributes can be defined here */ + Outgoing_communication_barring outgoing_communication_barring, + /* Terminating Identity Presentation */ + Terminating_identity_presentation terminating_identity_presentation, + /* Terminating Identity presentation Restriction */ + Terminating_identity_presentation_restriction terminating_identity_presentation_restriction +} +with { + variant "untagged"; + variant (absService) "form as qualified"; + variant (absService) "abstract"; + variant (communication_diversion) "name as 'communication-diversion'"; + variant (incoming_communication_barring) "name as 'incoming-communication-barring'"; + variant (originating_identity_presentation) "name as 'originating--identity--presentation'"; + variant (originating_identity_presentation_restriction) "name as 'originating--identity--presentation--restriction'"; + variant (outgoing_communication_barring) "name as 'outgoing-communication-barring'"; + variant (terminating_identity_presentation) "name as 'terminating-identity-presentation'"; + variant (terminating_identity_presentation_restriction) "name as 'terminating-identity-presentation-restriction'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://uri.etsi.org/ngn/params/xml/simservs/xcap' prefix 'ss'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/module.mk b/ttcn/patch_lib_sip_titan/module.mk new file mode 100644 index 0000000..3312939 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/module.mk @@ -0,0 +1,26 @@ +sources := \ + ttcn/LibSip_Library.ttcn \ + ttcn/LibSip_Interface.ttcn \ + ../patch_sip_titan/LibSip_SDPTypes.ttcn \ + ../patch_sip_titan/LibSip_XMLTypes.ttcn \ + ../patch_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn \ + ../patch_sip_titan/LibSip_SIPTypesAndValues.ttcn \ + ../patch_sip_titan/LibSip_SMSFunctions.ttcn \ + ../patch_sip_titan/LibSip_Common.ttcn \ + ../patch_sip_titan/LibSip_SMSTemplates.ttcn \ + ../patch_sip_titan/LibSip_EncdecDeclarations.ttcn \ + ../patch_sip_titan/LibSip_SMSTypesAndValues.ttcn \ + ../patch_sip_titan/LibSip_MessageBodyTypes.ttcn \ + ../patch_sip_titan/LibSip_Steps.ttcn \ + ../patch_sip_titan/LibSip_PIXITS.ttcn \ + ../patch_sip_titan/LibSip_Templates.ttcn \ + ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ + ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ + ../patch_sip_titan/urn_3gpp_ns_cw_1_0.ttcn \ + ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ + ../patch_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn \ + ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ + ../patch_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn \ + ../patch_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn \ + ../patch_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn \ + ../patch_sip_titan/urn_oma_xml_xdm_common_policy.ttcn diff --git a/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn b/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn new file mode 100644 index 0000000..4b4458f --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn @@ -0,0 +1,79 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_3gpp_ns_cw_1_0.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - cw.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:3gpp:ns:cw:1.0" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_3gpp_ns_cw_1_0 { + + +import from XSD all; + + +type record TEmptyType +{ + +} +with { + variant "name as uncapitalized"; +}; + + +type record TCWtype +{ + record of XSD.String attr optional, + TEmptyType communication_waiting_indication optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (attr) "anyAttributes except unqualified, 'urn:3gpp:ns:cw:1.0'"; + variant (communication_waiting_indication) "name as 'communication-waiting-indication'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:3gpp:ns:cw:1.0'"; +}; + + +type TCWtype Ims_cw +with { + variant "name as 'ims-cw'"; + variant "element"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:3gpp:ns:cw:1.0' prefix 'cw10'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn new file mode 100644 index 0000000..3d7b018 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn @@ -0,0 +1,223 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_ietf_params_xml_ns_common_policy.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - common-policy.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:common-policy" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_common_policy { + + +import from XSD all; + + +/* /ruleset */ + + +type record Ruleset +{ + record of RuleType rule_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (rule_list) "untagged"; + variant (rule_list[-]) "name as 'rule'"; +}; + + +/* /ruleset/rule */ + + +type record RuleType +{ + XSD.ID id, + ConditionsType conditions optional, + ExtensibleType actions optional, + ExtensibleType transformations optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; +}; + + +/* //rule/conditions */ + + +type record ConditionsType +{ + record length(1 .. infinity) of union { + record length(0 .. 1) of IdentityType identity_list, + record length(1) of SphereType sphere_list, + record length(1) of ValidityType validity_list, + record length(1 .. infinity) of XSD.String elem_list + } choice_list +} +with { + variant "name as uncapitalized"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].identity_list) "untagged"; + variant (choice_list[-].identity_list[-]) "name as 'identity'"; + variant (choice_list[-].sphere_list) "untagged"; + variant (choice_list[-].sphere_list[-]) "name as 'sphere'"; + variant (choice_list[-].validity_list) "untagged"; + variant (choice_list[-].validity_list[-]) "name as 'validity'"; + variant (choice_list[-].elem_list) "untagged"; + variant (choice_list[-].elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //conditions/identity */ + + +type record IdentityType +{ + record length(1 .. infinity) of union { + OneType one, + ManyType many, + XSD.String elem + } choice_list +} +with { + variant "name as uncapitalized"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].elem) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //identity/one */ + + +type record OneType +{ + XSD.AnyURI id, + XSD.String elem optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; + variant (elem) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //identity/many */ + + +type record ManyType +{ + XSD.String domain optional, + record of union { + ExceptType except_, + record length(0 .. 1) of XSD.String elem_list + } choice_list +} +with { + variant "name as uncapitalized"; + variant (domain) "attribute"; + variant (choice_list) "untagged"; + variant (choice_list[-]) "untagged"; + variant (choice_list[-].except_) "name as 'except'"; + variant (choice_list[-].elem_list) "untagged"; + variant (choice_list[-].elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +/* //many/except */ + + +type record ExceptType +{ + XSD.String domain optional, + XSD.AnyURI id optional +} +with { + variant "name as uncapitalized"; + variant (domain) "attribute"; + variant (id) "attribute"; +}; + + +/* //conditions/sphere */ + + +type record SphereType +{ + XSD.String value_ +} +with { + variant "name as uncapitalized"; + variant (value_) "name as 'value'"; + variant (value_) "attribute"; +}; + + +/* //conditions/validity */ + + +type record ValidityType +{ + record length(1 .. infinity) of record { + XSD.DateTime from_, + XSD.DateTime until + } sequence_list +} +with { + variant "name as uncapitalized"; + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].from_) "name as 'from'"; +}; + + +/* //rule/actions or //rule/transformations */ + + +type record ExtensibleType +{ + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:common-policy'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:common-policy' prefix 'cp'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn new file mode 100644 index 0000000..bfa5465 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn @@ -0,0 +1,572 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_ietf_params_xml_ns_conference_info.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - CONF.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:conference-info" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_conference_info { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +/* This imports the xml:language definition */ + + +/* CONFERENCE ELEMENT */ + + +type Conference_type Conference_info +with { + variant "name as 'conference-info'"; + variant "element"; +}; + + +/* CONFERENCE TYPE */ + + +type record Conference_type +{ + XSD.AnyURI entity, + State_type state optional, + XSD.UnsignedInt version optional, + record of XSD.String attr optional, + Conference_description_type conference_description optional, + Host_type host_info optional, + Conference_state_type conference_state optional, + Users_type users optional, + Uris_type sidebars_by_ref optional, + Sidebars_by_val_type sidebars_by_val optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (version) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (conference_description) "name as 'conference-description'"; + variant (host_info) "name as 'host-info'"; + variant (conference_state) "name as 'conference-state'"; + variant (sidebars_by_ref) "name as 'sidebars-by-ref'"; + variant (sidebars_by_val) "name as 'sidebars-by-val'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* STATE TYPE */ + + +type enumerated State_type +{ + deleted, + full, + partial +} +with { + variant "name as 'state-type'"; +}; + + +/* CONFERENCE DESCRIPTION TYPE */ + + +type record Conference_description_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String subject optional, + XSD.String free_text optional, + Keywords_type keywords optional, + Uris_type conf_uris optional, + Uris_type service_uris optional, + XSD.UnsignedInt maximum_user_count optional, + Conference_media_type available_media optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-description-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (free_text) "name as 'free-text'"; + variant (conf_uris) "name as 'conf-uris'"; + variant (service_uris) "name as 'service-uris'"; + variant (maximum_user_count) "name as 'maximum-user-count'"; + variant (available_media) "name as 'available-media'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* HOST TYPE */ + + +type record Host_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.AnyURI web_page optional, + Uris_type uris optional, + record of XSD.String elem_list +} +with { + variant "name as 'host-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (web_page) "name as 'web-page'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CONFERENCE STATE TYPE */ + + +type record Conference_state_type +{ + record of XSD.String attr optional, + XSD.UnsignedInt user_count optional, + XSD.Boolean active optional, + XSD.Boolean locked optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-state-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (user_count) "name as 'user-count'"; + //variant (active) "text 'true' as '1'"; + //variant (active) "text 'false' as '0'"; + //variant (locked) "text 'true' as '1'"; + //variant (locked) "text 'false' as '0'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CONFERENCE MEDIA TYPE */ + + +type record Conference_media_type +{ + record of XSD.String attr optional, + record length(1 .. infinity) of Conference_medium_type entry_list +} +with { + variant "name as 'conference-media-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* CONFERENCE MEDIUM TYPE */ + + +type record Conference_medium_type +{ + XSD.String label_, + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String type_, + Media_status_type status optional, + record of XSD.String elem_list +} +with { + variant "name as 'conference-medium-type'"; + variant (label_) "name as 'label'"; + variant (label_) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (type_) "name as 'type'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* URIs TYPE */ + + +type record Uris_type +{ + State_type state optional, + record of XSD.String attr optional, + record length(1 .. infinity) of Uri_type entry_list +} +with { + variant "name as 'uris-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* URI TYPE */ + + +type record Uri_type +{ + record of XSD.String attr optional, + XSD.AnyURI uri, + XSD.String display_text optional, + XSD.String purpose optional, + Execution_type modified optional, + record of XSD.String elem_list +} +with { + variant "name as 'uri-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* KEYWORDS TYPE */ + + +type record of XSD.String Keywords_type +with { + variant "name as 'keywords-type'"; + variant "list"; +}; + + +/* USERS TYPE */ + + +type record Users_type +{ + State_type state optional, + record of XSD.String attr optional, + record of User_type user_list, + record of XSD.String elem_list +} +with { + variant "name as 'users-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (user_list) "untagged"; + variant (user_list[-]) "name as 'user'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* USER TYPE */ + + +type record User_type +{ + XSD.AnyURI entity optional, + State_type state optional, + record of XSD.String attr optional, + XSD.String display_text optional, + Uris_type associated_aors optional, + User_roles_type roles optional, + User_languages_type languages optional, + XSD.AnyURI cascaded_focus optional, + record of Endpoint_type endpoint_list, + record of XSD.String elem_list +} +with { + variant "name as 'user-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (associated_aors) "name as 'associated-aors'"; + variant (cascaded_focus) "name as 'cascaded-focus'"; + variant (endpoint_list) "untagged"; + variant (endpoint_list[-]) "name as 'endpoint'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* USER ROLES TYPE */ + + +type record User_roles_type +{ + record of XSD.String attr optional, + record length(1 .. infinity) of XSD.String entry_list +} +with { + variant "name as 'user-roles-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +/* USER LANGUAGES TYPE */ + + +type record of XSD.Language User_languages_type +with { + variant "name as 'user-languages-type'"; + variant "list"; +}; + + +/* ENDPOINT TYPE */ + + +type record Endpoint_type +{ + XSD.String entity optional, + State_type state optional, + record of XSD.String attr optional, + XSD.String display_text optional, + Execution_type referred optional, + Endpoint_status_type status optional, + Joining_type joining_method optional, + Execution_type joining_info optional, + Disconnection_type disconnection_method optional, + Execution_type disconnection_info optional, + record of Media_type media_list, + Call_type call_info optional, + record of XSD.String elem_list +} +with { + variant "name as 'endpoint-type'"; + variant (entity) "attribute"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (joining_method) "name as 'joining-method'"; + variant (joining_info) "name as 'joining-info'"; + variant (disconnection_method) "name as 'disconnection-method'"; + variant (disconnection_info) "name as 'disconnection-info'"; + variant (media_list) "untagged"; + variant (media_list[-]) "name as 'media'"; + variant (call_info) "name as 'call-info'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* ENDPOINT STATUS TYPE */ + + +type enumerated Endpoint_status_type +{ + alerting, + connected, + dialing_in, + dialing_out, + disconnected, + disconnecting, + muted_via_focus, + on_hold, + pending +} +with { + variant "text 'dialing_in' as 'dialing-in'"; + variant "text 'dialing_out' as 'dialing-out'"; + variant "text 'muted_via_focus' as 'muted-via-focus'"; + variant "text 'on_hold' as 'on-hold'"; + variant "name as 'endpoint-status-type'"; +}; + + +/* JOINING TYPE */ + + +type enumerated Joining_type +{ + dialed_in, + dialed_out, + focus_owner +} +with { + variant "text 'dialed_in' as 'dialed-in'"; + variant "text 'dialed_out' as 'dialed-out'"; + variant "text 'focus_owner' as 'focus-owner'"; + variant "name as 'joining-type'"; +}; + + +/* DISCONNECTION TYPE */ + + +type enumerated Disconnection_type +{ + booted, + busy, + departed, + failed +} +with { + variant "name as 'disconnection-type'"; +}; + + +/* EXECUTION TYPE */ + + +type record Execution_type +{ + record of XSD.String attr optional, + XSD.DateTime when optional, + XSD.String reason optional, + XSD.AnyURI by optional +} +with { + variant "name as 'execution-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* CALL TYPE */ + + +type record Call_type +{ + record of XSD.String attr optional, + union { + Sip_dialog_id_type sip, + record of XSD.String elem_list + } choice +} +with { + variant "name as 'call-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (choice) "untagged"; + variant (choice.elem_list) "untagged"; + variant (choice.elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* SIP DIALOG ID TYPE */ + + +type record Sip_dialog_id_type +{ + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String call_id, + XSD.String from_tag, + XSD.String to_tag, + record of XSD.String elem_list +} +with { + variant "name as 'sip-dialog-id-type'"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (call_id) "name as 'call-id'"; + variant (from_tag) "name as 'from-tag'"; + variant (to_tag) "name as 'to-tag'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* MEDIA TYPE */ + + +type record Media_type +{ + XSD.String id, + record of XSD.String attr optional, + XSD.String display_text optional, + XSD.String type_ optional, + XSD.String label_ optional, + XSD.String src_id optional, + Media_status_type status optional, + record of XSD.String elem_list +} +with { + variant "name as 'media-type'"; + variant (id) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (display_text) "name as 'display-text'"; + variant (type_) "name as 'type'"; + variant (label_) "name as 'label'"; + variant (src_id) "name as 'src-id'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; +}; + + +/* MEDIA STATUS TYPE */ + + +type enumerated Media_status_type +{ + inactive, + recvonly, + sendonly, + sendrecv +} +with { + variant "name as 'media-status-type'"; +}; + + +/* SIDEBARS BY VAL TYPE */ + + +type record Sidebars_by_val_type +{ + State_type state optional, + record of XSD.String attr optional, + record of Conference_type entry_list +} +with { + variant "name as 'sidebars-by-val-type'"; + variant (state) "defaultForEmpty as 'full'"; + variant (state) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:conference-info'"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:conference-info' prefix 'tns'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn new file mode 100644 index 0000000..816218d --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn @@ -0,0 +1,165 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_ietf_params_xml_ns_reginfo.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - regInfo.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:reginfo" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_reginfo { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +/* RFC 3680 clause 5.4 */ + + +/* This import brings in the XML language attribute xml:lang */ + + +type record Reginfo +{ + enumerated { + full, + partial + } state, + XSD.NonNegativeInteger version, + record of Registration registration_list, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (state) "attribute"; + variant (version) "attribute"; + variant (registration_list) "untagged"; + variant (registration_list[-]) "name as 'registration'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:reginfo'"; +}; + + +type record Registration +{ + XSD.AnyURI aor, + XSD.String id, + enumerated { + active, + init, + terminated + } state, + record of Contact contact_list, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (aor) "attribute"; + variant (id) "attribute"; + variant (state) "attribute"; + variant (contact_list) "untagged"; + variant (contact_list[-]) "name as 'contact'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:reginfo'"; +}; + + +type record Contact +{ + XSD.String callid optional, + XSD.UnsignedLong cseq optional, + XSD.UnsignedLong duration_registered optional, + enumerated { + created, + deactivated, + expired, + probation, + refreshed, + registered, + rejected, + shortened, + unregistered + } event, + XSD.UnsignedLong expires optional, + XSD.String id, + XSD.String q optional, + XSD.UnsignedLong retry_after optional, + enumerated { + active, + terminated + } state, + XSD.AnyURI uri, + record { + Lang lang optional, + XSD.String base + } display_name optional, + record of record { + XSD.String name, + XSD.String base + } unknown_param_list, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant "element"; + variant (callid) "attribute"; + variant (cseq) "attribute"; + variant (duration_registered) "name as 'duration-registered'"; + variant (duration_registered) "attribute"; + variant (event) "attribute"; + variant (expires) "attribute"; + variant (id) "attribute"; + variant (q) "attribute"; + variant (retry_after) "name as 'retry-after'"; + variant (retry_after) "attribute"; + variant (state) "attribute"; + variant (display_name) "name as 'display-name'"; + variant (display_name.lang) "attribute"; + variant (display_name.base) "untagged"; + variant (unknown_param_list) "untagged"; + variant (unknown_param_list[-]) "name as 'unknown-param'"; + variant (unknown_param_list[-].name) "attribute"; + variant (unknown_param_list[-].base) "untagged"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:reginfo'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:reginfo' prefix 'tns'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn new file mode 100644 index 0000000..df54f83 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn @@ -0,0 +1,194 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_ietf_params_xml_ns_resource_lists.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - ResourceList.xsd +// /* xml version = "1.0" encoding = "UTF-8" standalone = "no" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:resource-lists" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_resource_lists { + + +import from XSD all; + + +import from http_www_w3_org_XML_1998_namespace all; + + +type record ListType +{ + XSD.String name optional, + record of XSD.String attr optional, + Display_nameType display_name optional, + record of record { + union { + record { + XSD.String name optional, + record of XSD.String attr optional, + Display_nameType display_name optional, + record of record { + union { + record { + XSD.String name optional, + record of XSD.String attr optional, + record of XSD.String elem_list + } list, + ExternalType external_, + EntryType entry, + Entry_refType entry_ref + } choice + } sequence_list, + record of XSD.String elem_list + } list, + ExternalType external_, + EntryType entry, + Entry_refType entry_ref + } choice + } sequence_list, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (name) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (display_name) "name as 'display-name'"; + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].choice) "untagged"; + variant (sequence_list[-].choice.list.name) "attribute"; + variant (sequence_list[-].choice.list.attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (sequence_list[-].choice.list.display_name) "name as 'display-name'"; + variant (sequence_list[-].choice.list.sequence_list) "untagged"; + variant (sequence_list[-].choice.list.sequence_list[-]) "untagged"; + variant (sequence_list[-].choice.list.sequence_list[-].choice) "untagged"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.list.name) "attribute"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.list.attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.list.elem_list) "untagged"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.list.elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.external_) "name as 'external'"; + variant (sequence_list[-].choice.list.sequence_list[-].choice.entry_ref) "name as 'entry-ref'"; + variant (sequence_list[-].choice.list.elem_list) "untagged"; + variant (sequence_list[-].choice.list.elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (sequence_list[-].choice.external_) "name as 'external'"; + variant (sequence_list[-].choice.entry_ref) "name as 'entry-ref'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; +}; + + +type record EntryType +{ + XSD.AnyURI uri, + record of XSD.String attr optional, + record { + Lang lang optional, + XSD.String base + } display_name optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (uri) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (display_name) "name as 'display-name'"; + variant (display_name.lang) "attribute"; + variant (display_name.base) "untagged"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; +}; + + +type record Entry_refType +{ + XSD.AnyURI ref, + record of XSD.String attr optional, + Display_nameType display_name optional, + record of XSD.String elem_list +} +with { + variant "name as 'entry-refType'"; + variant (ref) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (display_name) "name as 'display-name'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; +}; + + +type record ExternalType +{ + XSD.AnyURI anchor optional, + record of XSD.String attr optional, + Display_nameType display_name optional, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (anchor) "attribute"; + variant (attr) "anyAttributes except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; + variant (display_name) "name as 'display-name'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:resource-lists'"; +}; + + +type record Resource_lists +{ + record of record { + ListType list + } sequence_list +} +with { + variant "name as 'resource-lists'"; + variant "element"; + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; +}; + + +type record Display_nameType +{ + Lang lang optional, + XSD.String base +} +with { + variant "name as 'display-nameType'"; + variant (lang) "attribute"; + variant (base) "untagged"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:ietf:params:xml:ns:resource-lists'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn b/ttcn/patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn new file mode 100644 index 0000000..2d6ed99 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn @@ -0,0 +1,98 @@ +/******************************************************************************* +* Copyright (c) 2000-2016 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/5 R4D +* +* 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: urn_oma_xml_xdm_common_policy.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Fri Mar 4 09:23:30 2016 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - xdm_commonPolicy-v1_0.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:oma:xml:xdm:common-policy" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_oma_xml_xdm_common_policy { + + +import from XSD all; + + +/* OMA specific "conditions" child elements */ + + +type EmptyType Other_identity +with { + variant "name as 'other-identity'"; + variant "element"; +}; + + +type record External_list +{ + record of AnchorType entry_list +} +with { + variant "name as 'external-list'"; + variant "element"; + variant (entry_list) "untagged"; + variant (entry_list[-]) "name as 'entry'"; +}; + + +type EmptyType Anonymous_request +with { + variant "name as 'anonymous-request'"; + variant "element"; +}; + + +type record AnchorType +{ + XSD.AnyURI anc optional, + record of XSD.String attr optional +} +with { + variant "name as uncapitalized"; + variant (anc) "attribute"; + variant (attr) "anyAttributes"; +}; + + +type record EmptyType +{ + +} +with { + variant "name as uncapitalized"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'urn:oma:xml:xdm:common-policy'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_upper_tester_titan/module.mk b/ttcn/patch_lib_upper_tester_titan/module.mk new file mode 100644 index 0000000..15c3733 --- /dev/null +++ b/ttcn/patch_lib_upper_tester_titan/module.mk @@ -0,0 +1 @@ +sources := LibUpperTester.ttcn \ No newline at end of file diff --git a/virtualization/docker-dev/Dockerfile b/virtualization/docker-dev/Dockerfile new file mode 100644 index 0000000..a3dcbeb --- /dev/null +++ b/virtualization/docker-dev/Dockerfile @@ -0,0 +1,28 @@ +FROM stfubuntu:20.04 + +LABEL ETSI AtsImsIot +LABEL description="ETSI AtsImsIot Docker Image" + +ENV TERM=linux \ + HOME=/home/etsi \ + HOSTNAME=docker-etsi-AtsImsIot + +COPY home /home/etsi + +RUN /etc/init.d/ssh start + +RUN cd /home/etsi \ + && chown -R etsi:etsi . \ + && ls ./etc/init.d/*.sh | while read S; do chmod 0750 "$S" || exit 1; done + +USER etsi + +RUN cd ${HOME} \ + && ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 \ + && export PATH=$HOME/bin:$PATH \ + && ls ${HOME}/etc/init.d/*.sh | while read S; do /bin/bash -c "$S" || exit 1; done \ + && rm -fr ${HOME}/etc + +CMD ["/bin/bash"] + +# That's all Floks diff --git a/virtualization/docker-dev/Dockerfile.stfubuntu b/virtualization/docker-dev/Dockerfile.stfubuntu new file mode 100644 index 0000000..9fa6645 --- /dev/null +++ b/virtualization/docker-dev/Dockerfile.stfubuntu @@ -0,0 +1,86 @@ +FROM ubuntu:20.04 + +LABEL ETSI CTI +LABEL description="STF Docker Ubuntu image" + +ENV TERM=linux \ + HOSTNAME=docker-STF + +RUN echo "docker-STF-dev" > /etc/hostname \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y \ + && DEBIAN_FRONTEND=noninteractive apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y \ + autoconf \ + bison \ + build-essential \ + cmake \ + curl \ + dos2unix \ + doxygen \ + emacs \ + expect \ + flex \ + g++-9 \ + gcc-9 \ + git \ + gnutls-bin \ + graphviz \ + iputils-ping \ + libedit2 \ + libedit-dev \ + libffi-dev \ + libglib2.0-dev \ + libgcrypt-dev \ + libjsoncpp-dev \ + libncurses5-dev \ + libpcap-dev \ + libssl-dev \ + libtool-bin \ + libtool \ + libxml2-dev \ + libxml2-utils \ + libyaml-dev \ + lsof \ + ntp \ + openssh-server \ + pkg-config \ + python3-dev \ + python3-pip \ + python3-setuptools \ + sudo \ + sshpass \ + tcpdump \ + texlive-font-utils \ + texlive-latex-extra \ + tzdata \ + valgrind \ + xutils-dev \ + xsltproc \ + && DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y \ + && DEBIAN_FRONTEND=noninteractive apt-get autoclean \ + && pip3 install --upgrade setuptools pip \ + && useradd --create-home --shell /bin/bash etsi \ + && echo "etsi:etsi" | chpasswd \ + && adduser etsi sudo \ + && echo "" >> /etc/profile \ + && echo 'export HOME=/home/etsi' >> /etc/profile \ + && echo 'export LD_LIBRARY_PATH=${HOME}/lib:$LD_LIBRARY_PATH' >> /etc/profile \ + && echo 'export PATH=${HOME}/bin:$PATH' >> /etc/profile \ + && echo 'cd ${HOME}' >> /etc/profile \ + && echo ". ./devenv.bash" >> /etc/profile \ + && cd /home/etsi \ + && echo "" >> ./.profile \ + && echo 'export HOME=/home/etsi' >> ./.profile \ + && echo 'export LD_LIBRARY_PATH=${HOME}/lib:$LD_LIBRARY_PATH' >> ./.profile \ + && echo 'export PATH=${HOME}/bin:$PATH' >> ./.profile \ + && echo 'cd ${HOME}' >> ./.profile \ + && echo ". ./devenv.bash" >> ./.profile \ + && mkdir -p bin lib include tmp frameworks docs man dev \ + && chown -R etsi:etsi * + +EXPOSE 22 + +CMD ["/bin/bash"] + +# That's all Floks diff --git a/virtualization/docker-dev/README.md b/virtualization/docker-dev/README.md new file mode 100644 index 0000000..1bd1048 --- /dev/null +++ b/virtualization/docker-dev/README.md @@ -0,0 +1,99 @@ +# HOWTO build docker images + +## General imformation + +Pre-requisites on your host machine: + +- Install [Docker](https://docs.docker.com/install/) + +#### From Windows host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install any X Server. For example [VcXsrv](https://sourceforge.net/projects/vcxsrv/) + +#### From Mac host: + +- Install [Virtualbox](https://www.virtualbox.org/manual/ch01.html) +- Install [XQuartz](https://www.xquartz.org) + +#### From Linux host: + +- No other requirements + +## Build docker image + +For Windows host, rename ```build.cmd.a``` and ```run.cmd.a``` to ```build.cmd``` and ```run.cmd``` respectivelly. + +Special scrips ```build.sh``` (or ```build.cmd```) can be executed to automatically build all necessary images. + +There are several build stages: + +1. Build STF Ubuntu 18.04 image +2. Install Titan from Github +3. Install Eclipse and Titan Eclipse plugin into ~/frameworks/titan +4. Install asn1c into ~/frameworks/asn1c +5. Checkout STF569 sources from ETSI svn repository using default credentials +6. Build ASN.1 recoder library +7. Build certificate generation tool + +## Import and build ETSI AtsImsIot project + +### Run Docker image + +#### From Windows host: + +1. Authorize Docker container to interact with the XServer: +Go to the X Server installation directory and add the Docker container ip address to the file ```X0.hosts```: +``` +localhost +inet6:localhost +192.168.99.100 +``` + +Execute ```run.cmd``` or launch a command line window and run the command + +```docker run -it --net=host -e DISPLAY=192.168.99.1:0 AtsImsIot:latest``` + +NOTE: Modify the IP address in the command for the address of 'VirtualBox Hot-Only Network'. + +#### From Linux host: + +Execute ```run.sh``` or launch a command line window and run the command + +```sh +docker run -it --net=host -e DISPLAY=$DISPLAY \ +-v /tmp/.X11-unix:/tmp/.X11-unix AtsImsIot:latest +``` + +### Import eclipse project + +1. Whithin the docker container, on the linux command prompt type: + + ```eclipse -data ~/dev/Workspace``` + + Eclipse IDE shall be shown on the hosts Screen. + Possible problems: + - eclipse not found: check the PATH environment variable. It shall contain $HOME/bin path. Otherwise add it: + ```export PATH=$HOME/bin:$PATH``` + +2. Run "File -> Import" and import the ```~/dev/AtsImsIot/AtsImsIot.tpd``` file. + + This can take a time, be patient. + **Do not run build in eclipse**, we don't have enough time. + +### Build the project + +```cd ~/Workspace/AtsImsIot/bin``` + +```make``` + +Possible problems: + - Error in AbstractSocket build: Build it explicitly: + ```cd ~/Workspace/Abstract_Socket_CNL113384/bin_ssl && make``` + +### Execute tests +1. Launch eclipse: ```eclipse -data ~/dev/Workspace``` +2. Select configuration from the /etc/folder: + - AtsImsIot.cfg - Default ETSI AtsImsIot test suite. +3. Right-click on the configuration file and select **Run As -> TITAN Parallel launcher** + diff --git a/virtualization/docker-dev/build.sh b/virtualization/docker-dev/build.sh new file mode 100755 index 0000000..b5069aa --- /dev/null +++ b/virtualization/docker-dev/build.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright ETSI 2020-2021 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +set -e +set -vx + +# Force removing stfubuntu docker image +if [ "$1" == "--force-stfubuntu" ]; then + if [ -n `docker images -q stfubuntu` ]; then + docker rmi --force `docker images -q stfubuntu` || exit 1 + fi +fi +# Check and build stfubuntu image +if [ -z `docker images -q stfubuntu` ]; then + docker build --no-cache --tag stfubuntu:20.04 -f Dockerfile.stfubuntu --force-rm . || exit 1 +fi + +docker build --no-cache --tag etsiforge/AtsImsIot --force-rm . || ( echo "Docker build failed: $?"; exit 1 ) + +docker images +docker inspect etsiforge/AtsImsIot:latest || ( echo "Docker inspect failed: $?"; exit 1 ) + +# That's all Floks +exit 0 diff --git a/virtualization/docker-dev/home/etc/init.d/10-titan.sh b/virtualization/docker-dev/home/etc/init.d/10-titan.sh new file mode 100755 index 0000000..c7d2c4c --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/10-titan.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Install titan\n*****************************\n" +SRC_DIR=${HOME}/frameworks/titan/titan.core +export TTCN3_DIR=$HOME/frameworks/titan/Install + +[ -f /usr/bin/java ] && export JAVA_HOME=`readlink -f /usr/bin/java | sed "s:bin/java::"` +TITAN_REPO=`cat ${HOME}/etc/titan_repos.txt | grep 'titan\.core\.git' | head -n 1` +export PATH=$PATH:$TTCN3_DIR/bin + +mkdir -p "$SRC_DIR" +cd "$SRC_DIR/.." || exit 1 + +# Install titan core +git clone --progress "$TITAN_REPO" || exit 1 + +cd titan.core || exit 1 +cat >Makefile.personal <> $HOME/.bashrc +echo "export PATH=\$PATH:\$TTCN3_DIR/bin" >> $HOME/.bashrc + +# Install other repos +cd $SRC_DIR/.. || exit 1 +cat ${HOME}/etc/titan_repos.txt | grep -v -e '^\s*#' -e 'titan\.core' | while read REPO; do + [ -z $ $REPO ] && continue + WS=`echo $REPO | sed -e 's|.*/||g' -e 's|\.git||g'` + if git clone --progress "${REPO}" "${WS}"; then + [ -f "$WS/Makefile" ] && make -C "$WS" + fi +done + +cd $HOME diff --git a/virtualization/docker-dev/home/etc/init.d/30-osip.sh b/virtualization/docker-dev/home/etc/init.d/30-osip.sh new file mode 100755 index 0000000..db8c152 --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/30-osip.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Install osip\n*****************************\n" +cd ${HOME}/frameworks +git clone https://git.savannah.gnu.org/git/osip.git ./osip +cd osip +./autogen.sh +./configure --prefix=/home/etsi +make && make install + +cd ${HOME} diff --git a/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh b/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh new file mode 100755 index 0000000..d2d01d3 --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/40-etsi_AtsImsIot.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Checkout TTF T012 sources\n*****************************\n" +mkdir -p ${HOME}/dev && cd ${HOME}/dev || exit 1 + +git clone --branch devel --recurse-submodules --single-branch https://forge.etsi.org/rep/int/vxlte/emergency-iop.git || exit 1 + +echo -e "*****************************\n* Set up environment\n*****************************\n" +cd /home/etsi/dev/emergency-iop/scripts || exit 1 +ln -sf /home/etsi/dev/emergency-iop/scripts/devenv.bash.ubuntu /home/etsi/devenv.bash || exit 1 +. /home/etsi/devenv.bash || exit 1 + +echo -e "*****************************\n* Apply patched \n*****************************\n" +cd /home/etsi/dev/emergency-iop || exit 1 +./install.sh || exit 1 + +echo -e "*****************************\n* Build test suites\n*****************************\n" +ATS_LIST="AtsLIS AtsECRF AtsESRP AtsPSAP AtsBCF" +for i in ${ATS_LIST} +do + export ATS=$i + make +done + +echo -e "*****************************\n* Init Eclipse Workspace\n*****************************\n" + +echo -e "*****************************\n* Setup a configuration file\n*****************************\n" +cd ./etc/AtsImsIot +ln -sf AtsImsIot.cfg_ AtsImsIot.cfg +cd - + +echo -e "*****************************\n* Change sudo in command line\n*****************************\n" +cd /home/etsi/dev/emergency-iop/scripts +export ATS=AtsLIS +#sed --in-place 's/sudo/echo "etsi" \| sudo -S/' ./run_all.bash + +cd /home/etsi/dev/emergency-iop + diff --git a/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh b/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh new file mode 100755 index 0000000..a2eee05 --- /dev/null +++ b/virtualization/docker-dev/home/etc/init.d/50-doxygen.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +#set -e +set -vx + +echo -e "*****************************\n* Build docs \n*****************************\n" +. /home/etsi/devenv.bash +cd ${HOME}/dev/emergency-iop/docs || exit 1 +doxygen ./o2.cfg || exit 1 + +# Generate PDF file +cd ${HOME}/dev/emergency-iop/docs/AtsImsIotDocs/latex +make && mv refman.pdf ${HOME}/docs/AtsImsIot_help.pdf + +cd ${HOME} + +exit 0 diff --git a/virtualization/docker-dev/home/etc/titan_repos.txt b/virtualization/docker-dev/home/etc/titan_repos.txt new file mode 100644 index 0000000..8842f4e --- /dev/null +++ b/virtualization/docker-dev/home/etc/titan_repos.txt @@ -0,0 +1,56 @@ +https://gitlab.eclipse.org/eclipse/titan/titan.core.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Abstract_Socket.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.HTTPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LANL2asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PCAPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.PIPEasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SCTPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SIPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SQLasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TCPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.TELNETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UDPasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.COMMON.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DHCPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.DNS.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICMPv6.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RTSP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SMTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SNMP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.TCP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.UDP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.XMPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.misc.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPasp_RFC4511.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.LDAPmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.Common_Components.Socket-API.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SSHCLIENTasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.STDINOUTmsg.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.SUNRPCasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.UNIX_DOMAIN_SOCKETasp.git +https://gitlab.eclipse.org/eclipse/titan/titan.TestPorts.IPL4asp.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.FrameRelay.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.H248_v2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IMAP_4rev1.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ICAP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IKEv2.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IPsec.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.IUA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.JSON_v07_2006.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.L2TP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.M3UA.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MIME.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.MSRP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.PPP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.ProtoBuff.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.RADIUS_ProtocolModule_Generator.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.SRTP.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.WebSocket.git +https://gitlab.eclipse.org/eclipse/titan/titan.ProtocolModules.HTTP2.0.git +https://gitlab.eclipse.org/eclipse/titan/titan.Libraries.TCCUsefulFunctions.git diff --git a/virtualization/docker-dev/run.sh b/virtualization/docker-dev/run.sh new file mode 100755 index 0000000..babf174 --- /dev/null +++ b/virtualization/docker-dev/run.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Copyright ETSI 2018-2020 +# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt + +#set -e +set -vx + +docker run --interactive --tty --rm --publish 2222:22 --env DISPLAY=$DISPLAY --volume /tmp/.X11-unix:/tmp/.X11-unix --cap-add=NET_RAW --cap-add=NET_ADMIN etsiforge/AtsImsIot:latest + +# That's all Floks +exit 0 diff --git a/virtualization/docker/Dockerfile b/virtualization/docker/Dockerfile new file mode 100644 index 0000000..f8ef5f5 --- /dev/null +++ b/virtualization/docker/Dockerfile @@ -0,0 +1,60 @@ +FROM alpine:latest + +# Install dependencies +RUN apk update && \ + apk add --no-cache autoconf automake sudo make git g++ diffutils expect openssl-dev libxml2-dev libxml2-utils libxslt-dev libtool ncurses-dev jsoncpp-dev readline-dev flex bison perl libexecinfo-dev bash libedit libedit-dev lksctp-tools lksctp-tools-dev libpcap-dev + +# Create user and sudouser +RUN \ + addgroup -g 1000 etsi && \ + adduser -S -D -u 1000 -G etsi -h /home/etsi -s /bin/bash etsi && \ + echo "etsi:etsi" | chpasswd && \ + echo "etsi ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers || exit 1 +USER etsi + +# Setup Hosts file at the boot time +RUN \ + echo 'sudo sh -c "cp /etc/hosts /etc/append && (echo \"127.0.1.1 $HOSTNAME\"; cat /etc/append) > /etc/hosts"' >> /home/etsi/.bashrc \ + echo 'sh' >> /home/etsi/.bashrc || exit 1 + +# Clone OSIP +WORKDIR /home/etsi +RUN \ + mkdir -p frameworks dev tmp && cd frameworks \ + && cd ${HOME}/frameworks \ + && git clone https://git.savannah.gnu.org/git/osip.git ./osip \ + && cd osip \ + && ./autogen.sh \ + && ./configure --prefix=/home/etsi \ + && make && make install \ + && cd - || exit 1 + +# Clone Titan +RUN git clone https://github.com/eclipse/titan.core.git || exit 1 +WORKDIR /home/etsi/frameworks/titan.core/ + +# Setup ENV variables +ENV TTCN3_DIR=/home/etsi/frameworks/titan.core/Install +ENV PATH=$TTCN3_DIR/bin:$PATH \ + LD_LIBRARY_PATH=$TTCN3_DIR/lib:$LD_LIBRARY_PATH + +# Set flags +RUN \ + echo "ALPINE_LINUX=yes" > Makefile.personal && \ + echo "TTCN3_DIR=$TTCN3_DIR" >> Makefile.personal && \ + echo "JNI=no" >> Makefile.personal && \ + echo "GUI=no" >> Makefile.personal && \ + echo "DEBUG=no" >> Makefile.personal || exit 1 + +# Build Titan +RUN \ + sed --in-place 's/LINUX_LIBS := -lxml2/LINUX_LIBS := -lxml2 -lpthread/g' ./core/Makefile && \ + make install && make clean || exit 1 + +WORKDIR /home/etsi/dev + +EXPOSE 443/tcp +EXPOSE 5060/udp +EXPOSE 5061/udp + +ENTRYPOINT /home/yann/dev/cise/virtualization/docker/docker-entrypoint.sh diff --git a/virtualization/docker/docker-entrypoint.sh b/virtualization/docker/docker-entrypoint.sh new file mode 100755 index 0000000..590d138 --- /dev/null +++ b/virtualization/docker/docker-entrypoint.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -euo pipefail + +usage() { + echo "No command specified. Available commands:" + for i in $(echo $commands | sed "s/,/ /g") + do + echo " $i" + done +} + +commands="help,build,clean,list,modulepar,rebuild,run,version" + +if [ $# == 0 ]; then + usage + exit 1 +fi + +if [ $# == 2 ]; then + if [ "$2" != "" ]; then + export ATS=Ats$2 + cli="${GEN_DIR}/bin/$ATS" + echo "cli: $cli" + fi +fi + + +case "$1" in + build) + cd ${GEN_DIR} && make + ;; + clean) + cd ${GEN_DIR} && make clean + ;; + list) + ${cli} -l + ;; + modulepar) + ${cli} -p + ;; + rebuild) + cd ${GEN_DIR} && rm -fr ./bin ./build ; make + ;; + run) + cd ${GEN_DIR}/scripts && ./run_all.bash + ;; + version) + compiler -v + ;; + *) + usage + exit 1 + ;; +esac + +unset ATS +exit 0 \ No newline at end of file diff --git a/virtualization/docker/docker-run.sh b/virtualization/docker/docker-run.sh new file mode 100755 index 0000000..6a5d1e7 --- /dev/null +++ b/virtualization/docker/docker-run.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -exo pipefail + +cd "$(dirname ${BASH_SOURCE})" + +docker run --rm -it \ + -w /home/yann/dev/AtsImsIot \ + -e GEN_DIR=/home/yann/dev/AtsImsIot \ + -p 0.0.0.0:443:443 \ + -p 0.0.0.0:5060:5060/udp \ + -p 0.0.0.0:5061:5061/udp \ + -u "$(id -u):$(id -g)" \ + -v "${PWD}/../..:/home/yann/dev/AtsImsIot" \ + --entrypoint /home/yann/dev/AtsImsIot/virtualization/docker/docker-entrypoint.sh \ + alpine-AtsImsIot:latest "$@" diff --git a/virtualization/vagrant/Vagrantfile b/virtualization/vagrant/Vagrantfile new file mode 100644 index 0000000..86b0359 --- /dev/null +++ b/virtualization/vagrant/Vagrantfile @@ -0,0 +1,73 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# All Vagrant configuration is done below. The "2" in Vagrant.configure +# configures the configuration version (we support older styles for +# backwards compatibility). Please don't change it unless you know what +# you're doing. +Vagrant.configure("2") do |config| + # The most common configuration options are documented and commented below. + # For a complete reference, please see the online documentation at + # https://docs.vagrantup.com. + + # Every Vagrant development environment requires a box. You can search for + # boxes at https://atlas.hashicorp.com/search. + config.vm.box = "bento/ubuntu-18.04" + + # Disable automatic box update checking. If you disable this, then + # boxes will only be checked for updates when the user runs + # `vagrant box outdated`. This is not recommended. + # config.vm.box_check_update = false + + config.vm.boot_timeout = 900 + + # Use this hostname to force provisioner script to using SVN instead of external HDD + #config.vm.hostname = "vagrant-prov" + + # Create a forwarded port mapping which allows access to a specific port + # within the machine from a port on the host machine. In the example below, + # accessing "localhost:8080" will access port 80 on the guest machine. + # config.vm.network "forwarded_port", guest: 80, host: 8080 + + # Create a private network, which allows host-only access to the machine + # using a specific IP. + #config.vm.network "private_network", ip: "192.168.4.94" + + # Create a public network, which generally matched to bridged network. + # Bridged networks make the machine appear as another physical device on + # your network. + #config.vm.network "public_network" + + # Share an additional folder to the guest VM. The first argument is + # the path on the host to the actual folder. The second argument is + # the path on the guest to mount the folder. And the optional third + # argument is a set of non-required options. + + # Provider-specific configuration so you can fine-tune various + # backing providers for Vagrant. These expose provider-specific options. + # Example for VirtualBox: + # + config.vm.provider "virtualbox" do |vb| + # Display the VirtualBox GUI when booting the machine + #vb.gui = true + vb.customize ["modifyvm", :id, "--monitorcount", "1"] + vb.customize ["modifyvm", :id, "--vram", "12"] + # Customize the amount of memory on the VM: + vb.memory = "4096" + end + # + # View the documentation for the provider you are using for more + # information on available options. + + # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies + # such as FTP and Heroku are also available. See the documentation at + # https://docs.vagrantup.com/v2/push/atlas.html for more information. + # config.push.define "atlas" do |push| + # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" + # end + + # Enable provisioning with a shell script. Additional provisioners such as + # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the + # documentation for more information about their specific syntax and use. + config.vm.provision "shell", path: "provisioner.bash", privileged: false +end diff --git a/virtualization/vagrant/provisioner.bash b/virtualization/vagrant/provisioner.bash new file mode 100755 index 0000000..6c3010f --- /dev/null +++ b/virtualization/vagrant/provisioner.bash @@ -0,0 +1,132 @@ +#!/bin/bash +# Prepare environment for the build +#set -e # Exit with non 0 if any command fails +#set -vx + +# Update system +sudo DEBIAN_FRONTEND=noninteractive apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade -y +sudo DEBIAN_FRONTEND=noninteractive apt-get install software-properties-common -y +sudo DEBIAN_FRONTEND=noninteractive apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get --allow-unauthenticated install emacs openjdk-11-jre gcc-9 g++-9 git subversion lsof ntp gdb make cmake flex bison autoconf doxygen graphviz libedit2 libedit-dev libtool libncurses5-dev expect libssl-dev libgcrypt-dev libxml2-dev xutils-dev tcpdump libpcap-dev libwireshark-dev wget tree unzip sshpass kubuntu-desktop valgrind qt5-default qttools5-dev qtmultimedia5-dev libqt5svg5-dev vim tzdata dos2unix xsltproc -y +#sudo DEBIAN_FRONTEND=noninteractive apt --fix-broken install -y +sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y +sudo DEBIAN_FRONTEND=noninteractive apt-get clean + +gcc --version +g++ --version +valgrind --version + +export HOME=/home/vagrant + +export PATH_DEV=${HOME}/dev +export HOME_FRAMEWORKS=${HOME}/frameworks +export HOME_LIB=${HOME}/lib +export HOME_BIN=${HOME}/bin +export HOME_ETC=${HOME}/etc +export HOME_INC=${HOME}/include +export HOME_TMP=${HOME}/tmp +export HOME_DOCS=${HOME}/docs +export PATH=${HOME_BIN}:${PATH} +export LD_LIBRARY_PATH=${HOME_LIB}:/usr/local/lib:${LD_LIBRARY_PATH} + +OLD_PWD=`pwd` +# Create directories +mkdir -p ${HOME_LIB} +if [ ! -d ${HOME_LIB} ] +then + exit -1 +fi +mkdir -p ${HOME_INC} +if [ ! -d ${HOME_INC} ] +then + exit -1 +fi +mkdir -p ${HOME_BIN} +if [ ! -d ${HOME_BIN} ] +then + exit -1 +fi +mkdir -p ${HOME_TMP} +if [ ! -d ${HOME_TMP} ] +then + exit -1 +fi +mkdir -p ${HOME_DOCS} +if [ ! -d ${HOME_DOCS} ] +then + exit -1 +fi +mkdir -p ${HOME_FRAMEWORKS} +if [ ! -d ${HOME_FRAMEWORKS} ] +then + exit -1 +fi +mkdir -p ${PATH_DEV} +if [ ! -d ${PATH_DEV} ] +then + exit -1 +fi + +cd /home/vagrant +echo "" >> /home/vagrant/.bashrc +echo "export LD_LIBRARY_PATH=/home/vagrant/dev/emergency-iop/lib:$LD_LIBRARY_PATH" >> /home/vagrant/.bashrc +echo "export PATH=/home/vagrant/bin:$PATH" >> /home/vagrant/.bashrc +echo ". ~/devenv.bash" >> /home/vagrant/.bashrc + +cd /home/vagrant/dev +git clone --recurse-submodules --branch=devel https://forge.etsi.org/rep/int/vxlte/emergency-iop.git +cd /home/vagrant/dev/emergency-iop +./install.sh + +# Install all frameworks + +# Install osip +cd ${HOME_FRAMEWORKS} +git clone git://git.savannah.gnu.org/osip.git ./osip +cd ./osip +./autogen.sh +./configure --prefix=/home/vagrant +make && make install + +# Install GoogleTest +cd ${HOME_FRAMEWORKS} +git clone https://github.com/google/googletest.git googletest +cd ${HOME_FRAMEWORKS}/googletest/ +cmake . +make CXX=g++ +sudo make install + +# Install latest LCOV +cd ${HOME_FRAMEWORKS} +mkdir -p ${HOME_FRAMEWORKS}/lcov +cd ${HOME_FRAMEWORKS}/lcov +wget http://ftp.de.debian.org/debian/pool/main/l/lcov/lcov_1.13.orig.tar.gz +tar xf lcov_1.13.orig.tar.gz +sudo make -C lcov-1.13/ install + +# Install lcov to coveralls conversion +sudo gem install coveralls-lcov + +lcov --version +coveralls-lcov -h + +# Build TITAN +cd /home/vagrant/dev/emergency-iop/scripts +./build_titan.bash +. /home/vagrant/devenv.bash + +# Build the AtsLIS +cd /home/vagrant/dev/emergency-iop +export ATS=AtsLIS +make + +# Change user in cfg files +cd ${HOME}/dev/emergency-iop/scripts +./update_user_name.sh emergency-iop + +cd ${OLD_PWD} + +sudo init 6 + +exit 0 -- GitLab From eb2e398a69fc1b8ad2b5890f85721026e9d4c53a Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 9 Jun 2023 08:31:30 +0200 Subject: [PATCH 45/84] Apply TITAN workaround for Diameter inline template --- Makefile | 4 - emergency-iop.code-workspace | 3 + install.sh | 6 +- .../AtsImsIot_Diameter_Templates.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 118 +- ttcn/AtsImsIot/AtsImsIot_Functions.ttcn | 20 +- ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 127 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 190 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 20 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn | 253 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 212 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn | 92 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn | 24 +- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 54 +- ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn | 45 +- .../AtsImsIot_TestConfiguration.ttcn | 2826 +++++----- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 302 +- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 332 +- ttcn/AtsImsIot/module.mk | 4 + .../LibIms_UpperTester.ttcn | 11 +- ttcn/LibIot/LibIot_Functions.ttcn | 2 +- ttcn/LibIot/LibIot_PIXITS.ttcn | 4 +- ttcn/LibIot/LibIot_TestInterface.ttcn | 2 +- ttcn/LibIot/LibIot_TypesAndValues.ttcn | 2 +- ttcn/LibIot/LibIot_VxLTE_Functions.ttcn | 28 +- ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 6 +- ttcn/LibMsrp/LibMsrp_Functions.ttcn | 8 +- ttcn/LibUpperTester/LibUpperTester.ttcn | 2 +- ttcn/patch_lib_diameter_titan/module.mk | 20 +- ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn | 1548 ------ .../patch_lib_ims_titan/LibIms_Templates.ttcn | 4632 ----------------- ttcn/patch_lib_ims_titan/module.mk | 10 +- ttcn/patch_lib_sip_titan/module.mk | 50 +- 39 files changed, 2476 insertions(+), 8563 deletions(-) delete mode 100644 ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn delete mode 100644 ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn diff --git a/Makefile b/Makefile index 2659c9e..451a6c3 100644 --- a/Makefile +++ b/Makefile @@ -111,10 +111,6 @@ $(cc_objects) : $(outdir)/%.o : %.cc $(gen_sources): $(outdir)/.generate $(outdir)/.generate: Makefile $(tt_sources) - $(foreach F, $(wildcard ttcn/patch_ims_titan/*.ttcn), cp $(F) ttcn/LibIms/ttcn;) - $(foreach F, $(wildcard ttcn/patch_sip_titan/*.ttcn), cp $(F) ttcn/LibSip/ttcn;) - $(foreach F, $(wildcard ttcn/patch_lib_common_titan/ttcn/*.ttcn), cp $(F) ttcn/LibCommon/ttcn;) - $(foreach F, $(wildcard ttcn/patch_lib_http/*.ttcn), cp $(F) ttcn/LibIts/ttcn/Http;) $(TTCN3_DIR)/bin/compiler $(TTCN3_COMPILER_OPTIONS) -o $(outdir) $(tt_sources) touch $@ diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index 362d7c2..82ddd22 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -2,6 +2,9 @@ "folders": [ { "path": "." + }, + { + "path": "../../tmp/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator" } ] } \ No newline at end of file diff --git a/install.sh b/install.sh index 419a8ac..c1bb886 100755 --- a/install.sh +++ b/install.sh @@ -21,10 +21,10 @@ ln -sf module_emtel.mk module.mk cd $BASE_PATH ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -ln -f ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn/ -ln -f ./ttcn/patch_lib_ims_titan/*.ttcn ./ttcn/LibIms/ttcn/ +cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn/ +cp ./ttcn/patch_lib_ims_titan/ttcn/*.ttcn ./ttcn/LibIms/ttcn/ ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ -ln -f ./ttcn/patch_lib_sip_titan/*.ttcn ./ttcn/LibSip/ttcn/ +cp ./ttcn/patch_lib_sip_titan/*.ttcn ./ttcn/LibSip/ttcn/ ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/ ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter ln -f ./ttcn/patch_lib_msrp_titan/module.mk ./ttcn/LibMsrp diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index fe9060e..b33c7b0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -10,8 +10,8 @@ module AtsImsIot_Diameter_Templates { //LibCommon - import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; - import from LibCommon_BasicTypesAndValues {type UInt8, UInt32, UInt64;}; + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; //LibDiameter import from LibDiameter_TypesAndValues all; @@ -21,7 +21,7 @@ module AtsImsIot_Diameter_Templates { import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code, Subscription_Data_AVP}; + import from LibDiameter_Types_S6a_AVPs all; import from LibDiameter_Types_S9_AVPs all; group DiameterHeaderFields { diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index a12755a..7beb1b6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -762,7 +762,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { @@ -887,7 +887,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF })) @@ -957,7 +957,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1022,7 +1022,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF })) { @@ -1093,7 +1093,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME })) { @@ -1163,7 +1163,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -1233,7 +1233,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1306,7 +1306,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -1351,14 +1351,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1396,7 +1396,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { @@ -1441,14 +1441,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1485,7 +1485,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1515,14 +1515,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1560,7 +1560,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -1591,14 +1591,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + f_mtc_userCheckCallCancelled(v_psap); // Event 20 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1636,7 +1636,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS })) { @@ -1667,14 +1667,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + f_mtc_userCheckCallCancelled(v_psap); // Event 20 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1713,7 +1713,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1743,14 +1743,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 + f_mtc_userCheckCallCancelled(v_psap); // Event 20 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1792,7 +1792,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -1823,14 +1823,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1868,7 +1868,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -1899,14 +1899,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1944,7 +1944,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -1975,14 +1975,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2020,7 +2020,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -2051,14 +2051,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2096,7 +2096,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2127,14 +2127,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2172,7 +2172,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2203,14 +2203,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2247,7 +2247,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP })) { @@ -2278,14 +2278,14 @@ module AtsImsIot_Emergency { // TODO f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 + f_mtc_userCheckCallCancelled(v_psap); // Event 34 // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); diff --git a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn index 9a94e23..19f0bd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -6,7 +6,7 @@ module AtsImsIot_Functions { //LibDiameter - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + import from LibDiameter_TypesAndValues all; //LibSip import from LibSip_SIPTypesAndValues all; @@ -15,22 +15,22 @@ module AtsImsIot_Functions { import from LibIms_UpperTester all; //LibIot - import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; - import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } - import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } - import from LibIot_Functions { function f_getE2EVerdict; } - import from LibIot_TypesAndValues { type DefaultList, MonitorInterfaceInfo; } - import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;} + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_Functions all; + import from LibIot_TypesAndValues all; + import from LibIot_VxLTE_Functions all; //LibUpperTester import from LibUpperTester all; //AtsImsIot - import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } + import from AtsImsIot_Templates all; import from AtsImsIot_TestSystem all; - import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter;} + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; group ue { diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn index ca42c58..b81afc1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn @@ -9,10 +9,10 @@ module AtsImsIot_TD_ATT{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn index 0dd94a7..c3d3639 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DRG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn index a88b3f0..066a4d2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DTC{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn index a41eada..ad9f369 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn @@ -11,17 +11,15 @@ module AtsImsIot_TD_INI{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface {type IotEquipmentUser;} - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C;} + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions {function f_getImUser;} + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TypesAndValues all; import from AtsImsIot_TestConfiguration all; @@ -2440,7 +2438,7 @@ module AtsImsIot_TD_INI{ //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) - f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 4) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 4) //Rx/Gx/S9 exchange after INVITE was received at P-CSCF diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn index bde4e54..51a6fd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_REG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn index 3d3f7a4..176d04c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -9,21 +9,21 @@ module AtsImsIot_TP_behavior_CX // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; // LibIot - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_PIXITS all; // AtsImsIot - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; import from AtsImsIot_Diameter_Templates all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from AtsImsIot_TestSystem all; // LibIms import from LibIms_UpperTester all; @@ -95,13 +95,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { mAR_MSG := mw_MAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{mAR_MSG := mw_MAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_MAA_01 - MAR", @@ -111,13 +113,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { mAA_MSG := mw_MAA }; + mw_diameter_msg_fail := { mAA_MSG := mw_MAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{mAA_MSG := mw_MAA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{mAA_MSG := mw_MAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_MAA_01 - MAA", @@ -183,13 +187,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rTR_MSG := mw_RTR }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rTR_MSG := mw_RTR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{rTR_MSG := mw_RTR} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{rTR_MSG := mw_RTR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_RTA_01 - RTR", @@ -199,13 +205,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rTA_MSG := mw_RTA }; + mw_diameter_msg_fail := { rTA_MSG := mw_RTA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{rTA_MSG := mw_RTA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{rTA_MSG := mw_RTA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_RTA_01 - RTA", @@ -277,13 +285,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_01 - SAR", @@ -293,13 +303,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sAA_MSG := mw_SAA_userData }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAA_MSG := mw_SAA_userData} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_01 - SAA", @@ -369,13 +381,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_02 -SAR", @@ -385,13 +399,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sAA_MSG := mw_SAA }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAA_MSG := mw_SAA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_02 - SAA", @@ -467,13 +483,15 @@ group g_HSS { var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAR", @@ -483,13 +501,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAA", @@ -564,13 +584,15 @@ group g_HSS { var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAR", @@ -580,13 +602,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAA", @@ -644,13 +668,16 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic}}, + mw_diameter_msg_fail + }, {0, omit}, "TP_CX_HSS_UAA_02 - UAR", p_forward_to_mtc, @@ -659,13 +686,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/ }; //TODO:Check TP + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/}//TODO:Check TP + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_02 - UAA", @@ -720,13 +749,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_unknownPrivateId }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_unknownPrivateId} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_03 - UAR", @@ -735,13 +766,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamErrorUserUnknown }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamErrorUserUnknown} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_03 - UAA", @@ -798,13 +831,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_04 - UAR", @@ -814,13 +849,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_04 - UAA", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 4ae196b..018853e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_GX { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; group g_PGW { @@ -87,13 +87,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_CCR_01 - CCR", @@ -142,13 +144,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_CCR_02 - CCR", @@ -211,13 +215,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall)} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_01 - RAR", @@ -227,13 +233,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_01 - RAA", @@ -283,13 +291,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_02 - RAR", @@ -299,13 +309,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_02 - RAA", @@ -355,13 +367,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_03 - RAR", @@ -371,13 +385,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_RAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_03 - RAA", @@ -429,13 +445,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_04 - RAR", @@ -445,13 +463,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_04 - RAA", @@ -534,13 +554,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_01 - CCR", @@ -550,13 +572,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_01 - CCA", @@ -609,13 +633,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_02 - CCR", @@ -625,13 +651,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := mw_CCA_resultCode; + mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_02 - CCA", @@ -683,13 +711,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_03 - CCR", @@ -699,13 +729,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_03 - CCA", @@ -769,13 +801,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_qosInformation_class5 }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_qosInformation_class5 } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_04 - CCA", @@ -826,13 +860,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_05 - CCA", @@ -902,13 +938,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos)} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_01 - RAR", @@ -959,13 +997,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_02 - RAR", @@ -1033,13 +1073,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) }; //During validation some additions may be required + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) } //During validation some additions may be required + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_03 - RAR", @@ -1089,13 +1131,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; //During validation some additions may be required + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } //During validation some additions may be required + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_04 - RAR", @@ -1166,13 +1210,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) } - }, - { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_01 - CCR", @@ -1182,13 +1228,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic}; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } - }, - { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_01 - CCA", @@ -1257,13 +1305,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMEI_qosInformation_class5_ES(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMEI_qosInformation_class5_ES(INITIAL_REQUEST_E) } - }, - { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_02 - CCR", @@ -1273,13 +1323,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } - }, - { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_02 - CCA", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index f46956d..416625c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -7,14 +7,14 @@ module AtsImsIot_TP_behavior_IC { - import from AtsImsIot_TestSystem { type SipInterfaceMonitor , ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; @@ -25,9 +25,9 @@ module AtsImsIot_TP_behavior_IC } import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; import from AtsImsIot_Templates_IC all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn index 0559a25..5b20a2a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -7,28 +7,24 @@ module AtsImsIot_TP_behavior_ISC { - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_Common all; import from AtsImsIot_Functions all; import from AtsImsIot_Templates_MW all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; // LibMsrp // import from LibMsrp_TypesAndValues { type MsrpURI }; // import from LibMsrp_Functions { function f_str2msrpUri }; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn index 606a44d..e76815e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn @@ -8,23 +8,23 @@ module AtsImsIot_TP_behavior_RX { // LibIot - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT, PX_EUT_A, PX_EUT_B;} - import from LibIot_VxLTE_PIXITS {modulepar PX_SIP_GMA_UE_IPADDR;} - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; // AtsImsIot - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; import from AtsImsIot_Diameter_Templates all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from AtsImsIot_TestSystem all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; - import from LibDiameter_Steps {function f_IPV4_Address2oct;}; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Steps all; group g_PCRF { @@ -70,13 +70,15 @@ group g_PCRF_ASA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ASA_01 - ASR", @@ -86,13 +88,15 @@ group g_PCRF_ASA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { aSA_MSG := mw_ASA_resultCode }; + mw_diameter_msg_fail := { aSA_MSG := mw_ASA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ASA_01 - ASA", @@ -152,13 +156,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_01 - AAR", @@ -168,13 +174,15 @@ group g_PCRF_AAA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ }; + mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_01 - AAA", @@ -213,13 +221,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_02 - AAA", @@ -265,13 +275,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_03 - AAA", @@ -324,13 +336,15 @@ group g_PCRF_STA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_01 - STA", @@ -378,13 +392,15 @@ group g_PCRF_STA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_02 - STR", @@ -394,13 +410,15 @@ group g_PCRF_STA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_02 - STA", @@ -462,13 +480,15 @@ group g_PCSCF_ASR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_ASR_01 - ASR", @@ -541,13 +561,15 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_01 - AAR", @@ -596,13 +618,14 @@ group g_PCSCF_AAR { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var boolean v_noDiameterMessageExpected := true; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { //check if nothing received }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } //Fail criteria: check if AAR is sent + mw_diameter_msg_fail //Fail criteria: check if AAR is sent }, {0, omit}, "TP_RX_PCSCF_AAR_02 - AAR", @@ -668,17 +691,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(INITIAL_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_03 - AAR", @@ -745,17 +769,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_04 - AAR", @@ -823,17 +848,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_05 - AAR", @@ -899,17 +925,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(INITIAL_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_06 - AAR", @@ -977,17 +1004,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_07 - AAR", @@ -1055,17 +1083,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_08 - AAR", @@ -1133,17 +1162,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_09 - AAR", @@ -1210,17 +1240,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_10 - AAR", @@ -1293,13 +1324,15 @@ group g_PCSCF_RAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_SpecificAction }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_SpecificAction } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_RAA_01 - RAR", @@ -1309,13 +1342,15 @@ group g_PCSCF_RAA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_Rx_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Rx_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_RAA_01 - RAA", @@ -1368,13 +1403,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_01 - STR", @@ -1424,13 +1461,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_02 - STR", @@ -1479,13 +1518,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_03 - STR", @@ -1534,13 +1575,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_04 - STR", @@ -1589,13 +1632,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_05 - STR", @@ -1644,13 +1689,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_06 - STR", @@ -1699,13 +1746,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_07 - STR", @@ -1754,13 +1803,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_08 - STR", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn index f8a1a1a..adfeb78 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_S6A { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; @@ -65,13 +65,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aIR_MSG := mw_AIR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aIR_MSG := mw_AIR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_AIA_01 - AIR", @@ -81,13 +83,15 @@ group g_HSS { ); p_monitorCompRef.done; + var template DIAMETER_MSG mw_diameter_msg_pass := { aIA_MSG := mw_AIA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aIA_MSG := mw_AIA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIA_MSG := mw_AIA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIA_MSG := mw_AIA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_AIA_01 - AIA", @@ -140,13 +144,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cLR_MSG := mw_CLR_cancelation }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cLR_MSG := mw_CLR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_cancelation } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_CLR_01 - CLR", @@ -195,13 +201,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { pUER_MSG := mw_PUER_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { pUER_MSG := mw_PUER_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_PUA_01 - PUR", @@ -211,13 +219,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { pUEA_MSG := mw_PUEA_resultCode }; + mw_diameter_msg_fail := { pUEA_MSG := mw_PUEA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_PUA_01 - PUA", @@ -267,13 +277,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_01 - ULR", @@ -283,13 +295,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uLA_MSG := mw_ULA_resultCode_flags }; + mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_01 - ULA", @@ -339,13 +353,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_02 - ULR", @@ -355,13 +371,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uLA_MSG := mw_ULA_resultCode_flags }; + mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_02 - ULA", @@ -373,12 +391,12 @@ group g_HSS { } } // End of function f_mtc_check_TP_S6A_HSS_ULA_02 - group ES{ - /** - * Starts monitor component behavior for TP_S6A_HSS_ECO_ULA_01 - * @param p_monitorCompRef Reference to monitor component - *

      -		 *Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP."
      +    group ES{
      +        /**
      +         * Starts monitor component behavior for TP_S6A_HSS_ECO_ULA_01
      +         * @param p_monitorCompRef Reference to monitor component
      +         * 
      +         *Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP."
                *
                *Reference 
                *   "TS 129 272 [10], clause 5.2.1.1.2"
      @@ -408,49 +426,53 @@ group g_HSS {
                *           to the EPC_MME_A entity
                *       }
                *   } 
      -		 * 
      - */ - function f_mtc_check_TP_S6A_HSS_ECO_ULA_01( - DiameterInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in boolean p_forward_to_mtc := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ -// p_monitorCompRef.start ( -// f_Iot_Diameter_receive( -// { -// DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } -// }, -// { -// DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } -// }, -// {0, omit}, -// "TP_S6A_HSS_ULA_01 - ULR", -// p_forward_to_mtc, -// p_checkMessage -// ) -// ); -// p_monitorCompRef.done; + *
      + */ + function f_mtc_check_TP_S6A_HSS_ECO_ULA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; +// var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; +// p_monitorCompRef.start ( +// f_Iot_Diameter_receive( +// { +// mw_diameter_msg_pass +// }, +// { +// mw_diameter_msg_fail +// }, +// {0, omit}, +// "TP_S6A_HSS_ULA_01 - ULR", +// p_forward_to_mtc, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; - p_monitorCompRef.start ( - f_Iot_Diameter_receive( - { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_subsdata_flags } - }, - { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } - }, - {0, omit}, - "TP_S6A_HSS_ECO_ULA_01 - ULA", - p_forward_to_mtc, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_S6A_HSS_ECO_ULA_01 - - }// end group ES + var template DIAMETER_MSG mw_diameter_msg_pass := { uLA_MSG := mw_ULA_subsdata_flags }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_S6A_HSS_ECO_ULA_01 - ULA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_ECO_ULA_01 + + }// end group ES } // end group g_HSS group g_MME { @@ -494,13 +516,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - p_monitorCompRef.start ( + var template DIAMETER_MSG mw_diameter_msg_pass := { aIR_MSG := mw_AIR }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aIR_MSG := mw_AIR_basic }; + p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIR_MSG := mw_AIR } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_AIR_01 - AIR", @@ -549,13 +573,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cLR_MSG := mw_CLR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cLR_MSG := mw_CLR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_CLA_01 - CLR", @@ -565,13 +591,15 @@ group g_MME { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cLA_MSG := mw_CLA_resultCode }; + mw_diameter_msg_fail := { cLA_MSG := mw_CLA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLA_MSG := mw_CLA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLA_MSG := mw_CLA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_CLA_01 - CLA", @@ -620,13 +648,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { pUER_MSG := mw_PUER_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { pUER_MSG := mw_PUER_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_PUR_01 - PUR", @@ -678,13 +708,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_ULR_01 - ULR", @@ -736,13 +768,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_ULR_02 - ULR", @@ -755,7 +789,7 @@ group g_MME { } // End of function f_mtc_check_TP_S6A_MME_ULR_02 group ES{ - + }// end group ES } // end group g_MME diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn index a0bdc8b..72aabfd 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_S9 { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; group g_PCRF { @@ -61,13 +61,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAR_01 - AAR", @@ -134,13 +136,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_S9_resultCode /*mw_AAA_S9_AcceptableService*/ }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode /*mw_AAA_S9_AcceptableService*/ } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAA_01 - AAA", @@ -192,13 +196,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_S9_resultCode_mediaCopmonentDescription }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode_mediaCopmonentDescription } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAA_02 - AAA", @@ -247,14 +253,16 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_S9_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_basic } - }, + mw_diameter_msg_fail + }, {0, omit}, "TP_S9_PCRF_ASR_01 - ASR", p_forward_to_mtc, @@ -299,13 +307,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSA_MSG := mw_ASA_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSA_MSG := mw_ASA_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_ASA_01 - ASA", @@ -384,13 +394,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_S9_Establishment(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Establishment(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCR_01 - CCR", @@ -444,13 +456,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_S9_Termination(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Termination(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCR_02 - CCR", @@ -515,13 +529,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCA_01 - CCA", @@ -573,13 +589,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_S9_subsessionDecisionAny }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecisionAny } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCA_02 - CCA", @@ -625,13 +643,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STR_01 - STR", @@ -680,13 +700,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_S9_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STA_01 - STA", @@ -735,13 +757,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_S9_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STA_02 - STA", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn index 9272998..c7e19d2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn @@ -9,21 +9,21 @@ module AtsImsIot_TP_behavior_SH // LibIms import from LibIms_UpperTester all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; @@ -84,10 +84,11 @@ group g_HSS { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var template DIAMETER_MSG mw_diameter_msg_pass := { uDR_MSG := mw_UDR_userData_publicIdentity("tel:"&v_userInfoA.publicId) }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uDR_MSG := mw_UDR_userData_publicIdentity("tel:"&v_userInfoA.publicId)} + mw_diameter_msg_pass }, {}, {0, omit}, @@ -98,10 +99,11 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uDA_MSG := mw_UDA_diamSuccess }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uDA_MSG := mw_UDA_diamSuccess} + mw_diameter_msg_pass }, {}, {0, omit}, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 7b149a1..5627105 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -6,54 +6,16 @@ module AtsImsIot_Templates { - import from LibCommon_BasicTypesAndValues {type UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_TypesAndValues { - type - InterfaceInfoList, - ProtocolFilter, - GeneralConfigurationReq, - GeneralConfigurationRsp, - SetFilterReq, - SetFilterRsp, - StartTrafficCaptureReq, - StartTrafficCaptureRsp, - StopTrafficCaptureReq, - StopTrafficCaptureRsp, - IpAddress, - Status; - } - import from AtsImsIot_TypesAndValues { - type - SipMessage, NAPTRmessage - }; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } - import from LibMsrp_TypesAndValues { - type - SEND_request, - RECEIVE_response - }; - import from LibIot_PIXITS { - modulepar - PX_IOT_TIMESTAMP_OFFSET, - PX_IOT_PCAP_SESSIONS_PATH, - PX_IOT_RECORD_MODE, - PX_IOT_EUTs_IFACE_INFO_LIST, - PX_IOT_FILE_MERGE_LIST, - PX_IOT_FILE_MERGE_PATH, - PX_IOT_MERGE_TOOL_PATH, - PX_IOT_IFACES; - } - import from AtsImsIot_PIXITS { - modulepar - PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN - }; + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; group adapterMsgTemplates { template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn index 4624eff..c5e9044 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn @@ -6,45 +6,16 @@ module AtsImsIot_Templates_IC { - import from LibCommon_BasicTypesAndValues {type UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_TypesAndValues { - type - InterfaceInfoList, - ProtocolFilter, - GeneralConfigurationReq, - GeneralConfigurationRsp, - SetFilterReq, - SetFilterRsp, - StartTrafficCaptureReq, - StartTrafficCaptureRsp, - StopTrafficCaptureReq, - StopTrafficCaptureRsp, - IpAddress, - Status; - } - import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common {type GenericParam, SemicolonParam_List;} - import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} - import from LibIot_PIXITS { - modulepar - PX_IOT_TIMESTAMP_OFFSET, - PX_IOT_PCAP_SESSIONS_PATH, - PX_IOT_RECORD_MODE, - PX_IOT_EUTs_IFACE_INFO_LIST, - PX_IOT_FILE_MERGE_LIST, - PX_IOT_FILE_MERGE_PATH, - PX_IOT_MERGE_TOOL_PATH, - PX_IOT_IFACES; - } - import from AtsImsIot_PIXITS { - modulepar - PX_IMS_SUT_CONF_FACTORY_NAME, - PX_IMS_SUT_CONF_HOME_DOMAIN, - PX_IMS_A_ICID; - } + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index b43963b..ac5ff8f 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -1,548 +1,548 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id $ - * @desc This module contains functions which implement the + * @desc This module contains functions which implement the * configuration of the SUT adapter and mapping of test * components for establishing and tearing down different * test configurations. */ module AtsImsIot_TestConfiguration { - - import from LibCommon_VerdictControl { type FncRetCode; } + + import from LibCommon_VerdictControl { type FncRetCode; } /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ - import from LibIms_UpperTester { modulepar PX_IMS_USER_DATA; } - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; } - import from LibIot_TypesAndValues { - type StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product, - ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; } + import from LibIms_UpperTester { modulepar PX_IMS_USER_DATA; } + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; } + import from LibIot_TypesAndValues { + type StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product, + ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; } /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ import from LibIot_Functions { altstep a_receiveIOTVerdict; function f_setConformanceVerdict, f_setE2EVerdict; } - import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; } - import from LibIot_TestInterface {type IotEquipmentUser;} - import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;} - import from LibIot_TestInterface {type InterfaceMonitor;} - import from AtsImsIot_Templates { - template m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, - m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout, - m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, - m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; } - import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} - - group constantDefinitions { - //* interface monitor name Gm A - const charstring c_gm_A := "Gm A"; - //* interface monitor name Gm B - const charstring c_gm_B := "Gm B"; - //* interface monitor name Mx A + import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; } + import from LibIot_TestInterface all; + import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;} + import from LibIot_TestInterface {type InterfaceMonitor;} + import from AtsImsIot_Templates { + template m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, + m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout, + m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, + m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; } + import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} + + group constantDefinitions { + //* interface monitor name Gm A + const charstring c_gm_A := "Gm A"; + //* interface monitor name Gm B + const charstring c_gm_B := "Gm B"; + //* interface monitor name Mx A const charstring c_mx_A := "Mx A"; //* interface monitor name Mx B const charstring c_mx_B := "Mx B"; - //* interface monitor name Ic - const charstring c_ic := "Ici"; - //* interface monitor name Isc A - const charstring c_isc_A := "Isc A"; - //* interface monitor name Isc B - const charstring c_isc_B := "Isc B"; - //* interface monitor name NAPTR - const charstring c_naptr := "NAPTR"; - //* eut trigger name User A - const charstring c_trigger_A := "User A"; - //* eut trigger name User B - const charstring c_trigger_B := "User B"; - //* eut trigger name User A - const charstring c_userUE_A := "User A"; - const charstring c_userUE_A_emergency := "User A Emergency"; - const charstring c_userUE_A2 := "User A2"; - //* eut trigger name User B - const charstring c_userUE_B := "User B"; - const charstring c_userUE_B2 := "User B2"; + //* interface monitor name Ic + const charstring c_ic := "Ici"; + //* interface monitor name Isc A + const charstring c_isc_A := "Isc A"; + //* interface monitor name Isc B + const charstring c_isc_B := "Isc B"; + //* interface monitor name NAPTR + const charstring c_naptr := "NAPTR"; + //* eut trigger name User A + const charstring c_trigger_A := "User A"; + //* eut trigger name User B + const charstring c_trigger_B := "User B"; + //* eut trigger name User A + const charstring c_userUE_A := "User A"; + const charstring c_userUE_A_emergency := "User A Emergency"; + const charstring c_userUE_A2 := "User A2"; + //* eut trigger name User B + const charstring c_userUE_B := "User B"; + const charstring c_userUE_B2 := "User B2"; //* eut trigger name User C const charstring c_userUE_C := "User C"; - //* interface monitor name Gm C - const charstring c_gm_C := "Gm C"; + //* interface monitor name Gm C + const charstring c_gm_C := "Gm C"; //* eut trigger name User D const charstring c_userUE_D := "User D"; - //* interface monitor name Gm D - const charstring c_gm_D := "Gm D"; + //* interface monitor name Gm D + const charstring c_gm_D := "Gm D"; //* interface monitor name Rx const charstring c_rx := "Rx"; // See ETSI TS 103 029 V3.1.1 clause 5.4.2 //* interface monitor name Mw const charstring c_mw := "Mw"; //* interface monitor name Mx const charstring c_mx := "Mx"; - //* interface monitor name Sgi - const charstring c_sgi := "Sgi"; - //* interface monitor name Rx - const charstring c_s6a := "S6a"; - //* interface monitor name Rx - const charstring c_gx := "Gx"; - //* interface monitor name Mm/Mx/Mw - const charstring c_psap := "Psap"; - } - - group mappingFunctions { - - /** - * - * @desc initialize the adapter port of MTC - */ - function f_cf_adapter_up() runs on ImsTestCoordinator { - map(self:acPort, system:acPort); - } - - /** - * - * @desc uninitialize the adapter port of MTC - */ - function f_cf_adapter_down() runs on ImsTestCoordinator { - unmap(self:acPort, system:acPort); - } - - /** - * - * @desc initialize trigger component ports - * @param p_driver trigger component - */ - function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { - // connect sync ports - connect(p_driver:syncPort, self:syncPort); - // connect TSI ports - map(p_driver:eaPort, system:eaPort); - // configure oracle - f_cf_oracle_up(p_driver); - } - - /** - * - * @desc uninitialize trigger component ports - * @param p_driver trigger component - */ - function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { - // disconnect sync ports - disconnect(p_driver:syncPort, self:syncPort); - // disconnect TSI ports - unmap(p_driver:eaPort, system:eaPort); - // release oracle ports - f_cf_oracle_down(p_driver); - } - - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:dPort, system:dPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:sipPort, system:sipPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:diameterPort, system:diameterPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:naptrPort, system:naptrPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:sgiPort, system:sgiPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); + //* interface monitor name Sgi + const charstring c_sgi := "Sgi"; + //* interface monitor name Rx + const charstring c_s6a := "S6a"; + //* interface monitor name Rx + const charstring c_gx := "Gx"; + //* interface monitor name Mm/Mx/Mw + const charstring c_psap := "Psap"; + } + + group mappingFunctions { + + /** + * + * @desc initialize the adapter port of MTC + */ + function f_cf_adapter_up() runs on ImsTestCoordinator { + map(self:acPort, system:acPort); + } + + /** + * + * @desc uninitialize the adapter port of MTC + */ + function f_cf_adapter_down() runs on ImsTestCoordinator { + unmap(self:acPort, system:acPort); + } + + /** + * + * @desc initialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // connect sync ports + connect(p_driver:syncPort, self:syncPort); + // connect TSI ports + map(p_driver:eaPort, system:eaPort); + // configure oracle + f_cf_oracle_up(p_driver); + } + + /** + * + * @desc uninitialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // disconnect sync ports + disconnect(p_driver:syncPort, self:syncPort); + // disconnect TSI ports + unmap(p_driver:eaPort, system:eaPort); + // release oracle ports + f_cf_oracle_down(p_driver); + } + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:dPort, system:dPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sipPort, system:sipPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:diameterPort, system:diameterPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:naptrPort, system:naptrPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sgiPort, system:sgiPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); } - - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:dPort, system:dPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:sipPort, system:sipPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:diameterPort, system:diameterPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:naptrPort, system:naptrPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:sgiPort, system:sgiPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - } - - group adapterConfiguration { - - function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { - var SetFilterRsp v_rsp; - var template Status v_status := { - code := e_success, - reason := * - } - - tc_wait.start; - acPort.send(p_req); - alt { - [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { - tc_wait.stop; - f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); - f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); - } - [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { - tc_wait.stop; - f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); - f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); - } - [] tc_wait.timeout { - f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); - f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); - } - } - } - - /** - * @desc Initialize traffic cature process - * - * @param - */ - function f_cf_initCapture () runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:dPort, system:dPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sipPort, system:sipPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:diameterPort, system:diameterPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:naptrPort, system:naptrPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sgiPort, system:sgiPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + } + + group adapterConfiguration { + + function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { + var SetFilterRsp v_rsp; + var template Status v_status := { + code := e_success, + reason := * + } + + tc_wait.start; + acPort.send(p_req); + alt { + [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + } + [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + } + [] tc_wait.timeout { + f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + } + } + } + + /** + * @desc Initialize traffic cature process + * + * @param + */ + function f_cf_initCapture () runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - } - /** - * @desc Start traffic cature process - * - * @param - */ - function f_cf_startCapture () runs on ImsTestCoordinator { - - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + } + /** + * @desc Start traffic cature process + * + * @param + */ + function f_cf_startCapture () runs on ImsTestCoordinator { + + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); //Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc Stops traffic cature - * - * @param - */ - function f_cf_stopCapture() runs on ImsTestCoordinator { - //Stop traffic capture processing. - timer tc_configureGuard; //TODO check to import correct modules - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - } - } - - group componentCreation { - - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { - var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; - v_monitor.start(f_setInterfaceNameOnComponent(p_name)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { - var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { - var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { - var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { - var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - } - - - group testConfiguration { //TODO: check to delete at end of STF574 ATS devel - - /** - * @desc - * Test configuration function for roaming registration szenario. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_Gm Gm interface monitor component - * @param p_MxA Mx interface IMS A network - * @param p_ici Mw interface monitor component - * @param p_MxB Mx interface IMS B network - */ - function f_cf_roam_reg_up( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_Gm); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc Stops traffic cature + * + * @param + */ + function f_cf_stopCapture() runs on ImsTestCoordinator { + //Stop traffic capture processing. + timer tc_configureGuard; //TODO check to import correct modules + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + } + } + + group componentCreation { + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { + var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; + v_monitor.start(f_setInterfaceNameOnComponent(p_name)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { + var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { + var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { + var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + } + + + group testConfiguration { //TODO: check to delete at end of STF574 ATS devel + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_MxA Mx interface IMS A network + * @param p_ici Mw interface monitor component + * @param p_MxB Mx interface IMS B network + */ + function f_cf_roam_reg_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); f_cf_monitor_up(p_MxA); - f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_ici); f_cf_monitor_up(p_MxB); - - // TODO UE IP address and port is missing - p_Gm.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) - ) - ))); - p_Gm.done; - + + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + p_MxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -550,15 +550,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxA.done; - - p_ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_ici.done; - + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + p_MxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -566,137 +566,137 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxB.done; - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Test configuration function for roaming registration szenario. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_Gm Gm interface monitor component - * @param p_ic Mw interface monitor component - */ - function f_cf_roam_reg_down( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_Gm); + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_ic Mw interface monitor component + */ + function f_cf_roam_reg_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); f_cf_monitor_down(p_MxA); - f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_ici); f_cf_monitor_down(p_MxB); - } - - /** - * @desc - * Interworking Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - * @param p_GmB - * Gm B Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_call_up( - inout CF_INT_CALL p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - - activate(a_receiveIOTVerdict()); - - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + } + + /** + * @desc + * Interworking Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_up( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.ici); f_cf_monitor_up(p_config.mxB); - if(isvalue(p_config.gmB)) { - f_cf_monitor_up(p_config.gmB); - } + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } if(isvalue(p_config.naptr)) { f_cf_monitor_up(p_config.naptr); - } + } - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -704,15 +704,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -720,16 +720,16 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - if(isvalue(p_config.gmB)) { - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.gmB.done; - } + + if(isvalue(p_config.gmB)) { + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + } if(isvalue(p_config.naptr)) { p_config.naptr.start(f_cf_setFilter( valueof (m_SetFilterReq( @@ -739,129 +739,129 @@ module AtsImsIot_TestConfiguration { ))); p_config.naptr.done; } - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Call test configuration. Ummaps/disconnect the - * related component ports. More information can be found in ETSI TS - * 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - * @param p_GmB - * Gm B Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_call_down( - inout CF_INT_CALL p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - //setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_down( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} - if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} - } - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause - * 4.3.4. - * @param p_Gm Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - */ - function f_cf_roam_call_up( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_Gm); + if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} + if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} + } + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause + * 4.3.4. + * @param p_Gm Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); f_cf_monitor_up(p_MxA); - f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_ici); f_cf_monitor_up(p_MxB); - - // TODO UE IP address and port is missing - // TODO UE IP address and port is missing - p_Gm.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) - ) - ))); - p_Gm.done; - + + // TODO UE IP address and port is missing + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + p_MxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -869,15 +869,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxA.done; - - p_ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_ici.done; - + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + p_MxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -885,163 +885,163 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxB.done; - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Roaming Call test configuration. Ummaps/disconnect the - * related component ports. More information can be found in ETSI TS - * 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - */ - function f_cf_roam_call_down( + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Roaming Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_down( inout ImsInterfaceMonitor p_Gm, inout ImsInterfaceMonitor p_MxA, inout ImsInterfaceMonitor p_ici, inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_Gm); + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); f_cf_monitor_down(p_MxA); - f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_ici); f_cf_monitor_down(p_MxB); - } - - - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_as_up( - inout CF_INT_AS p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_up( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.ici); f_cf_monitor_up(p_config.mxB); - f_cf_monitor_up(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_up(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_up(p_config.iscB); - } - - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} ) ))); - p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.gmB.done; - + p_config.gmB.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1049,167 +1049,167 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - if(isvalue(p_config.iscA)) { - p_config.iscA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.iscA.done; - } - - if(isvalue(p_config.iscB)) { - p_config.iscB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.iscB.done; - } - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Application Server test configuration. - * Ummaps/disconnect the related component ports. More information - * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_as_down( - inout CF_INT_AS p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - //setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_down( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - f_cf_monitor_down(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_down(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_down(p_config.iscB); - } - } - - - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_roam_as_up( - inout CF_ROAM_AS p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_up( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.ici); f_cf_monitor_up(p_config.mxB); - f_cf_monitor_up(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_up(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_up(p_config.iscB); - } - - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1217,15 +1217,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1233,110 +1233,110 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.gmB.done; - - if(isvalue(p_config.iscA)) { - p_config.iscA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.iscA.done; - } - - if(isvalue(p_config.iscB)) { - p_config.iscB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.iscB.done; - } - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Application Server test configuration. - * Ummaps/disconnect the related component ports. More information - * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_roam_as_down( - inout CF_ROAM_AS p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_down( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - f_cf_monitor_down(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_down(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_down(p_config.iscB); - } - } - - function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { // Initialize the Adapter (including the TrafficCapture process). timer tc_configureGuard; var StartTrafficCaptureRsp startResult; - + activate(a_receiveIOTVerdict()); - + tc_configureGuard.start(PX_MAX_MSG_WAIT); acPort.send(m_generalConfigurationReq_offline); alt { @@ -1366,7 +1366,7 @@ module AtsImsIot_TestConfiguration { stop; } } - + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.rx); f_cf_monitor_up(p_config.mxA); @@ -1383,7 +1383,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.gmA.done; - + p_config.rx.start(f_cf_setFilter( valueof (m_SetFilterReq( e_diameter, @@ -1391,7 +1391,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.rx.done; - + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1399,7 +1399,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - + p_config.mw.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1407,7 +1407,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mw.done; - + p_config.sgi.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1441,75 +1441,75 @@ module AtsImsIot_TestConfiguration { stop; } } - } // end of function f_cf_epc_call_up + } // end of function f_cf_epc_call_up - function f_cf_epc_call_down( - inout CF_EPC_CALL p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - - f_cf_monitor_down(p_config.gmA); + function f_cf_epc_call_down( + inout CF_EPC_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.rx); f_cf_monitor_down(p_config.mxA); f_cf_monitor_down(p_config.mw); f_cf_monitor_down(p_config.sgi); - f_cf_monitor_down(p_config.gmB); - } // end of function f_cf_epc_call_down - } - - function f_getInterfaceInfoList( - in charstring p_interfaceName, - in integer p_product1, - in integer p_product2 - ) return InterfaceInfoList { - var InterfaceInfoList v_list := { - f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), - f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) - }; - - return v_list; - } - - function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { - var InterfaceInfo v_info := { - IpInterfaceInfo := { - { - domainName := "invalid", - IpAddress := "0.0.0.0", - portNumbers := {0} - } - } - }; - - for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < - if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { - return p_product.monitorInterfaces[i].interfaceInfo; - } - } - - return v_info; - } - - group g_release15 { - + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_down + } + + function f_getInterfaceInfoList( + in charstring p_interfaceName, + in integer p_product1, + in integer p_product2 + ) return InterfaceInfoList { + var InterfaceInfoList v_list := { + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) + }; + + return v_list; + } + + function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { + var InterfaceInfo v_info := { + IpInterfaceInfo := { + { + domainName := "invalid", + IpAddress := "0.0.0.0", + portNumbers := {0} + } + } + }; + + for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < + if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { + return p_product.monitorInterfaces[i].interfaceInfo; + } + } + + return v_info; + } + + group g_release15 { + function f_cf_epc_call_rel15_up_old ( in CF_ATT_old p_config ) runs on ImsTestCoordinator { // Initialize the Adapter (including the TrafficCapture process). timer tc_configureGuard; @@ -1658,157 +1658,157 @@ module AtsImsIot_TestConfiguration { f_cf_monitor_down(p_config.gmB); } // end of function f_cf_epc_call_rel15_down - function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } - f_cf_monitor_up_sip(p_config.gmA); - f_cf_monitor_up_diameter(p_config.rx); - f_cf_monitor_up_diameter(p_config.s6a); - f_cf_monitor_up_diameter(p_config.gx); - f_cf_monitor_up_sip(p_config.mxA); - f_cf_monitor_up_sip(p_config.mw); - f_cf_monitor_up_sgi(p_config.sgi); - if(isvalue(p_config.gmB)) { - f_cf_monitor_up_sip(p_config.gmB); - } + f_cf_monitor_up_sip(p_config.gmA); + f_cf_monitor_up_diameter(p_config.rx); + f_cf_monitor_up_diameter(p_config.s6a); + f_cf_monitor_up_diameter(p_config.gx); + f_cf_monitor_up_sip(p_config.mxA); + f_cf_monitor_up_sip(p_config.mw); + f_cf_monitor_up_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up_sip(p_config.gmB); + } - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; - p_config.rx.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_diameter, - {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.rx.done; + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; - p_config.mxA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.mxA.done; + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; - p_config.mw.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.mw.done; + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; - p_config.sgi.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.sgi.done; + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } // end of function f_cf_epc_call_rel15_up + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up - function f_cf_epc_call_rel15_down( - inout CF_ATT p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } + function f_cf_epc_call_rel15_down( + inout CF_ATT p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down_sip(p_config.gmA); + f_cf_monitor_down_diameter(p_config.rx); + f_cf_monitor_down_diameter(p_config.s6a); + f_cf_monitor_down_diameter(p_config.gx); + f_cf_monitor_down_sip(p_config.mxA); + f_cf_monitor_down_sip(p_config.mw); + f_cf_monitor_down_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_down_sip(p_config.gmB); + } + + } // end of function f_cf_epc_call_rel15_down + + } // end group g_release15 - f_cf_monitor_down_sip(p_config.gmA); - f_cf_monitor_down_diameter(p_config.rx); - f_cf_monitor_down_diameter(p_config.s6a); - f_cf_monitor_down_diameter(p_config.gx); - f_cf_monitor_down_sip(p_config.mxA); - f_cf_monitor_down_sip(p_config.mw); - f_cf_monitor_down_sgi(p_config.sgi); - if(isvalue(p_config.gmB)) { - f_cf_monitor_down_sip(p_config.gmB); - } - - } // end of function f_cf_epc_call_rel15_down - - } // end group g_release15 - } \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index f0d76d6..8b40c56 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -1,172 +1,172 @@ module AtsImsIot_TestSystem { - import from LibSip_SIPTypesAndValues {type Request, Response;} - import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} - import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} - import from LibIot_TestInterface {type EquipmentAccessPort;} - import from LibIot_TestInterface all; - import from LibIot_TypesAndValues {type VxLTEMonitorInterfaceList;} - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibDiameter_TypesAndValues all; - /** - * @desc interfaces to the SUT - */ - type component IotSystemInterface { - port DataPort dPort; - port SipPort sipPort; - port DiameterPort diameterPort; - port SgiPort sgiPort; - port EquipmentAccessPort eaPort; - port AdapterConfigPort acPort; - } - /** - * @desc - * providing monitoring functionality of involved interfaces. Used as - * PTC. - */ - type component ImsInterfaceMonitor extends InterfaceMonitor { - port DataPort dPort; - port NaptrPort naptrPort; - port DiameterPort rxPort; - port SgiPort sgiPort; - port ImsCoordinationPort icpPort; - } - - type component SipInterfaceMonitor extends InterfaceMonitor { - port SipPort sipPort; - port ImsCoordinationPort icpPort; - } - type component DiameterInterfaceMonitor extends InterfaceMonitor { - port DiameterPort diameterPort; - port ImsCoordinationPort icpPort; - } - type component NaptrInterfaceMonitor extends InterfaceMonitor { - port NaptrPort naptrPort; - port ImsCoordinationPort icpPort; - } - type component SgiInterfaceMonitor extends InterfaceMonitor { - port SgiPort sgiPort; - port ImsCoordinationPort icpPort; - } - - /** - * @desc - * used to coordinate the behavior of other components. It is in charge - * of controlling the overall execution, manangement of testing phases, - * test verdicts collection and synchronization. Used as MTC. - */ - type component ImsTestCoordinator extends TestCoordinator { - port ImsCoordinationPort icpPort; - var VxLTEMonitorInterfaceList vc_MonIntfList; - var CF_VXLTE_Interfaces vc_vxlte_monitor_components; - } - - group portDefinitions { - type port ImsCoordinationPort message { - inout SipMessage, DIAMETER_MSG; - } - type port DataPort message { - in Request, Response, SEND_request, RECEIVE_response; // SIP - } - type port SipPort message { //type port SipPort message - in Request, Response, SEND_request, RECEIVE_response; // SIP - } + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port SipPort sipPort; + port DiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port DiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port SipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port DiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port SipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } type port NaptrPort message { in NAPTRmessage; } type port DiameterPort message { in DIAMETER_MSG; } - type port SgiPort message { - in charstring; - } - } - - type record CF_INT_CALL { - ImsInterfaceMonitor gmA, + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor mxA, - ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxB, - ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, ImsInterfaceMonitor naptr optional - } - type record CF_INT_AS { + } + type record CF_INT_AS { ImsInterfaceMonitor gmA, ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mxA, ImsInterfaceMonitor gmB, ImsInterfaceMonitor mxB, - ImsInterfaceMonitor iscA optional, - ImsInterfaceMonitor iscB optional - } - type record CF_ROAM_AS { - ImsInterfaceMonitor gmA, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor mxA, - ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxB, - ImsInterfaceMonitor gmB, - ImsInterfaceMonitor iscA optional, - ImsInterfaceMonitor iscB optional - } - type record CF_EPC_CALL { - ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 - ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 - ImsInterfaceMonitor mxA, - ImsInterfaceMonitor mw, - ImsInterfaceMonitor sgi, - ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 - } + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } - group g_release15 { - - type record CF_VXLTE_Interfaces{ - SipInterfaceMonitor gmA optional, - SipInterfaceMonitor gmB optional, - SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP - SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF - SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF - SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP - SipInterfaceMonitor ic optional, - SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - SipInterfaceMonitor mwPS optional, - SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF - SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF - SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF - SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF - SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF - SipInterfaceMonitor isc optional, - DiameterInterfaceMonitor cxIH optional, - DiameterInterfaceMonitor cxSH optional, - DiameterInterfaceMonitor gx optional, - DiameterInterfaceMonitor rx optional, - DiameterInterfaceMonitor s6a optional, - DiameterInterfaceMonitor s9 optional, - DiameterInterfaceMonitor sh optional - } + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } - type record CF_ATT_old { - ImsInterfaceMonitor gmA, + type record CF_ATT_old { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor rx, - ImsInterfaceMonitor s6a, + ImsInterfaceMonitor s6a, ImsInterfaceMonitor gx, - ImsInterfaceMonitor mxA, - ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF - ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF - ImsInterfaceMonitor sgi, - ImsInterfaceMonitor gmB - } - - type record CF_ATT { - SipInterfaceMonitor gmA, - DiameterInterfaceMonitor rx, - DiameterInterfaceMonitor s6a, - DiameterInterfaceMonitor gx, - SipInterfaceMonitor mxA, - SipInterfaceMonitor mw, - SgiInterfaceMonitor sgi, - SipInterfaceMonitor gmB - } - } // end of g_release15 - + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 + } \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index 61a232b..dfe92c3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -1,65 +1,61 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id: $ - * @desc This module provides the templates for Interoperability tests. + * @desc This module provides the templates for Interoperability tests. */ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; - import from LibSip_SIPTypesAndValues {type Request, SipUrl, Response;} - import from LibMsrp_TypesAndValues { - type - SEND_request, - RECEIVE_response - }; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG} - import from LibCommon_DataStrings {type Bit1, Bit3}; + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from LibDiameter_TypesAndValues all; + import from LibCommon_DataStrings all; - group SIPmessageTypes { - /** - * @desc SIP Message Type - * @member request SIP request - * @member response SIP response - * @member msrpRequest MSRP SEND/AUTH request messages - * @member msrpResponse MSRP response message - */ - - type union SipMessage { - Request request, - Response response, + group SIPmessageTypes { + /** + * @desc SIP Message Type + * @member request SIP request + * @member response SIP response + * @member msrpRequest MSRP SEND/AUTH request messages + * @member msrpResponse MSRP response message + */ + + type union SipMessage { + Request request, + Response response, SEND_request msrpRequest, RECEIVE_response msrpResponse, NAPTRmessage naptrmessage - } - /** - * @desc SIP Message List Type - */ - type record of SipMessage SipMessageList; - type record SkipType { - integer skipCount, - SipMessage skipMessage optional - } - } - - group DiameterMessageTypes{ - /** - * @desc DIAMETER Message List Type - */ - type record of DIAMETER_MSG DiameterMessageList; - type record SkipTypeDiameter { - integer skipCount, - DIAMETER_MSG skipMessage optional - } - } + } + /** + * @desc SIP Message List Type + */ + type record of SipMessage SipMessageList; + type record SkipType { + integer skipCount, + SipMessage skipMessage optional + } + } + + group DiameterMessageTypes{ + /** + * @desc DIAMETER Message List Type + */ + type record of DIAMETER_MSG DiameterMessageList; + type record SkipTypeDiameter { + integer skipCount, + DIAMETER_MSG skipMessage optional + } + } - group DnsEnumMessageTypes { + group DnsEnumMessageTypes { /** * @desc NAPTR Message Type */ type union NAPTRmessage { - DnsMessage dnsMessage, - EnumMessage enumMessage + DnsMessage dnsMessage, + EnumMessage enumMessage } /** * @desc DNS Message Type @@ -67,144 +63,144 @@ module AtsImsIot_TypesAndValues { * @member response DNS response */ type union DnsMessage { - DnsQuery query, - DnsResponse response + DnsQuery query, + DnsResponse response } /** * @desc DnsQuery Message Type */ type record DnsQuery { - DnsHeader header, - DnsQuestionList question_list optional, - DnsAnswerList answer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional } with { encode "NAPTRCodec"} - - /** + + /** * @desc DnsResponse Message Type */ type record DnsResponse { DnsHeader header, - DnsQuestionList question_list optional, - DnsAnswerList answer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional } with { encode "NAPTRCodec"} - - type record DnsHeader - { - UInt16 id, - Bit1 qR_flag, - UInt4 opcode, - Bit1 aA_flag, - Bit1 tC_flag, - Bit1 rD_flag, - Bit1 rA_flag, - Bit3 z_field, - UInt4 rCODE, - UInt16 qDCOUNT, - UInt16 aNCOUNT, - UInt16 nSCOUNT, - UInt16 aRCOUNT - } with { encode "NAPTRCodec"} - - type charstring DnsDomainName;//NB! DNS pointers are handled codec - - type record DnsQuestion - { - DnsDomainName qNAME, - UInt16 qTYPE, - UInt16 qCLASS - } with { encode "NAPTRCodec"} - - type record of DnsQuestion DnsQuestionList; - type record of DnsResourceRecord DnsAnswerList; - type record of DnsResourceRecord DnsAuthorityList; - type record of DnsResourceRecord DnsAdditionalList; - - type record DnsResourceRecord - { - DnsDomainName domainName, - Int16 type_, - Int16 class_, - UInt32 ttl, - UInt16 rd_length, - DnsRDATA r_data - } with { encode "NAPTRCodec"} - - type octetstring DnsRDATA; - - /** - * @desc ENUM Message Type - * @member request ENUM query - * @member response ENUM response - */ - type union EnumMessage { - EnumQuery query, - EnumResponse response - } - + + type record DnsHeader + { + UInt16 id, + Bit1 qR_flag, + UInt4 opcode, + Bit1 aA_flag, + Bit1 tC_flag, + Bit1 rD_flag, + Bit1 rA_flag, + Bit3 z_field, + UInt4 rCODE, + UInt16 qDCOUNT, + UInt16 aNCOUNT, + UInt16 nSCOUNT, + UInt16 aRCOUNT + } with { encode "NAPTRCodec"} + + type charstring DnsDomainName;//NB! DNS pointers are handled codec + + type record DnsQuestion + { + DnsDomainName qNAME, + UInt16 qTYPE, + UInt16 qCLASS + } with { encode "NAPTRCodec"} + + type record of DnsQuestion DnsQuestionList; + type record of DnsResourceRecord DnsAnswerList; + type record of DnsResourceRecord DnsAuthorityList; + type record of DnsResourceRecord DnsAdditionalList; + + type record DnsResourceRecord + { + DnsDomainName domainName, + Int16 type_, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsRDATA r_data + } with { encode "NAPTRCodec"} + + type octetstring DnsRDATA; + + /** + * @desc ENUM Message Type + * @member request ENUM query + * @member response ENUM response + */ + type union EnumMessage { + EnumQuery query, + EnumResponse response + } + /** * @desc EnumQuery Message Type */ type record EnumQuery { - DnsHeader header, - EnumQuestionList enumQuestion_list optional, - EnumAnswerList enumResponse_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional - } with { encode "NAPTRCodec"} - - type record EnumResponse - { - DnsHeader header, - EnumQuestionList enumQuestion_list optional, - EnumAnswerList enumAnswer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional - } with { encode "NAPTRCodec"} - - - type record EnumQuestion - { - E164TN e164TelNumber, - UInt16 qTYPE, //35 - UInt16 qCLASS // - }with { encode "NAPTRCodec"} - - type record of EnumQuestion EnumQuestionList; - type record of EnumAnswer EnumAnswerList; - - /** + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumResponse_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record EnumResponse + { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumAnswer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + + type record EnumQuestion + { + E164TN e164TelNumber, + UInt16 qTYPE, //35 + UInt16 qCLASS // + }with { encode "NAPTRCodec"} + + type record of EnumQuestion EnumQuestionList; + type record of EnumAnswer EnumAnswerList; + + /** * @desc EnumAnswer Message Type */ - type record EnumAnswer - { - E164TN e164TelNumber, - Int16 naptrType, - Int16 class_, - UInt32 ttl, - UInt16 rd_length, - DnsNaptrRRData naptrRR - } with { encode "NAPTRCodec"} - type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible - - - type record DnsNaptrRRData - { - UInt16 naptrOrder, - UInt16 naptrPreference, - UInt8 flags_length, - NaptrCharString naptrFlags, - UInt8 service_length, - NaptrCharString naptrService, - UInt8 regex_length, - NaptrCharString naptrRegex, - UInt8 replacementLength, - DnsDomainName naptrReplacement - } with { encode "NAPTRCodec"} - + type record EnumAnswer + { + E164TN e164TelNumber, + Int16 naptrType, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsNaptrRRData naptrRR + } with { encode "NAPTRCodec"} + type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible + + + type record DnsNaptrRRData + { + UInt16 naptrOrder, + UInt16 naptrPreference, + UInt8 flags_length, + NaptrCharString naptrFlags, + UInt8 service_length, + NaptrCharString naptrService, + UInt8 regex_length, + NaptrCharString naptrRegex, + UInt8 replacementLength, + DnsDomainName naptrReplacement + } with { encode "NAPTRCodec"} + type charstring NaptrCharString; - } + } }//end module diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index db5fc7f..e98312a 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -37,6 +37,10 @@ sources := \ modules := ../LibCommon \ ../LibIms \ + ../LibIot \ + ../LibMsrp \ + ../LibUpperTester \ + ../LibIms_ConfigAndTrigger \ ../LibSip \ ../LibDiameter \ ../../titan-test-system-framework/ttcn/LibHelpers \ diff --git a/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn index 15598fb..055a4a3 100644 --- a/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn +++ b/ttcn/LibIms_ConfigAndTrigger/LibIms_UpperTester.ttcn @@ -6,14 +6,9 @@ module LibIms_UpperTester { - import from LibIot_Functions {function f_sendEquipmentCmd;} - - import from LibUpperTester { - template m_EQ_Request; - type EquipmentCommand; - } - - import from LibIot_TestInterface {type TestCoordinator, EquipmentUser;} + import from LibIot_Functions all; + import from LibUpperTester all; + import from LibIot_TestInterface all; group ue { group ueTypes { diff --git a/ttcn/LibIot/LibIot_Functions.ttcn b/ttcn/LibIot/LibIot_Functions.ttcn index 076c9af..decda9f 100644 --- a/ttcn/LibIot/LibIot_Functions.ttcn +++ b/ttcn/LibIot/LibIot_Functions.ttcn @@ -5,7 +5,7 @@ */ module LibIot_Functions { - import from LibCommon_VerdictControl {type FncRetCode;} + import from LibCommon_VerdictControl all; import from LibUpperTester { template mw_EO_Response; diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn index 05c54b7..c807e8c 100644 --- a/ttcn/LibIot/LibIot_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -353,7 +353,7 @@ module LibIot_PIXITS { * @desc * Defines the location of the files to merge. */ - modulepar charstring PX_IOT_MERGE_TOOL_PATH := "C:\Program Files\WireShark"; + modulepar charstring PX_IOT_MERGE_TOOL_PATH := "C:\\Program Files\\WireShark"; /** * @desc @@ -370,7 +370,7 @@ module LibIot_PIXITS { * List of the network interfaces to monitor. * Use ';' to separate the interfaces */ - modulepar charstring PX_IOT_IFACES := "rpcap://\Device\NPF_{60DAA80A-2AC6-4592-B3A7-80FC0FF08908}"; + modulepar charstring PX_IOT_IFACES := "rpcap://\\Device\\NPF_{60DAA80A-2AC6-4592-B3A7-80FC0FF08908}"; modulepar EutInterfaceInfoList PX_IOT_EUTs_IFACE_INFO_LIST := { diff --git a/ttcn/LibIot/LibIot_TestInterface.ttcn b/ttcn/LibIot/LibIot_TestInterface.ttcn index 6baefb0..083dba5 100644 --- a/ttcn/LibIot/LibIot_TestInterface.ttcn +++ b/ttcn/LibIot/LibIot_TestInterface.ttcn @@ -13,7 +13,7 @@ module LibIot_TestInterface { import from LibIot_TypesAndValues all; - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from LibIot_PIXITS all; import from LibCommon_Sync all; import from LibSip_SIPTypesAndValues all; diff --git a/ttcn/LibIot/LibIot_TypesAndValues.ttcn b/ttcn/LibIot/LibIot_TypesAndValues.ttcn index 6cb6f32..26f6480 100644 --- a/ttcn/LibIot/LibIot_TypesAndValues.ttcn +++ b/ttcn/LibIot/LibIot_TypesAndValues.ttcn @@ -9,7 +9,7 @@ module LibIot_TypesAndValues { import from LibCommon_BasicTypesAndValues {type UInt32, UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} + import from LibCommon_VerdictControl all; group commonTypes { type enumerated IOTExecMode { e_realtime, e_offline } diff --git a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn index a785056..7e50409 100644 --- a/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_Functions.ttcn @@ -5,32 +5,10 @@ * changeable within validation */ -module LibIot_VxLTE_Functions { +module LibIot_VxLTE_Functions { - import from LibIot_TypesAndValues { - type - IOTExecMode, - IotVerdictType, - CaptureMode, - RecordMode, - FileList, - TimeOffset, - EutInterfaceInfoList, - ProtocolFilter, - IpAddress, - PortNumber, - ProductList, - InterfaceAvailable, - InterfaceAvailableList, - MonitorInterfaceInfo, - VxLTEMonitorInterfaceList; - } - import from AtsImsIot_Templates { - template /*m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, - m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout,*/ - m_SetFilterReq /*, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, - m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any*/; - } + import from LibIot_TypesAndValues all; + import from AtsImsIot_Templates all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Templates all; diff --git a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn index f240415..9b8644a 100644 --- a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn @@ -7,11 +7,7 @@ module LibIot_VxLTE_PIXITS { - import from LibIot_TypesAndValues - { - type IOTExecMode, IotVerdictType, CaptureMode, RecordMode, FileList, TimeOffset, EutInterfaceInfoList, - ProtocolFilter, IpAddress, PortNumber, ProductList, InterfaceAvailableList,MonitorInterfaceInfo; - } + import from LibIot_TypesAndValues all; group VxLTEMonitorInterfaces_PIXITS{ diff --git a/ttcn/LibMsrp/LibMsrp_Functions.ttcn b/ttcn/LibMsrp/LibMsrp_Functions.ttcn index fe4fba4..d79d2f6 100644 --- a/ttcn/LibMsrp/LibMsrp_Functions.ttcn +++ b/ttcn/LibMsrp/LibMsrp_Functions.ttcn @@ -6,15 +6,13 @@ module LibMsrp_Functions { // LibMsrp - import from LibMsrp_TypesAndValues { - type - MsrpURI - }; + import from LibMsrp_TypesAndValues all; function f_str2msrpUri(in charstring p_uri, out template MsrpURI p_msrpUri) return boolean { var integer v_res := 0; - v_res := decvalue(oct2bit(char2oct(p_uri)), p_msrpUri); + var bitstring v_oct2bit := oct2bit(char2oct(p_uri)); + v_res := decvalue(v_oct2bit, p_msrpUri); return v_res == 0; } // End of function f_str2msrpUri diff --git a/ttcn/LibUpperTester/LibUpperTester.ttcn b/ttcn/LibUpperTester/LibUpperTester.ttcn index 0c01624..da13c12 100644 --- a/ttcn/LibUpperTester/LibUpperTester.ttcn +++ b/ttcn/LibUpperTester/LibUpperTester.ttcn @@ -4,7 +4,7 @@ * @desc xxx */ module LibUpperTester { - import from LibCommon_VerdictControl {type FncRetCode;} + import from LibCommon_VerdictControl all; import from LibIot_TypesAndValues {type Status;} // TODO - move to common lib diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index ba8766d..74239b0 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -1,15 +1,15 @@ sources := \ - ttcn/LibDiameter_Interface.ttcn \ - LibDiameter_TypesAndValues.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 \ ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ ttcn/LibDiameter_PIXITS.ttcn \ - ttcn/LibDiameter_Types_Base_AVPs.ttcn \ - ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ - ttcn/LibDiameter_Steps.ttcn \ - ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ - ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ - ttcn/LibDiameter_Templates.ttcn \ - ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ - ttcn/LibDiameter_Types_S9_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ diff --git a/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn b/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn deleted file mode 100644 index 1d0d3c2..0000000 --- a/ttcn/patch_lib_ims_titan/LibIms_Steps.ttcn +++ /dev/null @@ -1,1548 +0,0 @@ -/** - * @author STF471 - * @version $Id$ - * @desc This module provides the steps used by the test component for SIP-IMS tests. - * This module is part of LibImsV3. - */ -module LibIms_Steps { - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Steps all; - import from LibSip_PIXITS all; - import from LibSip_Interface all; - import from LibSip_MessageBodyTypes all; - import from LibSip_Common all; - // LibIms - import from LibIms_Templates all; - import from LibIms_Interface all; - import from LibIms_SIPTypesAndValues all; - - group externalfunctions { - } // end group externalfunctions - group parameterOperations { - - /** - * @desc Adds new Via parameter - * @param p_message (request) SIP message to be used to prepair via header - */ - function f_addNewViaParameter( - in Request p_message - ) runs on ImsComponent { - var integer v_intVia; - var integer i := 0; - if (isvalue(p_message.msgHeader.via)) { - - v_intVia := lengthof(p_message.msgHeader.via.viaBody); - while (i < v_intVia) { - p_message.msgHeader.via.viaBody[v_intVia] := p_message.msgHeader.via.viaBody[v_intVia - 1]; - v_intVia := v_intVia - 1; - } - vc_branch := c_branchCookie & f_getRndTag(); - p_message.msgHeader.via.viaBody[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); - vc_via := p_message.msgHeader.via; - } - } - - /** - * @desc Removes own Via parameter - * @param p_message (request) SIP message to be used to prepair via header - */ - function f_removeOwnViaParameter( - in Response p_message - ) runs on ImsComponent { - var integer v_intVia; - var Via v_via := c_empty_Via; - var integer i := 0; - - if (ispresent(p_message.msgHeader.via)) { - - v_intVia := lengthof(p_message.msgHeader.via.viaBody) - 1; - - for (i := 0; i < v_intVia; i := i + 1) { - v_via.viaBody[i] := p_message.msgHeader.via.viaBody[i + 1]; - } - vc_via := v_via; - } - } - - /** - * @desc Adds new RecordRoute parameter and removes Route parameter - * @param p_message (request) SIP message to be used to prepair via header - */ - function f_addNewRecordRouteAndRemoveRoutParameter( - in Request p_message - ) runs on ImsComponent { - var integer v_intRoute, v_intRecordRoute; - var integer i := 1; - var RouteBody v_route1; - var Route v_newRoute; - v_newRoute.fieldName := ROUTE_E; - if (isvalue(p_message.msgHeader.route)) { - v_intRoute := lengthof(p_message.msgHeader.route.routeBody); - v_route1 := p_message.msgHeader.route.routeBody[0]; - while (i < v_intRoute) { - v_newRoute.routeBody[i - 1] := p_message.msgHeader.route.routeBody[i]; - i := i + 1; - } - vc_route := v_newRoute; - } - - if (isvalue(p_message.msgHeader.recordRoute)) { - - v_intRecordRoute := lengthof(p_message.msgHeader.recordRoute.routeBody); - while (0 < v_intRecordRoute) { - p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute] := p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute - 1]; - v_intRecordRoute := v_intRecordRoute - 1; - } - p_message.msgHeader.recordRoute.routeBody[0] := v_route1; - vc_recordRoute := valueof(p_message.msgHeader.recordRoute); - } - } - - /** - * @desc Adds new RecordRoute parameter (IMS) - * @param p_rr The recordRoute parameter to add - */ - function f_addNewRecordRouteIMS( - in RecordRoute p_rr - ) runs on ImsComponent - return template RecordRoute { - var integer v_intRecordRoute; - var template RecordRoute v_recordRoute := omit; - - v_intRecordRoute := lengthof(p_rr.routeBody); - if (v_intRecordRoute > 0) { - while (0 < v_intRecordRoute) { - p_rr.routeBody[v_intRecordRoute] := p_rr.routeBody[v_intRecordRoute - 1]; - v_intRecordRoute := v_intRecordRoute - 1; - } - p_rr.routeBody[0] := valueof(m_routeBody_currIpAddr(vc_userprofile)); - vc_recordRoute := p_rr; - return vc_recordRoute; - } - else { - return (v_recordRoute); - } - } - - } // end group parameterOperations - - group fieldOperations { - - /** - * @desc Sets BYE header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersBYE( - inout CSeq p_cSeq_s, - in SipUrl p_to_user - ) runs on ImsComponent { - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - vc_route := f_route(); // update the route header field depending on vc_boo_route - vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route - LibSip_Steps.f_setHeadersBYE(p_cSeq_s); - } // end f_setHeadersBYE - - /** - * @desc Sets CANCEL header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - */ - function f_setHeadersCANCEL( - inout CSeq p_cSeq_s - ) runs on ImsComponent { - vc_route := f_route(); // update the route header field depending on vc_boo_route - vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route - LibSip_Steps.f_setHeadersCANCEL(p_cSeq_s); - } // end f_setHeadersCANCEL - - /** - * @desc Sets headers for forward request from AS in case if AS acts as Proxy - * @param p_cSeq_s The current cSeq - * @param p_proxyMode true = proxyMode, false = B2BMode - */ - function f_setHeadersForwardRequestFromAS( - inout CSeq p_cSeq_s, - boolean p_proxyMode - ) runs on ImsComponent { - var Request v_request; - v_request := vc_request; - - if (p_proxyMode) { - vc_requestUri2 := v_request.requestLine.requestUri; - vc_to := v_request.msgHeader.toField; - vc_contact := v_request.msgHeader.contact; - f_addNewViaParameter(v_request); - f_addNewRecordRouteAndRemoveRoutParameter(v_request); - } - else { - // B2Bmode - vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } - } - } // end function f_setHeadersForwardRequest - - /** - * @desc Sets header fields for forward request from AS in case if AS acts as Proxy - */ - function f_setHeadersForwardResponseFromAS( - ) runs on ImsComponent { - var Response v_response; - v_response := vc_response; - - vc_caller_To := v_response.msgHeader.toField; - vc_to := v_response.msgHeader.toField; - vc_contact := v_response.msgHeader.contact; - - if (ispresent(v_response.msgHeader.recordRoute)) { - vc_recordRoute := v_response.msgHeader.recordRoute; - } - f_removeOwnViaParameter(v_response); - } // end function f_setHeadersForwardResponse - - /** - * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersINVITE( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - if (vc_boo_route) { - vc_route := m_route_interface(vc_interfaceprofile); - } - if (vc_boo_recordRoute) { - vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); - } - - LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); - } // end f_setHeadersINVITE - - /** - * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersUPDATE( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - if (vc_boo_route) { - vc_route := m_route_interface(vc_interfaceprofile); - } - if (vc_boo_recordRoute) { - vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); - } - - LibSip_Steps.f_setHeadersUPDATE(p_cSeq_s); - } // end f_setHeadersUPDATE - - /** - * @desc Sets Message header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersMESSAGE( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); - } // end f_setHeadersMESSAGE - - /** - * @desc Sets Notify header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersNOTIFY( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - LibSip_Steps.f_setHeadersNOTIFY(p_cSeq_s); - - vc_branch := c_branchCookie & f_getRndTag(); - vc_via := { - fieldName := VIA_E, - viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} - }; - - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - // contact header initialization for sending of NOTIFY from CSCF component - vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); - } // end f_setHeadersNOTIFY - - /** - * @desc Sets Options header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersOPTIONS( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - LibSip_Steps.f_setHeadersOPTIONS(p_cSeq_s); - - vc_branch := c_branchCookie & f_getRndTag(); - vc_via := { - fieldName := VIA_E, - viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} - }; - - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - // contact header initialization for sending of OPTIONS from CSCF component - vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); - } // end f_setHeadersOPTIONS - - /** - * @desc Sets Publish header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersPUBLISH( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - LibSip_Steps.f_setHeadersPUBLISH(p_cSeq_s); - - vc_branch := c_branchCookie & f_getRndTag(); - vc_via := { - fieldName := VIA_E, - viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} - }; - - vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - if (vc_boo_route) { - vc_route := m_route_interface(vc_interfaceprofile); - } - if (vc_boo_recordRoute) { - vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); - } - - // contact header initialization for sending of PUBLISH from CSCF component - vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); - } // end f_setHeadersPUBLISH - - /** - * @desc Sets Subscribe header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersSUBSCRIBE( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in SipUrl p_from_user - ) runs on ImsComponent { - vc_to := { - fieldName := TO_E, - addressField := { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := p_to_user // SipUrl - } - }, // end addressField - toParams := omit - }; - vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - LibSip_Steps.f_setHeadersSUBSCRIBE(p_cSeq_s); - } // end f_setHeadersSUBSCRIBE - - /** - * @desc Sets headers for ReINVITE method - * @param p_cSeq_s The current cSeq - * @param p_orginatingSide true in case of Re-INVITE is send from the orgination endpoint otherwise false. - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersReINVITE( - inout CSeq p_cSeq_s, - in boolean p_orginatingSide, - in SipUrl p_to_user - ) runs on ImsComponent { - var integer v_tmp, i, j, v_nbroute; - var Request v_request; - v_request := vc_request; - - f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via - vc_reqHostPort := vc_requestUri.components.sip.hostPort; - - vc_requestUri := p_to_user; - - if (p_orginatingSide) { - vc_to := vc_caller_To; - vc_from := vc_caller_From; - } - else { - vc_to := vc_callee_To; - vc_from := vc_callee_From; - - // get route from previous ACK request - // Route Management - if (isvalue(v_request.msgHeader.recordRoute)) { - vc_recordRoute := valueof(v_request.msgHeader.recordRoute); - v_nbroute := lengthof(vc_recordRoute.routeBody); - // copy and reverse the order of the routes in route header - for (i := 0; i <= (v_nbroute - 1); i := i + 1) { - j := v_nbroute - 1 - i; - vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; - } - vc_route.fieldName := ROUTE_E; - vc_boo_recordRoute := true; - vc_boo_route := true; - } - else { - vc_boo_recordRoute := false; - vc_boo_route := false; - } - } - - v_tmp := str2int(vc_sdp_local.origin.session_id); - vc_sdp_local.origin.session_id := int2str(v_tmp + 1); - v_tmp := str2int(vc_sdp_local.origin.session_version); - vc_sdp_local.origin.session_version := int2str(v_tmp + 1); - } // end function f_setHeadersReINVITE - - /** - * @desc Sets component variables related to message header fields when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) (message type independent: CSeq, contact, via), function uses information from userprofile and interfaceprofile - * @param p_cSeq_s The CSeq parameter - * @param p_method The method name for cSeq header field - */ - function f_setHeadersGeneral_ICSCF( - inout CSeq p_cSeq_s, - in charstring p_method - ) runs on SipComponent { - p_cSeq_s.fieldName := CSEQ_E; - p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; - p_cSeq_s.method := p_method; - vc_cSeq := p_cSeq_s; - - vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); - - vc_branch := c_branchCookie & f_getRndTag(); - vc_branch_ICSCF := c_branchCookie & f_getRndTag(); - - vc_via := { - fieldName := VIA_E, - viaBody := { - valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), - valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) - } - }; - } // end function f_setHeadersGeneral_ICSCF - - /** - * @desc Sets header field for the next outgoing REGISTER message from the visited P-CSCF to the home I-CSCF - * @param p_cSeq_s The CSeq parameter to be applied - */ - function f_setHeaders_REGISTER_PCSCF( - inout CSeq p_cSeq_s - ) runs on SipComponent { - var SemicolonParam_List v_params; - - f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via - vc_requestUri := { - scheme := c_sipScheme, - components := { - sip := { - userInfo := omit, - hostPort := { - host := vc_userprofile.registrarDomain, - portField := omit - } - } - }, - urlParameters := omit, - headers := omit - }; - - vc_reqHostPort := vc_requestUri.components.sip.hostPort; - - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } - vc_callIdReg := vc_callId; - - vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); - v_params := { - { - id := c_tagId, - paramValue := { - tokenOrHost := f_getRndTag() - } - } - }; - vc_from := { - fieldName := FROM_E, - addressField := vc_to.addressField, - fromParams := v_params - }; - - if (not vc_firstREGISTER_sent) { - v_params := { - { - id := c_expiresId, - paramValue := { - tokenOrHost := c_shortRegistration - } - } - }; - vc_contact.contactBody.contactAddresses[0].contactParams := v_params; - } - - vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function - vc_authorization := { - fieldName := AUTHORIZATION_E, - body := {f_calculatecCredentials_empty(vc_userprofile)} - }; - } // end function setHeaders_REGISTER_PCSCF - - /** - * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_to_user The selected user's SIP URL - */ - function f_setHeadersREFER( - inout CSeq p_cSeq_s, - in SipUrl p_to_user - ) runs on ImsComponent { - vc_requestUri := p_to_user; // Request URI of Invite is identical with To header - if (vc_boo_route) { - vc_route := m_route_interface(vc_interfaceprofile); - } - if (vc_boo_recordRoute) { - vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); - } - - LibSip_Steps.f_setHeadersREFER(p_cSeq_s); - } // end f_setHeadersREFER - - /** - * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function - * @param p_cSeq_s The current cSeq - * @param p_uri The SipUrl for request URI and To header - */ - function f_setHeadersREFER_conf( - inout CSeq p_cSeq_s, - in SipUrl p_uri - ) runs on ImsComponent { - vc_to := { - fieldName := TO_E, - addressField := { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := p_uri // SipUrl - } - }, // end addressField - toParams := omit - }; - - vc_from := f_initFromHeader(p_uri, f_getRndTag()); // init of vc_from using userProfile identifier - vc_requestUri := p_uri; // Request URI of Invite is identical with To header - if (vc_boo_route) { - vc_route := m_route_interface(vc_interfaceprofile); - } - if (vc_boo_recordRoute) { - vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); - } - - LibSip_Steps.f_setHeadersREFER(p_cSeq_s); - } // end f_setHeadersREFER_conf - - } // end group fieldOperations - - group awaitingMessage { - } - - group sendMessage { - - /** - * @desc Sends PRACK message - * @param p_mb The message body of the PRACK message - * @param p_rack_cseq The cSeq of the PRACK message - */ - function f_sendPRACK_sdp( - template(value) MessageBody p_mb, - CSeq p_rack_cseq - ) runs on SipComponent { - var integer v_responseNum := 1; - var template(value) PRACK_Request v_prackReq; - - f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via - if (isvalue(vc_response.msgHeader.rSeq.responseNum)) { - v_responseNum := vc_response.msgHeader.rSeq.responseNum; - } - vc_rAck := m_RAck(v_responseNum, p_rack_cseq.seqNumber, p_rack_cseq.method); - - v_prackReq := m_PRACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck, p_mb); - - // added route header if required - if (isvalue(vc_response.msgHeader.recordRoute)) { - v_prackReq.msgHeader.route := f_route(); - } - - SIPP.send(v_prackReq) to vc_sent_label; - } - - } - group globalSteps { - - //NOTE STF471: removed function f_init_userprofile, have to move up to specific ATS - - /** - * @desc Initializes the To header - * @param p_user Identifies the selected user's SIP URL - * @return The To header - */ - function f_initToHeader( - in SipUrl p_user - ) runs on ImsComponent - return To { - var To v_to := c_empty_To; - v_to := { - fieldName := TO_E, - addressField := { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := p_user // SipUrl - } - }, // end addressField - toParams := omit - }; - return (v_to); - } - - /** - * @desc Initializes the From header - * @param p_user Identifies the selected user' SIP URL - * @param p_tag_str The string value of the tag id - * @return The From header - */ - function f_initFromHeader( - in SipUrl p_user, - charstring p_tag_str - ) runs on ImsComponent - return From { - var From v_from := c_empty_From; - v_from := { - fieldName := FROM_E, - addressField := { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := p_user // SipUrl - } - }, // end addressField - fromParams := { - { - id := c_tagId, - paramValue := { - tokenOrHost := p_tag_str - } - } - } - }; - return v_from; - } - - //NOTE STF471: removed function f_initSipUrl, have to move up to specific ATS - - //NOTE STF471: removed function f_init_interfaceprofile, have to move up to specific ATS - - /** - * @desc Retrieves user DomainPort value of the user profile - * @param p_userProfile Identifies the selected user profile - * @return The Domain HostPort - */ - function f_get_userDomainPort( - in SipUserProfile p_userProfile - ) runs on ImsComponent - return HostPort { - return - { - p_userProfile.homeDomain, - p_userProfile.currPort - }; - } - - /** - * @desc Retrieves HostPort value of the interface profile - * @param p_interface Identifies the selected interface - * @return The HostPort - */ - function f_get_interfaceHostPort( - in ImsInterfaceProfile p_interface - ) runs on ImsComponent - return HostPort { - return - { - p_interface.SUTIpaddr, - p_interface.SUTPort - }; - } - - /** - * @desc Retrieves DomainPort value of the interface profile - * @param p_interface Identifies the selected interface - * @return The Domain HostPort - */ - function f_get_interfaceDomainPort( - in ImsInterfaceProfile p_interface - ) runs on ImsComponent - return HostPort { - return - { - p_interface.SUTHomeDomain, - p_interface.SUTPort - }; - } - - /** - * @desc Gets the receive template for the NameAddr of the interface - * @param p_interface Identifies the selected interface - * @return The NameAddr template - */ - function f_get_interfaceNameAddr( - in ImsInterfaceProfile p_interface - ) runs on ImsComponent - return template NameAddr { - return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr, p_interface.SUTPort); - } - - } - - group registration { - - /** - * @desc Registration and authentication - * @param p_cSeq_s The current cseq - * @param p_auth flag indicating if authentication is needed - * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) - * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) - */ - function f_Registration_IMS( - inout CSeq p_cSeq_s, - in boolean p_auth, - template(value) charstring p_host, - template(value) integer p_port - ) runs on SipComponent { - f_setHeaders_REGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_no}), p_host, p_port)); // LibSip - // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER - if (p_auth) { - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - tc_ack.start; - alt { - [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { - tc_ack.stop; - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_yes}), p_host, p_port)); // LibSip - // awaiting 200 OK REGISTER - f_awaitingOkResponse(p_cSeq_s); - f_getServiceRouteMapIntoRouteInRegistration(vc_response); - } - [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) { - tc_ack.stop; - log("*** " & __SCOPE__ & ": INCONC: Authorization was not requested as expected ***"); - setverdict(inconc); - } - } - } - else { - f_awaitingOkResponse(p_cSeq_s); - f_getServiceRouteMapIntoRouteInRegistration(vc_response); - } - } // end function f_Registration_IMS - - /** - * @desc awaiting UE1 registration (with authentication) - * @param p_cSeq_s The current cseq - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - * @param p_register The expected REGISTER_Request - default: mw_REGISTER_authorizedRequest_IMS - */ - function f_awaitingRegistration_IMS( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in charstring p_qop, - in template(present) REGISTER_Request p_register := - mw_REGISTER_authorizedRequest_IMS( - mw_Authorization_digest( - mw_digestResponse( - (c_Integrity_protected_yes, c_Integrity_protected_ip_assoc_pending) - ) - ) - ) - ) runs on ImsComponent { - var SipUrl v_passociated_url; - - // Awaiting 1st REGISTER - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 401 response - f_sendResponse( - m_Response_WWWauthenticate_IMS( - c_statusLine401, - vc_callId, - p_cSeq_s, - vc_caller_From, - vc_caller_To, - vc_via, - m_wwwAuthenticate( - f_calculatecChallenge_forWWWAuthorization( - p_qop, - valueof(vc_authorization.body[0].digestResponse) - ) - ) - ) - ); - - // Awaiting 2nd REGISTER with authorization header - f_awaitingREGISTER(p_register); - - // 200OK to complete the request - if (isvalue(vc_request.msgHeader.contact)) { - vc_contact := valueof(vc_request.msgHeader.contact); - vc_contact.contactBody.contactAddresses[0].contactParams := { - { - "expires", - { - tokenOrHost := int2str(3600) - } - } - }; - } - v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; - f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); - } // end function f_awaitingRegistration_IMS - - /** - * @desc Awaiting UE1 registration (with authentication, without security headers) - * @param p_cSeq_s The current cseq - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - */ - function f_awaitingRegistration_IMS_gm( - inout CSeq p_cSeq_s, - in SipUrl p_to_user, - in charstring p_qop - ) runs on ImsComponent { - vc_ignore_subscribe := true; // handle SUBSCRIBE during the call - - f_awaitingRegistration_IMS(p_cSeq_s, p_to_user, p_qop, mw_REGISTER_authorizedRequest_wo_securityheaders_IMS); - - vc_DeregDone := false; - } // end function f_awaitingRegistration_IMS_gm - - /** - * @desc Remove registration - * @param p_cSeq_s The current cseq - * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) - * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) - */ - function f_removeRegistration_IMS( - inout CSeq p_cSeq_s, - template(value) charstring p_host, - template(value) integer p_port - ) runs on SipComponent { - var template(value) REGISTER_Request v_request; - - if (PX_SIP_REGISTRATION) { - f_setHeaders_deREGISTER(p_cSeq_s); - v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); - v_request.msgHeader.route := f_route(); - - f_SendREGISTER(v_request); - if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { - // receiving 401 Unauthorized response. - // and Re-send REGISTER request with Authorization header - tc_ack.start; - alt { - [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq_s)) -> value vc_response { - tc_ack.stop; - // set headers via, cseq and authorization - f_setHeaders_2ndREGISTER(p_cSeq_s); - v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); - v_request.msgHeader.route := f_route(); - // Re-send protected REGISTER - f_SendREGISTER(v_request); // LibSip - // awaiting 200 OK REGISTER - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); - } - [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)) -> value vc_response { - tc_ack.stop; - f_setHeadersOnReceiptOfResponse(vc_response); - log("*** " & __SCOPE__ & ": INFO: Authorization was not requested as expected ***"); - } - } - } - else { - f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); - } - } - } // end f_RemoveRegistration_IMS - - } // end group registration - - group preambles { - - /** - * @desc Sets variables and default initialization for user profile where proxy role is present - * @param p_userprofile User profile of call - * @param p_cSeq_s The current cseq - */ - function f_IMS_preamble_MGCF( - inout CSeq p_cSeq_s - ) runs on ImsComponent { - vc_boo_recordRoute := true; - vc_boo_route := true; - //NOTE STF471: removed f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); - - f_IMS_preamble_woRegistration(p_cSeq_s); - } - - /** - * @desc Sets variables and default initialization for user profile - * @param p_cSeq_s The current cseq - */ - function f_IMS_preamble_woRegistration( - inout CSeq p_cSeq_s - ) runs on ImsComponent { - // avoid deregistration in default behavior - vc_DeregDone := true; - vc_boo_route := true; - vc_boo_recordRoute := true; - - // Variables & defaults initialization - LibSip_Steps.f_init_component(p_cSeq_s); - - // Preamble - //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable - vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); - vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); - } - - //NOTE STF471 added - /** - * @desc Sets variables and default initialization for user profile - * @param p_cSeq_s The current cseq - */ - function f_IMS_preamble_woRegistration_as( - inout CSeq p_cSeq_s - ) runs on ImsComponent { - // avoid deregistration in default behavior - vc_DeregDone := true; - vc_boo_route := true; - vc_boo_recordRoute := true; - - // Variables & defaults initialization - LibSip_Steps.f_init_component(p_cSeq_s); - - // Preamble - //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable - vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); - } - - /** - * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 - * @param p_cSeq_s The current cseq - * @param p_register Register template - */ - function f_IMS_preamble_withEmergencyRegistration( - inout CSeq p_cSeq_s, - template REGISTER_Request p_register - ) runs on ImsComponent { - - //NOTE STF471: removed f_init_interfaceprofile(p_interface); - // Variables & defaults initialization - f_IMS_preamble_woRegistration(p_cSeq_s); - // Preamble - f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, true); - - // deregistration in case of successful registration - vc_DeregDone := false; - } - - /** - * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 - * @param p_cSeq_s The current cseq - * @param p_register Register template - */ - function f_IMS_preamble_withRegistration( - inout CSeq p_cSeq_s, - out template REGISTER_Request p_register - ) runs on ImsComponent { - - //NOTE STF471: removed f_init_interfaceprofile(p_interface); - // Variables & defaults initialization - f_IMS_preamble_woRegistration(p_cSeq_s); - - // Preamble - f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); - - // deregistration in case of successful registration - vc_DeregDone := false; - - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); - } - - //NOTE STF471 added - /** - * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 - * @param p_cSeq_s The current cseq - * @param p_register Register template - */ - function f_IMS_preamble_withRegistrationWoSubscription( - inout CSeq p_cSeq_s, - out template REGISTER_Request p_register - ) runs on ImsComponent { - //NOTE STF471: removed f_init_interfaceprofile(p_interface); - - // Variables & defaults initialization - f_IMS_preamble_woRegistration(p_cSeq_s); - - // Preamble - f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); - - // deregistration in case of successful registration - vc_DeregDone := false; - } - - /** - * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) - * @param p_cSeq_s The current cseq - * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) - * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) - */ - function f_IMS_preamble_withRegistrationBasic( - inout CSeq p_cSeq_s, - template(value) charstring p_host, - template(value) integer p_port - ) runs on ImsComponent { - //NOTE STF471: removed f_init_interfaceprofile(p_interface); - // Variables & defaults initialization - f_IMS_preamble_woRegistration(p_cSeq_s); - - // Preamble - f_Registration_IMS(p_cSeq_s, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, p_host, p_port); - f_setHeaders_SUBSCRIBE(p_cSeq_s); - f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); - } - - /** - * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) - * @param p_cSeq_s The current cseq - */ - function f_IMS_preamble_AS( - inout CSeq p_cSeq_s - ) runs on ImsComponent { - // avoid deregistration in default behavior - vc_DeregDone := true; - vc_boo_route := true; - vc_boo_recordRoute := true; - vc_cSeq := p_cSeq_s; - - // Defaults - vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); - vc_default := activate(a_altstep_AS()); - - // Preamble - //NOTE STF471: removed f_init_interfaceprofile(p_interface); - //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable - vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); - vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); - } - - } // end group preambles - - group postambles { - - /** - * @desc Terminates component and handles deregistration - * @param p_cSeq_s The current cseq - */ - function f_IMS_postamble_withDeRegistration( - CSeq p_cSeq_s - ) runs on ImsComponent { - f_RemoveRegistration(p_cSeq_s); - f_terminate_component(); - } - - /** - * @desc Terminates component and optionally handles deregistration on AS as TS - * @param p_deRegistration Handle deregistration? - */ - function f_IMS_postamble_AS_withDeRegistration( - boolean p_deRegistration - ) runs on ImsComponent { - - if (p_deRegistration == true) { - f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true); - } - f_terminate_component(); - } - - /** - * @desc Terminates component without registration - */ - function f_SIP_postamble_IMS1_withoutRegistration( - ) runs on ImsComponent { - f_terminate_component(); - } - - /** - * @desc Terminates component without de-registration - */ - function f_IMS_postamble_withoutDeRegistration( - ) runs on ImsComponent { - f_terminate_component(); - } - - /** - * @desc Terminates component with de-registration - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - */ - function f_SIP_postamble_IMS1_awaitDeRegistration( - in SipUrl p_to_user, - in charstring p_qop - ) runs on ImsComponent { - var SipUrl v_passociated_url; - // Awaiting 1st REGISTER - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 401 response - f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); - - // Awaiting 2nd REGISTER with authorization header - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 200OK to complete the request - v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; - f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); - - f_terminate_component(); - } - - /** - * @desc Terminates component with de-registration - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - */ - function f_IMS_postamble_awaitDeRegistration( - in SipUrl p_to_user, - in charstring p_qop - ) runs on ImsComponent { - var SipUrl v_passociated_url; - // Awaiting 1st REGISTER - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 401 response - f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); - - // Awaiting 2nd REGISTER with authorization header - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 200OK to complete the request - v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; - f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); - - f_terminate_component(); - } - - - /** - * @desc Awaits de-registration - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - */ - function f_IMS_awaitDeRegistration( - in SipUrl p_to_user, - in charstring p_qop - ) runs on ImsComponent { - var SipUrl v_passociated_url; - // Awaiting 1st REGISTER - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 401 response - f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); - - // Awaiting 2nd REGISTER with authorization header - f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); - - // 200OK to complete the request - v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; - f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); - } - - //NOTE STF471: renamed f_SIP_postamble_UE(1|2)_withoutRegistration to f_SIP_postamble_UE_withoutRegistration - /** - * @desc Terminates component without registration - */ - function f_SIP_postamble_UE_withoutRegistration( - ) runs on ImsComponent { - f_terminate_component(); - } - - /** - * @desc Sends BYE and awaits response (IMS) - * @param p_requestUri The Request URI - * @param p_callId CallId parameter for outgoing BYE - * @param p_cSeq_s CSeq parameter for outgoing BYE - * @param p_from From parameter for outgoing BYE - * @param p_to To parameter for outgoing BYE - */ - function f_terminateCall_IMS( - SipUrl p_requestUri, - CallId p_callId, - inout CSeq p_cSeq_s, - From p_from, - template(value) To p_to - ) runs on ImsComponent { - LibSip_Steps.f_setHeadersBYE(p_cSeq_s); - // Sending of a BYE request to release the call and expect a final response - f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); - - tc_resp.start; - alt { - [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { - repeat; - } - [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { - tc_resp.stop; - } - // timeout should be handled in default_alt_step - } - } // end function f_terminateCall_IMS - - /** - * @desc Sends BYE and awaits response (UE) - * @param p_requestUri The Request URI - * @param p_callId CallId parameter for outgoing BYE - * @param p_cSeq_s CSeq parameter for outgoing BYE - * @param p_from From parameter for outgoing BYE - * @param p_to To parameter for outgoing BYE - * @param p_recordRoute RecordRoute parameter for outgoing BYE - default: omit - */ - function f_terminateCall_UE( - SipUrl p_requestUri, - CallId p_callId, - inout CSeq p_cSeq_s, - From p_from, - template(value) To p_to, - template RecordRoute p_recordRoute := omit - ) runs on ImsComponent { - var Route v_route; - LibSip_Steps.f_setHeadersBYE(p_cSeq_s); - // Sending of a BYE request to release the call and expect a final response - if (ispresent(p_recordRoute)) { - v_route := {ROUTE_E, valueof(p_recordRoute.routeBody)}; - f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, v_route)); - } - else { - f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, vc_route)); - } - - tc_resp.start; - alt { - [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { - repeat; - } - [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { - tc_resp.stop; - } - // timeout should be handled in default_alt_step - } - } // end function f_terminateCall_UE - - /** - * @desc Sends BYE and awaits response and De-registration - * @param p_requestUri The Request URI - * @param p_callId CallId parameter for outgoing BYE - * @param p_cSeq_s CSeq parameter for outgoing BYE - * @param p_from From parameter for outgoing BYE - * @param p_to To parameter for outgoing BYE - * @param p_qop of the peer UE (alternatively) - */ - function f_terminateCall_UE_withDeReg( - SipUrl p_requestUri, - CallId p_callId, - inout CSeq p_cSeq_s, - From p_from, - template(value) To p_to, - in charstring p_qop - ) runs on ImsComponent { - LibSip_Steps.f_setHeadersBYE(p_cSeq_s); - // Sending of a BYE request to release the call and expect a final response - f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); - - tc_resp.start; - alt { - [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { - repeat; - } - [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { - tc_resp.stop; - } - // timeout should be handled in default_alt_step - } - action("Please de-register"); - f_IMS_awaitDeRegistration(p_requestUri, p_qop); - } // end function f_terminateCall_UE_withDeReg - - } - group defaults { - - /** - * @desc Altstep for clearing registration (IMS user) - * @param p_to_user The selected user's SIP URL - * @param p_qop of the peer UE (alternatively) - * @verdict fail for all unexpected branches - */ - altstep a_clearRegistration_IMSuser( - in SipUrl p_to_user, - in charstring p_qop - ) runs on ImsComponent { - var Response v_response; - var Request v_request; - var SUBSCRIBE_Request v_subscribe_request; - var REGISTER_Request v_register_request; - var BYE_Request v_bye_request; - var CANCEL_Request v_cancel_request; - var NOTIFY_Request v_notify_request; - var INFO_Request v_info_request; - var CSeq v_cSeq; - [] any timer.timeout { - log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); - setverdict(fail); - all timer.stop; - vc_callId := vc_callIdReg; - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - // allow repeated INVITEs - [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { - repeat; - } - // allow repeated BYEs after ack of the first BYE - [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { - repeat; - } - [] SIPP.receive(mw_ACK_Request_Base(?)) { - repeat; - } - // allow 100 replies - [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { - repeat; - } - // ignore 181 if flag is set (following TS 183004 ����4.5.2.1) - [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response sender vc_sent_label { - v_cSeq := valueof(v_response.msgHeader.cSeq); - f_setHeadersOnReceiptOfResponse(v_response); - repeat; - } - // according to SIP chap.8.1.3.2 - [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { - repeat; - } - // ignore 484 if flag is set - [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { - repeat; - } - [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { - v_cSeq := valueof(v_response.msgHeader.cSeq); - f_setHeadersOnReceiptOfResponse(v_response); - f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); - repeat; - } - [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { - repeat; - } - [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request sender vc_sent_label { - f_setHeadersOnReceiptOfRequest(v_info_request); - f_send200OK(); - repeat; - } - // awaiting of Notify - [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request sender vc_sent_label { - f_setHeadersOnReceiptOfRequest(v_notify_request); - f_send200OK(); - repeat; - } - // awaiting of subscribe from UE - [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { - f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); - f_send200OK(); - repeat; - } - // awaiting of subscribe on proxy - [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { - f_setHeadersOnReceiptOfRequest(v_subscribe_request); - f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); - f_awaitingOkResponse(vc_cSeq); - repeat; - } - // unexpected BYE is acknowledged to avoid retransmissions - [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); - setverdict(fail); - f_setHeadersOnReceiptOfRequest(v_bye_request); - f_send200OK(); - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - // unexpected CANCEL is acknowledged to avoid retransmissions - [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); - setverdict(fail); - f_setHeadersOnReceiptOfRequest(v_cancel_request); - // Answer to the CANCEL - f_send200OK(); - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - // catch 4xx response - [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected 4xx response received. ***"); - setverdict(fail); - v_cSeq := valueof(v_response.msgHeader.cSeq); - f_setHeadersOnReceiptOfResponse(v_response); - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - // catch 5xx response - [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected 5xx response received. ***"); - setverdict(fail); - v_cSeq := valueof(v_response.msgHeader.cSeq); - f_setHeadersOnReceiptOfResponse(v_response); - LibSip_Steps.f_setHeadersACK(); - f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - // catch invalid REGISTER - [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected REGISTER received. ***"); - setverdict(fail); - f_componentStop(); - } - // any - [] SIPP.receive { - log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); - setverdict(fail); - all timer.stop; - action("Please de-register"); - f_IMS_awaitDeRegistration(p_to_user, p_qop); - f_componentStop(); - } - } - - /** - * @desc Main default altstep to handle unexpected messages and timeout - * @verdict fail for all unexpected branches - */ - altstep a_altstep_AS( - ) runs on SipComponent { - var Request v_request; - var REGISTER_Request v_register_request; - var BYE_Request v_bye_request; - var CANCEL_Request v_cancel_request; - - [] any timer.timeout { - log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); - setverdict(fail); - all timer.stop; - } - // allow repeated INVITEs - [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { - repeat; - } - // handle REGISTER requests - [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { - f_setHeadersOnReceiptOfREGISTER(v_register_request); - // vc_contact := vc_request.msgHeader.contact; - f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact)); - repeat; - } - // according to SIP chap.8.1.3.2 - [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { - repeat; - } - // unexpected CANCEL is acknowledged to avoid retransmissions - [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); - setverdict(fail); - f_setHeadersOnReceiptOfRequest(v_cancel_request); - f_send200OK(); - } - // unexpected BYE is acknowledged to avoid retransmissions - [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { - log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); - setverdict(fail); - f_setHeadersOnReceiptOfRequest(v_bye_request); - f_send200OK(); - } - [] SIPP.receive(mw_Response_Base(?, vc_callId, vc_cSeq)) -> value vc_response { - log("*** " & testcasename() & ": FAIL: Unexpected response message in " & __SCOPE__ & " received. ***"); - setverdict(fail); - repeat; - } - // any - [] SIPP.receive { - log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); - setverdict(fail); - all timer.stop; - } - } - } -} // module LibIms_Steps diff --git a/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn b/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn deleted file mode 100644 index cb866f3..0000000 --- a/ttcn/patch_lib_ims_titan/LibIms_Templates.ttcn +++ /dev/null @@ -1,4632 +0,0 @@ -/** - * @author STF471 - * @version $Id$ - * @desc This module provides the templates used by the test component for SIP-IMS tests. - * This module is part of LibImsV3. - */ -module LibIms_Templates { - // LibCommon - import from LibCommon_DataStrings all; - - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Steps all; - import from LibSip_PIXITS all; - import from LibSip_XMLTypes all; - import from LibSip_MessageBodyTypes all; - import from LibSip_Common all; - - // LibIms - import from LibIms_SIPTypesAndValues all; - - // LibXMLTypes - import from XSD all; - - import from urn_ietf_params_xml_ns_resource_lists language "XSD" all - with { - extension "File:../xsd/ResourceList.xsd"; - } - - import from urn_ietf_params_xml_ns_reginfo language "XSD" all except {type Contact;} - with { - extension "File:../xsd/regInfo.xsd"; - } - - import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all - with { - extension "File:../xsd/SupplementaryServices.xsd"; - } - - import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all - with { - extension "File:../xsd/MCID.xsd"; - } - - import from NoTargetNamespace language "XSD" all - with { - extension "File:../xsd/Ims3gpp.xsd"; - } - - import from urn_ietf_params_xml_ns_conference_info language "XSD" all - with { - extension "File:../xsd/CONF.xsd"; - } - - import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all - with { - extension "File:../xsd/PSTN.xsd"; - } - - import from urn_ietf_params_xml_ns_common_policy language "XSD" all - with { - extension "File:../xsd/common-policy.xsd"; - } - - import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all - with { - extension "File:../xsd/CDIVN.xsd"; - } - - import from urn_3gpp_ns_cw_1_0 language "XSD" all - with { - extension "File:../xsd/cw.xsd"; - } - - import from urn_ietf_params_xml_ns_pidf language "XSD" all - with { - extension "File:../xsd/pidf.xsd"; - } - - template(present) charstring mw_international_number_format := pattern "\\+\d+"; - - template(present) NameAddr mw_SipUrl_SUTinterface( - template(present) charstring p_host := ?, - template(present) integer p_port := ? - ) := { - displayName := *, - addrSpec := { - scheme := "sip:", - components := { - sip := { - userInfo := *, - hostPort := mw_hostPort(p_host, p_port) - } - }, - urlParameters := *, - headers := * - } - } - - template(present) Addr_Union mw_UE1_Addr_display( - template(present) DisplayName p_displayName - ) := { - nameAddr := { - displayName := p_displayName, - addrSpec := ? - } - } - - // MIME name application - template(value) charstring m_mimeMultipart := "multipart/mixed;boundary=""" & PX_SIP_MIME_BOUNDARY & """"; - - group subfields { - - template(value) SipUrl m_SipUrl_currIpaddr_CSCF( - template(value) SipUserProfile p_userprofile - ) := { - scheme := c_sipScheme, //* contains "sip" - components := { - sip := { - userInfo := omit, //* optional - hostPort := { - host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring - portField := p_userprofile.currPort //* optional integer - } - } - }, - urlParameters := omit, - headers := omit - } - - template(present) SemicolonParam_List mw_semicolonParams_realm( - template GenValue p_realm - ) := - superset( - { - "realm", - p_realm - }, - { - "nonce", - ? - }, - { - "algorithm", - { tokenOrHost := "AKAv1-MD5" } - }, - { - "ik", - ? - }, - { - "ck", - ? - } - ); - - template(value) SemicolonParam_List m_semicolonParams_language( - template(omit) GenValue p_language := omit - ) := { - { - "language", - p_language - } - } - - template(present) SemicolonParam_List mw_semicolonParams_language( - template GenValue p_language - ) := { - { - "language", - p_language - } - } - - template(value) SemicolonParam_List m_semicolonParams_isub( - template(omit) GenValue p_address := omit - ) := { - { - "isub", - p_address - } - } - } - - group headerFieldTemplates { - - template(value) MinSE m_minSE( - template(value) DeltaSec p_ds - ) := { - fieldName := MIN_SE_E, - deltaSec := p_ds, - minSeParam := omit - } - - template(present) PathValue mw_pathvalue( - template(present) SipUrl p_sipUrl := ? - ) := { - nameAddr := { - displayName := *, // optional charstring - addrSpec := p_sipUrl // SipUrl - }, - rrParam := * - } - - template(value) Path m_path( - template(value) charstring p_host, - template(value) integer p_port, - template(value) SipUrl p_sipUrl - ) modifies m_path_TS := { - pathValues := { - { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := p_sipUrl // SipUrl - }, - rrParam := omit - } - } - } - - template(value) Path m_path_TS( - template(value) charstring p_host, - template(value) integer p_port - ) := { - fieldName := PATH_E, - pathValues := { - { - nameAddr := { - displayName := omit, // optional charstring - addrSpec := { - scheme := c_sipScheme, - components := { - sip := { - userInfo := { - userOrTelephoneSubscriber := "registrar", - password := omit - }, - hostPort := {p_host, p_port} - } - }, - urlParameters := { - { - id := "lr", - paramValue := omit - } - }, - headers := omit - } - }, - rrParam := omit - } - } - } - - /** - * @desc Path header field expectation with at least one path value - * @param p_sipUrl value of the last element in the list of path values - */ - template(present) Path mw_path( - template(present) SipUrl p_sipUrl := ? - ) := { - fieldName := PATH_E, - pathValues := {mw_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl - } - - template(value) PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := { - fieldName := P_ACCESS_NETWORK_INFO_E, - accessType := "IEEE-802.11a", - genericParams := { - { - id := "extension-access-info", - paramValue := { tokenOrHost := "192.1.1.20" } - } - } - } - - template(value) PAssertedService m_pAssertedService( - template(value) PAssertedServiceValue p_pAssertedServiceValue - ) := { - fieldName := P_ASSERTED_SERVICE_E, - pAssertedServiceValue := p_pAssertedServiceValue - } - - template(value) PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := { - fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, - chargeAddrParams := { - { - id := "ccf", - paramValue := { tokenOrHost := "192.1.1.1" } - }, // value is fixed because it is deleted on proxy - { - id := "ecf", - paramValue := { tokenOrHost := "192.1.1.2" } - } // value is fixed because it is deleted on proxy - } - } - - template(value) PChargingVector m_pChargingVector( - template(value) charstring p_icidValue, - template(omit) SemicolonParam_List p_chargeParams := omit - ) modifies m_pChargingVector_icid_TS := { - icidValue := p_icidValue, - chargeParams := p_chargeParams - } - - // NOTE STF471 change: icidValue extracted from chargeParams, chargeParams removed - template(value) PChargingVector m_pChargingVector_icid_TS := { - fieldName := P_CHARGING_VECTOR_E, - icidValue := c_icid_value, - chargeParams := omit - } - - template(value) PChargingVector m_pChargingVector_origIoi_fixedValue( - template(value) GenValue p_homeDomain - ) modifies m_pChargingVector_icid_TS := { - chargeParams := { - { - id := c_icid_generated_at, - paramValue := { tokenOrHost := "192.1.1.10" } - }, - { - id := c_orig_ioi, - paramValue := p_homeDomain - } - } - } - - template(value) PChargingVector m_pChargingVector_termIoi_fixedValue( - template(value) GenValue p_homeDomain - ) modifies m_pChargingVector_icid_TS := { - chargeParams := { - { - id := c_icid_generated_at, - paramValue := { tokenOrHost := "192.1.1.10" } - }, - { - id := c_term_ioi, - paramValue := p_homeDomain - } - } - } - - template(value) PChargingVector m_pChargingVector_accessNetwInfo( - template(value) GenValue p_homeDomain - ) modifies m_pChargingVector_icid_TS := { - chargeParams := { - { - id := c_term_ioi, - paramValue := p_homeDomain - }, - { - id := c_access_network_charging_info, - paramValue := { tokenOrHost := "192.1.1.10" } - } - } - } - - // NOTE STF471 change: icidValue added - template(present) PChargingVector mw_pChargingVector( - template(present) charstring p_id := ?, - template GenValue p_paramValue - ) := { - fieldName := P_CHARGING_VECTOR_E, - icidValue := ?, - chargeParams := - superset( - { - id := p_id, - paramValue := p_paramValue - } - ) - } - - template(value) PMediaAuthorization m_pMediaAuthorization_fixedValue := { - fieldName := P_MEDIA_AUTHORIZATION_E, - pMediaAuthorizations := {"A"} // example - } - - - template(value) PEarlyMedia m_pEarlyMedia_sup := { - fieldName := P_EARLY_MEDIA_E, - em_param := {"supported"} - } - - - template(value) ProxyRequire m_proxyRequire_secAgree := { - fieldName := PROXY_REQUIRE_E, - optionsTags := {"sec-agree"} - } - - template(value) PVisitedNetworkID m_pVisitedNetworkID_TS := { - fieldName := P_VISITED_NETWORK_E, - vNetWorkSpec := { - { - vNetworkSpecToken := "Visited ETSI 1", - genericParams := omit - } - } - } - - template(present) PVisitedNetworkID mw_pVisitedNetworkID( - template(present) charstring p_vNetworkSpecToken - ) modifies m_pVisitedNetworkID_TS := { - vNetWorkSpec := { - { - vNetworkSpecToken := p_vNetworkSpecToken, - genericParams := * - } - } - } - - template(value) RecordRoute m_recordRoute_notmatching := { - fieldName := RECORD_ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := omit, - addrSpec := { - scheme := c_sipScheme, // contains "sip" - components := { - sip := { - userInfo := { - userOrTelephoneSubscriber := "unknown", - password := omit - }, - hostPort := { - host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring - portField := omit - } - } - }, - urlParameters := omit, - headers := omit - } - }, - rrParam := omit - } - } - } - - template(value) Require m_require := { - fieldName := REQUIRE_E, - optionsTags := {} - } - - template(value) Require m_require_secAgree - modifies m_require := { - optionsTags := {"sec-agree"} - } - - template(present) Require mw_require_path - modifies m_require := { - optionsTags := superset("path") - } - - template(value) Route m_route_interface( - template(value) ImsInterfaceProfile p_interfaceprofile - ) modifies m_route_notmatching := { - routeBody := { - { - nameAddr := { - displayName := omit, - addrSpec := { - scheme := c_sipScheme, // contains "sip" - components := { - sip := { - userInfo := omit, - hostPort := { - host := p_interfaceprofile.SUTHomeDomain, - portField := omit - } - } - }, - urlParameters := omit, - headers := omit - } - }, - rrParam := omit - } - } - } - - template(value) Route m_route_notmatching := { - fieldName := ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := omit, - addrSpec := { - scheme := c_sipScheme, // contains "sip" - components := { - sip := { - userInfo := { - userOrTelephoneSubscriber := "unknown", - password := omit - }, - hostPort := { - host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring - portField := omit - } - } - }, - urlParameters := omit, - headers := omit - } - }, - rrParam := omit - } - } - } - - - template(value) SessionExpires m_se( - template(value) DeltaSec p_ds - ) modifies mw_se := { - deltaSec := p_ds - } - - template(present) SessionExpires mw_se := { - fieldName := SESSION_EXPIRES_E, - deltaSec := ?, - seParam := omit - } - - template(value) Supported m_supported := { - fieldName := SUPPORTED_E, - optionsTags := {} - } - - template(value) Supported m_supported_timer - modifies m_supported := { - optionsTags := {"timer"} - } - - template(value) Supported m_supported_histinfo - modifies m_supported := { - optionsTags := {"histinfo"} - } - - - template(value) Supported m_supported_fromChange - modifies m_supported := { - optionsTags := {"from-change"} - } - - template(value) To m_To_targetRefreshRequest( - template(value) To p_To - ) := { - fieldName := TO_E, - addressField := { - nameAddr := { - displayName := p_To.addressField.nameAddr.displayName, - addrSpec := p_To.addressField.nameAddr.addrSpec - } - }, // end addressField - toParams := { - { - id := c_tagId, - paramValue := { tokenOrHost := f_getRndTag() } - } - } - } - - template(value) ViaBody m_ViaBody_virtualUEinPCSCF( - template(value) charstring p_branch_val, - template(value) SipUserProfile p_userprofile - ) := { - sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), - sentBy := { - host := p_userprofile.contactIpaddr, - portField := p_userprofile.contactPort - }, - viaParams := { - { - id := c_branchId, - paramValue := { - tokenOrHost := p_branch_val - } - } - } - } - - template(value) ViaBody m_ViaBody_virtual_XCSCF( - template(value) charstring p_branch_val, - template(value) SipUserProfile p_userprofile - ) modifies m_ViaBody_virtualUEinPCSCF := { - sentBy := { - host := p_userprofile.currIpaddr, - portField := p_userprofile.currPort - } - } - - template(value) Via m_via_notmatching := { - fieldName := VIA_E, - viaBody := { - { - sentProtocol := m_SentProtocol("UDP"), - sentBy := { - host := "unknown.domain.name", - portField := 10000 - }, - viaParams := { - { - id := c_branchId, - paramValue := { tokenOrHost := "abcd0000" } - } - } - } - } - } - - /** - * @desc WWW-Authenticate header field - * @param p_challenge value - */ - template(value) WwwAuthenticate m_wwwAuthenticate( - template(value) Challenge p_challenge - ) := { - fieldName := WWW_AUTHENTICATE_E, - challenge := p_challenge - } - - /** - * @desc WWW-Authenticate header field - * @param p_challenge value - */ - template(present) WwwAuthenticate mw_wwwAuthenticate( - template(present) SemicolonParam_List p_semicolonParam_List := ? - ) := { - fieldName := WWW_AUTHENTICATE_E, - challenge := { - digestCln := p_semicolonParam_List // set of GenericParam - } - } - - template(present) SemicolonParam_List mw_challenge := superset(mw_ck, mw_ik); - - template(present) GenericParam mw_ck := { - "ck", * - } - - template(present) GenericParam mw_ik := { - "ik", * - } - - /** - * @desc AcceptContact header field - * @param p_semicolonParam_List value - */ - template(value) AcceptContact m_acceptContact( - template(omit) SemicolonParam_List p_semicolonParam_List := omit - ) := { - fieldName := ACCEPT_CONTACT_E, - acValues := { - { - wildcard := c_WILDCARD, - acRcParams := p_semicolonParam_List // set of GenericParam - } - } - } - - /** - * @desc Authenticate header field - * @param p_semicolonParam_List value - */ - template(present) AcceptContact mw_acceptContact( - template SemicolonParam_List p_semicolonParam_List - ) := { - fieldName := ACCEPT_CONTACT_E, - acValues := { - { - wildcard := c_WILDCARD, - acRcParams := p_semicolonParam_List // set of GenericParam - } - } - } - - template(present) SubscriptionState mw_subscriptionState( - template(present) charstring p_state := ? - ) := { - fieldName := SUBSCRIPTION_STATE_E, - subState := p_state, - substateParams := omit - } - - // [3455/5.1 ] - template(value) PAssociatedURI m_pAssociatedURI( - template(value) NameAddr p_nameAddr - ) := { - fieldName := P_ASSOCIATED_URI_E, - nameAddrList := { - { - nameAddr := p_nameAddr, - genericParams := omit - } - } - } - - template(present) SecurityServer mw_securityServer( - template(present) SecurityMechanism_List p_securityMechanism_List := ? - ) := { - fieldName := SECURITY_SERVER_E, - securityMech := p_securityMechanism_List - } - - template(value) SecurityClient m_securityClient( - template(value) SecurityMechanism_List p_securityMechanism_List - ) := { - fieldName := SECURITY_CLIENT_E, - securityMech := p_securityMechanism_List - } - - template(value) SecurityVerify m_securityVerify( - template(value) SecurityMechanism_List p_securityMechanism_List - ) := { - fieldName := SECURITY_VERIFY_E, - securityMech := p_securityMechanism_List - } - - template(value) RSeq m_rseq9999 := { - fieldName := RSEQ_E, - responseNum := 9999 // Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 - } - - template(value) Expires m_expires( - template(value) integer p_deltaSec - ) := { - fieldName := EXPIRES_E, - deltaSec := int2str(valueof(p_deltaSec)) - } - - - } // end group headerFieldTemplates - - group messageBodyTemplates { - - group xmlTemplates { - - template(value) XmlBody m_XmlBody_ConfInfo( - template(value) Conference_type p_confInfo - ) := { - conference := p_confInfo - } - - template(value) XmlBody m_XmlBody_CW( - template(value) Ims_cw p_cw - ) := { - cw := p_cw - } - - template(value) XmlBody m_XmlBody_CUG( - template(value) Cug p_cug - ) := { - cug := p_cug - } - - template(value) XmlBody m_XmlBody_MCID( - template(value) Mcid p_mcid - ) := { - mcid := p_mcid - } - - template(value) XmlBody m_XmlBody_PSTNTransit( - template(value) PSTN_transit p_pstn - ) := { - pstnTransit := p_pstn - } - - template(value) XmlBody m_XmlBody_simservs( - template(value) Simservs p_simservs - ) := { - simservs := p_simservs - } - - template(value) XmlBody m_XmlBody_ACR_ICB( - template(value) Incoming_communication_barring p_icb - ) := { - simservs := { - attr := omit, - //absServiceGroup_list := {}, - extensions := { - elem_list := valueof(p_icb.attr) - } - } - } - - template(value) XmlBody m_XmlBody_ACR_OCB( - template(value) Outgoing_communication_barring p_ocb - ) := { - simservs := { - attr := omit, - //absServiceGroup_list := {}, - extensions := { - elem_list := valueof(p_ocb.attr) - } - } - } - - template(value) XmlBody m_XmlBody_CDIVN( - template(value) Comm_div_info_type p_cdivn - ) := { - cdivn := p_cdivn - } - - template(value) XmlBody m_XmlBody_Reginfo( - template(value) Reginfo p_regInfo - ) := { - regInfo := p_regInfo - } - - template(value) XmlBody m_XmlBody_Presence( - template(value) Presence p_presence - ) := { - presence := p_presence - } - - template(value) MessageBody m_messageBodyXML( - template(value) XmlBody p_xmlBody - ) := { - xmlBody := p_xmlBody - } - - template(value) Reginfo m_reginfo( - template(value) XSD.AnyURI p_user - ) := { - full, - 0, - {m_registration(p_user)}, - {} - } - - template(value) Registration m_registration( - template(value) XSD.AnyURI p_user - ) := { - p_user, // XSD.anyURI aor - "a7", // XSD.string id - init, // enumerated {active,init,terminated} state, - {}, // record of Contact contact_list optional, - {} // record of anytype elem_list optional - } - - template(present) XmlBody mw_XmlBody_ConfInfo( - template(present) Conference_type p_confInfo := ? - ) := { - conference := p_confInfo - } - - template(present) XmlBody mw_XmlBody_CUG( - template(present) Cug p_cug := ? - ) := { - cug := p_cug - } - - template(present) XmlBody mw_XmlBody_MCID( - template(present) Mcid p_mcid := ? - ) := {mcid := p_mcid} - - template(present) XmlBody mw_XmlBody_PSTNTransit( - template(present) PSTN_transit p_pstn := ? - ) := { - pstnTransit := p_pstn - } - - template(present) XmlBody mw_XmlBody_CDIVN( - template(present) Comm_div_info_type p_cdivn := ? - ) := { - cdivn := p_cdivn - } - - template(present) XmlBody mw_XmlBody_simservs( - template(present) Simservs p_simservs := ? - ) := { - simservs := p_simservs - } - - template(present) XmlBody mw_XmlBody_ResourceLists( - template(present) Resource_lists p_resourceLists := ? - ) := { - resourceLists := p_resourceLists - } - - template(present) XmlBody mw_XmlBody_Reginfo( - template(present) Reginfo p_regInfo := ? - ) := { - regInfo := p_regInfo - } - - template(present) MessageBody mw_messageBodyXML( - template(present) XmlBody p_xmlBody := ? - ) := { - xmlBody := p_xmlBody - } - - - } // end group xmlTemplates - - group acrCbTemplates { - - template(value) Incoming_communication_barring m_ICB( - template(value) RuleType p_ruleType - ) := { - active := omit, - attr := omit, - ruleset := { - {p_ruleType} - } - } - - template(value) Outgoing_communication_barring m_OCB( - template(value) RuleType p_ruleType - ) := { - active := omit, - attr := omit, - ruleset := { - {p_ruleType} - } - } - - template(value) RuleType m_ruleType_actionFalse( - template(value) ConditionsType p_condition - ) := { - id := "rule66", - conditions := p_condition, - actions := { - elem_list := {""} - }, - transformations := omit - } - - template(value) ConditionsType m_conditionsType_identity( - template(value) charstring p_id - ) := { - { - { - identity_list := { - { - { - { - one := { - id := p_id, - elem := omit - } - } - } - } - } - } - } - } - - - } // end group acr_cbTemplates - - group cugTemplates { - - template(value) Cug m_CUG( - template(omit) CugRequestType p_crt := omit, - template(omit) NetworkIdentityType p_nit := omit, - template(omit) SixteenbitType p_cibc := omit, - template(omit) TwobitType p_cci := omit - ) := { - active := omit, - attr := omit, - cugCallOperation := p_crt, - networkIndicator := p_nit, - cugInterlockBinaryCode := p_cibc, - cugCommunicationIndicator := p_cci - } - - template(present) Cug mw_CUG( - template CugRequestType p_crt, - template NetworkIdentityType p_nit, - template SixteenbitType p_cibc, - template TwobitType p_cci - ) := { - active := omit, - attr := *, - cugCallOperation := p_crt, - networkIndicator := p_nit, - cugInterlockBinaryCode := p_cibc, - cugCommunicationIndicator := p_cci - } - - template(value) CugRequestType m_cugReqType( - template(value) boolean p_outAccessRequest, - template(value) CugIndexType p_cugIndex - ) := { - outgoingAccessRequest := p_outAccessRequest, - cugIndex := p_cugIndex - } - - template(present) CugRequestType mw_cugReqType( - template(present) boolean p_outAccessRequest := ?, - template(present) CugIndexType p_cugIndex := ? - ) := { - outgoingAccessRequest := p_outAccessRequest, - cugIndex := p_cugIndex - } - - } // end group cugTemplates - - group cwTemplates { - - template(value) Ims_cw m_CW( - template(value) TEmptyType p_cwi - ) := { - attr := omit, - communication_waiting_indication := p_cwi, - elem_list := {} - } - - template(present) Ims_cw mw_ims_cw( - template(present) TEmptyType p_cwi := ? - ) := { - attr := *, - communication_waiting_indication := p_cwi, - elem_list := ? - } - - } // end group cwTemplates - - group mcidTemplates { - - template(value) Mcid m_mcid_request_mcidIndicatorTrue := { - choice := { - request := { - mcidRequestIndicator := "1", - holdingIndicator := "0" - } - } - } - - template(value) Mcid m_mcid_request_mcidIndicatorTrue_holdIndTrue - modifies m_mcid_request_mcidIndicatorTrue := { - choice := { - request := { - holdingIndicator := "1" - } - } - } - - template(present) Mcid mw_mcid_request_mcidIndicatorTrue - modifies m_mcid_request_mcidIndicatorTrue := { - choice := { - request := { - holdingIndicator := ? - } - } - } - - template(value) Mcid m_mcid_response_mcidIndicatorTrue := { - choice := { - response := { - mcidResponseIndicator := "1", - holdingProvidedIndicator := "0" - } - } - } - - template(present) Mcid mw_mcid_response_mcidIndicatorTrue - modifies m_mcid_response_mcidIndicatorTrue := { - choice := { - response := { - holdingProvidedIndicator := ? - } - } - } - - template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndFalse - modifies mw_mcid_response_mcidIndicatorTrue := { - choice := { - response := { - holdingProvidedIndicator := "0" - } - } - } - - template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndTrue - modifies mw_mcid_response_mcidIndicatorTrue := { - choice := { - response := { - holdingProvidedIndicator := "1" - } - } - } - - } // end group mcidTemplates - - group pstnTemplates { - - template(value) PSTN_transit m_PSTN_transit_BC1( - template(value) BearerCapabilityType p_bct - ) := { - bearerInfomationElement_list := {p_bct}, - highLayerCompatibility_list := {}, - lowLayerCompatibility := omit, - progressIndicator_list := {}, - display_list := {} - } - - template(value) PSTN_transit m_PSTN_transit_BC2( - template(value) BearerCapabilityType p_bct, - template(value) BearerCapabilityType p_bct2 - ) modifies m_PSTN_transit_BC1 := { - bearerInfomationElement_list := {p_bct, p_bct2} - } - - template(present) PSTN_transit mw_PSTN_transit_bc( - template(present) BearerCapabilityType p_bct := ?, - template(present) BearerCapabilityType p_bct2 := ? - ) := { - bearerInfomationElement_list := {p_bct, p_bct2}, - highLayerCompatibility_list := {*, *}, - lowLayerCompatibility := *, - progressIndicator_list := ?, - display_list := ? - } - - template(value) PSTN_transit m_PSTN_transit_BC1_HLC1( - template(value) BearerCapabilityType p_bct, - template(value) HighLayerCompatibilityType p_hlc - ) modifies m_PSTN_transit_BC1 := { - highLayerCompatibility_list := {p_hlc} - } - - template(value) PSTN_transit m_PSTN_transit_BC1_HLC2( - template(value) BearerCapabilityType p_bct, - template(value) HighLayerCompatibilityType p_hlc, - template(value) HighLayerCompatibilityType p_hlc2 - ) modifies m_PSTN_transit_BC1_HLC1 := { - highLayerCompatibility_list := {p_hlc, p_hlc2} - } - - template(value) PSTN_transit m_PSTN_transit_BC1_LLC( - template(value) BearerCapabilityType p_bct, - template(value) LowLayerCompatibilityType p_llc - ) modifies m_PSTN_transit_BC1 := { - lowLayerCompatibility := p_llc - } - - template(value) PSTN_transit m_PSTN_transit_BC1_PI1( - template(value) BearerCapabilityType p_bct, - template(value) ProgressIndicatorType p_pi1 - ) modifies m_PSTN_transit_BC1 := { - progressIndicator_list := {p_pi1} - } - - template(value) PSTN_transit m_PSTN_transit_BC1_PI2( - template(value) BearerCapabilityType p_bct, - template(value) ProgressIndicatorType p_pi1, - template(value) ProgressIndicatorType p_pi2 - ) modifies m_PSTN_transit_BC1_PI1 := { - progressIndicator_list := {p_pi1, p_pi2} - } - - template(value) PSTN_transit m_PSTN_transit_BC1_PI3( - template(value) BearerCapabilityType p_bct, - template(value) ProgressIndicatorType p_pi1, - template(value) ProgressIndicatorType p_pi2, - template(value) ProgressIndicatorType p_pi3 - ) modifies m_PSTN_transit_BC1_PI2 := { - progressIndicator_list := {p_pi1, p_pi2, p_pi3} - } - - template(value) PSTN_transit m_PSTN_transit_BC1_HLC1_PI1( - template(value) BearerCapabilityType p_bct, - template(value) HighLayerCompatibilityType p_hlc, - template(value) ProgressIndicatorType p_pi1 - ) modifies m_PSTN_transit_BC1_HLC1 := { - progressIndicator_list := {p_pi1} - } - - template(value) BearerCapabilityType m_BearerCapabilityType( - template(value) Bit5 p_InfoTrfCap - ) := { - bCoctet3 := { - codingStandard := "00", // Coding standard = CCITT standardized coding - informationTransferCabability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability - }, - bCoctet4 := { - transferMode := "00", // Coding standard = CCITT standardized coding - informationTransferRate := "10000" // Information transfer rate = 64 kbit/s - }, - bCoctet4_1 := omit, - bCoctet5 := omit, - bCoctet5a := omit, - bCoctet5bV110 := omit, - bCoctet5bV120 := omit, - bCoctet5c := omit, - bCoctet5d := omit, - bCoctet6 := omit, - bCoctet7 := omit, - bCoctet7a := omit, - bCoctet7b := omit - } - - template(present) BearerCapabilityType mw_BearerCapabilityType( - template(present) BCOctet3Type p_BCOctet3Type := ?, - template(present) BCOctet4Type p_BCOctet4Type := ? - ) := { - bCoctet3 := p_BCOctet3Type, - bCoctet4 := p_BCOctet4Type, - bCoctet4_1 := *, - bCoctet5 := *, - bCoctet5a := *, - bCoctet5bV110 := *, - bCoctet5bV120 := *, - bCoctet5c := *, - bCoctet5d := *, - bCoctet6 := *, - bCoctet7 := *, - bCoctet7a := *, - bCoctet7b := * - } - - template(present) BearerCapabilityType mw_BearerCapabilityType_TrfCap( - template(value) Bit5 p_InfoTrfCap - ) modifies m_BearerCapabilityType := { - bCoctet4_1 := *, - bCoctet5 := *, - bCoctet5a := *, - bCoctet5bV110 := *, - bCoctet5bV120 := *, - bCoctet5c := *, - bCoctet5d := *, - bCoctet6 := *, - bCoctet7 := *, - bCoctet7a := *, - bCoctet7b := * - } - - template(value) ProgressIndicatorType m_ProgressIndicatorType( - template(value) Bit7 p_progDesc - ) := { - progressOctet3 := { - codingStandard := "00", - location := "0000" - }, - progressOctet4 := { - progressDescription := bit2str(valueof(p_progDesc)) - } - } - - template(present) ProgressIndicatorType mw_ProgressIndicatorType( - template(present) ProgressOctet3Type p_ProgressOctet3Type := ?, - template(present) ProgressOctet4Type p_ProgressOctet4Type := ? - ) := { - progressOctet3 := p_ProgressOctet3Type, - progressOctet4 := p_ProgressOctet4Type - } - - template(value) LowLayerCompatibilityType m_LowLayerCompatibilityType( - template(value) Bit5 p_InfoTrfCap - ) := { - lLOctet3 := { - codingStandard := "00", // Coding standard = CCITT standardized coding - informationTransferCapability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability - }, - lLOctet3a := omit, - lLOctet4 := { - transferMode := "00", // Coding standard = CCITT standardized coding - informationTransferRate := "10000" // Information transfer rate = 64 kbit/s - }, - lLOctet4_1 := omit, - lLOctet5 := omit, - lLOctet5a := omit, - lLOctet5bV110 := omit, - lLOctet5bV120 := omit, - lLOctet5c := omit, - lLOctet5d := omit, - lLOctet6 := omit, - lLOctet6aHDLC := omit, - lLOctet6aUserSpecific := omit, - lLOctet6b := omit, - lLOctet7 := { - layer3Identification := "11", - userInfoLayer3Protocol := "00010" - }, - lLOctet7aUserSpecific := omit, - lLOctet7aX25 := omit, - lLOctet7bX25 := omit, - lLOctet7c := omit, - lLOctet7aTR9577 := omit, - lLOctet7bTR9577 := omit - } - - template(present) LowLayerCompatibilityType mw_LowLayerCompatibilityType( - template(present) LLOctet3Type p_LLOctet3 := ?, - template(present) LLOctet4Type p_LLOctet4 := ?, - template(present) LLOctet7Type p_LLOctet7 := ? - ) := { - lLOctet3 := p_LLOctet3, - lLOctet3a := *, - lLOctet4 := p_LLOctet4, - lLOctet4_1 := *, - lLOctet5 := *, - lLOctet5a := *, - lLOctet5bV110 := *, - lLOctet5bV120 := *, - lLOctet5c := *, - lLOctet5d := *, - lLOctet6 := *, - lLOctet6aHDLC := *, - lLOctet6aUserSpecific := *, - lLOctet6b := *, - lLOctet7 := p_LLOctet7, - lLOctet7aUserSpecific := *, - lLOctet7aX25 := *, - lLOctet7bX25 := *, - lLOctet7c := *, - lLOctet7aTR9577 := *, - lLOctet7bTR9577 := * - } - - template(value) HighLayerCompatibilityType m_HighLayerCompatibilityType( - template(value) Bit7 p_HLOctet4 - ) := { - hLOctet3 := { - codingStandard := "00", - interpretation := "100", - presentationMethod := "01" - }, - hLOctet4 := { - highLayerCharacteristics := bit2str(valueof(p_HLOctet4)) - }, - hLOctet4aMaintenance := omit, - hLOctet4Audio := omit - } - - template(present) HighLayerCompatibilityType mw_HighLayerCompatibilityType( - template(present) HLOctet3Type p_HLOctet3 := ?, - template(present) HLOctet4Type p_HLOctet4 := ? - ) := { - hLOctet3 := p_HLOctet3, - hLOctet4 := p_HLOctet4, - hLOctet4aMaintenance := *, - hLOctet4Audio := * - } - - } // end group pstnTemplates - - group cdivnTemplates { - - /* general CDIVN subscription */ - template(value) Comm_div_info_type m_CDIVN_sub := { - entity := "comm-div-info", - comm_div_subs_info := { - attr := omit, - comm_div_selection_criteria := { - attr := omit, - originating_user_selection_criteria := omit, - diverting_user_selection_criteria := omit, - diverted_to_user_selection_criteria := omit, - diversion_time_selection_criteria := omit, - diversion_reason_selection_criteria := omit, - elem_list := {} - }, - comm_div_ntfy_trigger_criteria := omit, - comm_div_info_selection_criteria := omit, - elem_list := {} - }, - comm_div_ntfy_info := omit, - elem_list := {} - } - - } // end group cdivnTemplates - - group resourceListsTemplates { - - template(value) Resource_lists m_ResourceList_2Users( - template(value) EntryType p_user1, - template(value) EntryType p_user2 - ) := { - sequence_list := { - { - list := { - name := omit, - attr := omit, - display_name := omit, - sequence_list := { - { - choice := { - entry := p_user1 - } - }, - { - choice := { - entry := p_user2 - } - } - }, - elem_list := {} - } - } - } - } - - template(value) EntryType m_EntryUser( - template(value) SipUrl p_user - ) := { - uri := - valueof(p_user.components.sip.userInfo.userOrTelephoneSubscriber) - & "@" - & valueof(p_user.components.sip.hostPort.host), - attr := omit, - display_name := omit, - elem_list := {} - } - - } // end group resourceListsTemplates - - group ims3GppTemplates { - - template(present) TIMS3GPP mw_Ims_3gpp_CW := { - version := 1.0, - attr := *, - choice := { - alternative_service := { - attr := *, - type_ := ?, - reason := ?, - elem_list := ? - } - }, - elem_list := ? - } - - } // end group ims3gppTemplates - - group confTemplates { - - template(value) XSD.Boolean m_boolXSD_true := true; - - template(value) XSD.Boolean m_boolXSD_false := false; - - template(value) urn_ietf_params_xml_ns_conference_info.Media_type m_mediatype_status( - template(value) Media_status_type p_status - ) := { - id := "1", - attr := omit, - display_text := omit, - type_ := omit, - label_ := omit, - src_id := omit, - status := p_status, - elem_list := {} - } - - template(value) Endpoint_type m_endpoint( - template(omit) charstring p_Uri := omit, - template(omit) Endpoint_status_type p_epStatus := omit, - template(omit) Joining_type p_joinMethod := omit, - template(omit) Disconnection_type p_discMethod := omit, - template(value) urn_ietf_params_xml_ns_conference_info.Media_type p_mediastatus - ) := { - entity := p_Uri, - state := full, - attr := omit, - display_text := omit, - referred := omit, - status := p_epStatus, - joining_method := p_joinMethod, - joining_info := omit, - disconnection_method := p_discMethod, - disconnection_info := omit, - media_list := {p_mediastatus}, // optional, - call_info := omit, - elem_list := {} - } - - template(value) User_type m_1user( - template(omit) charstring p_Uri := omit, - template(value) Endpoint_type p_endpoint - ) := { - entity := p_Uri, - state := full, - attr := omit, - display_text := omit, - associated_aors := omit, - roles := omit, - languages := omit, - cascaded_focus := omit, - endpoint_list := {p_endpoint}, // optional, - elem_list := {} - } - - template(value) Users_type m_users_1user_full( - template(value) User_type p_user - ) := { - state := full, - attr := omit, - user_list := {p_user}, - elem_list := {} - } - - template(value) Users_type m_users_2user_full( - template(value) User_type p_user, - template(value) User_type p_user2 - ) modifies m_users_1user_full := { - user_list := {p_user, p_user2} - } - - template(value) Conference_state_type m_conference_state( - template(value) UnsignedInt p_nUsers, - template(value) boolean p_active, - template(value) boolean p_locked - ) := { - attr := omit, - user_count := p_nUsers, - active := p_active, - locked := p_locked, - elem_list := {} - } - - template(value) Conference_type m_ci_cUri_cState_userEntity( - template(value) charstring p_cUri, - template(value) Conference_state_type p_cState, - template(value) Users_type p_users - ) := { - entity := p_cUri, - state := full, - version := 1, - attr := omit, - conference_description := omit, - host_info := omit, - conference_state := p_cState, - users := p_users, - sidebars_by_ref := omit, - sidebars_by_val := omit, - elem_list := {} - } - - template(present) Conference_type mw_conferenceInfo_active := { - entity := ?, - state := *, - version := *, - attr := *, - conference_description := *, - host_info := *, - conference_state := ?, - users := { - state := ?, - attr := *, - user_list := { - { - entity := *, - state := *, - attr := *, - display_text := *, - associated_aors := *, - roles := *, - languages := *, - cascaded_focus := *, - endpoint_list := { - { - entity := *, - state := *, - attr := *, - display_text := *, - referred := *, - status := connected, - joining_method := dialed_in, - joining_info := *, - disconnection_method := *, - disconnection_info := *, - media_list := ?, - call_info := *, - elem_list := ? - } - }, - elem_list := ? - } - }, - elem_list := ? - }, - sidebars_by_ref := *, - sidebars_by_val := *, - elem_list := ? - } - } - - } // end group messageBodyTemplates - - group messageTemplates { - - group modifiedTemplates { - - group requestSend { - - template(value) ACK_Request m_ACK_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit - ) modifies m_ACK_Request_Base := { - msgHeader := {route := p_route} - } - - template(value) ACK_Request m_ACK_Request_AS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit - ) modifies m_ACK_Request_IMS := { - msgHeader := { - route := p_route, - recordRoute := p_recordRoute - } - } - - template(value) ACK_Request m_ACK_Request_sdp_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb, - template(omit) Route p_route := omit - ) modifies m_ACK_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - route := p_route - }, - messageBody := p_mb - } - - template(value) ACK_Request m_ACK_Request_Mime_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) MessageBody p_mb, - template(omit) Route p_route := omit - ) modifies m_ACK_Request_Base := { - msgHeader := { - contentLength := { - fieldName := CONTENT_LENGTH_E, - len := f_MessageBodyLength(valueof(p_mb)) - }, - contentType := { - fieldName := CONTENT_TYPE_E/*, - mediaType := m_mimeMultipart*/ - }, - route := p_route - }, - messageBody := p_mb - } - - template(value) BYE_Request m_BYE_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit - ) modifies m_BYE_Request_Base := { - msgHeader := { - route := p_route, - recordRoute := p_recordRoute // used in case of AS as TS - for ISC interface - } - } // end of temlate m_BYE_Request_IMS - - template(value) BYE_Request m_BYE_Request_Reason_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(value) GenValue p_cause - ) modifies m_BYE_Request_Base := { - msgHeader := { - reason := mw_Reason(p_cause), - route := p_route - } - } - - template(value) BYE_Request m_BYE_Request_UserToUser_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(value) UserToUser.uuiData p_U2UData - ) modifies m_BYE_Request_Base := { - msgHeader := { - route := p_route, - userToUser := m_UserToUserData(p_U2UData) - } - } - - template(value) BYE_Request m_BYE_Request_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit - ) modifies m_BYE_Request_Base := { - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - route := p_route - } - } - - template(value) CANCEL_Request m_CANCEL_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit - ) modifies m_CANCEL_Request_Base := { - msgHeader := {route := p_route} - } - - template(value) CANCEL_Request m_CANCEL_Request_Reason_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(value) integer p_cause - ) modifies m_CANCEL_Request_IMS := { - msgHeader := {reason := m_Reason(p_cause)} - } - - template(value) CANCEL_Request m_CANCEL_Request_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit - ) modifies m_CANCEL_Request_IMS := { - } - - /** - * @desc INFO message - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_mb - */ - template(value) INFO_Request m_INFO_Request_IMS_Base( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb - ) modifies m_INFO_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)) - }, - messageBody := p_mb - } - - /** - * @desc INFO message - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_mb - */ - template(value) INFO_Request m_INFO_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb - ) modifies m_INFO_Request_IMS_Base := { - msgHeader := { - contentType := m_contentType(c_sdpApplication) - } - } - - /** - * @desc INFO message - * @desc - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_mb - */ - template(value) INFO_Request m_INFO_Request_Mime_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb - ) modifies m_INFO_Request_IMS_Base := { - msgHeader := { - contentType := m_contentType(m_mimeMultipart) - } - } - - template(value) INFO_Request m_INFO_Request_Xml_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb - ) modifies m_INFO_Request_IMS_Base := { - msgHeader := { - contentType := m_contentType(c_xmlApplication) - } - } - - template(value) INVITE_Request m_INVITE_Request_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) LibSip_SIPTypesAndValues.Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_noBody_UE := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication) - }, - messageBody := p_mb - } - - template(value) INVITE_Request m_INVITE_Request_noBody_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit - ) modifies m_INVITE_Request_Base := { - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - require := p_require, - route := p_route, - supported := p_supported - } - } - - template(value) INVITE_Request m_INVITE_Request_Allow_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb, - template(value) LibSip_SIPTypesAndValues.Allow p_allow - ) modifies m_INVITE_Request_UE := { - msgHeader := {allow := p_allow} - } - - template(value) INVITE_Request m_INVITE_Request_noBody_Allow_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) LibSip_SIPTypesAndValues.Allow p_allow - ) modifies m_INVITE_Request_noBody_UE := { - msgHeader := {allow := p_allow} - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) INVITE_Request m_INVITE_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - supported := p_supported - }, - messageBody := p_mb - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - * @param p_historyInfo - */ - template(value) INVITE_Request m_INVITE_Request_HistoryInfo_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb, - template(value) HistoryInfo p_historyInfo - ) modifies m_INVITE_Request_IMS := { - msgHeader := { - historyInfo := p_historyInfo - } - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) INVITE_Request m_INVITE_Request_Mime_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_IMS := { - msgHeader := { - contentType := m_contentType(m_mimeMultipart) - } - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - */ - template(value) INVITE_Request m_INVITE_Request_IMS_noBody( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit - ) modifies m_INVITE_Request_Base := { - msgHeader := { - require := p_require, - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - supported := p_supported - } - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - * @param p_pAssertedID - * @param p_privacy - */ - template(value) INVITE_Request m_INVITE_Request_Mime_PAsserted_Privacy_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb, - template(value) PAssertedID p_pAssertedID, - template(value) Privacy p_privacy - ) modifies m_INVITE_Request_Mime_IMS := { - msgHeader := { - pAssertedID := p_pAssertedID, - privacy := p_privacy - } - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_acceptContact - * @param p_pAssertedID - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) AcceptContact p_acceptContact, - template(value) PAssertedID p_pAssertedID, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_Base := { - msgHeader := { - acceptContact := p_acceptContact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - pAssertedID := p_pAssertedID, - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - supported := p_supported - }, - messageBody := p_mb - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_pAssertedID - * @param p_privacy - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) PAssertedID p_pAssertedID, - template(value) Privacy p_privacy, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - pAssertedID := p_pAssertedID, - pChargingVector := p_pChargingVector, - privacy := p_privacy, - recordRoute := p_recordRoute, - route := p_route, - supported := p_supported - }, - messageBody := p_mb - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_supported - * @param p_pChargingVector - * @param p_mb - * @param p_pAssertedService - */ - template(value) INVITE_Request m_INVITE_Request_PAssertedService_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb, - template(value) PAssertedService p_pAssertedService - ) modifies m_INVITE_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - pChargingVector := p_pChargingVector, - route := p_route, - supported := p_supported, - pAssertedService := p_pAssertedService - }, - messageBody := p_mb - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) INVITE_Request m_INVITE_Request_PEarlyMedia_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_INVITE_Request_IMS := { - msgHeader := { - pEarlyMedia := m_pEarlyMedia_sup - } - } - - template(value) INVITE_Request m_INVITE_Request_PPreferred_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb, - template(value) PPreferredID p_pPreferredID - ) modifies m_INVITE_Request_UE := { - msgHeader := { - pPreferredID := p_pPreferredID - } - } - - template(value) INVITE_Request m_INVITE_Request_PPreferred_Privacy_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb, - template(value) PPreferredID p_pPreferredID, - template(value) Privacy p_privacy - ) modifies m_INVITE_Request_UE := { - msgHeader := { - pPreferredID := p_pPreferredID, - privacy := p_privacy - } - } - - template(value) INVITE_Request m_INVITE_Request_SessionExpires_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb, - template(value) SessionExpires p_se - ) modifies m_INVITE_Request_UE := { - msgHeader := { - sessionExpires := p_se - } - } - - template(value) INVITE_Request m_INVITE_Request_minSE_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb, - template(value) MinSE p_minSE - ) modifies m_INVITE_Request_UE := { - msgHeader := { - minSE := p_minSE - } - } - - /** - * @desc INVITE message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_from - * @param p_to - * @param p_via - * @param p_contact - * @param p_require - * @param p_route - * @param p_supported - * @param p_pChargingVector - * @param p_mb - * @param p_minSE - */ - template(value) INVITE_Request m_INVITE_Request_minSE_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb, - template(value) MinSE p_minSE - ) modifies m_INVITE_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - pChargingVector := p_pChargingVector, - route := p_route, - supported := p_supported, - minSE := p_minSE - }, - messageBody := p_mb - } - - template(value) INVITE_Request m_INVITE_Request_User2UserData_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) LibSip_SIPTypesAndValues.Contact p_contact, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb, - template(value) UserToUser.uuiData p_U2UData - ) modifies m_INVITE_Request_IMS := { - msgHeader := { - userToUser := m_UserToUserData(p_U2UData) - } - } - - template(value) MESSAGE_Request m_MESSAGE_Request_MBody_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) MessageBody p_mb - ) modifies m_MESSAGE_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_plainText), - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - require := p_require, - route := p_route, - supported := p_supported - }, - messageBody := p_mb - } - - template(value) MESSAGE_Request m_MESSAGE_Request_NoBody_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit - ) modifies m_MESSAGE_Request_Base := { - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - require := p_require, - route := p_route, - supported := p_supported - }, - messageBody := omit - } - - template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) GenValue p_homeDomain - ) modifies m_MESSAGE_Request_NoBody_UE := { - msgHeader := { - pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, - pChargingVector := m_pChargingVector_origIoi_fixedValue(p_homeDomain) - } - } - - template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit - ) modifies m_MESSAGE_Request_NoBody_UE := { - msgHeader := { - pAccessNetworkInfo := omit, - pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, - pChargingVector := p_pChargingVector - } - } - - template(value) MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit - ) modifies m_MESSAGE_Request_NoBody_UE := { - msgHeader := { - pMediaAuthorization := m_pMediaAuthorization_fixedValue - } - } - - template(value) MESSAGE_Request m_MESSAGE_Request_PPreferred_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit, - template(value) PPreferredID p_pPreferredID - ) modifies m_MESSAGE_Request_NoBody_UE := { - msgHeader := { - pPreferredID := p_pPreferredID - } - } - - template(value) MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) Supported p_supported := omit - ) modifies m_MESSAGE_Request_NoBody_UE := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(m_MBody_longPlainText)), - contentType := m_contentType(c_plainText) - }, - messageBody := m_MBody_longPlainText - } - - template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_Conference( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) MessageBody p_mb - ) modifies m_NOTIFY_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_xmlApplication), - event := { - fieldName := EVENT_E, - eventType := "conference", - eventParams := omit - }, - subscriptionState := { - fieldName := SUBSCRIPTION_STATE_E, - subState := "active", - substateParams := omit - }, - expires := m_expires(3600) - }, - messageBody := p_mb - } - - template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_RegInfo( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb - ) modifies m_NOTIFY_Request_Base := { - msgHeader := { - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_xmlreginfoApplication), - event := m_Event_reg, - subscriptionState := m_SubscriptionState_active, - expires := m_expires(3600) - }, - messageBody := p_mb - } - - template(value) PRACK_Request m_PRACK_Request_sdp( - template(value) SipUrl p_requestUri, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) RAck p_RAck, - template(value) MessageBody p_mb - ) modifies m_PRACK_Request_Base := { - requestLine := {requestUri := p_requestUri}, - msgHeader := { - callId := p_callId, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), - fromField := p_from, - rAck := p_RAck, - toField := p_to, - via := p_via - }, - messageBody := p_mb - } - - template(value) PUBLISH_Request m_PUBLISH_Request_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Event p_event := omit, - template(omit) RAck p_RAck := omit, - template(value) MessageBody p_mb, - template(omit) Route p_route := omit - ) modifies m_PUBLISH_Request_Base := { - requestLine := {requestUri := p_requestUri}, - msgHeader := { - callId := p_callId, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_plainText /*c_sdpApplication*/), - cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), - event := p_event, - fromField := p_from, - route := p_route, - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - toField := p_to, - via := p_via - }, - messageBody := p_mb - } - - template(value) PUBLISH_Request m_PUBLISH_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Event p_event := omit, - template(omit) RAck p_RAck := omit, - template(value) MessageBody p_mb, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) PChargingVector p_pChargingVector := omit - ) modifies m_PUBLISH_Request_UE := { - msgHeader := { - recordRoute := p_recordRoute, - pChargingVector := p_pChargingVector - } - } - - /** - * @desc REFER message exchanged at Mw - * @param p_requestUri - * @param p_callId - * @param p_cSeq - * @param p_contact - * @param p_from - * @param p_to - * @param p_via - * @param p_referTo - * @param p_referredBy - * @param p_require - * @param p_route - * @param p_recordRoute - * @param p_supported - * @param p_pChargingVector - * @param p_mb - */ - template(value) REFER_Request m_REFER_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) ReferTo p_referTo, - template(omit) ReferredBy p_referredBy := omit, - template(omit) Require p_require := omit, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(omit) Supported p_supported := omit, - template(omit) PChargingVector p_pChargingVector := omit, - template(value) MessageBody p_mb - ) modifies m_REFER_Request_Base := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - referredBy := p_referredBy, - referTo := p_referTo, - require := p_require, - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - supported := p_supported - }, - messageBody := p_mb - } - - template(value) REGISTER_Request m_REGISTER_Request_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) Authorization p_authorization := omit, - template(omit) ProxyRequire p_proxyRequire := omit, - template(omit) Require p_require := omit, - template(omit) SecurityClient p_securityClient := omit, - template(omit) SecurityVerify p_securityVerify := omit, - template(omit) Supported p_supported := omit - ) modifies m_REGISTER_Request_Base := { - requestLine := { - method := REGISTER_E, - requestUri := p_requestUri - }, - msgHeader := { - authorization := p_authorization, - callId := p_callId, - contact := p_contact, - cSeq := p_cSeq, - fromField := p_from, - proxyRequire := p_proxyRequire, - require := p_require, - securityClient := p_securityClient, - securityVerify := p_securityVerify, - supported := p_supported, - toField := p_to, - via := p_via - } - } - - - template(value) REGISTER_Request m_REGISTER_Request_IMS( - template(value) SipUrl p_requestUri, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) Authorization p_authorization := omit, - template(value) charstring p_host, - template(value) integer p_port - ) modifies m_REGISTER_Request_Base := { - requestLine := { - method := REGISTER_E, - requestUri := p_requestUri - }, - msgHeader := { - authorization := p_authorization, - callId := p_callId, - contact := p_contact, - cSeq := p_cSeq, - fromField := p_from, - path := m_path_TS(p_host, p_port), - pChargingVector := m_pChargingVector_icid_TS, - pVisitedNetworkID := m_pVisitedNetworkID_TS, - require := { - fieldName := REQUIRE_E, - optionsTags := {"path"} - }, - toField := p_to, - via := p_via - } - } - - template(value) REGISTER_Request m_REGISTER_Request_IMS_3party( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) Authorization p_authorization := omit, - template(value) charstring p_host, - template(value) integer p_port, - template(omit) Path p_path := omit - ) modifies m_REGISTER_Request_IMS := { - msgHeader := {path := p_path} - } - - template(value) REGISTER_Request m_REGISTER_Request_expires_IMS( - template(value) SipUrl p_requestUri, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) Authorization p_authorization := omit, - template(value) charstring p_host, - template(value) integer p_port, - template(value) DeltaSec p_deltaSec - ) modifies m_REGISTER_Request_IMS := { - msgHeader := { - expires := m_expires(str2int(valueof(p_deltaSec))) - } - } - - template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_UE( - template(value) SipUrl p_requestUri, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) Route p_route := omit - ) modifies m_SUBSCRIBE_Request_Base := { - requestLine := { - method := SUBSCRIBE_E, - requestUri := p_requestUri - }, - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - contact := p_contact, - cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), - event := m_Event_reg, - expires := m_Expires_600000, - route := p_route - } - } - - template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb - ) modifies m_SUBSCRIBE_Request_Base := { - requestLine := { - method := SUBSCRIBE_E, - requestUri := p_requestUri - }, - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), - event := m_Event_reg, - expires := m_Expires_600000 - }, - messageBody := p_mb - } - - template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_event_UE( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb, - template(value) Event p_event, - template(value) charstring p_contentType - ) modifies m_SUBSCRIBE_Request_mb_UE := { - msgHeader := { - contentType := m_contentType(p_contentType), - event := p_event - } - } - - template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_SUBSCRIBE_Request_Base := { - requestLine := { - method := SUBSCRIBE_E, - requestUri := p_requestUri - }, - msgHeader := { - contact := p_contact, - cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), - event := m_Event_reg, - expires := m_Expires_600000 - } - } - - template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Event( - template(value) SipUrl p_requestUri, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) Event p_event - ) modifies m_SUBSCRIBE_Request_IMS := { - msgHeader := { - event := p_event - } - } - - } // end group requestSend - - group requestReceive { - - template(present) ACK_Request mw_ACK_Request_noPaccessNetworkInfo( - template CallId p_callId - ) modifies mw_ACK_Request_Base := { - msgHeader := { - pAccessNetworkInfo := omit - } - } - - template(present) ACK_Request mw_ACK_Request_PchargingVector( - template CallId p_callId, - template(present) PChargingVector p_pChargingVector := ? - ) modifies mw_ACK_Request_Base := { - msgHeader := { - pChargingVector := p_pChargingVector - } - } - - template(present) BYE_Request mw_BYE_Request_noPChargingFunction_UE( - template CallId p_callId - ) modifies mw_BYE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit, - pChargingVector := omit - } - } - - template(present) BYE_Request mw_BYE_Request_via_PChargingVector_UE( - template CallId p_callId, - template(present) PChargingVector p_pChargingVector := ?, - template(present) Via p_via := ? - ) modifies mw_BYE_Request_Base := { - msgHeader := { - pChargingVector := p_pChargingVector, - via := p_via - } - } - - template(present) BYE_Request mw_BYE_Request_via_UE( - template CallId p_callId, - template(present) Via p_via := ? - ) modifies mw_BYE_Request_Base := { - msgHeader := { - via := p_via - } - } - - template(present) BYE_Request mw_BYE_Request_route( - template CallId p_callId, - template(present) Route p_route := ? - ) modifies mw_BYE_Request_Base := { - msgHeader := { - route := p_route - } - } - - template(present) INVITE_Request mw_INVITE_Request_noPChargingFunction - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_PChargingFunction - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := ? - } - } - - template(present) INVITE_Request mw_INVITE_Request_NoPCharging - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit, - pChargingVector := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_NoPChargingPreferred - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit, - pChargingVector := omit, - pPreferredID := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred( - template(present) PAssertedID p_pAssertedID := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - pAssertedID := p_pAssertedID, - pPreferredID := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact( - template(present) PAssertedID p_pAssertedID := ?, - template(present) AcceptContact p_acceptContact := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - pAssertedID := p_pAssertedID, - acceptContact := p_acceptContact - } - } - - template(present) INVITE_Request mw_INVITE_Request_RecordRoute_Via( - template(present) RecordRoute p_recordRoute := ?, - template(present) Via p_via := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - recordRoute := p_recordRoute, - via := p_via - } - } - - template(present) INVITE_Request mw_INVITE_Request_route( - template(present) Route p_route := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - route := p_route - } - } - - template(present) INVITE_Request mw_INVITE_Request_require( - template(present) Require p_require := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - require := p_require - } - } - - template(present) INVITE_Request mw_INVITE_Request_supported( - template(present) Supported p_supported := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - supported := p_supported - } - } - - template(present) INVITE_Request mw_INVITE_Request_SessionExpires( - template(present) SessionExpires p_sessionExpires := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - sessionExpires := p_sessionExpires - } - } - - template(present) INVITE_Request mw_INVITE_Request_User2UserData( - template(present) UserToUser.uuiData p_U2UData := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - userToUser := mw_UserToUserData(p_U2UData) - } - } - - template(present) INVITE_Request mw_INVITE_Request_IMS( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - via := p_via - } - } - - template(present) INVITE_Request mw_INVITE_Request_IMS_requestLine( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via, - template(present) SipUrl p_requestUri := ? - ) modifies mw_INVITE_Request_IMS := { - requestLine := { - requestUri := p_requestUri - }, - msgHeader := { - pChargingVector := p_pChargingVector, - recordRoute := p_recordRoute, - route := p_route, - via := p_via - } - } - - template(present) INVITE_Request mw_INVITE_Request_IMS_PAsserted_noPPreferred( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via, - template(present) PAssertedID p_pAssertedID := ? - ) modifies mw_INVITE_Request_IMS := { - msgHeader := { - pAssertedID := p_pAssertedID, - pPreferredID := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_IMS_mb( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via - ) modifies mw_INVITE_Request_IMS := { - messageBody := ? - } - - template(present) INVITE_Request mw_INVITE_Request_IMS_cug( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via, - template(present) Cug p_cug := ? - ) modifies mw_INVITE_Request_IMS := { - messageBody := ( - mw_MBody_XML(mw_XmlBody_CUG(p_cug)), - mw_MBody_MIMESdpXml(?, mw_XmlBody_CUG(p_cug)) - ) - } - - /* TITAN compiler error: Restriction on template formal parameter does not allow usage of complemented list match without omit or AnyValueOrNone in the list - template(present) INVITE_Request mw_INVITE_Request_IMS_noCug( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via - ) modifies mw_INVITE_Request_IMS := { - messageBody := ( - mw_MBody_XML(complement(mw_XmlBody_CUG(?))), - mw_MBody_MIMESdpXml(?, complement(mw_XmlBody_CUG(?))) - ) - }*/ - - template(present) INVITE_Request mw_INVITE_Request_IMS_pstn( - template PChargingVector p_pChargingVector, - template RecordRoute p_recordRoute, - template Route p_route, - template Via p_via, - template(present) PSTN_transit p_pstn := ? - ) modifies mw_INVITE_Request_IMS := { - messageBody := ( - mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), - mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)) - ) - } - - /** - * @desc Await INVITE using topology hiding - */ - template(present) INVITE_Request mw_INVITE_Request_TH - modifies mw_INVITE_Request_TH_R10 := { - msgHeader := { - pChargingVector := omit - } - } - - template(present) INVITE_Request mw_INVITE_Request_TH_R10 - modifies mw_INVITE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit - } - } - - /** - * @desc Await INVITE without PAsserted and Privacy - * @param p_from - */ - template(present) INVITE_Request mw_INVITE_Request_noPasserted_noPrivacy( - template From p_from - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - fromField := p_from, - pAssertedID := omit, - pPreferredID := omit - } - } - - - /** - * @desc Await INVITE with PAsserted and Privacy - * @param p_from - * @param p_pAssertedID - * @param p_privacy - */ - template(present) INVITE_Request mw_INVITE_Request_PassertedPrivacy( - template From p_from, - template(present) PAssertedID p_pAssertedID := ?, - template(present) Privacy p_privacy := ? - ) modifies mw_INVITE_Request_noPasserted_noPrivacy := { - msgHeader := { - pAssertedID := p_pAssertedID, - privacy := p_privacy - } - } - - /** - * @desc Await INVITE with PAsserted and Privacy - * @param p_from - * @param p_pAssertedID - * @param p_privacy - */ - template(present) INVITE_Request mw_INVITE_Request_Passerted_ifPrivacy( - template From p_from, - template PAssertedID p_pAssertedID, - template(present) Privacy p_privacy := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - fromField := p_from, - pAssertedID := p_pAssertedID, - privacy := p_privacy ifpresent - } - } - - /** - * @desc Await INVITE with history info - * @param p_historyInfo - */ - template(present) INVITE_Request mw_INVITE_Request_HistoryInfo( - template(present) HistoryInfo p_historyInfo := ? - ) modifies mw_INVITE_Request_Base := { - msgHeader := { - historyInfo := p_historyInfo - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE - modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pChargingFunctionAddresses := omit, - pChargingVector := omit - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunctionPrefId_UE - modifies mw_MESSAGE_Request_noPchargingFunction_UE := { - msgHeader := { - pPreferredID := omit - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS := - mw_MESSAGE_Request_noPchargingFunction_UE; - - template(present) MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred( - template CallId p_callId, - template(present) PAssertedID p_pAssertedID := ? - ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - callId := p_callId, - pAssertedID := p_pAssertedID, - pPreferredID := omit - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_route( - template CallId p_callId, - template(present) Route p_route := ? - ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - callId := p_callId, - route := p_route - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_via( - template CallId p_callId, - template(present) Via p_via := ? - ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - callId := p_callId, - via := p_via - } - } - - template(present) NOTIFY_Request mw_NOTIFY_Request( - template CallId p_callId, - template(present) charstring p_state := ?, - template(present) charstring p_contentType := ?, - template Event p_event, - template MessageBody p_mb - ) modifies mw_NOTIFY_Request_Base := { - msgHeader := { - subscriptionState := mw_subscriptionState(p_state), - contentType := mw_contentType(p_contentType), - event := p_event - }, - messageBody := p_mb - } - - template(present) PRACK_Request mw_PRACK_Request_sdp( - template CallId p_callId, - template MessageBody p_mb - ) modifies mw_PRACK_Request_Base := { - msgHeader := { - callId := p_callId - }, - messageBody := p_mb - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_PchargingVector( - template(present) charstring p_id := ?, - template GenValue p_paramValue - ) modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pChargingVector := mw_pChargingVector(p_id, p_paramValue) - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo - modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pAccessNetworkInfo := omit - } - } - - template(present) MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization - modifies mw_MESSAGE_Request_Base := { - msgHeader := { - pMediaAuthorization := omit - } - } - - template(present) PUBLISH_Request mw_PUBLISH_Request_PchargingVector( - template CallId p_callId, - template(present) PChargingVector p_pChargingVector := ? - ) modifies mw_PUBLISH_Request_Base := { - msgHeader := { - pChargingVector := p_pChargingVector - } - } - - template(present) REGISTER_Request mw_REGISTER_Request_IMS( - template Path p_Path, - template PChargingVector p_pChargingVector, - template PVisitedNetworkID p_pVisitedNetworkID - ) modifies mw_REGISTER_Request_Base := { - msgHeader := { - authorization := ?, - path := p_Path, - pChargingVector := p_pChargingVector, - pVisitedNetworkID := p_pVisitedNetworkID, - require := mw_require_path, - securityClient := omit, - securityVerify := omit - } - } - - template(present) REGISTER_Request mw_REGISTER_authorizedRequest_IMS( - template(present) Authorization p_authorization := ? - ) modifies mw_REGISTER_Request_Base := { - msgHeader := { - authorization := p_authorization - } - } - - template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS( - template(present) Authorization p_authorization := ? - ) modifies mw_REGISTER_authorizedRequest_IMS := { - msgHeader := { - securityClient := omit - } - } - - template(present) REGISTER_Request mw_REGISTER_auth_via_nosecclient_IMS( - template(present) Authorization p_authorization := ?, - template(present) Via p_via - ) modifies mw_REGISTER_authorizedRequest_wo_securityclient_IMS := { - msgHeader := { - via := p_via - } - } - - template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS - modifies mw_REGISTER_Request_Base := { - msgHeader := { - securityVerify := omit, - securityClient := omit - } - } - - template(present) REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS - modifies mw_REGISTER_Request_Base := { - msgHeader := { - authorization := * - } - } - - template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS( - template(present) From p_from := ?, - template(present) To p_to := ?, - template PAssertedID p_pAssertedID, - template PChargingVector p_pChargingVector - ) modifies mw_SUBSCRIBE_Request_Base := { - requestLine := { - method := SUBSCRIBE_E - }, - msgHeader := { - fromField := p_from, - toField := p_to, - event := m_Event_reg, - pAccessNetworkInfo := *, - pAssertedID := p_pAssertedID, - pChargingVector := p_pChargingVector - } - } - - template(present) UPDATE_Request mw_UPDATE_Request_fromChange( - template CallId p_callId, - template(present) From p_from := ? - ) modifies mw_UPDATE_Request_Base := { - msgHeader := { - callId := p_callId, - fromField := p_from - } - } - - } // end group requestReceive - - group responseSend { - - group responseSend1xx { - - template(value) Response m_Response_18x_Base( - template(value) StatusLine_18x p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_Dummy := { - statusLine := p_statusLine, - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - maxForwards := omit, - toField := p_to, - via := p_via - }, - messageBody := omit, - payload := omit - } - - template(value) Response m_Response_18XonINVITE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_18x_Base := { - msgHeader := { - contact := p_contact // mandatory field due to 24 229 rel 7.9 - } - } - - template(value) Response m_Response_18XonINVITE_AlertInfo( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) AlertInfo p_alertInfo - ) modifies m_Response_18x_Base := { - msgHeader := { - alertInfo := p_alertInfo - } - } - - template(value) Response m_Response_18XonINVITE_sdp_require( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb, - template(omit) Require p_require := omit - ) modifies m_Response_18x_Base := { - msgHeader := { - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - require := p_require, - rSeq := m_rseq9999 - }, - messageBody := p_mb - } - - template(value) Response m_Response_18XonINVITE_AS( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit - ) modifies m_Response_18x_Base := { - msgHeader := { - contact := p_contact, - recordRoute := p_recordRoute - } - } - - template(value) Response m_Response_18XonINVITE_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_18x_Base := { - msgHeader := { - contact := p_contact, - rSeq := m_rseq9999 - } - } - - template(value) Response m_Response_18XonINVITE_HistoryInfo_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) HistoryInfo p_historyInfo - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - historyInfo := p_historyInfo - } - } - - template(value) Response m_Response_18XonINVITE_PchargingVector( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) PChargingVector p_pChargingVector - ) modifies m_Response_18x_Base := { - msgHeader := { - contact := p_contact, - pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, - pChargingVector := p_pChargingVector - } - } - - template(value) Response m_Response_18XonINVITE_pEearlyMedia( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) PEarlyMedia p_pEarlyMedia - ) modifies m_Response_18x_Base := { - msgHeader := { - pEarlyMedia := p_pEarlyMedia - } - } - - template(value) Response m_Response_18XonINVITE_pPreferred_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) PPreferredID p_pPreferredID - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - pPreferredID := p_pPreferredID - } - } - - template(value) Response m_Response_18XonINVITE_pAsserted_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) PAssertedID p_pAssertedID - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - pAssertedID := p_pAssertedID - } - } - - template(value) Response m_Response_18XonINVITE_pAsserted_privacy_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) PAssertedID p_pAssertedID, - template(value) Privacy p_privacy - ) modifies m_Response_18XonINVITE_pAsserted_UE := { - msgHeader := { - privacy := p_privacy - } - } - - template(value) Response m_Response_18XonINVITE_privacy_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) Privacy p_privacy - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - privacy := p_privacy - } - } - - // NOTE STF471: changed order of parameter p_supported and p_privacy to be able to modify from m_Response_18XonINVITE_privacy_UE - template(value) Response m_Response_18XonINVITE_supported_privacy_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) Privacy p_privacy, - template(value) Supported p_supported - ) modifies m_Response_18XonINVITE_privacy_UE := { - msgHeader := { - supported := p_supported - } - } - - template(value) Response m_Response_18XonINVITE_recordRoute_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) RecordRoute p_recordRoute - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - recordRoute := p_recordRoute // for INVITE response - } - } - - template(value) Response m_Response_18XonINVITE_Require( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) Require p_require - ) modifies m_Response_18x_Base := { - msgHeader := { - require := p_require - } - } - - // NOTE STF471: removed m_Response_18XonINVITE_Require_ifpresent as it is same as m_Response_18XonINVITE_Require - template(value) Response m_Response_18XonINVITE_UserToUser( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) UserToUser.uuiData p_U2UData - ) modifies m_Response_18x_Base := { - msgHeader := { - userToUser := m_UserToUserData(p_U2UData) - } - } - - template(value) Response m_Response_18XonINVITE_Xml( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb - ) modifies m_Response_18XonINVITE_UE := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_xmlApplication) - }, - messageBody := p_mb - } - - template(value) Response m_Response_18XonINVITE_sdp_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb - ) modifies m_Response_18XonINVITE_Xml := { - msgHeader := { - contentType := m_contentType(c_sdpApplication) - } - } - - // NOTE STF471: changed order of parameter p_require and p_mb to be able to modify from m_Response_18XonINVITE_sdp_UE - template(value) Response m_Response_18XonINVITE_require_sdp_UE( - template(value) StatusLine_18x p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) MessageBody p_mb, - template(omit) Require p_require := omit, - template(omit) LibSip_SIPTypesAndValues.Allow p_allow := omit - ) modifies m_Response_18XonINVITE_sdp_UE := { - msgHeader := { - require := p_require, - allow := p_allow - } - } - - } // end group responseSend1xx - - group responseSend2xx { - - template(value) Response m_Response_2xx_Base( - template(value) StatusLine_2xx p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_Dummy := { - statusLine := p_statusLine, - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - maxForwards := omit, - toField := p_to, - via := p_via - }, - messageBody := omit, - payload := omit - } - - template(value) Response m_Response_2xx_ext( - template(value) StatusLine_2xx p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordroute := omit - ) modifies m_Response_2xx_Base := { - msgHeader := { - route := p_route, // f_route(), - recordRoute := - p_recordroute // f_recordroute() - } - } - - template(value) Response m_Response_2xx_mbody( - template(value) StatusLine_2xx p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordroute := omit, - template(value) MessageBody p_mb - ) modifies m_Response_2xx_ext := { - msgHeader := { - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication) - }, - messageBody := p_mb - } - - template(value) Response m_Response_2xxonBYE_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_2xx_Base := { - msgHeader := { - contact := p_contact - } - } - - template(value) Response m_Response_2xxonINVITE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb - ) modifies m_Response_2xx_Base := { - msgHeader := { - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - recordRoute := p_recordRoute // for INVITE response - }, - messageBody := p_mb - } - - // NOTE STF471: changed order of parameter p_historyInfo and p_mb to be able to modify from m_Response_2xxonINVITE - template(value) Response m_Response_2xxonINVITE_HistoryInfo( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) HistoryInfo p_historyInfo - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - historyInfo := p_historyInfo - } - } - - template(value) Response m_Response_2xxonINVITE_Mime( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - contentType := m_contentType(m_mimeMultipart) - } - } - - template(value) Response m_Response_2xxonINVITE_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb - ) modifies m_Response_2xxonINVITE := { - } - - template(value) Response m_Response_2xxonINVITE_PchargingVector( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) Route p_route := omit, - template(omit) RecordRoute p_recordroute := omit, - template(value) MessageBody p_mb, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) PChargingVector p_pChargingVector - ) modifies m_Response_2xx_mbody := { - msgHeader := { - contact := p_contact, - pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, - pChargingVector := p_pChargingVector - } - } - - // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE - template(value) Response m_Response_2XXonINVITE_pPreferred_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) PPreferredID p_pPreferredID - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - pPreferredID := p_pPreferredID - } - } - - // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE - template(value) Response m_Response_2XXonINVITE_pAsserted_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) PAssertedID p_pAssertedID - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - pAssertedID := p_pAssertedID - } - } - - // NOTE STF471: changed order of parameter p_pAssertedID/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_pAsserted_UE - template(value) Response m_Response_2XXonINVITE_pAsserted_privacy_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) PAssertedID p_pAssertedID, - template(value) Privacy p_privacy - ) modifies m_Response_2XXonINVITE_pAsserted_UE := { - msgHeader := { - privacy := p_privacy - } - } - - // NOTE STF471: changed order of parameter p_privacy and p_mb to be able to modify from m_Response_2xxonINVITE - template(value) Response m_Response_2XXonINVITE_privacy_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) Privacy p_privacy - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - privacy := p_privacy - } - } - - // NOTE STF471: changed order of parameter p_supported/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_privacy_UE - template(value) Response m_Response_2XXonINVITE_supported_privacy_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) Privacy p_privacy, - template(value) Supported p_supported - ) modifies m_Response_2XXonINVITE_privacy_UE := { - msgHeader := { - supported := p_supported - } - } - - template(value) Response m_Response_2xxonINVITE_UserToUser( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb, - template(value) UserToUser.uuiData p_U2UData - ) modifies m_Response_2xxonINVITE := { - msgHeader := { - userToUser := m_UserToUserData(p_U2UData) - } - } - - template(value) Response m_Response_2xxonREGISTER_IMS( - template(value) StatusLine_2xx p_statusLine, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) SipUrl p_serviceroute_sip_url, - template(value) SipUrl p_passociated_uri - ) modifies m_Response_2xx_Base := { - msgHeader := { - contact := p_contact, - serviceRoute := { - fieldName := SERVICE_ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := omit, - addrSpec := p_serviceroute_sip_url - }, - rrParam := omit - } - } - }, - pAssociatedURI := - m_pAssociatedURI( - { - displayName := omit, - addrSpec := p_passociated_uri - } - ) // PAssociatedURI RFC3455 - } - } - - template(value) Response m_Response_2xxonSUBSCRIBE_IMS( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_2xx_Base := { - msgHeader := { - contact := p_contact - } - } - - template(value) Response m_Response_2xxonSUBSCRIBE_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_2xxonSUBSCRIBE_IMS := { - } - - template(value) Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_2xx_Base := { - msgHeader := { - pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a - } - } - - template(value) Response m_Response_2xxonMESSAGE_PCharging_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) PChargingVector p_pChargingVector - ) modifies m_Response_2xx_Base := { - msgHeader := { - pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, - pChargingVector := p_pChargingVector - } - } - - template(value) Response m_Response_2xxonMESSAGE_PCharging_IMS( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) PChargingVector p_pChargingVector - ) modifies m_Response_2xxonMESSAGE_PCharging_UE := { - } - - template(value) Response m_Response_2xxonMESSAGE_PMediaAuth_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_2xx_Base := { - msgHeader := { - pMediaAuthorization := m_pMediaAuthorization_fixedValue - } - } - - template(value) Response m_Response_2xxonMESSAGE_pPreferredID_UE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) PPreferredID p_pPreferredID - ) modifies m_Response_2xx_Base := { - msgHeader := { - pPreferredID := p_pPreferredID - } - } - - template(value) Response m_Response_2xxonUPDATE( - template(value) StatusLine_2xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(omit) RecordRoute p_recordRoute := omit, - template(value) MessageBody p_mb - ) modifies m_Response_2xx_Base := { - msgHeader := { - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_mb)), - contentType := m_contentType(c_sdpApplication), - recordRoute := p_recordRoute - }, - messageBody := p_mb - } - - } // end group responseSend2xx - - group responseSend3xx { - - template(value) Response m_Response_3xx_Base( - template(value) StatusLine_3xx p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_Dummy := { - statusLine := p_statusLine, - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - maxForwards := omit, - toField := p_to, - via := p_via - }, - messageBody := omit, - payload := omit - } - - template(value) Response m_Response_3XXonINVITE( - template(value) StatusLine_3xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_3xx_Base := { - msgHeader := { - contact := p_contact - } - } - - } // end group responseSend3xx - - group responseSend4xx { - - template(value) Response m_Response_4xx_Base( - template(value) StatusLine_4xx p_statusLine, - template(omit) CallId p_callId := omit, - template(omit) CSeq p_cSeq := omit, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_Dummy := { - statusLine := p_statusLine, - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - maxForwards := omit, - toField := p_to, - via := p_via - }, - messageBody := omit, - payload := omit - } - - template(value) Response m_Response_4XXonINVITE( - template(value) StatusLine_4xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_4xx_Base := { - msgHeader := { - contact := p_contact - } - } - - template(value) Response m_Response_4XXonINVITE_UE( - template(value) StatusLine_4xx p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_4xx_Base := { - msgHeader := { - contact := p_contact - } - } - - } // end group responseSend4xx - - template(value) Response m_Response_onCANCEL( - template(value) StatusLine p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via - ) modifies m_Response_Base := { - } - - template(value) Response m_Response_onMESSAGE_IMS( - template(value) StatusLine p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_Base := { - msgHeader := { - contact := p_contact - } - } - - template(value) Response m_Response_onINVITE( - template(value) StatusLine p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit - ) modifies m_Response_Base := { - msgHeader := { - contact := p_contact - } - } - - template(value) Response m_Response_onINVITE_Reason( - template(value) StatusLine p_statusLine, - template(value) CallId p_callId, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, - template(value) GenValue p_cause - ) modifies m_Response_onINVITE := { - msgHeader := { - reason := mw_Reason(p_cause) - } - } - - template(value) Response m_Response_WWWauthenticate_IMS( - template(value) StatusLine p_statusLine, - template(omit) CallId p_callId := omit, - template(value) CSeq p_cSeq, - template(value) From p_from, - template(value) To p_to, - template(value) Via p_via, - template(value) WwwAuthenticate p_wwwAuthenticate - ) modifies m_Response_Base := { - msgHeader := { - wwwAuthenticate := p_wwwAuthenticate - } - } - - } // end group responseSend - - group responseReceive { - - group responseReceive2xx { - - // NOTE STF471: removed statusline parameter as it is fixed 200 status code - template(present) Response mw_Response_200onINVITE_noPChargingVector_UE( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xx_Base := { - statusLine := { - sipVersion := c_sipNameVersion, - statusCode := 200, - reasonPhrase := ? - }, - msgHeader := { - pChargingVector := omit - } - } - - // NOTE STF471: removed statusline parameter as it is fixed 200 status code - template(present) Response mw_Response_200onINVITE_SDP_UE( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xx_Base := { - statusLine := { - sipVersion := c_sipNameVersion, - statusCode := 200, - reasonPhrase := ? - }, - messageBody := { - sdpMessageBody := ? - } - } - - // NOTE STF471: removed statusline parameter as it is a 200.299 status code - template(present) Response mw_Response_2xxonMESSAGE_noPCharging_UE( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xx_Base := { - msgHeader := { - pChargingFunctionAddresses := omit, - pChargingVector := omit - } - } - - // NOTE STF471: removed statusline parameter as it is a 200..299 status code - template(present) Response mw_Response_2xxonMESSAGE_noPCharging_IMS( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xxonMESSAGE_noPCharging_UE := { - } - - // NOTE STF471: removed statusline parameter as it is a 200..299 status code - template(present) Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xx_Base := { - msgHeader := { - pAccessNetworkInfo := omit - } - } - - // NOTE STF471: removed statusline parameter as it is a 200..299 status code - template(present) Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_2xx_Base := { - msgHeader := { - pMediaAuthorization := omit - } - } - - // NOTE STF471: removed statusline parameter as it is a fixed 200 status code - template(present) Response mw_Response_200onREGISTER_IMS( - template CallId p_callId, - template CSeq p_cSeq, - template SipUrl p_ue_uri, - template LibSip_SIPTypesAndValues.Contact p_contact, - template SipUrl p_sut_scscf_uri - ) modifies mw_Response_2xx_Base := { - statusLine := { - sipVersion := c_sipNameVersion, - statusCode := 200, - reasonPhrase := ? - }, - msgHeader := { - pAssociatedURI := { - fieldName := P_ASSOCIATED_URI_E, - nameAddrList := { - *, - { - nameAddr := { - displayName := *, - addrSpec := p_ue_uri - }, - genericParams := * - }, - * - } - }, - path := ?, - serviceRoute := { - fieldName := SERVICE_ROUTE_E, - routeBody := { - { - nameAddr := { - displayName := *, - addrSpec := p_sut_scscf_uri - }, - rrParam := * - } - } - }, - pChargingFunctionAddresses := ?, - pChargingVector := ?, - contact := p_contact - } - } - - } // end group responseReceive2xx - - group responseReceive4xx { - - // NOTE STF471: removed statusline parameter as it is a fixed 401 status code - template(present) Response mw_Response_401onREGISTER_securityServer_UE( - template CallId p_callId, - template CSeq p_cSeq - ) modifies mw_Response_4xx_Base := { - statusLine := { - sipVersion := c_sipNameVersion, - statusCode := 401, - reasonPhrase := ? - }, - msgHeader := { - securityServer := ?, - wwwAuthenticate := ? - } - } - - // NOTE STF471: removed statusline parameter as it is a fixed 400 status code - template(present) Response mw_Response_401onREGISTER_WWWauthenticate_IMS( - template CallId p_callId, - template CSeq p_cSeq, - template(present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_Response_4xx_Base := { - statusLine := { - sipVersion := c_sipNameVersion, - statusCode := 401, - reasonPhrase := ? - }, - msgHeader := { - wwwAuthenticate := p_wwwAuthenticate - } - } - - } // end group responseReceive4xx - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_SecServer_WWWAuth_UE( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) SecurityServer p_securityServer := ?, - template WwwAuthenticate p_wwwAuthenticate - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - securityServer := p_securityServer, - wwwAuthenticate := p_wwwAuthenticate - } - } - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PpreferredID_PassertedID( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PPreferredID p_pPreferredID := ?, - template(present) PAssertedID p_pAssertedID := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pAssertedID := p_pAssertedID, - pPreferredID := p_pPreferredID - } - } - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PAsserted_Privacy_History( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PAssertedID p_pAssertedID := ?, - template(present) Privacy p_privacy := ?, - template(present) HistoryInfo p_historyInfo := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pAssertedID := p_pAssertedID, - privacy := p_privacy, - historyInfo := p_historyInfo - } - } - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PAsserted_ContentType( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PAssertedID p_pAssertedID := ?, - template(present) ContentType p_contentType := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pAssertedID := p_pAssertedID, - contentType := p_contentType - } - } - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PchargingVector( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PChargingVector p_chargingVector := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pChargingVector := p_chargingVector - } - } - - // NOTE STF471: changed name from mw_Response_PchargingVecFctadrId - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PchargingVector_PchargingFunctionAddr_PpreferredID( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PChargingVector p_chargingVector := ?, - template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ?, - template(present) PPreferredID p_preferredID := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pChargingVector := p_chargingVector, - pChargingFunctionAddresses := p_chargingFunctionAddresses, - pPreferredID := p_preferredID - } - } - - // NOTE STF471: changed statusline parameter to statusCode parameter - template(present) Response mw_Response_PchargingFunctionAddr( - template(present) StatusLine.statusCode p_statusCode := ?, - template CallId p_callId, - template CSeq p_cSeq, - template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ? - ) modifies mw_Response_StatusCode_Base := { - msgHeader := { - pChargingFunctionAddresses := p_chargingFunctionAddresses - } - } - - } // end group responseReceive - - } // end group modifiedTemplates - - } // end group messageTemplates - -} // end module LibIms_Templates diff --git a/ttcn/patch_lib_ims_titan/module.mk b/ttcn/patch_lib_ims_titan/module.mk index c18d8f7..58a75b6 100644 --- a/ttcn/patch_lib_ims_titan/module.mk +++ b/ttcn/patch_lib_ims_titan/module.mk @@ -1,6 +1,6 @@ sources := \ - ttcn/LibIms_Interface.ttcn \ - ttcn/LibIms_Library.ttcn \ - ttcn/LibIms_SIPTypesAndValues.ttcn \ - ../patch_ims_titan/LibIms_Steps.ttcn \ - ../patch_ims_titan/LibIms_Templates.ttcn + ttcn/LibIms_Interface.ttcn \ + ttcn/LibIms_Library.ttcn \ + ttcn/LibIms_SIPTypesAndValues.ttcn \ + ../patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn \ + ../patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn diff --git a/ttcn/patch_lib_sip_titan/module.mk b/ttcn/patch_lib_sip_titan/module.mk index 3312939..c761093 100644 --- a/ttcn/patch_lib_sip_titan/module.mk +++ b/ttcn/patch_lib_sip_titan/module.mk @@ -1,26 +1,26 @@ sources := \ - ttcn/LibSip_Library.ttcn \ - ttcn/LibSip_Interface.ttcn \ - ../patch_sip_titan/LibSip_SDPTypes.ttcn \ - ../patch_sip_titan/LibSip_XMLTypes.ttcn \ - ../patch_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn \ - ../patch_sip_titan/LibSip_SIPTypesAndValues.ttcn \ - ../patch_sip_titan/LibSip_SMSFunctions.ttcn \ - ../patch_sip_titan/LibSip_Common.ttcn \ - ../patch_sip_titan/LibSip_SMSTemplates.ttcn \ - ../patch_sip_titan/LibSip_EncdecDeclarations.ttcn \ - ../patch_sip_titan/LibSip_SMSTypesAndValues.ttcn \ - ../patch_sip_titan/LibSip_MessageBodyTypes.ttcn \ - ../patch_sip_titan/LibSip_Steps.ttcn \ - ../patch_sip_titan/LibSip_PIXITS.ttcn \ - ../patch_sip_titan/LibSip_Templates.ttcn \ - ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ - ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ - ../patch_sip_titan/urn_3gpp_ns_cw_1_0.ttcn \ - ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ - ../patch_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn \ - ../patch_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ - ../patch_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn \ - ../patch_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn \ - ../patch_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn \ - ../patch_sip_titan/urn_oma_xml_xdm_common_policy.ttcn + ttcn/LibSip_Library.ttcn \ + ttcn/LibSip_Interface.ttcn \ + ttcn/LibSip_SDPTypes.ttcn \ + ttcn/LibSip_XMLTypes.ttcn \ + ttcn/LibSip_SimpleMsgSummaryTypes.ttcn \ + ttcn/LibSip_SIPTypesAndValues.ttcn \ + ttcn/LibSip_SMSFunctions.ttcn \ + ttcn/LibSip_Common.ttcn \ + ttcn/LibSip_SMSTemplates.ttcn \ + ttcn/LibSip_EncdecDeclarations.ttcn \ + ttcn/LibSip_SMSTypesAndValues.ttcn \ + ttcn/LibSip_MessageBodyTypes.ttcn \ + ttcn/LibSip_Steps.ttcn \ + ttcn/LibSip_PIXITS.ttcn \ + ttcn/LibSip_Templates.ttcn \ + ttcn/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ + ttcn/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ + ttcn/urn_3gpp_ns_cw_1_0.ttcn \ + ttcn/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ + ttcn/urn_ietf_params_xml_ns_common_policy.ttcn \ + ttcn/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ + ttcn/urn_ietf_params_xml_ns_conference_info.ttcn \ + ttcn/urn_ietf_params_xml_ns_reginfo.ttcn \ + ttcn/urn_ietf_params_xml_ns_resource_lists.ttcn \ + ttcn/urn_oma_xml_xdm_common_policy.ttcn -- GitLab From 174ec027b4ca500f55baa3e285994cc30f423863 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 9 Jun 2023 09:19:59 +0200 Subject: [PATCH 46/84] Update LibSip TITAN patch --- ttcn/LibIms_ConfigAndTrigger/module.mk | 1 + ttcn/LibIot/module.mk | 10 + ttcn/LibMsrp/module.mk | 6 + ttcn/LibUpperTester/module.mk | 1 + .../ttcn/LibDiameter_EncdecDeclarations.ttcn | 19 + .../ttcn/LibDiameter_Interface.ttcn | 96 + .../ttcn/LibDiameter_Steps.ttcn | 2017 +++++++ .../ttcn/LibDiameter_Templates.ttcn | 3849 ++++++++++++++ .../ttcn/LibDiameter_TypesAndValues.ttcn | 2913 +++++++++++ .../ttcn/LibDiameter_Types_Base_AVPs.ttcn | 3233 ++++++++++++ .../ttcn/LibDiameter_Types_CxDx_AVPs.ttcn | 513 ++ .../ttcn/LibDiameter_Types_Gx_AVPs.ttcn | 1225 +++++ .../ttcn/LibDiameter_Types_Rx_AVPs.ttcn | 625 +++ .../ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 | 1160 +++++ .../ttcn/LibDiameter_Types_S9_AVPs.ttcn | 289 + .../ttcn/LibIms_Steps.ttcn | 1548 ++++++ .../ttcn/LibIms_Templates.ttcn | 4632 +++++++++++++++++ .../http_www_opengis_net_gml.ttcn | 1008 ++++ .../http_www_opengis_net_pidflo_1_0.ttcn | 409 ++ ttcn/patch_lib_sip_titan/module.mk | 59 +- .../urn_ietf_params_xml_ns_pidf.ttcn | 177 + ...urn_ietf_params_xml_ns_pidf_geopriv10.ttcn | 123 + ...ams_xml_ns_pidf_geopriv10_basicPolicy.ttcn | 88 + ...arams_xml_ns_pidf_geopriv10_civicAddr.ttcn | 151 + 24 files changed, 24127 insertions(+), 25 deletions(-) create mode 100644 ttcn/LibIms_ConfigAndTrigger/module.mk create mode 100644 ttcn/LibIot/module.mk create mode 100644 ttcn/LibMsrp/module.mk create mode 100644 ttcn/LibUpperTester/module.mk create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn create mode 100644 ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn create mode 100644 ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn create mode 100644 ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn create mode 100644 ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr.ttcn diff --git a/ttcn/LibIms_ConfigAndTrigger/module.mk b/ttcn/LibIms_ConfigAndTrigger/module.mk new file mode 100644 index 0000000..55ba6b1 --- /dev/null +++ b/ttcn/LibIms_ConfigAndTrigger/module.mk @@ -0,0 +1 @@ +sources := LibIms_UpperTester.ttcn \ No newline at end of file diff --git a/ttcn/LibIot/module.mk b/ttcn/LibIot/module.mk new file mode 100644 index 0000000..bcb2f7d --- /dev/null +++ b/ttcn/LibIot/module.mk @@ -0,0 +1,10 @@ +sources := \ + LibIot_Functions.ttcn \ + LibIot_TestConfiguration.ttcn \ + LibIot_TypesAndValues.ttcn \ + LibIot_VxLTE_PIXITS.ttcn \ + LibIot_PIXITS.ttcn \ + LibIot_TestInterface.ttcn \ + LibIot_VxLTE_Functions.ttcn \ + LibIot_VxLTE_Templates.ttcn \ + diff --git a/ttcn/LibMsrp/module.mk b/ttcn/LibMsrp/module.mk new file mode 100644 index 0000000..d7693ac --- /dev/null +++ b/ttcn/LibMsrp/module.mk @@ -0,0 +1,6 @@ +sources := \ + LibMsrp_Functions.ttcn \ + LibMsrp_PIXITS.ttcn \ + LibMsrp_Templates.ttcn \ + LibMsrp_TypesAndValues.ttcn \ + diff --git a/ttcn/LibUpperTester/module.mk b/ttcn/LibUpperTester/module.mk new file mode 100644 index 0000000..15c3733 --- /dev/null +++ b/ttcn/LibUpperTester/module.mk @@ -0,0 +1 @@ +sources := LibUpperTester.ttcn \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn new file mode 100644 index 0000000..f20d9f9 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn @@ -0,0 +1,19 @@ +module LibDiameter_EncdecDeclarations { + + //LibDiameter + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S9_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + fx_enc_CER_MSG(in CER_MSG p_CER_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + fx_dec_CER_MSG(inout bitstring pdu, out CER_MSG p_CER_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + +} // End of module LibDiameter_EncdecDeclarations \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn new file mode 100644 index 0000000..e9ecc48 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn @@ -0,0 +1,96 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module provides the types used by the test component + * for DIAMETER tests. + */ + +module LibDiameter_Interface +{ + //LibCommon + import from LibCommon_Sync {type SelfSyncComp; + modulepar PX_TSYNC_TIME_LIMIT;}; + import from LibCommon_BasicTypesAndValues all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Rx_AVPs {type Media_Component_Description_AVP;}; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_PIXITS all; + +// type component BaseSyncComp { +// port SyncPort syncPort; +// timer tc_sync := PX_TSYNC_TIME_LIMIT; +// } + + type port LowerLayerPPort message { + inout Lower_Layer_Primitive}; //LLP + + type port DiameterPort message { + inout DIAMETER_MSG}; //DIAMETER_MSG + + type component DiameterComponent extends SelfSyncComp + { + //port + port LowerLayerPPort LLPP; + port DiameterPort DIAMP; + + //global variables + var charstring vc_ETS_address := ""; //defined in init + var charstring vc_ETS_address2 := ""; //defined in init + var integer vc_ETS_port := 3868; //defined in init + var integer vc_ETS_port2 := 3869; //defined in init + var charstring vc_SUT_address := ""; //defined in init + var integer vc_SUT_port := 3868; //defined in init + var integer vc_ETS_conn := 0; //used if LLP primitives are in use + var DIAMETER_MSG vc_sendDiamMsg ; + var DIAMETER_MSG vc_recvDiamMsg ; + var DIAMETER_MSG vc_recvDiamMsgDefault ; //global variable defined to save Dimeter message received within default altstep + + //init of values at component started + var UInt32 vc_send_hopid:=0;// hex2int('00000100'H); + var UInt32 vc_send_endid:=0;// hex2int('01000000'H); + var UInt32 vc_recv_hopid:=0; + var UInt32 vc_recv_endid:=0; + + var UInt32 vc_recv_cC_Request_Number:= 0; + + var template (value) Session_Id_AVP vc_sessionId; + var template (value) Session_Id_AVP vc_sessionId2; + // Origin Host of the test system + var template (value) Origin_Host_AVP vc_originHost; + var template (value) Origin_Host_AVP vc_originHost2; + var template (value) Origin_Realm_AVP vc_originRealm; + // Origin Host of the IUT + var template (value) Origin_Host_AVP vc_originHost_IUT; + var template (value) Origin_Realm_AVP vc_originRealm_IUT; + var Address vc_hostIPAddress; //Address of CER for hostIPAddress AVP + var Address vc_hostIPAddress2; //Address of CER for hostIPAddress AVP + + var template (value) Destination_Host_AVP vc_destinationHost; + var template (value) Destination_Realm_AVP vc_destinationRealm; + + var template (value) Destination_Host_AVP vc_destinationHost_IUT; + var template (value) Destination_Realm_AVP vc_destinationRealm_IUT; + + var template (value) Accounting_Record_Number_AVP vc_accountingRecordNumber; + +// var UTF8String vc_serverName := "NULL"; + + var template Termination_Cause_AVP vc_terminationCause; + var template Result_Code_AVP vc_resultCode; + var template Media_Component_Description_AVP vc_mediaComponentDescription; + + //general timers + timer tc_wait := PX_DIAMETER_TWAIT; + timer tc_delay := 0.3; // delay next Request + + // variables for storing default references + var default vc_default_diameter; + var default vc_def_catchSyncStop_diameter; + + var boolean vc_isAF := false; + var boolean vc_serverStop:=false; + } // end DiameterComponent + +} // end module LibDiameter_Interface \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn new file mode 100644 index 0000000..5c88724 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn @@ -0,0 +1,2017 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module provides functions used in DIAMETER + */ + +module LibDiameter_Steps +{ + //LibCommon + import from LibCommon_Sync all; + import from LibCommon_VerdictControl {type FncRetCode; + function f_setVerdict;}; + import from LibCommon_BasicTypesAndValues all; + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Templates all; + import from LibDiameter_Interface all; + import from LibDiameter_PIXITS all; + +group CommonFunctions{ + + /** + * + * @desc f_gtZero, return true if value of p_int greater than 0 + * @param p_int - integer value + */ + function f_gtZero(integer p_int) + return boolean + { + if (p_int > 0){ + return true; + } + else{ + return false; + } + } + + /** + * + * @desc f_Inc, return incremented value of p_int 0 + * @param p_int - integer value + */ + function f_inc( inout UInt32 p_int) + return UInt32 + { + p_int:=p_int+1; + return p_int; + } + +}//end group CommonFunctions + +group AwaitingMessage { + + /** + * + * @desc receive DIAMETER message + * @param p_diameterMSG template of the message to be received + */ + function f_awaitingDiameterMsg(in template DIAMETER_MSG p_diameterMSG) runs on DiameterComponent + { + //var Lower_Layer_Primitive v_MSG; + var DIAMETER_MSG v_MSG; + + if (PX_DIAM_LLP_ENABLED and f_gtZero(vc_ETS_conn)) + { + tc_wait.start; + alt + { + []DIAMP.receive(p_diameterMSG) -> value v_MSG + { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; + } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); + //Stop the component in case of timeout + all timer.stop; + f_componentStop(); + } + } + } + else + { + tc_wait.start; + alt + { + []DIAMP.receive(p_diameterMSG) -> value v_MSG + { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; + } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); + //Stop the component in case of timeout + all timer.stop; + f_componentStop(); + } + } + } + } // end f_awaitingDiameterMsg + + /** + * + * @desc receive DIAMETER message + * @param p_diameterMSG1 template of the message 1 to be received + * @param p_diameterMSG2 template of the message 2 to be received + */ + function f_awaiting2DiameterMsgs ( in template DIAMETER_MSG p_diameterMSG1, in template DIAMETER_MSG p_diameterMSG2 ) runs on DiameterComponent + { + //var Lower_Layer_Primitive v_MSG; + var DIAMETER_MSG v_MSG; + + tc_wait.start; + alt { + []DIAMP.receive(p_diameterMSG1) -> value v_MSG { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; } + []DIAMP.receive(p_diameterMSG2) -> value v_MSG { + tc_wait.stop; + vc_recvDiamMsg := v_MSG; } + [] tc_wait.timeout { + setverdict(fail,"*** " & __SCOPE__ & ": FAIL: Message was not received in due time. ***") } + } + } // end f_awaiting2DiameterMsgs + + function f_awaiting_CER(template (present)CER_MSG p_CER) runs on DiameterComponent + { + f_awaitingDiameterMsg({cER_MSG:=p_CER}); + //store specific parameter for CER if needed + if (ischosen (vc_recvDiamMsg.cER_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.cER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.cER_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CEA(template (present)CEA_MSG p_CEA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cEA_MSG:=p_CEA}); + //store specific parameter for CER if needed + } + + function f_awaiting_DWR(template (present)DWR_MSG p_DWR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dWR_MSG:=p_DWR}); + //store specific parameter for DWR if needed + if (ischosen (vc_recvDiamMsg.dWR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.dWR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dWR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DWA(template (present)DWA_MSG p_DWA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dWA_MSG:=p_DWA}); + //store specific parameter for DWA if needed + } + + function f_awaiting_DPR(template (present)DPR_MSG p_DPR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dPR_MSG:=p_DPR}); + //store specific parameter for DPR if needed + if (ischosen (vc_recvDiamMsg.dPR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.dPR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dPR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DPA(template (present)DPA_MSG p_DPA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dPA_MSG:=p_DPA}); + //store specific parameter for DPA if needed + } + + function f_awaiting_AAR(template (present)AAR_MSG p_AAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aAR_MSG:=p_AAR}); + //store specific parameter for AAR if needed + if (ischosen (vc_recvDiamMsg.aAR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.aAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aAR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.aAR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_AAA(template (present)AAA_MSG p_AAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aAA_MSG:=p_AAA}); + //store specific parameter for AAA if needed + } + + function f_awaiting_STR(template (present)STR_MSG p_STR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sTR_MSG:=p_STR}); + //store specific parameter for STR if needed + if (ischosen (vc_recvDiamMsg.sTR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.sTR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sTR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.sTR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_STA(template (present)STA_MSG p_STA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sTA_MSG:=p_STA}); + //store specific parameter for STA if needed + } + + function f_awaiting_ASR(template (present)ASR_MSG p_ASR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aSR_MSG:=p_ASR}); + //store specific parameter for ASR if needed + if (ischosen (vc_recvDiamMsg.aSR_MSG)){ + vc_recv_hopid:= vc_recvDiamMsg.aSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aSR_MSG.header.endid; + vc_sessionId := vc_recvDiamMsg.aSR_MSG.session_Id; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ASA(template (present)ASA_MSG p_ASA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aSA_MSG:=p_ASA}); + //store specific parameter for ASA if needed + } + + + function f_awaiting_RAR(template (present)RAR_MSG p_RAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rAR_MSG:=p_RAR}); + //store specific parameter for RAR if needed + if (ischosen (vc_recvDiamMsg.rAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + + function f_awaiting_RAA(template (present)RAA_MSG p_RAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rAA_MSG:=p_RAA}); + //store specific parameter for RAA if needed + } + + function f_awaiting_2RAA(template (present)RAA_MSG p_RAA1, template (present)RAA_MSG p_RAA2) runs on DiameterComponent + { + f_awaiting2DiameterMsgs({rAA_MSG:=p_RAA1}, {rAA_MSG:=p_RAA2}); + } + + function f_awaiting_CCR(template (present)CCR_MSG p_CCR) runs on DiameterComponent + { + f_awaitingDiameterMsg({cCR_MSG:=p_CCR}); + //store specific parameter for CCR if needed + if (ischosen (vc_recvDiamMsg.cCR_MSG)){ + vc_sessionId := vc_recvDiamMsg.cCR_MSG.session_Id; + vc_recv_hopid := vc_recvDiamMsg.cCR_MSG.header.hopid; + vc_recv_endid := vc_recvDiamMsg.cCR_MSG.header.endid; + vc_recv_cC_Request_Number := vc_recvDiamMsg.cCR_MSG.cCR_Body.cC_Request_Number.aVP_Data; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CCA(template (present)CCA_MSG p_CCA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cCA_MSG:=p_CCA}); + //store specific parameter for CCA if needed + } + + function f_awaiting_ACR(template (present)ACR_MSG p_ACR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aCR_MSG:=p_ACR}); + //store specific parameter for ACR if needed + if (ischosen (vc_recvDiamMsg.aCR_MSG)){ + vc_sessionId := vc_recvDiamMsg.aCR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.aCR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aCR_MSG.header.endid; + vc_accountingRecordNumber := vc_recvDiamMsg.aCR_MSG.aCR_Body.accounting_Record_Number; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ACA(template (present)ACA_MSG p_ACA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aCA_MSG:=p_ACA}); + //store specific parameter for ACA if needed + } + + function f_awaiting_UAR(template (present)UAR_MSG p_UAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uAR_MSG:=p_UAR}); + //store specific parameter for UAR if needed + if (ischosen (vc_recvDiamMsg.uAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_UAA(template (present)UAA_MSG p_UAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uAA_MSG:=p_UAA}); + //store specific parameter for UAA if needed + } + + function f_awaiting_UDR(template (present)UDR_MSG p_UDR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uDR_MSG:=p_UDR}); + //store specific parameter for UDR if needed + if (ischosen (vc_recvDiamMsg.uDR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uDR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uDR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uDR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_UDA(template (present)UDA_MSG p_UDA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uDA_MSG:=p_UDA}); + //store specific parameter for UDA if needed + } + + function f_awaiting_SAR(template (present)SAR_MSG p_SAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sAR_MSG:=p_SAR}); + //store specific parameter for SAR if needed + if (ischosen (vc_recvDiamMsg.sAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.sAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.sAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_SAA(template (present)SAA_MSG p_SAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sAA_MSG:=p_SAA}); + //store specific parameter for SAA if needed + } + + function f_awaiting_LIR(template (present)LIR_MSG p_LIR) runs on DiameterComponent + { + f_awaitingDiameterMsg({lIR_MSG:=p_LIR}); + //store specific parameter for LIR if needed + if (ischosen (vc_recvDiamMsg.lIR_MSG)){ + vc_sessionId := vc_recvDiamMsg.lIR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.lIR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.lIR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_LIA(template (present)LIA_MSG p_LIA) runs on DiameterComponent + { + f_awaitingDiameterMsg({lIA_MSG:=p_LIA}); + //store specific parameter for LIA if needed + } + + function f_awaiting_MAR(template (present)MAR_MSG p_MAR) runs on DiameterComponent + { + f_awaitingDiameterMsg({mAR_MSG:=p_MAR}); + //store specific parameter for MAR if needed + if (ischosen (vc_recvDiamMsg.mAR_MSG)){ + vc_sessionId := vc_recvDiamMsg.mAR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.mAR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.mAR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_MAA(template (present)MAA_MSG p_MAA) runs on DiameterComponent + { + f_awaitingDiameterMsg({mAA_MSG:=p_MAA}); + //store specific parameter for MAA if needed + } + + function f_awaiting_RTR(template (present)RTR_MSG p_RTR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rTR_MSG:=p_RTR}); + //store specific parameter for RTR if needed + + if (ischosen (vc_recvDiamMsg.rTR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rTR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rTR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rTR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + + } + + function f_awaiting_RTA(template (present)RTA_MSG p_RTA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rTA_MSG:=p_RTA}); + //store specific parameter for RTA if needed + } + + function f_awaiting_PNR(template (present)PNR_MSG p_PNR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pNR_MSG:=p_PNR}); + //store specific parameter for PNR if needed + if (ischosen (vc_recvDiamMsg.pNR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pNR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pNR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pNR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PNA(template (present)PNA_MSG p_PNA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pNA_MSG:=p_PNA}); + //store specific parameter for PNA if needed + } + + function f_awaiting_PPR(template (present)PPR_MSG p_PPR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pPR_MSG:=p_PPR}); + //store specific parameter for PPR if needed + if (ischosen (vc_recvDiamMsg.pPR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pPR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pPR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pPR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PPA(template (present)PPA_MSG p_PPA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pPA_MSG:=p_PPA}); + //store specific parameter for PPA if needed + } + + function f_awaiting_PUR(template (present)PUR_MSG p_PUR) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUR_MSG:=p_PUR}); + //store specific parameter for PUR if needed + if (ischosen (vc_recvDiamMsg.pUR_MSG)){ + vc_sessionId := vc_recvDiamMsg.pUR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pUR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pUR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PUA(template (present)PUA_MSG p_PUA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUA_MSG:=p_PUA}); + //store specific parameter for PUA if needed + } + + function f_awaiting_ULR(template (present)ULR_MSG p_ULR) runs on DiameterComponent + { + f_awaitingDiameterMsg({uLR_MSG:=p_ULR}); + //store specific parameter for ULR if needed + if (ischosen (vc_recvDiamMsg.uLR_MSG)){ + vc_sessionId := vc_recvDiamMsg.uLR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.uLR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.uLR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_ULA(template (present)ULA_MSG p_ULA) runs on DiameterComponent + { + f_awaitingDiameterMsg({uLA_MSG:=p_ULA}); + //store specific parameter for ULA if needed + } + + function f_awaiting_AIR(template (present)AIR_MSG p_AIR) runs on DiameterComponent + { + f_awaitingDiameterMsg({aIR_MSG:=p_AIR}); + //store specific parameter for AIR if needed + if (ischosen (vc_recvDiamMsg.aIR_MSG)){ + vc_sessionId := vc_recvDiamMsg.aIR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.aIR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.aIR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_AIA(template (present)AIA_MSG p_AIA) runs on DiameterComponent + { + f_awaitingDiameterMsg({aIA_MSG:=p_AIA}); + //store specific parameter for AIA if needed + } + + function f_awaiting_CLR(template (present)CLR_MSG p_CLR) runs on DiameterComponent + { + f_awaitingDiameterMsg({cLR_MSG:=p_CLR}); + //store specific parameter for CLR if needed + if (ischosen (vc_recvDiamMsg.cLR_MSG)){ + vc_sessionId := vc_recvDiamMsg.cLR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.cLR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.cLR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_CLA(template (present)CLA_MSG p_CLA) runs on DiameterComponent + { + f_awaitingDiameterMsg({cLA_MSG:=p_CLA}); + //store specific parameter for CLA if needed + } + + function f_awaiting_IDR(template (present)IDR_MSG p_IDR) runs on DiameterComponent + { + f_awaitingDiameterMsg({iDR_MSG:=p_IDR}); + //store specific parameter for IDR if needed + if (ischosen (vc_recvDiamMsg.iDR_MSG)){ + vc_sessionId := vc_recvDiamMsg.iDR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.iDR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.iDR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_IDA(template (present)IDA_MSG p_IDA) runs on DiameterComponent + { + f_awaitingDiameterMsg({iDA_MSG:=p_IDA}); + //store specific parameter for IDA if needed + } + + function f_awaiting_DSR(template (present)DSR_MSG p_DSR) runs on DiameterComponent + { + f_awaitingDiameterMsg({dSR_MSG:=p_DSR}); + //store specific parameter for DSR if needed + if (ischosen (vc_recvDiamMsg.dSR_MSG)){ + vc_sessionId := vc_recvDiamMsg.dSR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.dSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.dSR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_DSA(template (present)DSA_MSG p_DSA) runs on DiameterComponent + { + f_awaitingDiameterMsg({dSA_MSG:=p_DSA}); + //store specific parameter for DSA if needed + } + + function f_awaiting_PUER(template (present)PUER_MSG p_PUER) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUER_MSG:=p_PUER}); + //store specific parameter for PUER if needed + if (ischosen (vc_recvDiamMsg.pUER_MSG)){ + vc_sessionId := vc_recvDiamMsg.pUER_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.pUER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.pUER_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_PUEA(template (present)PUEA_MSG p_PUEA) runs on DiameterComponent + { + f_awaitingDiameterMsg({pUEA_MSG:=p_PUEA}); + //store specific parameter for PUEA if needed + } + + function f_awaiting_RSR(template (present)RSR_MSG p_RSR) runs on DiameterComponent + { + f_awaitingDiameterMsg({rSR_MSG:=p_RSR}); + //store specific parameter for RSR if needed + if (ischosen (vc_recvDiamMsg.rSR_MSG)){ + vc_sessionId := vc_recvDiamMsg.rSR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.rSR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.rSR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_RSA(template (present)RSA_MSG p_RSA) runs on DiameterComponent + { + f_awaitingDiameterMsg({rSA_MSG:=p_RSA}); + //store specific parameter for RSA if needed + } + + function f_awaiting_NOR(template (present)NOR_MSG p_NOR) runs on DiameterComponent + { + f_awaitingDiameterMsg({nOR_MSG:=p_NOR}); + //store specific parameter for NOR if needed + if (ischosen (vc_recvDiamMsg.nOR_MSG)){ + vc_sessionId := vc_recvDiamMsg.nOR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.nOR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.nOR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_NOA(template (present)NOA_MSG p_NOA) runs on DiameterComponent + { + f_awaitingDiameterMsg({nOA_MSG:=p_NOA}); + //store specific parameter for NOA if needed + } + + function f_awaiting_SNR(template (present)SNR_MSG p_SNR) runs on DiameterComponent + { + f_awaitingDiameterMsg({sNR_MSG:=p_SNR}); + //store specific parameter for SAR if needed + if (ischosen (vc_recvDiamMsg.sNR_MSG)){ + vc_sessionId := vc_recvDiamMsg.sNR_MSG.session_Id; + vc_recv_hopid:= vc_recvDiamMsg.sNR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsg.sNR_MSG.header.endid; + } else + { + log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); + } + } + + function f_awaiting_SNA(template (present)SNA_MSG p_SNA) runs on DiameterComponent + { + f_awaitingDiameterMsg({sNA_MSG:=p_SNA}); + //store specific parameter for SAA if needed + } + +} // end AwaitingMessage + +group SendMessage { + + /** + * + * @desc send DIAMETER message + * @param p_diameterMSG template of the message to be sent + */ + function f_sendDiameterMsg(template (value) DIAMETER_MSG p_diameterMSG) runs on DiameterComponent + { + + if (PX_DIAM_LLP_ENABLED) + { + if(f_gtZero(vc_ETS_conn)) + { + f_Diameter_Set_Headers(p_diameterMSG); + DIAMP.send( p_diameterMSG); + } + else + { + log("Please check configuration!!! Send of DIAMETER message unsucessfull!"); + f_setVerdict (e_error); + } + } + else + { + f_Diameter_Set_Headers(p_diameterMSG); + DIAMP.send( p_diameterMSG); + } + }//end f_sendDiameterMsg + + function f_send_CER(template (value) CER_MSG p_CER) runs on DiameterComponent + { + //set specific parameter for CER if needed + + f_sendDiameterMsg({cER_MSG:=p_CER}); + } + + function f_send_CEA(template (value) CEA_MSG p_CEA) runs on DiameterComponent + { + //set specific parameter for CEA if needed + + f_sendDiameterMsg({cEA_MSG:=p_CEA}); + } + + function f_send_DWR(template (value) DWR_MSG p_DWR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DWR if needed + + f_sendDiameterMsg({dWR_MSG:=p_DWR}); + } + + function f_send_DWA(template (value) DWA_MSG p_DWA) runs on DiameterComponent + { + //set specific parameter for DWA if needed + + f_sendDiameterMsg({dWA_MSG:=p_DWA}); + } + + function f_send_DPR(template (value) DPR_MSG p_DPR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DPR if needed + + f_sendDiameterMsg({dPR_MSG:=p_DPR}); + } + + function f_send_DPA(template (value) DPA_MSG p_DPA) runs on DiameterComponent + { + //set specific parameter for DPA if needed + + f_sendDiameterMsg({dPA_MSG:=p_DPA}); + } + + function f_send_AAR(template (value) AAR_MSG p_AAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for AAR if needed + + f_sendDiameterMsg({aAR_MSG:=p_AAR}); + } + + function f_send_AAA(template (value) AAA_MSG p_AAA) runs on DiameterComponent + { + //set specific parameter for AAA if needed + + f_sendDiameterMsg({aAA_MSG:=p_AAA}); + } + + function f_send_STR(template (value) STR_MSG p_STR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for STR if needed + + f_sendDiameterMsg({sTR_MSG:=p_STR}); + } + + function f_send_STA(template (value) STA_MSG p_STA) runs on DiameterComponent + { + //set specific parameter for STA if needed + + f_sendDiameterMsg({sTA_MSG:=p_STA}); + } + + function f_send_ASR(template (value) ASR_MSG p_ASR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ASR if needed + + f_sendDiameterMsg({aSR_MSG:=p_ASR}); + } + + function f_send_ASA(template (value) ASA_MSG p_ASA) runs on DiameterComponent + { + //set specific parameter for ASA if needed + + f_sendDiameterMsg({aSA_MSG:=p_ASA}); + } + + function f_send_RAR(template (value) RAR_MSG p_RAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RAR if needed + + f_sendDiameterMsg({rAR_MSG:=p_RAR}); + } + + function f_send_RAA(template (value) RAA_MSG p_RAA) runs on DiameterComponent + { + //set specific parameter for RAA if needed + + f_sendDiameterMsg({rAA_MSG:=p_RAA}); + } + + function f_send_CCR(template (value) CCR_MSG p_CCR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for CCR if needed + + f_sendDiameterMsg({cCR_MSG:=p_CCR}); + } + + function f_send_CCA(template (value) CCA_MSG p_CCA) runs on DiameterComponent + { + //set specific parameter for CCA if needed + + f_sendDiameterMsg({cCA_MSG:=p_CCA}); + } + + function f_send_ACR(template (value) ACR_MSG p_ACR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ACR if needed + + f_sendDiameterMsg({aCR_MSG:=p_ACR}); + } + + function f_send_ACA(template (value) ACA_MSG p_ACA) runs on DiameterComponent + { + //set specific parameter for ACA if needed + + f_sendDiameterMsg({aCA_MSG:=p_ACA}); + } + + function f_send_UAR(template (value) UAR_MSG p_UAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for UAR if needed + + f_sendDiameterMsg({uAR_MSG:=p_UAR}); + } + + function f_send_UAA(template (value) UAA_MSG p_UAA) runs on DiameterComponent + { + //set specific parameter for UAA if needed + + f_sendDiameterMsg({uAA_MSG:=p_UAA}); + } + + function f_send_UDR(template (value) UDR_MSG p_UDR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for UDR if needed + + f_sendDiameterMsg({uDR_MSG:=p_UDR}); + } + + function f_send_UDA(template (value) UDA_MSG p_UDA) runs on DiameterComponent + { + //set specific parameter for UDA if needed + + f_sendDiameterMsg({uDA_MSG:=p_UDA}); + } + + function f_send_SAR(template (value) SAR_MSG p_SAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for SAR if needed + + f_sendDiameterMsg({sAR_MSG:=p_SAR}); + } + + function f_send_SAA(template (value) SAA_MSG p_SAA) runs on DiameterComponent + { + //set specific parameter for SAA if needed + + f_sendDiameterMsg({sAA_MSG:=p_SAA}); + } + + function f_send_LIR(template (value) LIR_MSG p_LIR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for LIR if needed + + f_sendDiameterMsg({lIR_MSG:=p_LIR}); + } + + function f_send_LIA(template (value) LIA_MSG p_LIA) runs on DiameterComponent + { + //set specific parameter for LIA if needed + + f_sendDiameterMsg({lIA_MSG:=p_LIA}); + } + + function f_send_MAR(template (value) MAR_MSG p_MAR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for MAR if needed + + f_sendDiameterMsg({mAR_MSG:=p_MAR}); + } + + function f_send_MAA(template (value) MAA_MSG p_MAA) runs on DiameterComponent + { + //set specific parameter for MAA if needed + + f_sendDiameterMsg({mAA_MSG:=p_MAA}); + } + + function f_send_RTR(template (value) RTR_MSG p_RTR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RTR if needed + + f_sendDiameterMsg({rTR_MSG:=p_RTR}); + } + + function f_send_RTA(template (value) RTA_MSG p_RTA) runs on DiameterComponent + { + //set specific parameter for RTA if needed + + f_sendDiameterMsg({rTA_MSG:=p_RTA}); + } + + function f_send_PNR(template (value) PNR_MSG p_PNR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PNR if needed + + f_sendDiameterMsg({pNR_MSG:=p_PNR}); + } + + function f_send_PNA(template (value) PNA_MSG p_PNA) runs on DiameterComponent + { + //set specific parameter for PNA if needed + + f_sendDiameterMsg({pNA_MSG:=p_PNA}); + } + + function f_send_PPR(template (value) PPR_MSG p_PPR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PPR if needed + + f_sendDiameterMsg({pPR_MSG:=p_PPR}); + } + + function f_send_PPA(template (value) PPA_MSG p_PPA) runs on DiameterComponent + { + //set specific parameter for PPA if needed + + f_sendDiameterMsg({pPA_MSG:=p_PPA}); + } + + function f_send_PUR(template (value) PUR_MSG p_PUR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PUR if needed + + f_sendDiameterMsg({pUR_MSG:=p_PUR}); + } + + function f_send_PUA(template (value) PUA_MSG p_PUA) runs on DiameterComponent + { + //set specific parameter for PUA if needed + + f_sendDiameterMsg({pUA_MSG:=p_PUA}); + } + + function f_send_ULR(template (value) ULR_MSG p_ULR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for ULR if needed + + f_sendDiameterMsg({uLR_MSG:=p_ULR}); + } + + function f_send_ULA(template (value) ULA_MSG p_ULA) runs on DiameterComponent + { + //set specific parameter for ULA if needed + + f_sendDiameterMsg({uLA_MSG:=p_ULA}); + } + + function f_send_AIR(template (value) AIR_MSG p_AIR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for AIR if needed + + f_sendDiameterMsg({aIR_MSG:=p_AIR}); + } + + function f_send_AIA(template (value) AIA_MSG p_AIA) runs on DiameterComponent + { + //set specific parameter for AIA if needed + + f_sendDiameterMsg({aIA_MSG:=p_AIA}); + } + + function f_send_CLR(template (value) CLR_MSG p_CLR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for CLR if needed + + f_sendDiameterMsg({cLR_MSG:=p_CLR}); + } + + function f_send_CLA(template (value) CLA_MSG p_CLA) runs on DiameterComponent + { + //set specific parameter for CLA if needed + + f_sendDiameterMsg({cLA_MSG:=p_CLA}); + } + + function f_send_IDR(template (value) IDR_MSG p_IDR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for IDR if needed + + f_sendDiameterMsg({iDR_MSG:=p_IDR}); + } + + function f_send_IDA(template (value) IDA_MSG p_IDA) runs on DiameterComponent + { + //set specific parameter for IDA if needed + + f_sendDiameterMsg({iDA_MSG:=p_IDA}); + } + + function f_send_DSR(template (value) DSR_MSG p_DSR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for DSR if needed + + f_sendDiameterMsg({dSR_MSG:=p_DSR}); + } + + function f_send_DSA(template (value) DSA_MSG p_DSA) runs on DiameterComponent + { + //set specific parameter for DSA if needed + + f_sendDiameterMsg({dSA_MSG:=p_DSA}); + } + + function f_send_PUER(template (value) PUER_MSG p_PUER) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for PUER if needed + + f_sendDiameterMsg({pUER_MSG:=p_PUER}); + } + + function f_send_PUEA(template (value) PUEA_MSG p_PUEA) runs on DiameterComponent + { + //set specific parameter for PUEA if needed + + f_sendDiameterMsg({pUEA_MSG:=p_PUEA}); + } + + function f_send_RSR(template (value) RSR_MSG p_RSR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for RSR if needed + + f_sendDiameterMsg({rSR_MSG:=p_RSR}); + } + + function f_send_RSA(template (value) RSA_MSG p_RSA) runs on DiameterComponent + { + //set specific parameter for RSA if needed + + f_sendDiameterMsg({rSA_MSG:=p_RSA}); + } + + function f_send_NOR(template (value) NOR_MSG p_NOR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for NOR if needed + + f_sendDiameterMsg({nOR_MSG:=p_NOR}); + } + + function f_send_NOA(template (value) NOA_MSG p_NOA) runs on DiameterComponent + { + //set specific parameter for NOA if needed + + f_sendDiameterMsg({nOA_MSG:=p_NOA}); + } + + function f_send_SNR(template (value) SNR_MSG p_SNR) runs on DiameterComponent + { + tc_delay.start; + alt + { []tc_delay.timeout + {} } + + //set specific parameter for SNR if needed + + f_sendDiameterMsg({sNR_MSG:=p_SNR}); + } + + function f_send_SNA(template (value) SNA_MSG p_SNA) runs on DiameterComponent + { + //set specific parameter for SNA if needed + + f_sendDiameterMsg({sNA_MSG:=p_SNA}); + } + + +} // end SendMessage + +group GlobalSteps { + + /* + * @desc This is a test step that init Diameter component + * @param + */ + function f_Diameter_Init_Component() + runs on DiameterComponent { + + } // end function f_Diameter_Init_Component + /* + * @desc This is a test step that assign common Diameter headers + * @param + */ + function f_Diameter_Set_Headers( inout template (value) DIAMETER_MSG p_diameterMSG) + runs on DiameterComponent { + + //insert length of message + if (ischosen(p_diameterMSG.cER_MSG)){ + p_diameterMSG.cER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cER_MSG)); + p_diameterMSG.cER_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cER_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cEA_MSG)){ + p_diameterMSG.cEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cEA_MSG)); + p_diameterMSG.cEA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cEA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rAR_MSG)){ + p_diameterMSG.rAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAR_MSG)); + p_diameterMSG.rAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rAA_MSG)){ + p_diameterMSG.rAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAA_MSG)); + p_diameterMSG.rAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aCR_MSG)){ + p_diameterMSG.aCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCR_MSG)); + p_diameterMSG.aCR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aCR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aCA_MSG)){ + p_diameterMSG.aCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCA_MSG)); + p_diameterMSG.aCA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aCA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aSR_MSG)){ + p_diameterMSG.aSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSR_MSG)); + p_diameterMSG.aSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aSA_MSG)){ + p_diameterMSG.aSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSA_MSG)); + p_diameterMSG.aSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sTR_MSG)){ + p_diameterMSG.sTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTR_MSG)); + p_diameterMSG.sTR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sTR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sTA_MSG)){ + p_diameterMSG.sTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTA_MSG)); + p_diameterMSG.sTA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sTA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dWR_MSG)){ + p_diameterMSG.dWR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWR_MSG)); + p_diameterMSG.dWR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dWR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dWA_MSG)){ + p_diameterMSG.dWA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWA_MSG)); + p_diameterMSG.dWA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dWA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dPR_MSG)){ + p_diameterMSG.dPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPR_MSG)); + p_diameterMSG.dPR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dPR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dPA_MSG)){ + p_diameterMSG.dPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPA_MSG)); + p_diameterMSG.dPA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dPA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //RFC4740 + if (ischosen(p_diameterMSG.uAR_MSG)){ + p_diameterMSG.uAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAR_MSG)); + p_diameterMSG.uAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uAA_MSG)){ + p_diameterMSG.uAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAA_MSG)); + p_diameterMSG.uAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sAR_MSG)){ + p_diameterMSG.sAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAR_MSG)); + p_diameterMSG.sAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sAA_MSG)){ + p_diameterMSG.sAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAA_MSG)); + p_diameterMSG.sAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.lIR_MSG)){ + p_diameterMSG.lIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIR_MSG)); + p_diameterMSG.lIR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.lIR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.lIA_MSG)){ + p_diameterMSG.lIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIA_MSG)); + p_diameterMSG.lIA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.lIA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.mAR_MSG)){ + p_diameterMSG.mAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAR_MSG)); + p_diameterMSG.mAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.mAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.mAA_MSG)){ + p_diameterMSG.mAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAA_MSG)); + p_diameterMSG.mAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.mAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rTR_MSG)){ + p_diameterMSG.rTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTR_MSG)); + p_diameterMSG.rTR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rTR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rTA_MSG)){ + p_diameterMSG.rTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTA_MSG)); + p_diameterMSG.rTA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rTA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pPR_MSG)){ + p_diameterMSG.pPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPR_MSG)); + p_diameterMSG.pPR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pPR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pPA_MSG)){ + p_diameterMSG.pPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPA_MSG)); + p_diameterMSG.pPA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pPA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //Sh interface + if (ischosen(p_diameterMSG.uDR_MSG)){ + p_diameterMSG.uDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDR_MSG)); + p_diameterMSG.uDR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uDR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uDA_MSG)){ + p_diameterMSG.uDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDA_MSG)); + p_diameterMSG.uDA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uDA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUR_MSG)){ + p_diameterMSG.pUR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUR_MSG)); + p_diameterMSG.pUR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pUR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUA_MSG)){ + p_diameterMSG.pUA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUA_MSG)); + p_diameterMSG.pUA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pUA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sNR_MSG)){ + p_diameterMSG.sNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNR_MSG)); + p_diameterMSG.sNR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.sNR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.sNA_MSG)){ + p_diameterMSG.sNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNA_MSG)); + p_diameterMSG.sNA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.sNA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pNR_MSG)){ + p_diameterMSG.pNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNR_MSG)); + p_diameterMSG.pNR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pNR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pNA_MSG)){ + p_diameterMSG.pNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNA_MSG)); + p_diameterMSG.pNA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pNA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //RFC4006 + if (ischosen(p_diameterMSG.cCR_MSG)){ + p_diameterMSG.cCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCR_MSG)); + p_diameterMSG.cCR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cCR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cCA_MSG)){ + p_diameterMSG.cCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCA_MSG)); + p_diameterMSG.cCA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cCA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //Rx interface + if (ischosen(p_diameterMSG.aAR_MSG)){ + p_diameterMSG.aAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAR_MSG)); + p_diameterMSG.aAR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aAR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aAA_MSG)){ + p_diameterMSG.aAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAA_MSG)); + p_diameterMSG.aAA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aAA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + //S6a messages + if (ischosen(p_diameterMSG.uLR_MSG)){ + p_diameterMSG.uLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLR_MSG)); + p_diameterMSG.uLR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uLR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.uLA_MSG)){ + p_diameterMSG.uLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLA_MSG)); + p_diameterMSG.uLA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.uLA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aIR_MSG)){ + p_diameterMSG.aIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIR_MSG)); + p_diameterMSG.aIR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.aIR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.aIA_MSG)){ + p_diameterMSG.aIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIA_MSG)); + p_diameterMSG.aIA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.aIA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cLR_MSG)){ + p_diameterMSG.cLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLR_MSG)); + p_diameterMSG.cLR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.cLR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.cLA_MSG)){ + p_diameterMSG.cLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLA_MSG)); + p_diameterMSG.cLA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.cLA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.iDR_MSG)){ + p_diameterMSG.iDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDR_MSG)); + p_diameterMSG.iDR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.iDR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.iDA_MSG)){ + p_diameterMSG.iDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDA_MSG)); + p_diameterMSG.iDA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.iDA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dSR_MSG)){ + p_diameterMSG.dSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSR_MSG)); + p_diameterMSG.dSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.dSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.dSA_MSG)){ + p_diameterMSG.dSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSA_MSG)); + p_diameterMSG.dSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.dSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUER_MSG)){ + p_diameterMSG.pUER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUER_MSG)); + p_diameterMSG.pUER_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.pUER_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.pUEA_MSG)){ + p_diameterMSG.pUEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUEA_MSG)); + p_diameterMSG.pUEA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.pUEA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rSR_MSG)){ + p_diameterMSG.rSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSR_MSG)); + p_diameterMSG.rSR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.rSR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.rSA_MSG)){ + p_diameterMSG.rSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSA_MSG)); + p_diameterMSG.rSA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.rSA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.nOR_MSG)){ + p_diameterMSG.nOR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOR_MSG)); + p_diameterMSG.nOR_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.nOR_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + if (ischosen(p_diameterMSG.nOA_MSG)){ + p_diameterMSG.nOA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOA_MSG)); + p_diameterMSG.nOA_MSG.header.hopid:=vc_recv_hopid; + p_diameterMSG.nOA_MSG.header.endid:=vc_recv_endid; + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + + if (ischosen(p_diameterMSG.uNKNOWN_MSG)){ + p_diameterMSG.uNKNOWN_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uNKNOWN_MSG)); + p_diameterMSG.uNKNOWN_MSG.header.hopid:=f_inc(vc_send_hopid); + p_diameterMSG.uNKNOWN_MSG.header.endid:=f_inc(vc_send_endid); + vc_sendDiamMsg:=valueof(p_diameterMSG); + } + + } // end function f_Diameter_Set_Headers + + function f_IPAdress (IPv4Addr p_ipv4,IPv6Addr p_ipv6) + return Address + { + var Address v_ipv4, v_ipv6; + if (PX_IPv6) + { + v_ipv6.addressFamily := c_ipv6AddressFamily; + v_ipv6.ipAddress := {ipv6:= p_ipv6 }; + return(v_ipv6) + } + else + { + v_ipv4.addressFamily := c_ipv4AddressFamily; + v_ipv4.ipAddress := {ipv4:= p_ipv4 }; + return(v_ipv4) + } + } + + function f_IPV4or6_String2Address (charstring p_addr) + return template Address + { + var integer addr_len:=0; + var integer i; + //var integer addr[8]; + var integer addr_i; + var charstring num:=""; + var charstring current:=""; + var template Address v_ip; + addr_len:=lengthof(p_addr); + addr_i:=0; + + if (PX_IPv6){ + v_ip.addressFamily := c_ipv6AddressFamily; + v_ip.ipAddress.ipv6 := {0,0,0,0,0,0,0,0}; + for(i:=0;i7){ + log("IPV6 parse ERROR"); + }else{ + if ((lengthof(num) mod 2)==1){ + num:="0"# + } + //addr[addr_i]:=oct2int(str2oct(num)); + v_ip.ipAddress.ipv6[addr_i]:=oct2int(str2oct(num)); + num:=""; + } + + return(v_ip) + } + else{ + v_ip.addressFamily := c_ipv4AddressFamily; + v_ip.ipAddress.ipv4 := {0,0,0,0}; + for(i:=0;i3){ + log("IPV4 parse ERROR"); + }else{ + //addr[addr_i]:=str2int(num); + v_ip.ipAddress.ipv4[addr_i]:=str2int(num); + num:=""; + } + + return(v_ip) + } + } + + + function f_IPV4_Address2oct (charstring p_addr) + return octetstring + { + var integer addr_len:=0; + var integer i; + + var integer addr_i; + var charstring num:=""; + var charstring current:=""; + var integer v_Addrint; + var hexstring v_Addrhex := ''H; + var octetstring v_Addroct := ''O; + addr_len:=lengthof(p_addr); + addr_i:=0; + + for(i:=0;i3){ + log("IPV4 parse ERROR"); + }else{ + v_Addrint := str2int(num); + v_Addrhex := v_Addrhex&int2hex(v_Addrint, 2); + v_Addroct := hex2oct(v_Addrhex); + num:=""; + } + + return(v_Addroct) + + } + + /** + * + * @desc component termination + */ + function f_terminate_diameter_component() runs on DiameterComponent + { + log("component terminated - forced!"); + deactivate; + stop; + } + + /** + * @desc component termination + */ + function f_componentStop( + ) runs on DiameterComponent { + syncPort.send(m_syncClientStop); + DIAMP.clear; + stop; + } + + /** + + /** + * + * @desc original copied from older LibCommon_VerdictControl + */ + function f_getVerdict() + return FncRetCode { + var FncRetCode v_ret := e_error; + if (getverdict == pass or getverdict == none) { + v_ret := e_success; + } + return v_ret; + } + + /** + * + * @desc function waits for particular time before next expected message + */ + function f_wait(float p_time) runs on DiameterComponent + { + tc_wait.start(p_time); + alt { + [] tc_wait.timeout{} + } + } + +}// end group GlobalSteps + + +group Preambles { + + /** + * + * @desc preamble for Client(AS - IMS) side + * @param + */ + function f_preambleClient() runs on DiameterComponent + { + var Lower_Layer_Primitive v_MSG; + + //vc_ETS_conn:=1; // init connection ID, or even better random for each component + + LLPP.send(m_llp_connect(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)); + tc_wait.start; + alt + { + + [] LLPP.receive (mw_llp_connectConfirm(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)) -> value v_MSG + { + tc_wait.stop; + vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); + log("Connection established"); + }; + + [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) + { + tc_wait.stop; + vc_ETS_conn:=0; + log("Connection NOT established"); + f_setVerdict (e_error); + }; + [] tc_wait.timeout + { + vc_ETS_conn:=0; + log("Connection NOT established"); + f_setVerdict (e_error); + } + } + } + + /** + * + * @desc preamble for Server (PCRF) side + * @param + */ + function f_preambleServer() runs on DiameterComponent + { + var Lower_Layer_Primitive v_MSG; + + LLPP.send(m_llp_listen(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port)); + tc_wait.start; + alt + { + [] LLPP.receive (mw_llp_connectIndication(*,*,*,*,*)) -> value v_MSG + { + tc_wait.stop; + vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); + log("Connection established"); + }; + [] tc_wait.timeout + { + log("Connection NOT established"); + f_setVerdict (e_error); + } + } + } + + group preamble_Diameter{ + + + function f_preambleDiameterBaseClient( + in UInt32 p_authApplicationId + ) runs on DiameterComponent { + + f_send_CER(m_CER_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); + f_awaiting_CEA(mw_CEA_dummy); + f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DWA(mw_DWA_dummy); + } + + function f_preambleDiameterBaseClient_acct_Application_Id_AVP( + in UInt32 p_acctApplicationId + ) runs on DiameterComponent { + + f_send_CER(m_CER_AppId_acct_Application_Id(vc_originHost, vc_originRealm, vc_hostIPAddress, p_acctApplicationId)); + f_awaiting_CEA(mw_CEA_dummy); + f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DWA(mw_DWA_dummy); + } + + function f_preambleDiameterBaseServer(UInt32 p_authApplicationId)runs on DiameterComponent + { + + f_awaiting_CER(mw_CER_dummy); + f_send_CEA(m_CEA_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); +// f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); +// f_awaiting_DWA(mw_DWA_dummy); + } + + }//end group preamble_Diameter + +}// end group Preambles + +group Postambles { + + /** + * + * @desc prostamble for Client or Server side + * @param + */ + function f_postambleDisconnect() runs on DiameterComponent + { + + LLPP.send(m_llp_disconnect(vc_ETS_conn)); + vc_ETS_conn:=0; + + all timer.stop; + //stop; + + } + group postamble_Diameter{ + + + function f_postamble_AF() runs on DiameterComponent + { + + f_postambleDiameterBase(); + + if(PX_DIAM_LLP_ENABLED) + { + f_postambleDisconnect(); + } + + } + + function f_postamble_PCRF() runs on DiameterComponent + { + + f_postambleDiameterBase(); + + if(PX_DIAM_LLP_ENABLED) + { + f_postambleDisconnect(); + } + + } + + function f_postambleDiameterBase()runs on DiameterComponent + { + f_send_DPR(m_DPR_basic(vc_originHost, vc_originRealm)); + f_awaiting_DPA(mw_DPA_dummy); + } + + }//end group postamble_Diameter + +} // end group Postambles + +group DiameterChecks +{ +}//end group DiameterChecks + +group DefaultsTestStep +{ + + altstep a_llp_default() runs on DiameterComponent + { + [] any timer.timeout + { + f_setVerdict(e_error); + all timer.stop; + //stop + } + + [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) + { + tc_wait.stop; + vc_ETS_conn:=0; + f_setVerdict (e_error); + }; + + } + + altstep a_diameter_default_withinllp() runs on DiameterComponent + { + [] any timer.timeout + { + f_setVerdict(e_error); + all timer.stop; + //stop + } + [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*DWR*/)) + { + //f_send(/*DWA*/); + }; + [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*CER*/)) + { + //f_send(/*CEA*/); + }; + + + } + + altstep a_diameter_default() runs on DiameterComponent + { + [] any timer.timeout + { + all timer.stop; + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_timeout); + } + else { + stop; + } + } + [] DIAMP.receive (DIAMETER_MSG:{dWR_MSG := mw_DWR_dummy}) -> value vc_recvDiamMsgDefault + { + vc_recv_hopid:= vc_recvDiamMsgDefault.dWR_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsgDefault.dWR_MSG.header.endid; + f_send_DWA(m_DWA_basic(vc_originHost, vc_originRealm)); + repeat; + } + //CER message can be accepted in following cases: + //- if CER message was not accepted 1st time then it is handled in default altstep. + //- if component is unmaped and maped back for TP reason then Diameter Session can be established again in default Altestep + [] DIAMP.receive (DIAMETER_MSG:{cER_MSG := mw_CER_basic(?)}) -> value vc_recvDiamMsgDefault + { + vc_recv_hopid:= vc_recvDiamMsgDefault.cER_MSG.header.hopid; + vc_recv_endid:= vc_recvDiamMsgDefault.cER_MSG.header.endid; + //Set all possible interfaces to avoid multiple CER checking + f_send_CEA(m_CEA_AppId_all(vc_originHost, vc_originRealm, vc_hostIPAddress)); + repeat; + } + [] DIAMP.receive (DIAMETER_MSG:?) -> value vc_recvDiamMsgDefault + { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] DIAMP.receive + { + if (vc_serverStop==false) { + f_selfOrClientSyncAndVerdict("error", e_error); + } + else { + stop; + } + } + [] a_shutdown() { + // Process temination on error + log("*** a_diameter_default() : Process temination on error ***"); + // Terminate component execution + f_postambleDiameterBase(); + + stop; + } + }//end altstep a_diameter_default + +} // end of group DefaultsTestStep +} // end module LibDiameter_Steps \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn new file mode 100644 index 0000000..84c2570 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn @@ -0,0 +1,3849 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module defines Diameter Templates for message, header, and + * structured types.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + */ + +module LibDiameter_Templates { + + //LibCommon + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_PIXITS all; + import from LibDiameter_TypesAndValues all; + + group LowerLayerPrimitives { + + template Lower_Layer_Primitive m_llp_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + ll_header := m_llh_listen(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port), + pdu := omit + } + + template Lower_Layer_Primitive m_llp_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := m_llh_connect(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectIndication(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive mw_llp_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectConfirm(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_disconnect(template integer p_ETS_conn) := { + ll_header := m_llh_disconnect(p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_disconnectIndication(template integer p_ETS_conn) := { + ll_header := mw_llh_disconnectIndication(p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_dataRequest( template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := m_llh_dataRequest(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Primitive mw_llp_dataIndication(template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := mw_llh_dataIndication(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Header m_llh_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + primitive := LISTEN_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := omit + } + + template Lower_Layer_Header m_llh_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_CONFIRM_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_disconnect(template integer p_ETS_conn) := { + primitive := DISCONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_disconnectIndication(template integer p_ETS_conn) := { + primitive := DISCONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_dataRequest(template integer p_ETS_conn) := { + primitive := DATA_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_dataIndication(template integer p_ETS_conn) := { + primitive := DATA_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + }//end group LowerLayerPrimitives + + //internal PIXITS if some + group ModuleParameters { + } //end group ModuleParameters + + group SubFields{ + + template Result_Code_Type/*integer*/ m_resultCode_diameterSuccess := DIAMETER_SUCCESS_E/*2001*/; + template Result_Code_Type/*integer*/ mw_resultCode_diameterSuccess := (DIAMETER_SUCCESS_E,DIAMETER_LIMITED_SUCCESS_E/*2000..2999*/); + + template AVP_Type mw_avpType(template (present) AVP_Header p_avpHeader) := { + aVP_Header := p_avpHeader, + aVP_Data := * + } + + } //end group SubFields + + group HeaderFieldTemplates{ + group DiameterHeaderGroup{ + template (value) Command_Flags m_cmdFlagsAns := { + r_bit := '0'B, + p_bit := '0'B, + e_bit := '0'B, + t_bit := '0'B, + reserved_bits := '0000'B + } + + template (value) Command_Flags m_cmdFlagsAnsProx modifies m_cmdFlagsAns:= { + p_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReq modifies m_cmdFlagsAns:= { + r_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReqDuplicated modifies m_cmdFlagsAns:= { + r_bit := '1'B, + t_bit := '1'B + } + + template Command_Flags mw_cmdFlags := { + r_bit := ?, + p_bit := ?, + e_bit := ?, + t_bit := ?, + reserved_bits := ? + } + + template (value) DiameterHeader m_diameterHeaderReq_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsReq, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template (value) DiameterHeader m_diameterHeaderReqDuplicated_dummy(Command_Code p_cmdcode, UInt32 p_applid) modifies m_diameterHeaderReq_dummy := { + cmdflags := m_cmdFlagsReqDuplicated + } + + template DiameterHeader mw_diameterHeaderReq_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) DiameterHeader m_diameterHeaderAns_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsAns, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template DiameterHeader mw_diameterHeaderAns_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) AVP_Flags m_avpFlags_Mbit1 := { + v_bit := '0'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_Mbit0 := { + v_bit := '0'B, + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_VMbit1 := { + v_bit := '1'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_any := { + v_bit := ?, + m_bit := ?, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_VMbits(template (present) Bit1 p_vbit, template (present) Bit1 p_mbit) := { + v_bit := p_vbit, + m_bit := p_mbit, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Header mw_aVP_Header_any := { + aVP_Code :=?, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_any_Code (template (present) AVP_Code p_avpCode):= { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, ?), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '0'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '1'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit1Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '0'B), + aVP_len := ?, + aVP_vid := ? + } + + //Same template as mw_aVP_Header_VMbit1 but same name style as above templates mw_aVP_Header_VbitXMbitX + template AVP_Header mw_aVP_Header_Vbit1Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template AVP_Header mw_aVP_Header_VMbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template (value) AVP_Header m_aVP_Header_Mbit1(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit1, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + template (value) AVP_Header m_aVP_Header_Mbit0(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit0, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit0(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit1(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field receive template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (present) AVP_Header mw_aVP_HeaderVid_Mbit1( + in AVP_Code p_avpCode, + in template (present) AVP_Length p_avpDataLen := ?, + in template (present) AVP_Vendor_ID p_avpVid) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := ?, + reserved_bits := '00000'B}, + aVP_len := p_avpDataLen, + aVP_vid := p_avpVid + } + + function f_aVP_len(AVP_Length p_length8, AVP_Length p_avpDataLen, template AVP_Vendor_ID p_avpVid)return AVP_Length { + var AVP_Length v_sum; + v_sum := p_length8 + p_avpDataLen + f_lengthVid(p_avpVid); + return v_sum + } + + function f_lengthof_AVP(AVP_Header p_header) return AVP_Length { + var AVP_Length v_sum; + v_sum := f_aVP_len (8, p_header.aVP_len, p_header.aVP_vid); + return v_sum + } + + function f_getByteAlignedLength(template AVP_Length p_length) return AVP_Length { + return (valueof(p_length) + ((4-valueof(p_length) mod 4) mod 4)); + + } + + function f_lengthVid(template AVP_Vendor_ID p_avpVid) return AVP_Length { + if(isvalue(p_avpVid)){return 4} else{return 0} + } + + function f_aVPvBit(template AVP_Vendor_ID p_avpVid) return Bit1 { + if(isvalue(p_avpVid)){return '1'B} else{return '0'B} + } + + } //end group DiameterHeaderGroup + + group DummyAVPHeaders{ + + template (value) Origin_Host_AVP m_originHost_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Origin_Realm_AVP m_originRealm_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Vendor_Id_AVP m_vendorId_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Product_Name_AVP m_productName_dummy := { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, 3), + aVP_Data := "abc" + } + + template Disconnect_Cause_AVP m_disconnectCause_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_disconnect_Cause_AVP_Code, 4), + aVP_Data := REBOOTING_E + } + + template Result_Code_AVP m_resultCode_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := DIAMETER_DUMMY_E + } + + template (value) Destination_Host_AVP m_destinationHost_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Destination_Realm_AVP m_destinationRealm_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Termination_Cause_AVP m_terminationCause_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_termination_Cause_AVP_Code, 4), + aVP_Data := DIAMETER_LOGOUT_E + } + + template (value) Session_Id_AVP m_sessionId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Auth_Application_Id_AVP m_authApplicationId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Application_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Accounting_Record_Type_AVP m_accounting_Record_Type_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Type_AVP_Code,4), + aVP_Data := EVENT_RECORD_E + } + + template Accounting_Record_Number_AVP m_accounting_Record_Number_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Number_AVP_Code,4), + aVP_Data := 0 + } + + template Auth_Session_State_AVP m_auth_Session_State_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := STATE_MAINTAINED_E + } + + template Auth_Session_State_AVP m_auth_Session_State_no_maintained := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := NO_STATE_MAINTAINED_E + } + + template SIP_AOR_AVP m_sIP_AOR_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_AOR_AVP_Code, 18, omit), + aVP_Data := f_DiameterURI_2_UTF8String(m_diameterURI_dummy) + } + + template (value) DiameterURI m_diameterURI_dummy := + { + scheme := "aaa", + diameterId_FQDN := "www.etsi.org", + portField := omit, + transport := omit, + protocol := omit + } + + template SIP_Visited_Network_Id_AVP m_sIP_Visited_Network_Id_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Visited_Network_Id_AVP_Code, 6, omit), + aVP_Data := "abcabc" + } + + template SIP_Digest_Authenticate_AVP m_sIP_Digest_Authenticate( + in template (value) Digest_Realm_AVP p_digest_Realm + ) := { + aVP_Header := m_aVP_Header_Mbit1(c_sIP_Digest_Authenticate_AVP_Code), + digest_Realm := p_digest_Realm, + digest_Algorithm := omit, + digest_QoP := omit, + digest_HA1 := omit, + aVP_Type := omit + } + + template SIP_User_Authorization_Type_AVP m_sIP_User_Authorization_Type( + in template (value) SIP_User_Auth_Ty_Type p_aVP_Data := REGISTRATION_E + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Authorization_Type_AVP_Code, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_User_Data_Already_Available_AVP m_sIP_User_Data_Already_Available_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Already_Available_AVP_Code, 4, omit), + aVP_Data := USER_DATA_NOT_AVAILABLE_E + } + + template SIP_Server_Assignment_Type_AVP m_sIP_Server_Assignment_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Server_Assignment_Type_AVP_Code, 4, omit), + aVP_Data := NO_ASSIGNMENT_E + } + + template SIP_User_Data_AVP m_sIP_User_Data_dummy := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_AVP_Code, 0, omit), + sIP_User_Data_Type := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Type_AVP_Code, 3 ,omit), + aVP_Data := "abc" + }, + sIP_User_Data_Contents := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Contents_AVP_Code, 1, omit), + aVP_Data := '00'O + }, + aVP_Type := omit + } + + template SIP_Accounting_Information_AVP m_sIP_Accounting_Information_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Accounting_Information_AVP_Code, 0, omit), + sIP_Accounting_Server_URI := omit, + sIP_Credit_Control_Server_URI := omit, + aVP_Type := omit + } + + template SIP_Method_AVP m_sIP_Method_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Method_AVP_Code, 3, omit), + aVP_Data := "sip" + } + + template SIP_Deregistration_Reason_AVP m_sIP_Deregistration_Reason_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Deregistration_Reason_AVP_Code, 8, omit), + sIP_Reason_Code_AVP := m_sIP_Reason_Code_dummy, + sIP_Reason_Info_AVP := omit, + aVP_Type := omit + } + + template SIP_Reason_Code_AVP m_sIP_Reason_Code_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Reason_Code_AVP_Code, 4, omit), + aVP_Data := PERMANENT_TERMINATION_E + } + + template User_Name_AVP m_user_Name_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, 3), + aVP_Data := "dbo" + } + + template User_Identity_AVP m_user_Identity_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Identity_AVP_Code, 0, c_vendId3gpp), + public_Identity_AVP := omit, + mSISDN_AVP := omit, + aVP_Type := omit + } + + template User_Data_AVP m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_AVP_Code, 1, c_vendId3gpp), + aVP_Data := '00'O + } + + template CC_Request_Type_AVP m_cC_Request_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Type_AVP_Code,4, omit), + aVP_Data := INITIAL_REQUEST_E + } + + template CC_Request_Number_AVP m_cC_Request_Number_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Number_AVP_Code,4, omit), + aVP_Data := 0 + } + + template Data_Reference_AVP m_data_Reference_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_data_Reference_AVP_Code, 4, c_vendId3gpp), + aVP_Data := REPOSITORY_DATA_E + } + + template (value) Server_Name_AVP m_server_name_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_server_Name_AVP_Code, 4, c_vendId3gpp), + aVP_Data := "sip_url" + } + + template Service_Indication_AVP m_service_Indication_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_service_Indication_AVP_Code, 4, c_vendId3gpp), + aVP_Data := '00'O + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code), + vendor_Id := omit, + auth_Application_Id := omit, + acct_Application_Id := omit + } + + template Re_Auth_Request_Type_AVP m_re_Auth_Request_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_re_Auth_Request_Type_AVP_Code, 4), + aVP_Data := AUTHORIZE_ONLY_E + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := 1 + } + + template SIP_Auth_Data_Item_RFC_AVP m_sIPAuthDataItem_dummy_RFC := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC, 1, c_vendId3gpp), + sIP_Authentication_Scheme := m_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_unknown_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := UNKNOWN_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_nass_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := NASS_BUNDLE_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_giga_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := GIBA_E + } + } + + template Subs_Req_Type_AVP m_subs_Req_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_subs_Req_Type_AVP_Code, 4, c_vendId3gpp), + aVP_Data := SUBSCRIBE_E + } + + } //end group DummyAVPHeaders + + group SpecificAVPHeaders { + + template Session_Id_AVP m_sessionId(UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, f_getUTF8StringLength(p_avpData)), + aVP_Data := p_avpData + } + + template Auth_Application_Id_AVP m_authApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_auth_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP m_acctApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_acct_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Disconnect_Cause_AVP m_disconnectCause(Disconnect_Cause_Type p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_disconnect_Cause_AVP_Code, 4, omit ), + aVP_Data := p_aVP_Data + } + + template Host_IP_Address_AVP m_hostIPAddress(Address p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_host_IP_Address_AVP_Code, f_IPAdressLengthUInt24()), + aVP_Data := p_avpData + } + + template Origin_Host_AVP m_originHost(template(value) charstring p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Origin_Realm_AVP m_originRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Host_AVP m_destinationHost(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Realm_AVP m_destinationRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Product_Name_AVP m_productName(template(value) UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Result_Code_AVP m_resultCode(template (value) /*integer*/Result_Code_Type p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_supportedVendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_supported_Vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_vendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id(UInt32 p_authApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)}, + acct_Application_Id := omit + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Acct_Id(UInt32 p_acctApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := omit, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + + template Auth_Application_Id_AVP mw_authApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_auth_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP mw_acctApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_acct_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template QoS_Information_AVP mw_qosInformation_QosInfo_ARP := { + aVP_Header := mw_aVP_Header_VMbit1(c_qoS_Information_AVP_Code), // + qoS_Class_Identifier :=?, + max_Requested_Bandwidth_UL :=*, + max_Requested_Bandwidth_DL :=*, + guaranteed_Bitrate_UL :=*, + guaranteed_Bitrate_DL :=*, + bearer_Identifier :=*, + allocation_Retention_Priority :=?, + aPN_Aggregate_Max_Bitrate_UL :=*, + aPN_Aggregate_Max_Bitrate_DL :=*, + aVP_Type:=* + } + + template Result_Code_AVP mw_resultCode(template (present)/*integer*/Result_Code_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_result_Code_AVP_Code), + aVP_Data := p_avpData + } +// +// template Experimental_Result_AVP mw_experimentalResult(template (present)/*integer*/Experimental_Result_Code_AVP p_experimental_Result_Code) := { +// aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_AVP_Code), +// vendor_Id := ?, +// experimental_Result_Code := p_experimental_Result_Code +// } + + template Experimental_Result_Code_AVP mw_experimentalResultCode(template (present)/*integer*/Experimental_Result_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_Code_AVP_Code), + aVP_Data := p_avpData + } + + template Session_Release_Cause_AVP mw_sessReleaseCause(template (present) Session_Release_Cause p_avpData) := + { + aVP_Header := mw_aVP_Header_VMbit1(c_session_Release_Cause_AVP_Code), + aVP_Data := p_avpData + } + + template Supported_Features_AVP mw_supportedFeatures_dummy := { + aVP_Header := mw_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, ?, c_vendId3gpp), + vendor_Id := ?, + feature_list_Id := *, + feature_list := ?, + aVP_Data := * + } + + template Supported_Features_AVP m_supportedFeatures ( + template Vendor_Id_AVP p_vendorId, + template Feature_List_ID_AVP p_feature_list_Id, + template (value) Feature_List_AVP p_feature_list, + template Supported_Features_AVP.aVP_Data p_aVP_Data + ):= { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, 1, c_vendId3gpp), + vendor_Id := m_vendorId(c_vendId3gpp), + feature_list_Id := p_feature_list_Id, + feature_list := p_feature_list, + aVP_Data := p_aVP_Data + } + + template Feature_List_AVP m_featureList(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Feature_List_ID_AVP m_featureListId(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_ID_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Failed_AVP mw_failed(template (present) Failed_AVP.aVP p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_failed_AVP_Code), + aVP := p_avpData + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC (template (value) UInt32 p_avpData) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := p_avpData + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_RFC(template (value) SIP_Auth_Schm_Type p_SIPAuthSchmType) := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := p_SIPAuthSchmType + } + } + + template User_Name_AVP m_userName(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template SIP_Item_Number_AVP m_sIPItemNumber_RFC(template (value) UInt32 p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Item_Number_AVP_Code_RFC, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authorization_AVP_Code_RFC, 4, omit), + digest_Username := p_digest_Username, + digest_Realm := p_digestRealm, + digest_Nonce := p_digestNonce, + digest_URI := p_digestUri, + digest_Response := p_digest_Response, + digest_Algorithm := omit, + digest_CNonce := omit, + digest_Opaque := omit, + digest_QoP := omit, + digest_Nonce_Count := omit, + digest_Method := omit, + digest_Entity_Body_Hash := omit, + digest_Auth_Param := omit, + aVP_Type := omit + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_digest_aka_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) modifies m_sIP_Authorization_RFC := { + // TODO How to pass RAND + AUX + } + + template Digest_Username_AVP m_digestUsername(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Username_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Username_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Realm_AVP m_digestRealm(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Nonce_AVP m_digestNonce(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_URI_AVP m_digestUri(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_URI_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_URI_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Response_AVP m_digestResponse(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Response_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Response_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template User_Name_AVP mw_userName(template (present) UTF8String p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Name_AVP_Code), + aVP_Data := p_avpData + } + + + template User_Data_AVP m_user_Data_shData (octetstring p_ud) modifies m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_Sh_AVP_Code, lengthof(p_ud), c_vendId3gpp), + aVP_Data := p_ud + } + + } //end group SpecificAVPHeaders + } //end group HeaderFieldTemplates + + /** Message templates for CER,CEA, DWR, DWA, AAA, AAR, .... methods */ + group MessageTemplates { + + group dummy_templates { + + template UNKNOWN_MSG mw_UNKNOWN_dummy := { + header := ?, + aVP_Type := * + } + group dummy_request_templates_send { + + template (value) AAR_MSG m_AAR_dummy := + { + header := m_diameterHeaderReq_dummy(AAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAR_Body := m_AAR_Body_dummy + } + + template (value) AAR_Body_AVP m_AAR_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + iP_Domain := omit, + af_Application_Id := omit, + media_Component_Description := omit, + service_Info_Status := omit, + af_Charging_Identifier := omit, + sip_Forking_Indication := omit, + specific_Action := omit, + subscription_Id := omit, + //oC_Supported_Features := omit, + supported_Features := omit, + reservation_Priority := omit, + framed_IP_Address := omit, + framed_IPv6_Address := omit, + called_Station_Id := omit, + service_URN := omit, + sponsored_Connectivity_Data := omit, + mps_Identifier := omit, + gcs_Identifier := omit, + mcptt_Identifier := omit, + mCVideo_Identifier := omit, + iMS_Content_Identifier := omit, + iMS_Content_Type := omit, + rx_Request_Type := omit, + required_Access_Info := omit, + aF_Requested_Data := omit, + //reference_Id := omit, + pre_emption_Control_Info := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) ACR_MSG m_ACR_dummy := { + header := m_diameterHeaderReq_dummy(ACR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCR_Body := m_ACR_Body_dummy + } + + template (omit) ACR_Body_AVP m_ACR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + supported_Features := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + route_Record := omit, + service_Context_Id := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) ASR_MSG m_ASR_dummy := { + header := m_diameterHeaderReq_dummy(ASR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSR_Body := m_ASR_Body_dummy + } + + template (value) ASR_Body_AVP m_ASR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + abort_cause := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) CCR_MSG m_CCR_dummy := { + header := m_diameterHeaderReq_dummy(CCR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCR_Body := m_CCR_Body_dummy + } + + template (omit) CCR_Body_AVP m_CCR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + service_Context_Id := omit, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + destination_Host := omit, + user_Name := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + subscription_Id := omit, + service_Identifier := omit, + termination_Cause := omit, + requested_Service_Unit := omit, + requested_Action := omit, + used_Service_Unit := omit, + aoc_Request_Type_AVP := omit, + multiple_Services_Indicator := omit, + multiple_Services_Credit_Control := omit, + service_Parameter_Info := omit, + cC_Correlation_Id := omit, + supported_Features := omit, + network_Request_Support := omit, + packet_Filter_Information := omit, + packet_Filter_Operation := omit, + bearer_Identifier := omit, + bearer_Operation := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + iP_CAN_Type := omit, + threeGPP_RAT_Type := omit, + rat_Type := omit, + qoS_Information := omit, + qoS_Negotiation := omit, + qoS_Upgrade := omit, + default_EPS_Bearer_QoS := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + called_Station_Id := omit, + pDN_Connection_ID := omit, + bearer_Usage := omit, + online := omit, + offline := omit, + tFT_Packet_Filter_Information := omit, + charging_Rule_Report := omit, + event_Trigger := omit, + event_Report_Indication := omit, + access_Network_Charging_Address := omit, + access_Network_Charging_Identifier_Gx := omit, + coA_Information := omit, + usage_Monitoring_Information := omit, + routing_Rule_Install := omit, + routing_Rule_Remove := omit, + maximum_Bandwidth := omit, + logical_Access_ID := omit, + physical_Access_ID := omit, + session_Linking_Indicator := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + threeGPP2_BSID := omit, + multiple_BBERF_Action := omit, + user_CSG_Information := omit, + user_Equipment_Info := omit, + proxy_Info := omit, + route_Record := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CER_MSG m_CER_dummy := { + header := m_diameterHeaderReq_dummy(CER_E, c_applIdCommonMsg), + cER_Body := m_CER_Body_dummy + } + + template (value) CER_Body_AVP m_CER_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWR_MSG m_DWR_dummy := { + header := m_diameterHeaderReq_dummy(DWR_E, c_applIdCommonMsg), + dWR_Body := m_DWR_Body_dummy + } + + template (value) DWR_Body_AVP m_DWR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPR_MSG m_DPR_dummy := { + header := m_diameterHeaderReq_dummy(DPR_E, c_applIdCommonMsg), + dPR_Body := m_DPR_Body_dummy + } + + template (value) DPR_Body_AVP m_DPR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + disconnect_Cause := m_disconnectCause_dummy, + aVP_Type := omit + } + + template (value) LIR_MSG m_LIR_dummy := { + header := m_diameterHeaderReq_dummy(LIR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIR_Body := m_LIR_Body_dummy + } + + template (value) LIR_Body_AVP m_LIR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + originating_Request := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + user_Authorization_Type := omit, //only TS129 229 + session_Priority := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAR_MSG m_MAR_dummy := { + header := m_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAR_Body := m_MAR_Body_dummy + } + + template (value) MAR_Body_AVP m_MAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + sIP_Method := m_sIP_Method_dummy, + destination_Host := omit, + user_Name := omit, + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + sIP_Server_URI := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + server_Name := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNR_MSG m_PNR_dummy := { + header := m_diameterHeaderReq_dummy(PNR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNR_Body := m_PNR_Body_dummy + } + + template (value) PNR_Body_AVP m_PNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPR_MSG m_PPR_dummy := { + header := m_diameterHeaderReq_dummy(PPR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPR_Body := m_PPR_Body_dummy + } + + template (value) PPR_Body_AVP m_PPR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := m_user_Name_dummy, + sIP_User_Data := omit, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + destination_Host := m_destinationHost_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + sIP_Auth_Data_Item := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUR_MSG m_PUR_dummy := { + header := m_diameterHeaderReq_dummy(PUR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUR_Body := m_PUR_Body_dummy + } + + template (value) PUR_Body_AVP m_PUR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + data_Reference := {m_data_Reference_dummy}, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAR_MSG m_RAR_dummy := { + header := m_diameterHeaderReq_dummy(RAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAR_Body := m_RAR_Body_dummy + } + + template (value) RAR_Body_AVP m_RAR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + specific_Action := omit, + re_Auth_Request_Type := m_re_Auth_Request_dummy, + user_Name := omit, + acc_nc_ident := omit, + acc_nc_addr := omit, + flows := omit, + subscription_Id := omit, + abort_Cause := omit, + ip_Can := omit, + rat_Type := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + class := omit, + session_Release_Cause := omit, + event_Trigger := omit, + event_Report_Indication := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + default_EPS_Bearer_QoS := omit, + qoS_Information := omit, + revalidation_Time := omit, + usage_Monitoring_Information := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + multiple_BBERF_Action := omit, + proxy_Info := omit, + route_Record := omit, + g_s_u_Pool_Identifier := omit, + service_Identifier := omit, + rating_Group := omit, + aVP_Type := omit + } + + template (value) RTR_MSG m_RTR_dummy := { + header := m_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTR_Body := m_RTR_Body_dummy + } + + template (value) RTR_Body_AVP m_RTR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := m_destinationHost_dummy, + sIP_Deregistration_Reason := m_sIP_Deregistration_Reason_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := omit, + sIP_AOR := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //only TS129 229 + deregistration_Reason := omit, //required only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAR_MSG m_SAR_dummy := { + header := m_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAR_Body := m_SAR_Body_dummy + } + + template (value) SAR_Body_AVP m_SAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_Server_Assignment_Type := m_sIP_Server_Assignment_Type_dummy, + sIP_User_Data_Already_Available := m_sIP_User_Data_Already_Available_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Server_URI := omit, + sIP_Supported_User_Data_Type := omit, + sIP_AOR := omit, + supported_Features := omit, //only in TS129 229 + public_Identity := omit, //only in TS129 229 + wildcarded_Public_Identity := omit, //only in TS129 229 + server_Name := omit, //required only in TS129 229 + server_Assignment_Type := omit, //required only in TS129 229 + user_Data_Already_Available := omit, //required only in TS129 229 + sCSCF_Restoration_Info := omit, //only in TS129 229 + multiple_Registration_Indication := omit,//only in TS129 229 + session_Priority := omit, //only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNR_MSG m_SNR_dummy := { + header := m_diameterHeaderReq_dummy(SNR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNR_Body := m_SNR_Body_dummy + } + + template (value) SNR_Body_AVP m_SNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + service_Indication := omit, + send_Data_Indication := omit, + server_Name := omit, + subs_Req_Type := m_subs_Req_Type_dummy, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + expiry_Time := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit, + user_Name := omit + } + + template (value) STR_MSG m_STR_dummy := + { + header := m_diameterHeaderReq_dummy(STR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTR_Body := m_STR_Body_dummy + } + + template (value) STR_Body_AVP m_STR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + termination_Cause := m_terminationCause_dummy, + user_Name := omit, + destination_Host := omit, + class := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UAR_MSG m_UAR_dummy := + { + header := m_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAR_Body := m_UAR_Body_dummy + } + + template (value) UAR_Body_AVP m_UAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Visited_Network_Id := m_sIP_Visited_Network_Id_dummy, + sIP_User_Authorization_Type := m_sIP_User_Authorization_Type, + supported_Features := omit, + public_Identity := omit, + visited_Network_Identifier := omit, + user_Authorization_Type := omit, + uAR_Flags := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDR_MSG m_UDR_dummy := { + header := m_diameterHeaderReq_dummy(UDR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDR_Body := m_UDR_Body_dummy + } + + template (value) UDR_Body_AVP m_UDR_Body_dummy := + { + vendor_Specific_Application_Id := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + server_Name := omit, + service_Indication := omit, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + requested_Domain := omit, + current_Location := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + }//end group dummy_request_templates_send + group dummy_request_templates_receive { + + template AAR_MSG mw_AAR_dummy := + { + header := mw_diameterHeaderReq_dummy(AAR_E, ?), + session_Id := ?, + aAR_Body := mw_AAR_Body_dummy + } + + template AAR_Body_AVP mw_AAR_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := *, + iP_Domain := *, + af_Application_Id := *, + media_Component_Description := *, + service_Info_Status := *, + af_Charging_Identifier := *, + sip_Forking_Indication := *, + specific_Action := *, + subscription_Id := *, + //oC_Supported_Features := *, + supported_Features := *, + reservation_Priority := *, + framed_IP_Address := *, + framed_IPv6_Address := *, + called_Station_Id := *, + service_URN := *, + sponsored_Connectivity_Data := *, + mps_Identifier := *, + gcs_Identifier := *, + mcptt_Identifier := *, + mCVideo_Identifier := *, + iMS_Content_Identifier := *, + iMS_Content_Type := *, + rx_Request_Type := *, + required_Access_Info := *, + aF_Requested_Data := *, + //reference_Id := omit, + pre_emption_Control_Info := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template ACR_MSG mw_ACR_dummy := { + header := mw_diameterHeaderReq_dummy(ACR_E, ?), + session_Id := ?, + aCR_Body := mw_ACR_Body_dummy + } + + template ACR_Body_AVP mw_ACR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + supported_Features := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + route_Record := *, + service_Context_Id := *, + service_Information := *, + aVP_Type := * + } + + template ASR_MSG mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, ?), + session_Id := ?, + aSR_Body := mw_ASR_Body_dummy + } + + template ASR_Body_AVP mw_ASR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + abort_cause := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template CCR_MSG mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, ?), + session_Id := ?, + cCR_Body := mw_CCR_Body_dummy + } + + template CCR_Body_AVP mw_CCR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + service_Context_Id := *, + cC_Request_Type := ?, + cC_Request_Number := ?, + destination_Host := *, + user_Name := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + subscription_Id := *, + service_Identifier := *, + termination_Cause := *, + requested_Service_Unit := *, + requested_Action := *, + used_Service_Unit := *, + aoc_Request_Type_AVP := *, + multiple_Services_Indicator := *, + multiple_Services_Credit_Control := *, + service_Parameter_Info := *, + cC_Correlation_Id := *, + supported_Features := *, + network_Request_Support := *, + packet_Filter_Information := *, + packet_Filter_Operation := *, + bearer_Identifier := *, + bearer_Operation := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + iP_CAN_Type := *, + threeGPP_RAT_Type := *, + rat_Type := *, + qoS_Information := *, + qoS_Negotiation := *, + qoS_Upgrade := *, + default_EPS_Bearer_QoS := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + called_Station_Id := *, + pDN_Connection_ID := *, + bearer_Usage := *, + online := *, + offline := *, + tFT_Packet_Filter_Information := *, + charging_Rule_Report := *, + event_Trigger := *, + event_Report_Indication := *, + access_Network_Charging_Address := *, + access_Network_Charging_Identifier_Gx := *, + coA_Information := *, + usage_Monitoring_Information := *, + routing_Rule_Install := *, + routing_Rule_Remove := *, + maximum_Bandwidth := *, + logical_Access_ID := *, + physical_Access_ID := *, + session_Linking_Indicator := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + threeGPP2_BSID := *, + multiple_BBERF_Action := *, + user_CSG_Information := *, + user_Equipment_Info := *, + proxy_Info := *, + route_Record := *, + service_Information := *, + aVP_Type := * + } + + template CER_MSG mw_CER_dummy := { + header := mw_diameterHeaderReq_dummy(CER_E, ?), + cER_Body := mw_CER_Body_dummy + } + + template CER_Body_AVP mw_CER_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWR_MSG mw_DWR_dummy := { + header := mw_diameterHeaderReq_dummy(DWR_E, ?), + dWR_Body := mw_DWR_Body_dummy + } + + template DWR_Body_AVP mw_DWR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + origin_State_Id := *, + aVP_Type := * + } + + template DPR_MSG mw_DPR_dummy := { + header := mw_diameterHeaderReq_dummy(DPR_E, ?), + dPR_Body := mw_DPR_Body_dummy + } + + template DPR_Body_AVP mw_DPR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + disconnect_Cause := ?, + aVP_Type := * + } + + template LIR_MSG mw_LIR_dummy := { + header := mw_diameterHeaderReq_dummy(LIR_E, ?), + session_Id := ?, + lIR_Body := mw_LIR_Body_dummy + } + + template LIR_Body_AVP mw_LIR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + originating_Request := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //required only in TS129 229 + user_Authorization_Type := *, //only TS129 229 + session_Priority := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAR_MSG mw_MAR_dummy := { + header := mw_diameterHeaderReq_dummy(MAR_E, ?), + session_Id := ?, + mAR_Body := mw_MAR_Body_dummy + } + + template MAR_Body_AVP mw_MAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + sIP_Method := ?, + destination_Host := *, + user_Name := *, + supported_Features := *,//only TS129 229 + public_Identity := *, //required only in TS129 229 + sIP_Server_URI := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + server_Name := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNR_MSG mw_PNR_dummy := { + header := mw_diameterHeaderReq_dummy(PNR_E, ?), + session_Id := ?, + pNR_Body := mw_PNR_Body_dummy + } + + template PNR_Body_AVP mw_PNR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPR_MSG mw_PPR_dummy := { + header := mw_diameterHeaderReq_dummy(PPR_E, ?), + session_Id := ?, + pPR_Body := mw_PPR_Body_dummy + } + + template PPR_Body_AVP mw_PPR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + user_Name := ?, + sIP_User_Data := *, + sIP_Accounting_Information := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + sIP_Auth_Data_Item := *, //only TS129 229 + proxy_Info := ?, + route_Record := ?, + aVP_Type := ? + } + + template PUR_MSG mw_PUR_dummy := { + header := mw_diameterHeaderReq_dummy(PUR_E, ?), + session_Id := ?, + pUR_Body := mw_PUR_Body_dummy + } + + template PUR_Body_AVP mw_PUR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + data_Reference := ?, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAR_MSG mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, ?), + session_Id := ?, + rAR_Body := mw_RAR_Body_dummy + } + + template RAR_Body_AVP mw_RAR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + specific_Action := *, + re_Auth_Request_Type := ?, + user_Name := *, + acc_nc_ident := *, + acc_nc_addr := *, + flows := *, + subscription_Id := *, + abort_Cause := *, + ip_Can := *, + rat_Type := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + class := *, + session_Release_Cause := *, + event_Trigger := *, + event_Report_Indication := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + default_EPS_Bearer_QoS := *, + qoS_Information := *, + revalidation_Time := *, + usage_Monitoring_Information := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + multiple_BBERF_Action := *, + proxy_Info := *, + route_Record := *, + g_s_u_Pool_Identifier := *, + service_Identifier := *, + rating_Group := *, + aVP_Type := * + } + + template RTR_MSG mw_RTR_dummy := { + header := mw_diameterHeaderReq_dummy(RTR_E, ?), + session_Id := ?, + rTR_Body := mw_RTR_Body_dummy + } + + template RTR_Body_AVP mw_RTR_Body_dummy := + { + vendor_Specific_Application_Id := *,//required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + sIP_Deregistration_Reason := ?, + user_Name := *, + sIP_AOR := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //only TS129 229 + deregistration_Reason := *, //required only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAR_MSG mw_SAR_dummy := { + header := mw_diameterHeaderReq_dummy(SAR_E, ?), + session_Id := ?, + sAR_Body := mw_SAR_Body_dummy + } + + template SAR_Body_AVP mw_SAR_Body_dummy := + { + vendor_Specific_Application_Id :=*, //required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_Server_Assignment_Type := ?, + sIP_User_Data_Already_Available := ?, + destination_Host := *, + user_Name := *, + sIP_Server_URI := *, + sIP_Supported_User_Data_Type := *, + sIP_AOR := *, + supported_Features := *, //only in TS129 229 + public_Identity := *, //only in TS129 229 + wildcarded_Public_Identity := *, //only in TS129 229 + server_Name := *, //required only in TS129 229 + server_Assignment_Type := *, //required only in TS129 229 + user_Data_Already_Available := *, //required only in TS129 229 + sCSCF_Restoration_Info := *, //only in TS129 229 + multiple_Registration_Indication := *,//only in TS129 229 + session_Priority := *, //only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNR_MSG mw_SNR_dummy := { + header := mw_diameterHeaderReq_dummy(SNR_E, ?), + session_Id := ?, + sNR_Body := mw_SNR_Body_dummy + } + + template SNR_Body_AVP mw_SNR_Body_dummy := + { + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + service_Indication := *, + send_Data_Indication := *, + server_Name := *, + subs_Req_Type := ?, + data_Reference := ?, + identity_Set := *, + expiry_Time := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := *, + user_Name := * + } + + template STR_MSG mw_STR_dummy := + { + header := mw_diameterHeaderReq_dummy(STR_E, ?), + session_Id := ?, + sTR_Body := mw_STR_Body_dummy + } + + template STR_Body_AVP mw_STR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + termination_Cause := ?, + user_Name := *, + destination_Host := *, + class := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UAR_MSG mw_UAR_dummy := { + header := mw_diameterHeaderReq_dummy(UAR_E, ?), + session_Id := ?, + uAR_Body := mw_UAR_Body_dummy + } + + template UAR_Body_AVP mw_UAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + user_Name := *, + sIP_Visited_Network_Id := ?, + sIP_User_Authorization_Type := ?, + supported_Features := *, + public_Identity := *, + visited_Network_Identifier := *, + user_Authorization_Type := *, + uAR_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDR_MSG mw_UDR_dummy := { + header := mw_diameterHeaderReq_dummy(UDR_E, ?), + session_Id := ?, + uDR_Body := mw_UDR_Body_dummy + } + + template UDR_Body_AVP mw_UDR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + server_Name := *, + service_Indication := *, + data_Reference := ?, + identity_Set := *, + requested_Domain := *, + current_Location := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_request_templates_receive + group dummy_answer_templates_send { + + template (value) AAA_MSG m_AAA_dummy := + { + header := m_diameterHeaderAns_dummy(AAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAA_Body := m_AAA_Body_dummy + } + + template (value) AAA_Body_AVP m_AAA_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := omit, + access_network_charging_Identifier := omit, + access_network_charging_address := omit, + acceptable_service_info := omit, + aN_GW_Address := omit, + //aN_Trusted := omit, + service_Authorization_Info := omit, + ip_Can_Type := omit, + //netLoc_Access_Support := omit, + rat_Type := omit, + flows := omit, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := omit, + subscription_Id_AVP := omit, + user_Equipment_Info := omit, + threeGPP_SGSN_MCC_MNC := omit, + class_ := omit, + user_Name := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + retry_Interval := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + // load:= omit, + aVP_Type := omit + } + + template (value) ACA_MSG m_ACA_dummy := { + header := m_diameterHeaderAns_dummy(ACA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCA_Body := m_ACA_Body_dummy + } + + template (omit) ACA_Body_AVP m_ACA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + error_Reporting_Host := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) ASA_MSG m_ASA_dummy := { + header := m_diameterHeaderAns_dummy(ASA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSA_Body := m_ASA_Body_dummy + } + + template (value) ASA_Body_AVP m_ASA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + origin_State_Id := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) CCA_MSG m_CCA_dummy := { + header := m_diameterHeaderAns_dummy(CCA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCA_Body := m_CCA_Body_dummy + } + + template (omit) CCA_Body_AVP m_CCA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + user_Name := omit, + cC_Session_Failover := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + granted_Service_Unit := omit, + multiple_Services_Credit_Control := omit, + cost_Information := omit, + final_Unit_Indication := omit, + check_Balance_Result := omit, + low_Balance_Indication := omit, + remaining_Balance := omit, + credit_Control_Failure_Handling := omit, + direct_Debiting_Failure_Handling := omit, + validity_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit, + supported_Features := omit, + bearer_Control_Mode := omit, + event_Trigger := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + charging_Information := omit, + online := omit, + offline := omit, + qoS_Information := omit, + revalidation_Time := omit, + default_EPS_Bearer_QoS := omit, + bearer_Usage := omit, + threeGPP_User_Location_Info := omit, + usage_Monitoring_Information := omit, + cSG_Information_Reporting := omit, + user_CSG_Information := omit, + error_Message := omit, + error_Reporting_Host := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + proxy_Info := omit, + route_Record := omit, + failed := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CEA_MSG m_CEA_dummy := { + header := m_diameterHeaderAns_dummy(CEA_E, c_applIdCommonMsg), + cEA_Body := m_CEA_Body_dummy + } + + template (value) CEA_Body_AVP m_CEA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + error_Message := omit, + failed := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWA_MSG m_DWA_dummy := { + header := m_diameterHeaderAns_dummy(DWA_E, c_applIdCommonMsg), + dWA_Body := m_DWA_Body_dummy + } + + template (value) DWA_Body_AVP m_DWA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPA_MSG m_DPA_dummy := { + header := m_diameterHeaderAns_dummy(DPA_E, c_applIdCommonMsg), + dPA_Body := m_DPA_Body_dummy + } + + template (value) DPA_Body_AVP m_DPA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + aVP_Type := omit + } + + template (value) LIA_MSG m_LIA_dummy := { + header := m_diameterHeaderAns_dummy(LIA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIA_Body := m_LIA_Body_dummy + } + + template (value) LIA_Body_AVP m_LIA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + server_Capabilities := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAA_MSG m_MAA_dummy := { + header := m_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAA_Body := m_MAA_Body_dummy + } + + template (value) MAA_Body_AVP m_MAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + supported_Features := omit, //required only in TS129 229 + public_Identity := omit, //only in RFC4740 + sIP_AOR := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNA_MSG m_PNA_dummy := { + header := m_diameterHeaderAns_dummy(PNA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNA_Body := m_PNA_Body_dummy + } + + template (value) PNA_Body_AVP m_PNA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPA_MSG m_PPA_dummy := { + header := m_diameterHeaderAns_dummy(PPA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPA_Body := m_PPA_Body_dummy + } + + template (value) PPA_Body_AVP m_PPA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUA_MSG m_PUA_dummy := { + header := m_diameterHeaderAns_dummy(PUA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUA_Body := m_PUA_Body_dummy + } + + template (value) PUA_Body_AVP m_PUA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + repository_Data_Id := omit, + data_Reference := omit, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAA_MSG m_RAA_dummy := { + header := m_diameterHeaderAns_dummy(RAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAA_Body := m_RAA_Body_dummy + } + + template (value) RAA_Body_AVP m_RAA_Body_dummy := + { + result_Code := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + experimental_Result := omit, + user_Name := omit, + media_Component_Description := omit, + service_URN := omit, + origin_State_Id := omit, + class := omit, + iP_CAN_Type := omit, + rat_Type := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + charging_Rule_Report := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + threeGPP2_BSID := omit, + qoS_Information := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + user_CSG_Information := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) RTA_MSG m_RTA_dummy := { + header := m_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTA_Body := m_RTA_Body_dummy + } + + template (value) RTA_Body_AVP m_RTA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + identity_with_Emergency_Registration := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAA_MSG m_SAA_dummy := + { + header := m_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAA_Body := m_SAA_Body_dummy + } + + template (value) SAA_Body_AVP m_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_User_Data := {m_sIP_User_Data_dummy}, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + sIP_Supported_User_Data_Type := omit, + user_Name := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + associated_Identities := omit, //only TS129 229 + loose_Route_Indication := omit, //only TS129 229 + sCSCF_Restoration_Info := omit, //only TS129 229 + associated_Registered_Identities := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + priviledged_Sender_Indication := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNA_MSG m_SNA_dummy := + { + header := m_diameterHeaderAns_dummy(SNA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNA_Body := m_SNA_Body_dummy + } + + template (value) SNA_Body_AVP m_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + supported_Features := omit, + user_Data := omit, //only TS129 229 + expiry_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) STA_MSG m_STA_dummy := + { + header := m_diameterHeaderAns_dummy(STA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTA_Body := m_STA_Body_dummy + } + + template (value) STA_Body_AVP m_STA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + class := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) UAA_MSG m_UAA_dummy := { + header := m_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAA_Body := m_UAA_Body_dummy + } + + template (value) UAA_Body_AVP m_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDA_MSG m_UDA_dummy := { + header := m_diameterHeaderAns_dummy(UDA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDA_Body := m_UDA_Body_dummy + } + + template (value) UDA_Body_AVP m_UDA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + aVP_Type := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit + } + + }//end group dummy_answer_templates_send + group dummy_answer_templates_receive { + + template AAA_MSG mw_AAA_dummy := + { + header := mw_diameterHeaderAns_dummy(AAA_E, ?), + session_Id := ?, + aAA_Body := mw_AAA_Body_dummy + } + + template AAA_Body_AVP mw_AAA_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State :=*, + access_network_charging_Identifier := *, + access_network_charging_address := *, + acceptable_service_info := *, + aN_GW_Address := *, + //aN_Trusted := *, + service_Authorization_Info := *, + ip_Can_Type := *, + //netLoc_Access_Support := *, + rat_Type := *, + flows := *, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := *, + subscription_Id_AVP := *, + user_Equipment_Info := *, + threeGPP_SGSN_MCC_MNC := *, + class_ := *, + user_Name := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + retry_Interval := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + // load:= *, + aVP_Type := * + } + + template ACA_MSG mw_ACA_dummy := { + header := mw_diameterHeaderAns_dummy(ACA_E, ?), + session_Id := ?, + aCA_Body := mw_ACA_Body_dummy + } + + template ACA_Body_AVP mw_ACA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + error_Reporting_Host := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + aVP_Type := * + } + + template ASA_MSG mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, ?), + session_Id := ?, + aSA_Body := mw_ASA_Body_dummy + } + + template ASA_Body_AVP mw_ASA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + origin_State_Id := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template CCA_MSG mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, ?), + session_Id := ?, + cCA_Body := mw_CCA_Body_dummy + } + + template CCA_Body_AVP mw_CCA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + auth_Application_Id := ?, + cC_Request_Type := ?, + cC_Request_Number := ?, + user_Name := *, + cC_Session_Failover := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + granted_Service_Unit := *, + multiple_Services_Credit_Control := *, + cost_Information := *, + final_Unit_Indication := *, + check_Balance_Result := *, + low_Balance_Indication := *, + remaining_Balance := *, + credit_Control_Failure_Handling := *, + direct_Debiting_Failure_Handling := *, + validity_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := *, + supported_Features := *, + bearer_Control_Mode := *, + event_Trigger := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + charging_Information := *, + online := *, + offline := *, + qoS_Information := *, + revalidation_Time := *, + default_EPS_Bearer_QoS := *, + bearer_Usage := *, + threeGPP_User_Location_Info := *, + usage_Monitoring_Information := *, + cSG_Information_Reporting := *, + user_CSG_Information := *, + error_Message := *, + error_Reporting_Host := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + proxy_Info := *, + route_Record := *, + failed := *, + service_Information := *, + aVP_Type := * + } + + template CEA_MSG mw_CEA_dummy := { + header := mw_diameterHeaderAns_dummy(CEA_E, ?), + cEA_Body := mw_CEA_Body_dummy + } + + template CEA_Body_AVP mw_CEA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + error_Message := *, + failed := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWA_MSG mw_DWA_dummy := { + header := mw_diameterHeaderAns_dummy(DWA_E, ?), + dWA_Body := mw_DWA_Body_dummy + } + + template DWA_Body_AVP mw_DWA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + origin_State_Id := *, + aVP_Type := * + } + + template DPA_MSG mw_DPA_dummy := { + header := mw_diameterHeaderAns_dummy(DPA_E, ?), + dPA_Body := mw_DPA_Body_dummy + } + + template DPA_Body_AVP mw_DPA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + aVP_Type := * + } + + template LIA_MSG mw_LIA_dummy := { + header := mw_diameterHeaderAns_dummy(LIA_E, ?), + session_Id := ?, + lIA_Body := mw_LIA_Body_dummy + } + + template LIA_Body_AVP mw_LIA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + server_Name := *, //only TS129 229 + server_Capabilities := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAA_MSG mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, ?), + session_Id := ?, + mAA_Body := mw_MAA_Body_dummy + } + + template MAA_Body_AVP mw_MAA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + supported_Features :=*, //required only in TS129 229 + public_Identity :=*, //only in RFC4740 + sIP_AOR := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNA_MSG mw_PNA_dummy := { + header := mw_diameterHeaderAns_dummy(PNA_E, ?), + session_Id := ?, + pNA_Body := mw_PNA_Body_dummy + } + + template PNA_Body_AVP mw_PNA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPA_MSG mw_PPA_dummy := { + header := mw_diameterHeaderAns_dummy(PPA_E, ?), + session_Id := ?, + pPA_Body := mw_PPA_Body_dummy + } + + template PPA_Body_AVP mw_PPA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result :=*, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, //only TS129 229 + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PUA_MSG mw_PUA_dummy := { + header := mw_diameterHeaderAns_dummy(PUA_E, ?), + session_Id := ?, + pUA_Body := mw_PUA_Body_dummy + } + + template PUA_Body_AVP mw_PUA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + repository_Data_Id := *, + data_Reference := *, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAA_MSG mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, ?), + session_Id := ?, + rAA_Body := mw_RAA_Body_dummy + } + + template RAA_Body_AVP mw_RAA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + experimental_Result := *, + user_Name := *, + media_Component_Description := *, + service_URN := *, + origin_State_Id := *, + class := *, + iP_CAN_Type := *, + rat_Type := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + charging_Rule_Report := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + threeGPP2_BSID := *, + qoS_Information := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + user_CSG_Information := *, + proxy_Info := *, + aVP_Type := * + } + + template RTA_MSG mw_RTA_dummy := { + header := mw_diameterHeaderAns_dummy(RTA_E, ?), + session_Id := ?, + rTA_Body := mw_RTA_Body_dummy + } + + template RTA_Body_AVP mw_RTA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + identity_with_Emergency_Registration := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAA_MSG mw_SAA_dummy := + { + header := mw_diameterHeaderAns_dummy(SAA_E, ?), + session_Id := ?, + sAA_Body := mw_SAA_Body_dummy + } + + template SAA_Body_AVP mw_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_User_Data := ?, + sIP_Accounting_Information := ?, + sIP_Supported_User_Data_Type := *, + user_Name := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + associated_Identities := *, //only TS129 229 + loose_Route_Indication := *, //only TS129 229 + sCSCF_Restoration_Info := *, //only TS129 229 + associated_Registered_Identities := *, //only TS129 229 + server_Name := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + priviledged_Sender_Indication := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNA_MSG mw_SNA_dummy := + { + header := mw_diameterHeaderAns_dummy(SNA_E, ?), + session_Id := ?, + sNA_Body := mw_SNA_Body_dummy + } + + template SNA_Body_AVP mw_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + result_Code := ?, + experimental_Result := *, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + supported_Features := *, + user_Data := *, //only TS129 229 + expiry_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template STA_MSG mw_STA_dummy := + { + header := mw_diameterHeaderAns_dummy(STA_E, ?), + session_Id := ?, + sTA_Body := mw_STA_Body_dummy + } + + template STA_Body_AVP mw_STA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + class := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template UAA_MSG mw_UAA_dummy := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applIdCommonMsg), + session_Id := ?, + uAA_Body := mw_UAA_Body_dummy + } + + template UAA_Body_AVP mw_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDA_MSG mw_UDA_dummy := { + header := mw_diameterHeaderAns_dummy(UDA_E, ?), + session_Id := ?, + uDA_Body := mw_UDA_Body_dummy + } + + template UDA_Body_AVP mw_UDA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_answer_templates_receive + } //end group dummy_templates + group base_templates { + + group basic_request_templates_send { + + template (value) CER_MSG m_CER_basic( + template Origin_Host_AVP p_originHost, + template Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CER_dummy := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWR_MSG m_DWR_basic( + template (present) Origin_Host_AVP p_originHost, + template (present) Origin_Realm_AVP p_originRealm) + modifies m_DWR_dummy := { + dWR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) DPR_MSG m_DPR_basic( + template (present) Origin_Host_AVP p_originHost, + template (present) Origin_Realm_AVP p_originRealm) + modifies m_DPR_dummy := { + dPR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + disconnect_Cause := m_disconnectCause(REBOOTING_E) + } + } + + } // end group basic_request_templates_send + + group basic_request_templates_receive { + + template CER_MSG mw_CER_basic( + template Auth_Application_Id_AVP p_authApplicationId) + modifies mw_CER_dummy := { + cER_Body := { + auth_Application_Id := {p_authApplicationId} + } + } + + }//end group basic_request_templates_receive + + group basic_answer_templates_send { + template (value) CEA_MSG m_CEA_basic( + template Origin_Host_AVP p_originHost, + template Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_dummy := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWA_MSG m_DWA_basic( + template Origin_Host_AVP p_originHost, + template Origin_Realm_AVP p_originRealm) + modifies m_DWA_dummy := { + dWA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) RAA_MSG m_RAA_basic( + template (value)Session_Id_AVP p_sessionId, + template (value)Origin_Host_AVP p_originHost, + template (value)Origin_Realm_AVP p_originRealm) + modifies m_RAA_dummy := { + session_Id := p_sessionId, + rAA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + }//end group basic_answer_templates_send + + group basic_answer_templates_receive { + }//end group basic_answer_templates_receive + + } //end group base_templates + group modified_templates { + + group modified_request_templates_send { + template (value) CER_MSG m_CER_AppId( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_authApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CER_MSG m_CER_AppId_acct_Application_Id( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_acctApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Acct_Id(p_acctApplicationId)}, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + } + + } //end group modified_request_templates_send + + group modified_request_templates_receive { + + template User_Data_AVP mw_user_Data_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Data_AVP_Code), + aVP_Data := ? + } + + template SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := mw_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template (present) SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_RFC( + template (present) SIP_Authentication_Scheme_AVP p_sIP_Authentication_Scheme, + template (present) SIP_Item_Number_AVP p_sIP_Item_Number := ?, + template (present) SIP_Authenticate_AVP p_sIP_Authenticate := ?, + template SIP_Authorization_AVP p_sIP_Authorization := omit + ) modifies mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := p_sIP_Authentication_Scheme, + sIP_Item_Number := p_sIP_Item_Number, + sIP_Authenticate := p_sIP_Authenticate, + sIP_Authorization := p_sIP_Authorization + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := ? + } + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Number_Auth_Items_AVP mw_sIPNumberAuthItems_RFC (template (present) UInt32 p_avpData := ?) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC), + aVP_Data := p_avpData + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_dummy := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authenticate_AVP_Code_RFC), + digest_Realm := ?, + digest_Nonce := ?, + digest_Domain := *, + digest_Opaque := *, + digest_Stale := *, + digest_Algorithm := *, + digest_QoP := *, + digest_HA1 := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authorization_RFC_AVP mw_sIPAuthorization_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authorization_AVP_Code_RFC), + digest_Username := ?, + digest_Realm := ?, + digest_Nonce := ?, + digest_URI := ?, + digest_Response := ?, + digest_Algorithm := *, + digest_CNonce := *, + digest_Opaque := *, + digest_QoP := *, + digest_Nonce_Count := *, + digest_Method := *, + digest_Entity_Body_Hash := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_dummy := { + digest_Realm := p_digest_Realm, + digest_QoP := p_digest_QoP, + digest_HA1 := p_digest_HA1 + } + + template (present) SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest_aka ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_digest := { + digest_Opaque := ? + } + + template SIP_User_Data_AVP mw_sIP_User_Data_dummy := + { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_AVP_Code), + sIP_User_Data_Type := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Type_AVP_Code), + aVP_Data := ? + }, + sIP_User_Data_Contents := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Contents_AVP_Code), + aVP_Data := ? + }, + aVP_Type := * + } + + template Framed_IP_Address_AVP mw_framed_IP_Address_dummy := { + // Ref: RFC4005 6.11.1 Framed_IP_Address AVP + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_framed_IP_Address_AVP_Code), + aVP_Data := ? + } + + } //end group modified_request_templates_receive + + group modified_answer_templates_send { + template (value) CEA_MSG m_CEA_AppId( + template Origin_Host_AVP p_originHost, + template Origin_Realm_AVP p_originRealm, + Address p_address, + UInt32 p_authApplicationId) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CEA_MSG m_CEA_AppId_all( + template Origin_Host_AVP p_originHost, + template Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(c_applIdRx), + m_vendor_Specific_Appl_Id(c_applIdGx), + m_vendor_Specific_Appl_Id(c_applId3GPPCxDx), + m_vendor_Specific_Appl_Id(c_applIdRf), + m_vendor_Specific_Appl_Id(c_applIdRo) + //add new if needed + }, + auth_Application_Id := {m_authApplicationId(c_applIdRx), + m_authApplicationId(c_applIdGx), + m_authApplicationId(c_applId3GPPCxDx), + m_authApplicationId(c_applIdRf), + m_authApplicationId(c_applIdRo) + //add new if needed + } + } + } + + } //end group modified_answer_templates_send + + group modified_answer_templates_receive { + } //end group modified_answer_templates_receive + + } //end group modified_templates + } //end group MessageTemplates + + /** Type convertion functions to reduce warnings due to type mismaches */ + group FunctionsForTemplates { + + /** @desc Calculates the IP address length in bytes + */ + function f_IPAdressLengthUInt24 () + return UInt24 + {if (PX_IPv6) + {return(16+2) } //+2 address family + else {return(4+2) } + } + + /** @desc Calculates the Diameter-Identity length in bytes + */ + function f_getDiameterIdentityAvpLength(in Diameter_Identity p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getDiameterIdentityAvpLength + + /** @desc Calculates the UTF8String AVP data length + */ + function f_getUTF8StringLength(in UTF8String p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getUTF8StringLength + + /** @desc Calculates the charstring AVP data length + */ + function f_getCharStringLength(in charstring p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getCharStringLength + + /** @desc Calculates the octetstring AVP data length + */ + function f_getOctetStringLength(in octetstring p_octetstring) return AVP_Length { + return lengthof(p_octetstring); + } // End of function f_getOctetStringLength + + /** @desc Returns the enumerated AVP data length + */ + function f_getEnumLength() return AVP_Length { + return 4; + } // End of function f_getEnumLength + + /** @desc Calculates the encoded playload length + */ + function f_getEncvalueLength(in bitstring p_bitstring) return AVP_Length { + return lengthof(p_bitstring) / 8; + } // End of function f_getEncvalueLength + + + /** @desc Calculates leghth of AVP with padded bytes (padded bytes are added in TA) + */ + function f_addPaddedBytes2Length(integer p_currLength) return integer { + var integer v_currLength; + + select(p_currLength mod 4){ + case (0) {v_currLength := p_currLength} + case (1) {v_currLength := p_currLength+3} + case (2) {v_currLength := p_currLength+2} + case (3) {v_currLength := p_currLength+1} + } + return v_currLength; + + } // End of f_addPaddedBytes2Length + + + /** @desc Converts DiameterURI to UTF8String + */ + function f_DiameterURI_2_UTF8String(in template DiameterURI p_diameterURI) return UTF8String { + var UTF8String v_utf8String; + var template charstring v_scheme, v_diameterId_FQDN, v_port, v_transport, v_protocol; + var integer v_portField; + var template charstring v_tailString := ""; + + + v_scheme := p_diameterURI.scheme; + v_diameterId_FQDN := p_diameterURI.diameterId_FQDN; + if (ispresent(p_diameterURI.portField)) + { + v_portField := valueof (p_diameterURI.portField); + v_port := int2char( v_portField ); + v_tailString := ":" & v_port; + } + if (ispresent(p_diameterURI.transport)) + { + v_transport := p_diameterURI.transport; + v_tailString := ";transport=" & v_transport; + } + + if (ispresent(p_diameterURI.protocol)) + { + v_protocol := p_diameterURI.protocol; + v_tailString := ";protocol=" & v_protocol; + } + v_utf8String := valueof(v_scheme) & "://" & valueof(v_diameterId_FQDN) & valueof(v_tailString); + + return v_utf8String; + + } // End of f_addPaddedBytes2Length + + /* Function f_char_to_BCD + * @desc: Returns BCD code in a hexstring converted from + * address digits (p_char) in charstring format + * Filler character '0'H is added where necessary + * End-of-Pulsing charater is added, if p_eop is TRUE + * Works for address lengths starting from 0 (i.e. empty string) + */ + function f_char_to_BCD(in charstring p_char, in boolean p_eop := false) return octetstring { + var integer v_string_length := lengthof(p_char); + var charstring v_address_char := p_char; + var octetstring v_address_oct; + var hexstring v_address_hex_ASCII; + + var integer i; + var hexstring v_address_hex_NUM := ''H; + + if (p_eop) // End of Pulsing required + { + + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "O"; // instead of "?" + // add End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 1; + } + else // even number of digits + { + v_address_char := v_address_char & "O0"; // instead of "0?" + // add filler and End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "0"; + // add filler + v_string_length := v_string_length + 1; + } + } + + v_address_oct := (char2oct(v_address_char)); + v_address_hex_ASCII := oct2hex(v_address_oct); + /* Examples + "1234" -> '31323334'H + "12345O" -> '31323334353F' */ + + // fill hexstring with adequate number of hex digits + for (i := 0; i < v_string_length; i := i + 1) + { + v_address_hex_NUM := v_address_hex_NUM & '0'H; + } + // fill hexstring with address in BCD format + for (i := 0; i < v_string_length; i := i + 2) + { + v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; + v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; + } + + v_address_oct := hex2oct(v_address_hex_NUM); + return v_address_oct; + } // End function f_char_to_BCD + } // End group FunctionsForTemplates + +}//end module LibDiameter_Templates \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn new file mode 100644 index 0000000..4b8f1bb --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn @@ -0,0 +1,2913 @@ +/** + * @author STF 434 and Iskratel Research Development V&V + * @version $Id$ + * @desc This module defines message, header, structured and simple Diameter + * types as well constants used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new message and header types is ok; + * Existing message or header types shall not be changed or removed + */ +module LibDiameter_TypesAndValues { + + //LibCommmon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S9_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + +group BasicTypesAndConstants{ + + group GlobalConstants{ + + // Default DIAMETER protocol : TCP + const charstring c_defaultTransportProtocol := "TCP"; + + const Address c_address := {'0001'O, {ipv4 := {127, 0, 0,1}}}; + + } + + group DiameterConstants{ + + const charstring c_sync1 := "sync1"; + const charstring c_sync2 := "sync2"; + const charstring c_sync3 := "sync3"; + + const UInt8 c_versionId := 1; + + const Oct2 c_ipv4AddressFamily := '0001'O; + const Oct2 c_ipv6AddressFamily := '0002'O; + + group ApplicationIdConstants { + const UInt32 c_applIdCommonMsg := 0; //For DWR, DWA + const UInt32 c_applId3GPPCxDx := 16777216; //For 3GPPCxDx messages 16777216 (Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe)) + const UInt32 c_applId3GPPShDh := 16777217; //For 3GPPShDh messages + const UInt32 c_applIdRx := 16777236; //For Rx messages + const UInt32 c_applIdGx := 16777238; //For Gx messages + const UInt32 c_applIdGxx := 16777266; //For Gxx messages + const UInt32 c_applIdS6a:= 16777251; //For S6a messages- See ETSI TS 129 272 V10.8.0 (2013-07) Clause 7.1.8 Diameter Application Identifier + const UInt32 c_applIdS13:= 16777252; //For S6a messages- See ETSI TS 129 272 V10.8.0 (2013-07) Clause 7.1.8 Diameter Application Identifier + const UInt32 c_applIdS9:= 16777267; //For S9 messages + const UInt32 c_applIdCx:= 16777216; //For Cx messages + const UInt32 c_applIdDx:= 16777224; //For Dx messages + const UInt32 c_applIdRf:= 3;//16777218; //For Rf messages + const UInt32 c_applIdRo:= 4;//16777218; //For Ro messages + + } // End of group ApplicationIdConstants + group SMINetworkManagementPrivateEnterpriseCodes_VendorIDAVP { + const UInt32 c_vendId3gpp := 10415; //Vendor idFor 3GPP + const UInt32 c_vendIdETSI := 13019; //Vendor idFor ETSI + } // End of group SMINetworkManagementPrivateEnterpriseCodes_VendorIDAVP + group AVPCodeConstants { + group AVPCodeConstantsRFC3855{ + const integer c_accounting_Realtime_Required_AVP_Code := 483; //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + const integer c_accounting_Record_Number_AVP_Code := 485; //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + const integer c_accounting_Record_Type_AVP_Code := 480; //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + const integer c_accounting_Sub_Session_Id_AVP_Code := 287; //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + const integer c_acct_Application_Id_AVP_Code := 259; //Ref: RFC3588 6.9. Acct-Application-Id AVP + const integer c_acct_Interim_Interval_AVP_Code := 85; //Ref: RFC3588 9.8.2. Acct-Interim-Interval + const integer c_acct_Multi_Session_Id_AVP_Code := 50; //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + const integer c_acct_Session_Id_AVP_Code := 44; //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + const integer c_auth_Application_Id_AVP_Code := 258; //Ref: RFC3588 6.8. Auth-Application-Id AVP + const integer c_class_AVP_Code := 25; //Ref: RFC3588 8.20. Class AVP + const integer c_destination_Host_AVP_Code := 293; //Ref: RFC3588 6.5. Destination-Host AVP + const integer c_destination_Realm_AVP_Code := 283; //Ref: RFC3588 6.6. Destination-Realm AVP + const integer c_disconnect_Cause_AVP_Code := 273; //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + const integer c_error_Message_AVP_Code := 281; //Ref: RFC3588 7.3. Error-Message AVP + const integer c_error_Reporting_Host_AVP_Code := 294; //Ref: RFC3588 7.4. Error-Reporting-Host AVP + const integer c_event_Timestamp_AVP_Code := 55; //Ref: RFC3588 8.21. Event-Timestamp AVP + const integer c_failed_AVP_Code := 279; //Ref: RFC3588 7.5. Failed-AVP AVP + const integer c_firmware_Revision_AVP_Code := 267; //Ref: RFC3588 5.3.4. Firmware-Revision AVP + const integer c_host_IP_Address_AVP_Code := 257; //Ref: RFC3588 5.3.5. Host-IP-Address AVP + const integer c_inband_Security_Id_AVP_Code := 299; //Ref: RFC3588 6.10. Inband-Security-Id AVP + const integer c_origin_Host_AVP_Code := 264; //Ref: RFC3588 6.3. Origin-Host AVP + const integer c_origin_Realm_AVP_Code := 296; //Ref: RFC3588 6.4. Origin-Realm AVP + const integer c_origin_State_Id_AVP_Code := 278; //Ref: RFC3588 8.16. Origin-State-Id AVP + const integer c_product_Name_AVP_Code := 269; //Ref: RFC3588 5.3.7. Product-Name AVP + const integer c_proxy_Host_AVP_Code := 280; //Ref: RFC3588 6.7.3. Proxy-Host AVP + const integer c_proxy_Info_AVP_Code := 284; //Ref: RFC3588 6.7.2. Proxy-Info AVP + const integer c_proxy_State_AVP_Code := 33; //Ref: RFC3588 6.7.4. Proxy-State AVP + const integer c_re_Auth_Request_Type_AVP_Code := 285; //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + const integer c_redirect_Host_AVP_Code := 292; //Ref: RFC3588 6.12. Redirect-Host AVP +// const integer c_redirect_Host_Cache_Time_AVP_Code := 9999; //NOTE Ref: RFC3588 Redirect_Host_Cache_Time_AVP_Code is NOT defined. + const integer c_redirect_Host_Usage_AVP_Code := 261; //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + const integer c_result_Code_AVP_Code := 268; //Ref: RFC3588 7.1. Result-Code AVP + const integer c_route_Record_AVP_Code := 282; //Ref: RFC3588 6.7.1. Route-Record AVP + const integer c_session_Id_AVP_Code := 263; //Ref: RFC3588 8.8. Session-Id AVP + const integer c_supported_Vendor_Id_AVP_Code := 265; //Ref; RFC3588 5.3.6. Supported-Vendor-Id AVP + const integer c_termination_Cause_AVP_Code := 295; //Ref: RFC3588 8.15. Termination-Cause AVP + const integer c_user_Name_AVP_Code := 1; //Ref: RFC3588 8.14. User-Name AVP + const integer c_vendor_Id_AVP_Code := 266; //Ref: RFC3588 5.3.3. Vendor-Id AVP + const integer c_vendor_Specific_Appl_Id_AVP_Code := 260; //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + } // End of group AVPCodeConstantsRFC3855 + group AVPCodeConstantsRFC4740{ + /* ******** Cx *******/ + const integer c_auth_Grace_Period_AVP_Code := 276; //Ref: RFC3588 8.10. Auth-Grace-Period AVP + const integer c_auth_Session_State_AVP_Code := 277; //Ref: RFC3588 8.11. Auth-Session-State AVP + const integer c_authorization_Lifetime_AVP_Code := 291; //Ref: RFC3588 8.9. Authorization-Lifetime AVP + const integer c_redirect_Max_Cache_Time_AVP_Code := 262; //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP + const integer c_sIP_Accounting_Information_AVP_Code := 368; //Ref: RFC4740 9.1. SIP-Accounting-Information AVP + const integer c_sIP_Accounting_Server_URI_AVP_Code := 369; //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP + const integer c_sIP_AOR_AVP_Code := 122; //Ref: RFC4740 9.8. SIP-AOR AVP + const integer c_sIP_Auth_Data_Item_AVP_Code_RFC := 376; //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + const integer c_sIP_Authenticate_AVP_Code_RFC := 379; //Ref: RFC4740 9.5.3. SIP-Authenticate AVP + const integer c_sIP_Authentication_Info_AVP_Code := 381; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const integer c_sIP_Authentication_Scheme_AVP_Code_RFC := 377; //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + const integer c_sIP_Authorization_AVP_Code_RFC := 380; //Ref: RFC4740 9.5.4. SIP-Authorization AVP + const integer c_sIP_Credit_Control_Server_URI_AVP_Code := 370; //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP + const integer c_sIP_Deregistration_Reason_AVP_Code := 383; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const integer c_sIP_Item_Number_AVP_Code_RFC := 378; //Ref: RFC4740 9.5.2 SIP-Item-Number AVP + const integer c_sIP_MandatoryCapability_AVP_Code := 373; //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + const integer c_sIP_Method_AVP_Code := 393; //Ref: RFC4740 9.14. SIP-Method AVP + const integer c_sIP_Number_Auth_Items_AVP_Code_RFC := 382; //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP + const integer c_sIP_OptionalCapability_AVP_Code := 374; //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP + const integer c_sIP_Reason_Code_AVP_Code := 384; //Ref: RFC4740 9.7.1. SIP-Reason-Code AVP + const integer c_sIP_Reason_Info_AVP_Code := 385; //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP + const integer c_sIP_Server_Assignment_Type_AVP_Code := 375; //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP + const integer c_sIP_Server_Capabilities_AVP_Code := 372; //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP + const integer c_sIP_Server_URI_AVP_Code := 371; //Ref: RFC4740 9.2 SIP-Server-URI AVP + const integer c_sIP_Supported_User_Data_Type_AVP_Code := 388; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + const integer c_sIP_User_Authorization_Type_AVP_Code := 387; //Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP + const integer c_sIP_User_Data_Already_Available_AVP_Code := 392; //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP + const integer c_sIP_User_Data_AVP_Code := 389; //Ref: RFC4740 9.12. SIP-User-Data AVP + const integer c_sIP_User_Data_Contents_AVP_Code := 391; //Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP + const integer c_sIP_User_Data_Type_AVP_Code := 390; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + const integer c_sIP_Visited_Network_Id_AVP_Code := 386; //Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + } // End of group AVPCodeConstantsRFC4740 + group AVPCodeConstantsRFC5580 { + const integer c_operator_Name_AVP_Code := 126; //Ref: RFC5580 Operator_Name_AVP + const integer c_location_Information_AVP_Code := 127; //Ref: RFC5580 Location_Information_AVP + const integer c_location_Data_AVP_Code := 128; //Ref: RFC5580 Location_Data_AVP + } // End of group AVPCodeConstantsRFC5580 + group AVPCodeConstantsCxDx_TS129_229{ + const integer c_visited_Network_Identifier_AVP_Code := 600; //Ref: TS 129.229 6.3.1 Visited_Network_Identifier + const integer c_public_Identity_AVP_Code := 601; //Ref: TS 129.229 6.3.2 Public_Identity + const integer c_server_Name_AVP_Code := 602; //Ref: TS 129.229 6.3.3 Server_Name + const integer c_server_Capabilities_AVP_Code := 603; //Ref: TS 129.229 6.3.4 Server_Capabilities + const integer c_mandatory_Capability_AVP_Code := 604; //Ref: TS 129.229 6.3.5 Mandatory_Capability + const integer c_optional_Capability_AVP_Code := 605; //Ref: TS 129.229 6.3.6 Optional_Capability + const integer c_user_Data_AVP_Code := 606; //Ref: TS 129.229 6.3.7 User_Data + const integer c_sIP_Number_Auth_Items_AVP_Code := 607; //Ref: TS 129.229 6.3.8 SIP-Number-Auth-Items AVP + const integer c_sIP_Authentication_Scheme_AVP_Code := 608; //Ref: TS 129.229 6.3.9. SIP-Authentication-Scheme AVP + const integer c_sIP_Authenticate_AVP_Code := 609; //Ref: TS 129.229 6.3.10 SIP-Authenticate AVP + const integer c_sIP_Authorization_AVP_Code := 610; //Ref: TS 129.229 6.3.11 SIP-Authorization AVP + const integer c_sIP_Authentication_Context_AVP_Code := 611; //Ref: TS 129.229 6.3.12 SIP_Authentication_Context + const integer c_sIP_Auth_Data_Item_AVP_Code := 612; //Ref: TS 129.229 6.3.13 SIP-Auth-Data-Item AVP + const integer c_sIP_Item_Number_AVP_Code := 613; //Ref: TS 129.229 6.3.14 SIP-Item-Number AVP + const integer c_server_Assignment_Type_AVP_Code := 614; //Ref: TS 129.229 6.3.15 Server_Assignment_Type + const integer c_deregistration_Reason_AVP_Code := 615; //Ref: TS 129.229 6.3.16 Deregistration_Reason + const integer c_reason_Code_AVP_Code := 616; //Ref: TS 129.229 6.3.17 Reason_Code + const integer c_reason_Info_AVP_Code := 617; //Ref: TS 129.229 6.3.18 Reason_Info + const integer c_user_Authorization_Type_AVP_Code := 623; //Ref: TS 129.229 6.3.24 User_Authorization_Type + const integer c_user_Data_Already_Available_AVP_Code := 624; //Ref: TS 129.229 6.3.26 User_Data_Already_Available + const integer c_confidentiality_Key_AVP_Code := 625; //Ref: TS 129.229 6.3.27 Confidentiality_Key + const integer c_integrity_Key_AVP_Code := 626; //Ref: TS 129.229 6.3.28 Integrity_Key + const integer c_supported_Features_AVP_Code := 628; //Ref: TS 129.229 6.3.29 Supported_Features + const integer c_feature_List_ID_AVP_Code := 629; //Ref: TS 129.229 6.3.30 Feature_List_ID + const integer c_feature_List_AVP_Code := 630; //Ref: TS 129.229 6.3.31 Feature_List + const integer c_supported_Applications_AVP_Code := 631; //Ref: TS 129.229 6.3.32 Supported_Applications + const integer c_associated_Identities_AVP_Code := 632; //Ref: TS 129.229 6.3.33 Associated_Identities + const integer c_originating_Request_AVP_Code := 633; //Ref: TS 129.229 6.3.34 Originating_Request + const integer c_wildcarded_Public_Identity_AVP_Code := 634; //Ref: TS 129.229 6.3.35 Wildcarded_Public_Identity + const integer c_sIP_Digest_Authenticate_AVP_Code := 635; //Ref: TS 129.229 6.3.36 SIP_Digest_Authenticate + const integer c_uAR_Flags_AVP_Code := 637; //Ref: TS 129.229 6.3.44 UAR_Flags + const integer c_loose_Route_Indication_AVP_Code := 638; //Ref: TS 129.229 6.3.45 Loose_Route_Indication + const integer c_sCSCF_Restoration_Info_AVP_Code := 639; //Ref: TS 129.229 6.3.46 SCSCF_Restoration_Info + const integer c_path_AVP_Code := 640; //Ref: TS 129.229 6.3.47 Path + const integer c_contact_AVP_Code := 641; //Ref: TS 129.229 6.3.48 Contact + const integer c_subscription_Info_AVP_Code := 642; //Ref: TS 129.229 6.3.49 Subscription_Info + const integer c_call_ID_SIP_Header_AVP_Code := 643; //Ref: TS 129.229 6.3.49.1 Call_ID_SIP_Header + const integer c_from_SIP_Header_AVP_Code := 644; //Ref: TS 129.229 6.3.49.2 From_SIP_Header + const integer c_to_SIP_Header_AVP_Code := 645; //Ref: TS 129.229 6.3.49.3 To_SIP_Header + const integer c_record_Route_AVP_Code := 646; //Ref: TS 129.229 6.3.49.4 Record_Route + const integer c_associated_Registered_Identities_AVP_Code := 647; //Ref: TS 129.229 6.3.50 Associated_Registered_Identities + const integer c_multiple_Registration_Indication_AVP_Code := 648; //Ref: TS 129.229 6.3.51 Multiple_Registration_Indication + const integer c_restoration_Info_AVP_Code := 649; //Ref: TS 129.229 6.3.52 Restoration_Info + const integer c_session_Priority_AVP_Code := 650; //Ref: TS 129.229 6.3.56 Session_Priority + const integer c_identity_with_Emergency_Registration_AVP_Code := 651; //Ref: TS 129.229 6.3.57 Identity_with_Emergency_Registration + const integer c_priviledged_Sender_Indication_AVP_Code := 652; //Ref: TS 129.229 6.3.58 Priviledged_Sender_Indication + } // End of group AVPCodeConstantsCxDx_TS129_229 + group AVPCodeConstantsDigest{ + const integer c_digest_Algorithm_AVP_Code := 111; //Ref: RFC4590 3.9. Digest-Algorithm Attribute + const integer c_digest_Auth_Param_AVP_Code := 117; //Ref: RFC4590 3.15. Digest-Auth-Param Attribute + const integer c_digest_CNonce_AVP_Code := 113; //Ref: RFC4590 3.11. Digest-CNonce Attribute + const integer c_digest_Domain_AVP_Code := 119; //Ref: RFC4590 3.17. Digest-Domain Attribute + const integer c_digest_Entity_Body_Hash_AVP_Code := 112; //Ref: RFC4590 3.10. Digest-Entity-Body-Hash Attribute + const integer c_digest_HA1_AVP_Code := 121; //Ref: RFC4590 3.19. Digest-HA1 Attribute + const integer c_digest_Method_AVP_Code := 108; //Ref: RFC4590 3.6. Digest-Method Attribute + const integer c_digest_Nextnonce_AVP_Code := 107; //Ref: RFC4590 + const integer c_digest_Nonce_AVP_Code := 105; //Ref: RFC4590 3.3. Digest-Nonce Attribute + const integer c_digest_Nonce_Count_AVP_Code := 114; //Ref: RFC4590 3.12. Digest-Nonce-Count Attribute + const integer c_digest_Opaque_AVP_Code := 116; //Ref: RFC4590 3.14. Digest-Opaque Attribute + const integer c_digest_QoP_AVP_Code := 110; //Ref: RFC4590 3.8. Digest-Qop Attribute + const integer c_digest_Realm_AVP_Code := 104; //Ref: RFC4590 3.2. Digest-Realm Attribute + const integer c_digest_Response_Auth_AVP_Code := 106; //Ref: RFC4590 + const integer c_digest_Response_AVP_Code := 103; //Ref: RFC4590 + const integer c_digest_Stale_AVP_Code := 120; //Ref: RFC4590 3.18. Digest-Stale Attribute + const integer c_digest_URI_AVP_Code := 109; //Ref: RFC4590 3.7. Digest-URI Attribute + const integer c_digest_Username_AVP_Code := 115; //Ref: RFC4590 3.13. Digest-Username Attribute + } // End of group AVPCodeConstantsDigest + group AVPCodeConstantsShDh_TS129_329{ + const integer c_current_Location_AVP_Code := 707; //Ref: 3GPP TS 29.329 6.3.8 Current-Location AVP + const integer c_data_Reference_AVP_Code := 703; //Ref: 3GPP TS 29.329 6.3.4 Data-Reference AVP + const integer c_dSAI_Tag_AVP_Code := 711; //Ref: 3GPP TS 29.329 6.3.18 DSAI-Tag AVP + const integer c_experimental_Result_AVP_Code := 297; //Ref: 3GPP TS 29.229 6.2 Result-Code AVP values // FUN 766300-PCL-030 : Experimental-Result AVP shall be used for Sh/Dh errors. + const integer c_experimental_Result_Code_AVP_Code := 298; //Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + const integer c_expiry_Time_AVP_Code := 709; //Ref: 3GPP TS 29.329 6.3.16 Expiry-Time + const integer c_identity_Set_AVP_Code := 708; //Ref: 3GPP TS 29.329 6.3.10 Identity-Set AVP + const integer c_mSISDN_AVP_Code := 701; //Ref: 3GPP TS 29.329 6.3.2 MSISDN AVP + const integer c_repository_Data_Id_AVP_Code := 715 ; //Ref: 3GPP TS 29.329 6.3.24 + const integer c_requested_Domain_AVP_Code := 706; //Ref: 3GPP TS 29.329 6.3.7 Requested-Domain AVP + const integer c_send_Data_Indication_AVP_Code := 710; //Ref: 3GPP TS 29.329 6.3.17 Send-Data-Indication AVP + const integer c_service_Indication_AVP_Code := 704; //Ref: 3GPP TS 29.329 6.3.5 Service-Indication AVP + const integer c_sequence_Number_AVP_Code := 716 ; //Ref: 3GPP TS 29.329 6.3.25 + const integer c_subs_Req_Type_AVP_Code := 705; //Ref: 3GPP TS 29.329 6.3.6 Subs-Req-Type AVP + const integer c_user_Identity_AVP_Code := 700; //Ref: 3GPP TS 29.329 6.3.1 User-Identity AVP + const integer c_wildcarded_IMPU_AVP_Code := 636; //Ref: 3GPP TS 29.329 6.3.20 Wildcarded-IMPU AVP + const integer c_user_Data_Sh_AVP_Code := 702; //Ref: TS 129.329 6.3.3 User_Data + } // End of group AVPCodeConstantsShDh_TS129_329 + group AVPCodeConstantsRFC4005{ + const integer c_called_Station_Id_AVP_Code := 30; //Ref: RFC4005 4.5 Called_Station_Id AVP + const integer c_framed_IP_Address_AVP_Code := 8; //Ref: RFC4005 6.11.1 Framed_IP_Address AVP + const integer c_framed_IPv6_Prefix_AVP_Code := 97; //Ref: RFC4005 6.11.1 Framed_IPv6_Prefix AVP + } // End of group AVPCodeConstantsRFC4005 + group AVPCodeConstantsRFC4006{ + /* ***** Rf and Ro Ref: RFC4006 ***** */ + const integer c_rating_Group_AVP_Code := 433; //Ref: RFC4006 8.29. Rating-Group AVP + const integer c_tariff_Time_Change_AVP_Code := 451; //Ref: RFC4006 8.20. Tariff-Time-Change AVP + const integer c_cC_Correlation_Id_AVP_Code := 411; //Ref: RFC4006 8.1. CC-Correlation-Id AVP + const integer c_cC_Input_Octets_AVP_Code := 412; //Ref: RFC4006 8.24. CC-Input-Octets AVP + const integer c_cC_Money_AVP_Code := 413; //Ref: RFC4006 8.22. CC-Money AVP + const integer c_cC_Output_Octets_AVP_Code := 414; //Ref: RFC4006 8.25. CC-Output-Octets AVP + const integer c_cC_Request_Number_AVP_Code := 415; //Ref: RFC4006 8.2. CC-Request-Number AVP + const integer c_cC_Request_Type_AVP_Code := 416; //Ref: RFC4006 8.3. CC-Request-Type AVP + const integer c_cC_Service_Specific_Units_AVP_Code := 417; //Ref: RFC4006 8.26. CC-Service-Specific-Units AVP + const integer c_cC_Session_Failover_AVP_Code := 418; //Ref: RFC4006 8.4. CC-Session-Failover AVP + const integer c_cC_Sub_Session_Id_AVP_Code := 419; //Ref: RFC4006 8.5. CC-Sub-Session-Id AVP + const integer c_cC_Time_AVP_Code := 420; //Ref: RFC4006 8.21. CC-Time AVP + const integer c_cC_Total_Octets_AVP_Code := 421; //Ref: RFC4006 8.23. CC-Total-Octets AVP + const integer c_cC_Unit_Type_AVP_Code := 454; //Ref: RFC4006 8.32. CC-Unit-Type AVP + const integer c_check_Balance_Result_AVP_Code := 422; //Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP + const integer c_cost_Information_AVP_Code := 423; //Ref: RFC4006 8.7. Cost-Information AVP + const integer c_cost_Unit_AVP_Code := 424; //Ref: RFC4006 8.12. Cost-Unit AVP + const integer c_credit_Control_Failure_Handling_AVP_Code := 427; //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + const integer c_currency_Code_AVP_Code := 425; //Ref: RFC4006 8.11. Currency-Code AVP + const integer c_direct_Debiting_Failure_Handling_AVP_Code := 428; //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + const integer c_exponent_AVP_Code := 429; //Ref: RFC4006 8.9. Exponent AVP + const integer c_filter_Id_AVP_Code := 11; //Ref: RFC4005 6.7. Filter-Id AVP + const integer c_final_Unit_Action_AVP_Code := 449; //Ref: RFC4006 8.35. Final-Unit-Action AVP + const integer c_final_Unit_Indication_AVP_Code := 430; //Ref: RFC4006 8.34. Final-Unit-Indication AVP + const integer c_g_S_U_Pool_Identifier_AVP_Code := 453; //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + const integer c_g_S_U_Pool_Reference_AVP_Code := 457; //Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP + const integer c_granted_Service_Unit_AVP_Code := 431; //Ref: RFC4006 8.17. Granted-Service-Unit AVP + const integer c_multiple_Services_Credit_Control_AVP_Code := 456; //Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP + const integer c_multiple_Services_Indicator_AVP_Code := 455; //Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + const integer c_redirect_Address_Type_AVP_Code := 433; //Ref: RFC4006 8.38. Redirect-Address-Type AVP + const integer c_redirect_Server_Address_AVP_Code := 435; //Ref: RFC4006 8.39. Redirect-Server-Address AVP + const integer c_redirect_Server_AVP_Code := 434; //Ref: RFC4006 8.37. Redirect-Server AVP + const integer c_requested_Action_AVP_Code := 436; //Ref: RFC4006 8.41. Requested-Action AVP + const integer c_requested_Service_Unit_AVP_Code := 437; //Ref: RFC4006 8.18. Requested-Service-Unit AVP + const integer c_restriction_Filter_Rule_AVP_Code := 438; //Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + const integer c_service_Context_Id_AVP_Code := 461; //Ref: RFC4006 8.42. Service-Context-Id AVP + const integer c_service_Identifier_AVP_Code := 439; //Ref: RFC4006 8.28. Service-Identifier AVP + const integer c_service_Parameter_Info_AVP_Code := 440; //Ref: RFC4006 8.43. Service-Parameter-Info AVP + const integer c_service_Parameter_Type_AVP_Code := 441; //Ref: RFC4006 8.44. Service-Parameter-Type AVP + const integer c_service_Parameter_Value_AVP_Code := 442; //Ref: RFC4006 8.45. Service-Parameter-Value AVP + const integer c_subscription_Id_AVP_Code := 443; //Ref: RFC4006 8.46. Subscription-Id AVP + const integer c_subscription_Id_Data_AVP_Code := 444; //Ref: RFC4006 + const integer c_subscription_Id_Type_AVP_Code := 450; //Ref: RFC4006 8.47. Subscription-Id-Type AVP + const integer c_tariff_Change_Usage_AVP_Code := 452; //Ref: RFC4006 8.27. Tariff-Change-Usage AVP + const integer c_unit_Value_AVP_Code := 445; //Ref: RFC4006 8.8. Unit-Value AVP + const integer c_used_Service_Unit_AVP_Code := 446; //Ref: RFC4006 8.19. Used-Service-Unit AVP + const integer c_user_Equipment_Info_AVP_Code := 458; //Ref: RFC4006 8.49. User-Equipment-Info AVP + const integer c_user_Equipment_Info_Type_AVP_Code := 459; //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + const integer c_user_Equipment_Info_Value_AVP_Code := 460; //Ref: RFC4006 8.51. User-Equipment-Info-Value AVP + const integer c_validity_Time_AVP_Code := 448; //Ref: RFC4006 8.33. Validity-Time AVP + const integer c_value_Digits_AVP_Code := 447; //Ref: RFC4006 8.10. Value-Digits AVP + } // End of group AVPCodeConstantsRFC4006 + group AVPCodeConstantsRxTS129_214{ + const integer c_acceptable_Service_Info_AVP_Code := 526; //Ref: ETSI TS 129 214 Acceptable_Service_Info_AVP + const integer c_access_Network_Charging_Address_AVP_Code := 501; //Ref: ETSI TS 129 214 Access_Network_Charging_Address AVP + const integer c_access_Network_Charging_Identifier_AVP_Code := 502; //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier AVP + const integer c_access_Network_Charging_Identifier_Value_AVP_Code := 503;//Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP + const integer c_aF_Application_Identifier_AVP_Code := 504; //Ref: ETSI TS 129 214 AF_Application_Identifier AVP + const integer c_aF_Charging_Identifier_AVP_Code := 505; //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP + const integer c_aF_Signalling_Protocol_AVP_Code := 529; //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP + const integer c_application_Service_Provider_Identity_AVP_Code := 532; //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP + const integer c_codec_Data_AVP_Code := 524; //Ref: ETSI TS 129 214 Codec_data AVP + const integer c_flow_Description_AVP_Code := 507; //Ref: ETSI TS 129 214 Flow_Description AVP + const integer c_flow_Number_AVP_Code := 509; //Ref: ETSI TS 129 214 Flow_Number AVP + const integer c_flow_Status_AVP_Code := 511; //Ref: ETSI TS 129 214 Flow_Status AVP + const integer c_flow_Usage_AVP_Code := 512; //Ref: ETSI TS 129 214 Flow_Usage AVP + const integer c_flows_AVP_Code := 510; //Ref: ETSI TS 129 214 Flows_AVP + const integer c_max_Requested_Bandwidth_DL_AVP_Code := 515; //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP + const integer c_max_Requested_Bandwidth_UL_AVP_Code := 516; //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP + const integer c_media_Component_Description_AVP_Code := 517; //Ref: ETSI TS 129 214 Media_Component_Decription_AVP + const integer c_media_Component_Number_AVP_Code := 518; //Ref: ETSI TS 129 214 Media_Component_Number_AVP + const integer c_media_Sub_Component_AVP_Code := 519; //Ref: ETSI TS 129 214 Media_Sub_Component_AVP + const integer c_media_Type_AVP_Code := 520; //Ref: ETSI TS 129 214 Media_Type AVP + const integer c_mPS_Identifier_AVP_Code := 528; //Ref: ETSI TS 129 214 MPS_Identifier AVP + const integer c_reservation_Priority_AVP_Code := 458; //Ref: ETSI TS 129 214 Reservation_Priority AVP + const integer c_rR_Bandwidth_AVP_Code := 521; //Ref: ETSI TS 129 214 RR Bandwidth_AVP + const integer c_rS_Bandwidth_AVP_Code := 522; //Ref: ETSI TS 129 214 RS Bandwidth_AVP + const integer c_service_Info_Status_AVP_Code := 527; //Ref: ETSI TS 129 214 Service_Info AVP + const integer c_rx_Request_Type_AVP_Code := 533; //Ref: ETSI TS 129 214 Request_Type_AVP + const integer c_service_URN_AVP_Code := 525; //Ref: ETSI TS 129 214 Service_URN AVP + const integer c_sIP_Forking_Indication_AVP_Code := 523; //Ref: ETSI TS 129 214 SIP_Forking_Indication AVP + const integer c_specific_Action_AVP_Code := 513; //Ref: ETSI TS 129 214 Specific_Action AVP + const integer c_sponsor_Identity_AVP_Code := 531; //Ref: ETSI TS 129 214 Sponsor_Identity AVP + const integer c_sponsored_Connectivity_Data_AVP_Code := 530; //Ref: ETSI TS 129 214 Sponsored_Connectivity_Data AVP + const integer c_required_Access_Info_AVP := 536; //ref: TS129 214 5.3.34 + const integer c_abort_Cause_AVP_Code := 500; //Ref: ETSI TS 129 214 Abort Cause AVP + } // End of group AVPCodeConstantsRxTS129_214 + group AVPCodeConstantsS9_TS129_215 { + const integer c_subsession_Decision_Info_AVP_Code := 2200; // Ref: table 5.3.1 + const integer c_subsession_Enforcement_Info_AVP_Code := 2201; // Ref: table 5.3.1 + const integer c_subsession_Id_AVP_Code := 2202; // Ref: table 5.3.1 + const integer c_subsession_Operation_AVP_Code := 2203; // Ref: table 5.3.1 + const integer c_multiple_BBERF_Action_AVP_Code := 2204; // Ref: table 5.3.1 + } // End of group AVPCodeConstantsS9_TS129_215 + group AVPCodeConstantsGx_SdTS129_212{ + const integer c_access_Network_Charging_Identifier_Gx_AVP_Code := 1022; //Ref: ETSI TS 129 212 Access_Network_Charging_Identifier_Gx_AVP + const integer c_allocation_Retention_Priority_AVP_Code := 1034; //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP + const integer c_aN_GW_Address_AVP_Code := 1050; //Ref: ETSI TS 129 212 AN_GW_Address_AVP + const integer c_aPN_Aggregate_Max_Bitrate_DL_AVP_Code := 1040; //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP + const integer c_aPN_Aggregate_Max_Bitrate_UL_AVP_Code := 1041; //Ref: ETSI TS 129 212 Aggregate_Max_Bitrate_UL_AVP + const integer c_bearer_Control_Mode_AVP_Code := 1023; //Ref: ETSI TS 129 212 Bearer_Control_Mode_AVP + const integer c_bearer_Identifier_AVP_Code := 1020; //Ref: ETSI TS 129 212 Bearer_Identifier_AVP + const integer c_bearer_Operation_AVP_Code := 1021; //Ref: ETSI TS 129 212 Bearer_Operation_AVP + const integer c_bearer_Usage_AVP_Code := 1000; //Ref: ETSI TS 129 212 Bearer_Usage_AVP + const integer c_charging_Rule_Install_AVP_Code := 1001; //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + const integer c_charging_Rule_Remove_AVP_Code := 1002; //Ref: ETSI TS 129 212 Charging_Rule_Remove_AVP + const integer c_charging_Rule_Definition_AVP_Code := 1003; //Ref: ETSI TS 129 212 Charging_Rule_Definition_AVP + const integer c_charging_Rule_Base_Name_AVP_Code := 1004; //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP + const integer c_charging_Rule_Name_AVP_Code := 1005; //Ref: ETSI TS 129 212 Charging_Rule_Name_AVP + const integer c_charging_Rule_Report_AVP_Code := 1018; //Ref: ETSI TS 129 212 Charging_Rule_Report_AVP + const integer c_charging_Correlation_Indicator_AVP_Code := 1073; //Ref: ETSI TS 129 212 Charging_Correlation_Indicator_AVP + const integer c_coA_IP_Address_AVP_Code := 1035; //Ref: ETSI TS 129 212 CoA_IP_Address_AVP + const integer c_coA_Information_AVP_Code := 1039; //Ref: ETSI TS 129 212 CoA_Information_AVP + const integer c_cSG_Information_Reporting_AVP_Code := 1071; //Ref: ETSI TS 129 212 CSG_Information_Reporting_AVP + const integer c_default_EPS_Bearer_QoS_AVP_Code := 1049; //Ref: ETSI TS 129 212 Default_EPS_Bearer_QoS_AVP + const integer c_event_Report_Indication_AVP_Code := 1033; //Ref: ETSI TS 129 212 Event_Report_Indication_AVP + const integer c_event_Trigger_AVP_Code := 1006; //Ref: ETSI TS 129 212 Event_Trigger_AVP + const integer c_flow_Direction_AVP_Code := 1080; //Ref: ETSI TS 129 212 Flow_Direction_AVP + const integer c_flow_Information_AVP_Code := 1058; //Ref: ETSI TS 129 212 Flow_Information_AVP + const integer c_flow_Label_AVP_Code := 1057; //Ref: ETSI TS 129 212 Flow_Label_AVP + const integer c_iP_CAN_Type_AVP_Code := 1027; //Ref: ETSI TS 129 212 IP_CAN_Type_AVP + const integer c_guaranteed_Bitrate_DL_AVP_Code := 1025; //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP + const integer c_guaranteed_Bitrate_UL_AVP_Code := 1026; //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP + const integer c_maximum_Bandwidth_AVP_Code := 1082; //Ref: ETSI TS 129 212 Maximum_Bandwidth_AVP + const integer c_max_Supported_Bandwidth_DL_AVP_Code := 1083; //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_DL_AVP + const integer c_max_Supported_Bandwidth_UL_AVP_Code := 1084; //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_UL_AVP + const integer c_metering_Method_AVP_Code := 1007; //Ref: ETSI TS 129 212 Metering_Method_AVP + const integer c_monitoring_Key_AVP_Code := 1066; //Ref: ETSI TS 129 212 Monitoring_Key_AVP + const integer c_Network_Request_Support_AVP_Code := 1024; //Ref: ETSI TS 129 212 Network_Request_Support_AVP + const integer c_offline_AVP_Code := 1008; //Ref: ETSI TS 129 212 Offline_AVP + const integer c_online_AVP_Code := 1009; //Ref: ETSI TS 129 212 Online_AVP + const integer c_packet_Filter_Content_AVP_Code := 1059; //Ref: ETSI TS 129 212 Packet_Filter_Content_AVP + const integer c_packet_Filter_Identifier_AVP_Code := 1060; //Ref: ETSI TS 129 212 Packet_Filter_Identifier_AVP + const integer c_packet_Filter_Information_AVP_Code := 1061; //Ref: ETSI TS 129 212 Packet_Filter_Information_AVP + const integer c_packet_Filter_Operation_AVP_Code := 1062; //Ref: ETSI TS 129 212 Packet_Filter_Operation_AVP + const integer c_packet_Filter_Usage_AVP_Code := 1072; //Ref: ETSI TS 129 212 Packet_Filter_Usage_AVP + const integer c_pDN_Connection_ID_AVP_Code := 1065; //Ref: ETSI TS 129 212 PDN_Connection_ID_AVP + const integer c_precedence_AVP_Code := 1010; //Ref: ETSI TS 129 212 Precedence_AVP + const integer c_pre_emption_Capability_AVP_Code := 1047; //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP + const integer c_pre_emption_Vulnerability_AVP_Code := 1048; //Ref: ETSI TS 129 212 Pre_emption_Vulnerability_AVP + const integer c_priority_Level_AVP_Code := 1046; //Ref: ETSI TS 129 212 Priority_Level_AVP + const integer c_reporting_Level_AVP_Code := 1011; //Ref: ETSI TS 129 212 Reporting_Level_AVP + const integer c_routing_Filter_AVP_Code := 1078; //Ref: ETSI TS 129 212 Routing_Filter_AVP + const integer c_routing_IP_Address_AVP_Code := 1079; //Ref: ETSI TS 129 212 Routing_IP_Address_AVP + const integer c_routing_Rule_Definition_AVP_Code := 1076; //Ref: ETSI TS 129 212 Routing_Rule_Definition_AVP + const integer c_routing_Rule_Identifier_AVP_Code := 1077; //Ref: ETSI TS 129 212 Routing_Rule_Identifier_AVP + const integer c_routing_Rule_Install_AVP_Code := 1081; //Ref: ETSI TS 129 212 Routing_Rule_Install_AVP + const integer c_routing_Rule_Remove_AVP_Code := 1075; //Ref: ETSI TS 129 212 Routing_Rule_Remove_AVP + const integer c_pCC_Rule_Status_AVP_Code := 1019; //Ref: ETSI TS 129 212 PCC_Rule_Status_AVP + const integer c_session_Release_Cause_AVP_Code := 1045; //Ref: ETSI TS 129 212 Session_Release_Cause_AVP + const integer c_qoS_Class_Identifier_AVP_Code := 1028; //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP + const integer c_qoS_Information_AVP_Code := 1016; //Ref: ETSI TS 129 212 QoS_Information_AVP + const integer c_qoS_Negotiation_AVP_Code := 1029; //Ref: ETSI TS 129 212 QoS_Negotiation_AVP + const integer c_qos_Upgrade_AVP_Code := 1030; //Ref: ETSI TS 129 212 Qos_Upgrade_AVP + const integer c_resource_Allocation_Notification_AVP_Code := 1063; //Ref: ETSI TS 129 212 Resource_Allocation_Notification_AVP + const integer c_rule_Failure_Code_AVP_Code := 1031; //Ref: ETSI TS 129 212 Rule_Failure_Code_AVP + const integer c_security_Parameter_Index_AVP_Code := 1056; //Ref: ETSI TS 129 212 Security_Parameter_Index_AVP + const integer c_tFT_Filter_AVP_Code := 1012; //Ref: ETSI TS 129 212 TFT_Filter_AVP + const integer c_tFT_Packet_Filter_Information_AVP_Code := 1013; //Ref: ETSI TS 129 212 TFT_Packet_Filter_Information_AVP + const integer c_toS_Traffic_Class_AVP_Code := 1014; //Ref: ETSI TS 129 212 ToS_Traffic_Class_AVP + const integer c_tunnel_Header_Filter_AVP_Code := 1036; //Ref: ETSI TS 129 212 Tunnel_Header_Filter_AVP + const integer c_tunnel_Header_Length_AVP_Code := 1037; //Ref: ETSI TS 129 212 Tunnel_Header_Length_AVP + const integer c_tunnel_Information_AVP_Code := 1038; //Ref: ETSI TS 129 212 Tunnel_Information_AVP + const integer c_rAT_Type_AVP_Code := 1032; //Ref: ETSI TS 129 212 RAT_Type_AVP + const integer c_revalidation_Time_AVP_Code := 1042; //Ref: ETSI TS 129 212 Revalidation_Time_AVP + const integer c_rule_Activation_Time_AVP_Code := 1043; //Ref: ETSI TS 129 212 Rule_Activation_Time_AVP + const integer c_usage_Monitoring_Information_AVP_Code := 1067; //Ref: ETSI TS 129 212 Usage_Monitoring_Information_AVP + const integer c_rule_DeActivation_Time_AVP_Code := 1044; //Ref: ETSI TS 129 212 Rule_DeActivation_Time_AVP + const integer c_usage_Monitoring_Level_AVP_Code := 1068; //Ref: ETSI TS 129 212 Usage_Monitoring_Level_AVP + const integer c_usage_Monitoring_Report_AVP_Code := 1069; //Ref: ETSI TS 129 212 Usage_Monitoring_Report_AVP + const integer c_usage_Monitoring_Support_AVP_Code := 1070; //Ref: ETSI TS 129 212 Usage_Monitoring_Support_AVP + const integer c_tdf_Application_Identifier_AVP := 1088; // Ref: TS129 212 5.3.77 + const integer c_tdf_Information_AVP := 1087; // Ref: TS129 212 5.3.78 + const integer c_tdf_Destination_Realm_AVP := 1090; // Ref: TS129 212 5.3.79 + const integer c_tdf_Destination_Host_AVP := 1089; // Ref: TS129 212 5.3.80 + const integer c_tdf_IP_Address_AVP := 1091; // Ref: TS129 212 5.3.81 + const integer c_appl_Detection_Info_AVP := 1098; // Ref: TS129 212 5.3.91 + const integer c_tdf_Application_Instance_Id_AVP := 2802; // Ref: TS129 212 5.3.92 + const integer c_henb_Local_IP_Address_AVP := 2804; // Ref: TS129 212 5.3.95 + const integer c_ue_Local_IP_Address_AVP := 2805; // Ref: TS129 212 5.3.96 + const integer c_udp_Source_Port_AVP := 2806; // Ref: TS129 212 5.3.97 + const integer c_an_GW_Status_AVP := 2811; // Ref: TS129 212 5.3.100 + } // End of group AVPCodeConstantsGx_SdTS129_212 + group AVPCodeConstantsGxx_TS129_212{ + const integer c_qos_Rule_Install_AVP := 1051; // Ref: TS129 212 5a.3.1 + const integer c_qos_Rule_Remove_AVP := 1052; // Ref: TS129 212 5a.3.2 + const integer c_qos_Rule_Definition_AVP := 1053; // Ref: TS129 212 5a.3.3 + const integer c_qos_Rule_Name_AVP := 1054; // Ref: TS129 212 5a.3.4 + const integer c_qos_Rule_Report_AVP := 1055; // Ref: TS129 212 5a.3.5 + const integer c_session_Linking_Indicator_AVP := 1064; // Ref: TS129 212 5a.3.6 + const integer c_qos_Rule_Base_Name_AVP := 1074; // Ref: TS129 212 5a.3.7 + } // End of group AVPCodeConstantsGxx_TS129_212 + group AVPCodeConstantsTS129_061{ + const integer c_rAI_AVP_Code := 909; //Ref: ETSI TS 129 061 RAI_AVP + const integer c_threeGPP_Charging_Id_AVP_Code := 2; //Ref: ETSI TS 129 061 ThreeGPP_Charging_Id_AVP + const integer c_threeGPP_PDP_Type_AVP_Code := 3; //Ref: ETSI TS 129 061 ThreeGPP_PDP_Type_AVP + const integer c_threeGPP_SGSN_Address_AVP_Code := 6; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_Address_AVP + const integer c_threeGPP_IMSI_MCC_MNC_AVP_Code := 8; //Ref: ETSI TS 129 061 ThreeGPP_IMSI_MCC_MNC_AVP + const integer c_threeGPP_GGSN_MCC_MNC_AVP_Code := 9; //Ref: ETSI TS 129 061 ThreeGPP_GGSN_MCC_MNC_AVP + const integer c_threeGPP_NSAPI_AVP_Code := 10; //Ref: ETSI TS 129 061 ThreeGPP_NSAPI_AVP + const integer c_threeGPP_Session_Stop_Indicator_AVP_Code := 11; //Ref: ETSI TS 129 061 ThreeGPP_Session_Stop_Indicator_AVP + const integer c_threeGPP_Selection_Mode_AVP_Code := 12; //Ref: ETSI TS 129 061 ThreeGPP_Selection_Mode_AVP + const integer c_threeGPP_Charging_Characteristics_AVP_Code := 13; //Ref: ETSI TS 129 061 ThreeGPP_Charging_Characteristics_AVP + const integer c_threeGPP_SGSN_IPv6_Address_AVP_Code := 15; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_IPv6_Address_AVP + const integer c_threeGPP_User_Location_Info_AVP_Code := 22; //Ref: ETSI TS 129 061 ThreeGPP_User_Location_Info_AVP + const integer c_threeGPP_MS_TimeZone_AVP_Code := 23; //Ref: ETSI TS 129 061 ThreeGPP_MS_TimeZone_AVP + const integer c_threeGPP_RAT_Type_AVP_Code := 21; //Ref: ETSI TS 129 061 ThreeGPP_RAT_Type_AVP + const integer c_threeGPP_SGSN_MCC_MNC_AVP_Code := 18; //Ref: ETSI TS 129 061 ThreeGPP_SGSN_MCC_MNC_AVP + const integer c_threeGPP_GGSN_Address_AVP := 7; // Ref: TS129 061 table 9a + const integer c_threeGPP_GGSN_IPv6_Address_AVP := 16; // Ref: TS129 061 table 9a + const integer c_twan_Identifier_AVP := 29; // Ref: TS129 061 table 9a + + } // End of group AVPCodeConstantsTS129_061 + group AVPCodeConstantsTS129_272{ + const integer c_trace_Data_AVP_Code := 1485; //Ref: ETSI TS 129 272 Trace_Data_AVP + const integer c_trace_Reference_AVP_Code := 1459; //Ref: ETSI TS 129 272 Trace_Reference_AVP + const integer c_trace_Depth_AVP_Code := 1462; //Ref: ETSI TS 129 272 Trace_Depth_AVP + const integer c_trace_NE_Type_List_AVP_Code := 1463; //Ref: ETSI TS 129 272 Trace_NE_Type_List_AVP + const integer c_trace_Event_List_AVP_Code := 1465; //Ref: ETSI TS 129 272 Trace_Event_List_AVP + const integer c_trace_Collection_Entity_AVP_Code := 1452; //Ref: ETSI TS 129 272 Trace_Data_AVP + const integer c_trace_Interface_List_AVP_Code := 1464; //Ref: ETSI TS 129 272 Trace_Interface_List_AVP + const integer c_oMC_Id_AVP_Code := 1466; //Ref: ETSI TS 129 272 OMC_Id_AVP + const integer c_mDT_Configuration_AVP_Code := 1622; //Ref: ETSI TS 129 272 MDT_Configuration_AVP + const integer c_Job_Type_AVP_Code := 1623; //Ref: ETSI TS 129 272 Job_Type_AVP + const integer c_area_Scope_AVP_Code := 1624; //Ref: ETSI TS 129 272 Area_Scope_AVP + const integer c_list_Of_Measurements_AVP_Code := 1625; //Ref: ETSI TS 129 272 List_Of_Measurements_AVP + const integer c_reporting_Trigger_AVP_Code := 1626; //Ref: ETSI TS 129 272 Reporting_Trigger_AVP + const integer c_report_Interval_AVP_Code := 1627; //Ref: ETSI TS 129 272 Report_Interval_AVP + const integer c_report_Amount_AVP_Code := 1628; //Ref: ETSI TS 129 272 Report_Amount_AVP + const integer c_event_Treshold_RSRP_AVP_Code := 1629; //Ref: ETSI TS 129 272 Event_Treshold_RSRP_AVP + const integer c_event_Treshold_RSRQ_AVP_Code := 1630; //Ref: ETSI TS 129 272 Event_Treshold_RSRQ_AVP + const integer c_logging_Interval_AVP_Code := 1631; //Ref: ETSI TS 129 272 Logging_Interval_AVP + const integer c_logging_Duration_AVP_Code := 1632; //Ref: ETSI TS 129 272 Logging_Duration_AVP + const integer c_cell_Global_Identity_AVP_Code := 1604; //Ref: ETSI TS 129 272 Cell_Global_Identity_AVP + const integer c_e_UTRAN_Cell_Global_Identity_AVP_Code := 1602; //Ref: ETSI TS 129 272 E_UTRAN_Cell_Global_Identity_AVP + const integer c_routing_Area_Identity_AVP_Code := 1605; //Ref: ETSI TS 129 272 Routing_Area_Identity_AVP + const integer c_location_Area_Identity_AVP_Code := 1606; //Ref: ETSI TS 129 272 Location_Area_Identity_AVP + const integer c_tracking_Area_Identity_AVP_Code := 1603; //Ref: ETSI TS 129 272 Tracking_Area_Identity_AVP + + } // End of group AVPCodeConstantsTS129_272 + group AVPCodeConstantsTS129_299{ + const integer c_charging_Information_AVP_Code := 618; //Ref: ETSI TS 129 299 Charging_Information_AVP + const integer c_primary_Event_Charging_Function_Name_AVP_Code := 619; //Ref: ETSI TS 129 299 Primary_Event_Charging_Function_Name_AVP + const integer c_secondary_Event_Charging_Function_Name_AVP_Code := 620; //Ref: ETSI TS 129 299 Secondary_Event_Charging_Function_Name_AVP + const integer c_primary_Charging_Collection_Function_Name_AVP_Code := 621; //Ref: ETSI TS 129 299 Primary_Charging_Collection_Function_Name_AVP + const integer c_secondary_Charging_Collection_Function_Name_AVP_Code := 622; //Ref: ETSI TS 129 299 Secondary_Charging_Collection_Function_Name_AVP + + } // End of group AVPCodeConstantsTS129_299 + group AVPCodeConstantsTS132_299 { + + const integer c_accounting_Input_Octets_AVP_Code := 363; //Ref ETSI TS 132 299 Accounting-Input-Octets + const integer c_accounting_Output_Octets_AVP_Code := 364; //Ref ETSI TS 132 299 Accounting-Output-Octets + const integer c_event_Type_AVP_Code := 823; //Ref ETSI TS 132 299 Event_Type_AVP + const integer c_event_AVP_Code := 825; //Ref ETSI TS 132 299 Event_AVP + const integer c_content_Type_AVP_Code := 826; //Ref ETSI TS 132 299 Content_Type_AVP + const integer c_content_Length_AVP_Code := 827; //Ref ETSI TS 132 299 Content_Length_AVP + const integer c_content_Disposition_AVP_Code := 828; //Ref ETSI TS 132 299 Content_Disposition_AVP + const integer c_role_Of_Node_AVP_Code := 829; //Ref ETSI TS 132 299 Role_Of_Node_AVP + const integer c_user_Session_Id_AVP_Code := 830; //Ref ETSI TS 132 299 User_Session_Id_AVP + const integer c_calling_Party_Address_AVP_Code := 831; //Ref ETSI TS 132 299 Calling_Party_Address_AVP + const integer c_called_Party_Address_AVP_Code := 832; //Ref ETSI TS 132 299 Called_Party_Address_AVP + const integer c_time_Stamps_AVP_Code := 833; //Ref ETSI TS 132 299 Time_Stamps_AVP + const integer c_sip_Request_Timestamp_AVP_Code := 834; //Ref ETSI TS 132 299 SIP_Request_Timestamp_AVP + const integer c_sip_Response_Timestamp_AVP_Code := 835; //Ref ETSI TS 132 299 SIP_Response_Timestamp_AVP + const integer c_application_Server_AVP_Code := 836; //Ref ETSI TS 132 299 Application_Server_AVP + const integer c_application_provided_Called_Party_Address_AVP_Code := 837; //Ref ETSI TS 132 299 Application_provided_Called_Party_Address_AVP + const integer c_inter_Operator_Identifier_AVP_Code := 838; //Ref ETSI TS 132 299 Inter_Operator_Identifier_AVP + const integer c_originating_IOI_AVP_Code := 839; //Ref ETSI TS 132 299 Originating_IOI_AVP + const integer c_terminating_IOI_AVP_Code := 840; //Ref ETSI TS 132 299 Terminating_IOI_AVP + const integer c_ims_Charging_Identifier_AVP_Code := 841; //Ref ETSI TS 132 299 IMS_Charging_Identifier_AVP + const integer c_sdp_Session_Description_AVP_Code := 842; //Ref ETSI TS 132 299 SDP_Session_Description_AVP + const integer c_sdp_Media_Component_AVP_Code := 843; //Ref ETSI TS 132 299 SDP_Media_Component_AVP + const integer c_sdp_Media_Name_AVP_Code := 844; //Ref ETSI TS 132 299 SDP_Media_Name_AVP + const integer c_sdp_Media_Description_AVP_Code := 845; //Ref ETSI TS 132 299 SDP_Media_Description_AVP + const integer c_cg_Address_AVP_Code := 846; //Ref ETSI TS 132 299 CG_Address_AVP + const integer c_ggsn_Address_AVP_Code := 847; //Ref ETSI TS 132 299 GGSN_Address_AVP + const integer c_application_Server_Information_AVP_Code := 850; //Ref ETSI TS 132 299 Application_Server_Information_AVP + const integer c_trunk_Group_ID_AVP_Code := 851; //Ref ETSI TS 132 299 Trunk_Group_ID_AVP_Code + const integer c_incoming_Trunk_Group_ID_AVP_Code := 852; //Ref ETSI TS 132 299 Incoming_Trunk_Group_ID_AVP + const integer c_outgoing_Trunk_Group_ID_AVP_Code := 853; //Ref ETSI TS 132 299 Outgoing_Trunk_Group_ID_AVP + const integer c_bearer_Service_AVP_Code := 854; //Ref ETSI TS 132 299 Bearer_Service_AVP + const integer c_service_Id_AVP_Code := 855; //Ref ETSI TS 132 299 Service_Id_AVP + const integer c_associated_URI_AVP_Code := 856; //Ref ETSI TS 132 299 Associated_URI_AVP + const integer c_cause_Code_AVP_Code := 861; //Ref ETSI TS 132 299 Cause_Code_AVP + const integer c_node_Functionality_AVP_Code := 862; //Ref ETSI TS 132 299 Node_Functionality_AVP + const integer c_service_Specific_Data_AVP_Code := 863; //Ref ETSI TS 132 299 Service_Specific_Data_AVP + const integer c_originator_AVP_Code := 864; //Ref ETSI TS 132 299 Originator_AVP + const integer c_ps_Furnish_Charging_Information_AVP_Code := 865; //Ref ETSI TS 132 299 PS_Furnish_Charging_Information_AVP_Code + const integer c_ps_Free_Format_Data_AVP_Code := 866; //Ref ETSI TS 132 299 PS_Free_Format_Data_AVP + const integer c_ps_Append_Free_Format_Data_AVP_Code := 867; //Ref ETSI TS 132 299 PS_Append_Free_Format_Data_AVP + const integer c_time_Quota_Threshold_AVP_Code := 868; //Ref ETSI TS 132 299 Time_Quota_Threshold_AVP + const integer c_volume_Quota_Threshold_AVP_Code := 869; //Ref ETSI TS 132 299 Volume_Quota_Threshold_AVP + const integer c_trigger_Type_AVP_Code := 870; //Ref ETSI TS 132 299 Trigger_Type_AVP + const integer c_quota_Holding_Time_AVP_Code := 871; //Ref ETSI TS 132 299 Quota_Holding_Time_AVP + const integer c_reporting_Reason_AVP_Code := 872; //Ref ETSI TS 132 299 Reporting_Reason_AVP + const integer c_service_Information_AVP_Code := 873; //Ref ETSI TS 132 299 Service_Information_AVP + const integer c_ps_Information_AVP_Code := 874; //Ref ETSI TS 132 299 PS_Information_AVP + const integer c_wlan_Information_AVP_Code := 875; //Ref ETSI TS 132 299 WLAN_Information_AVP + const integer c_ims_Information_AVP_Code := 876; //Ref ETSI TS 132 299 IMS_Information_AVP + const integer c_quota_Consumption_Time_AVP_Code := 881; //Ref ETSI TS 132 299 Quota_Consumption_Time_AVP + const integer c_media_Initiator_Flag_AVP_Code := 882; //Ref ETSI TS 132 299 Media_Initiator_Flag_AVP + const integer c_expires_AVP_Code := 888; //Ref ETSI TS 132 299 Expires_AVP + const integer c_message_Body_AVP_Code := 889; //Ref ETSI TS 132 299 Message_Body_AVP + const integer c_wag_Address_AVP_Code := 890; //Ref ETSI TS 132 299 WAG_Address_AVP + const integer c_wag_PLMN_Ids_AVP_Code := 891; //Ref ETSI TS 132 299 WAG_Address_AVP + const integer c_wlan_Radio_Container_AVP_Code := 892; //Ref ETSI TS 132 299 WLAN_Radio_Container + const integer c_wlan_Technology_AVP_Code := 893; //Ref ETSI TS 132 299 WLAN_Technology_AVP + const integer c_wlan_UE_Local_IPAddress_AVP_Code := 894; //Ref ETSI TS 132 299 WLAN_UE_Local_IPAddress_AVP + const integer c_pdg_Address_AVP_Code := 895; //Ref ETSI TS 132 299 PDG_Address_AVP + const integer c_pdg_Charging_Id_AVP_Code := 896; //Ref ETSI TS 132 299 PDG_Charging_Id_AVP + + const integer c_unit_Quota_Threshold_AVP_Code := 1226; //Ref ETSI TS 132 299 Unit_Quota_Threshold_AVP + const integer c_sgsn_Address_AVP_Code := 1228; //Ref ETSI TS 132 299 SGSN_Address_AVP + const integer c_wlan_Session_Id_AVP_Code := 1246; //Ref ETSI TS 132 299 WLAN_Session_Id_AVP + const integer c_pdp_Context_Type_AVP_Code := 1247; //Ref ETSI TS 132 299 PDP_Context_Type_AVP + const integer c_called_Asserted_Identity_AVP_Code := 1250; //Ref ETSI TS 132 299 Called_Asserted_Identity_AVP + const integer c_requested_Party_Address_AVP_Code := 1251; //Ref ETSI TS 132 299 Requested_Party_Address_AVP + const integer c_service_Generic_Information_AVP_Code := 1256; //Ref ETSI TS 132 299 Service_Generic_Information_AVP + const integer c_service_Specific_Type_AVP_Code := 1257; //Ref ETSI TS 132 299 Service_Specific_Type_AVP + const integer c_access_Network_Information_AVP_Code := 1263; //Ref ETSI TS 132 299 Access_Network_Information_AVP + const integer c_trigger_AVP_Code := 1264; //Ref ETSI TS 132 299 Trigger_AVP + const integer c_base_Time_Interval_AVP_Code := 1265; //Ref ETSI TS 132 299 Base_Time_Interval_AVP + const integer c_envelope_End_Time_AVP_Code := 1267; //Ref ETSI TS 132 299 Envelope_End_Time_AVP + const integer c_envelope_AVP_Code := 1266; //Ref ETSI TS 132 299 Envelope_AVP + const integer c_envelope_Start_Time_AVP_Code := 1269; //Ref ETSI TS 132 299 Envelope_Start_Time_AVP + const integer c_envelope_Reporting_AVP_Code := 1268; //Ref ETSI TS 132 299 Envelope_Reporting_AVP + const integer c_time_Quota_Mechanism_AVP_Code := 1270; //Ref ETSI TS 132 299 Time_Quota_Mechanism_AVP + const integer c_time_Quota_Type_AVP_Code := 1271; //Ref ETSI TS 132 299 Time_Quota_Type_AVP + const integer c_early_Media_Description_AVP_Code := 1272; //Ref ETSI TS 132 299 Early_Media_Description_AVP + const integer c_sdp_TimeStamps_AVP_Code := 1273; //Ref ETSI TS 132 299 SDP_TimeStamps_AVP + const integer c_sdp_Offer_Timestamp_AVP_Code := 1274; //Ref ETSI TS 132 299 SDP_Offer_Timestamp_AVP + const integer c_sdp_Answer_Timestamp_AVP_Code := 1275; //Ref ETSI TS 132 299 SDP_Answer_Timestamp_AVP + const integer c_af_Correlation_Information_AVP_Code := 1276; //Ref ETSI TS 132 299 AF_Correlation_Information_AVP + const integer c_offline_Charging_AVP_Code := 1278; //Ref ETSI TS 132 299 Offline_Charging_AVP + const integer c_alternate_Charged_Party_Address_AVP_Code := 1280; //Ref ETSI TS 132 299 Alternate_Charged_Party_Address_AVP + const integer c_ims_Communication_Service_Identifier_AVP_Code := 1281; //Ref ETSI TS 132 299 IMS_Communication_Service_Identifier_AVP + const integer c_media_Initiator_Party_AVP_Code := 1288; //Ref ETSI TS 132 299 Media_Initiator_Party_AVP + const integer c_cSG_Id_AVP_Code := 1437; //Ref: ETSI TS 132 299 CSG_Id_AVP + + const integer c_low_Balance_Indication_AVP_Code := 2020; //Ref ETSI TS 132 299 Low_Balance_Indication_AVP + const integer c_remaining_Balance_AVP_Code := 2021; //Ref ETSI TS 132 299 Remaining_Balance_AVP + const integer c_refund_Information_AVP_Code := 2022; //Ref ETSI TS 132 299 Refund_Information_AVP + const integer c_carrier_Select_Routing_Information_AVP_Code := 2023; //Ref ETSI TS 132 299 Carrier_Select_Routing_Information_AVP + const integer c_number_Portability_Routing_Information_AVP_Code := 2024; //Ref ETSI TS 132 299 Number_Portability_Routing_Information_AVP + const integer c_node_Id_AVP_Code := 2034; //Ref ETSI TS 132 299 Node_Id_AVP + const integer c_sdp_Type_AVP_Code := 2036; //Ref ETSI TS 132 299 SDP_Type_AVP + const integer c_change_Condition_AVP_Code := 2037; //Ref ETSI TS 132 299 Change_Condition_AVP + const integer c_change_Time_AVP_Code := 2038; //Ref ETSI TS 132 299 Change_Time_AVP + const integer c_diagnostics_AVP_Code := 2039; //Ref ETSI TS 132 299 Diagnostics_AVP + const integer c_service_Data_Container_AVP_Code := 2040; //Ref ETSI TS 132 299 Service_Data_Container_AVP + const integer c_start_Time_AVP_Code := 2041; //Ref ETSI TS 132 299 Start_Time_AVP + const integer c_stop_Time_AVP_Code := 2042; //Ref ETSI TS 132 299 Stop_Time_AVP + const integer c_time_First_Usage_AVP_Code := 2043; //Ref ETSI TS 132 299 Time_First_Usage_AVP + const integer c_time_Last_Usage_AVP_Code := 2044; //Ref ETSI TS 132 299 Time_Last_Usage_AVP + const integer c_time_Usage_Usage_AVP_Code := 2045; //Ref ETSI TS 132 299 Time_Usage_AVP + const integer c_traffic_Data_Volumes_AVP_Code := 2046; //Ref ETSI TS 132 299 Traffic_Data_Volumes_AVP + const integer c_serving_Node_Type_AVP_Code := 2047; //Ref ETSI TS 132 299 Serving_Node_Type_AVP + const integer c_pdn_Connection_Charging_ID_AVP_Code := 2050; //Ref ETSI TS 132 299 PDN_Connection_Charging_ID_AVP + const integer c_dynamic_Address_Flag_AVP_Code := 2051; //Ref ETSI TS 132 299 + const integer c_accumulated_Cost_AVP_Code := 2052; //Ref ETSI TS 132 299 Accumulated_Cost_AVP + const integer c_aoc_Cost_Information_AVP_Code := 2053; //Ref ETSI TS 132 299 AoC_Cost_Information_AVP + const integer c_aoc_Information_AVP_Code := 2054; //Ref ETSI TS 132 299 AoC_Information_AVP + const integer c_aoc_Request_Type_AVP_Code := 2055; //Ref ETSI TS 132 299 AoC_Request_Type_AVP + const integer c_current_Tariff_AVP_Code := 2056; //Ref ETSI TS 132 299 Current_Tariff_AVP + const integer c_next_Tariff_AVP_Code := 2057; //Ref ETSI TS 132 299 Next_Tariff_AVP + const integer c_rate_Element_AVP_Code := 2058; //Ref ETSI TS 132 299 Rate_Element_AVP + const integer c_scale_Factor_AVP_Code := 2059; //Ref ETSI TS 132 299 Scale_Factor_AVP + const integer c_tariff_Information_AVP_Code := 2060; //Ref ETSI TS 132 299 Tariff_Information_AVP + const integer c_incremental_Cost_AVP_Code := 2062; //Ref ETSI TS 132 299 Incremental_Cost_AVP + const integer c_local_Sequence_Number_AVP_Code := 2063; //Ref ETSI TS 132 299 Local_Sequence_Number_AVP_Code + const integer c_unit_Cost_AVP_Code := 2061; //Ref ETSI TS 132 299 Unit_Cost_AVP + const integer c_sgw_Change_AVP_Code := 2065; //Ref ETSI TS 132 299 SGW_Change_AVP + const integer c_charging_Characteristics_Selection_Mode_AVP_Code:= 2066; //Ref ETSI TS 132 299 Charging_Characteristics_Selection_Mode_AVP + const integer c_sgw_Address_AVP_Code := 2067; //Ref ETSI TS 132 299 SGW_Address_AVP + const integer c_dynamic_Address_Flag_Extension_AVP_Code := 2068; //Ref ETSI TS 132 299 Dynamic_Address_Flag_Extension_AVP + + const integer c_application_Server_ID_AVP_Code := 2101; //Ref ETSI TS 132 299 Application_Server_ID_AVP + const integer c_application_Service_Type_AVP_Code := 2102; //Ref ETSI TS 132 299 Application_Service_Type_AVP + const integer c_application_Session_ID_AVP_Code := 2103; //Ref ETSI TS 132 299 Application_Session_ID_AVP + const integer c_delivery_Status_AVP_Code := 2104; //Ref ETSI TS 132 299 Delivery_Status_AVP + + const integer c_sip_Request_Timestamp_Fraction_AVP_Code := 2301;//Ref: ETSI TS 132 299 SIP_Request_Timestamp_Fraction_AVP + const integer c_sip_Response_Timestamp_Fraction_AVP_Code := 2302;//Ref: ETSI TS 132 299 SIP_Response_Timestamp_Fraction_AVP + const integer c_online_Charging_Flag_AVP_Code := 2303;//Ref: ETSI TS 132 299 Online_Charging_Flag_AVP + const integer c_real_Time_Tariff_Information_AVP_Code:= 2305;//Ref: ETSI TS 132 299 Real_Time_Tariff_Information_AVP + const integer c_imsi_Unauthenticated_Flag_AVP_Code := 2308;//Ref: ETSI TS 132 299 IMSI_Unauthenticated_Flag_AVP + const integer c_account_Expiration_AVP_Code := 2309;//Ref: ETSI TS 132 299 Account_Expiration_AVP + const integer c_aoc_Format_AVP_Code := 2310;//Ref: ETSI TS 132 299 AoC_Format_AVP + const integer c_aoc_Service_AVP_Code := 2311;//Ref: ETSI TS 132 299 AoC_Service_AVP + const integer c_aoc_Service_Obligatory_Type_AVP_Code := 2312;//Ref: ETSI TS 132 299 AoC_Service_Obligatory_Type_AVP + const integer c_aoc_Service_Type_AVP_Code := 2313;//Ref: ETSI TS 132 299 AoC_Service_Type_AVP + const integer c_aoc_Subscription_Information_AVP_Code:= 2314;//Ref: ETSI TS 132 299 AoC_Subscription_Information_AVP + const integer c_preferred_AoC_Currency_AVP_Code := 2315;//Ref: ETSI TS 132 299 Preferred_AoC_Currency_AVP + const integer c_cSG_Access_Mode_AVP_Code := 2317; //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP + const integer c_cSG_Membership_Indication_AVP_Code := 2318;//Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + const integer c_user_CSG_Information_AVP_Code := 2319; //Ref: ETSI TS 132 299 User_CSG_Information_AVP + const integer c_initial_IMS_Charging_Identifier_AVP_Code := 2321; //Ref: ETSI TS 132 299 Initial_IMS_Charging_Identifier_AVP + const integer c_ims_Emergency_Indicator_AVP_Code := 2322; //Ref: ETSI TS 132 299 IMS_Emergency_Indicator_AVP + const integer c_tariff_XML_AVP_Code := 2326; //Ref: ETSI TS 132 299 Tariff_XML_AVP + const integer c_outgoing_Session_Id_AVP_Code := 2330; //Ref: ETSI TS 132 299 Outgoing_Session_Id_AVP + const integer c_low_Priority_Indicator_AVP_Code := 2602;//Ref: ETSI TS 132 299 Low_Priority_Indicator + const integer c_ip_Realm_Default_Indication_AVP_Code:= 2603;//Ref: ETSI TS 132 299 IP_Realm_Default_Indication_AVP + const integer c_local_GW_Inserted_Indication_AVP_Code:= 2604;//Ref: ETSI TS 132 299 Local_GW_Inserted_Indication_AVP + const integer c_transcoder_Inserted_Indication_AVP_Code:= 2605;//Ref: ETSI TS 132 299 Transcoder_Inserted_Indication_AVP + const integer c_pdp_Address_Prefix_Length_AVP_Code := 2606;//Ref: ETSI TS 132 299 PDP_Address_Prefix_Length_AVP + + } // End of group AVPCodeConstantsTS132_299 + group AVPCodeConstantsX_S0057_1{ + + const integer c_threeGPP2_BSID_AVP_Code := 5535; //Ref: X.S0057-1 ThreeGPP2_BSID_AVP + + } // End of group AVPCodeConstantsX_S0057_1 + group AVPCodeConstantsTS283_034{ + + const integer c_logical_Access_ID_AVP_Code := 302; //Ref: TS283_034 ThreeGPP2_BSID_AVP + const integer c_physical_Access_ID_AVP_Code := 313; //Ref: TS283_034 Physical_Access_ID_AVP + + } // End of group AVPCodeConstantsTS283_034 + + } // End of group AVPCodeConstants + } + +} // End of group BasicTypes + + group HeaderAndBodyTypes + { + group HeaderTypes{ + /* This group contains the type definitions of the messages. */ + + + // Diameter Header Record. + type record DiameterHeader { + UInt8 version, + UInt24 msglen, //message length + Command_Flags cmdflags, //command flags + Command_Code cmdcode, //command code + UInt32 applid, //application id + UInt32 hopid, //hop_by_hop_id previous optional + UInt32 endid //end_to_end_id previous optional + } + + } // End of group HeaderTypes + + group MessageTypes{ + + /* Ref: RFC3588 p.3 */ + type record Command_Flags{ + Bit1 r_bit, //Request + Bit1 p_bit, //Proxiable + Bit1 e_bit, //Error + Bit1 t_bit, //Potentialy re-transmited message + Bit4 reserved_bits + } + with { + variant (r_bit) "intTag='r_bit'" + } + + /* Ref: RFC3588 p.3.1 */ + type enumerated Command_Code{ + CER_E, // Capabilities-Exchange-Request CER (257) + CEA_E, // Capabilities-Exchange-Answer CEA (257) + RAR_E, // Re-Auth-Request RAR (258) + RAA_E, // Re-Auth-Answer RAA (258) + /**/ + ACR_E, // Accounting-Request ACR(271) + ACA_E, // Accounting-Answer ACA (271) + /**/ + ASR_E, // Abort-Session-Request ASR (274) + ASA_E, // Abort-Sesion-Answer ASA (274) + STR_E, // Session-Termination-Request STR (275) + STA_E, // Session-Termination-Answer STA (275) + /**/ + DWR_E, // Device-Watchdog-Request DWR (280) + DWA_E, // Device-Watchdog-Answer DWA (280) + DPR_E, // Disconnect-Peer-Requst DPR (282) + DPA_E, // Disconnect-Peer-Answer DPA (282) + + /* Codes on Cx */ + UAR_E, // User-Authorization-Request UAR (283 in RFC4740 or 300 in TS 129 229) + UAA_E, // User-Authorizdatio-Response UAA (283 in RFC4740 or 300 in TS 129 229) + SAR_E, // Server-Assignment-Request SAR (284 in RFC4740 or 301 in TS 129 229) + SAA_E, // Server-Assignment-Answer SAA (284 in RFC4740 or 301 in TS 129 229) + LIR_E, // Location-Info-Request LIR (285 in RFC4740 or 302 in TS 129 229) + LIA_E, // Location-Info-Answer LIA (285 in RFC4740 or 302 in TS 129 229) + MAR_E, // Multimedia-Auth-Request MAR (286 in RFC4740 or 303 in TS 129 229) + MAA_E, // Multimedia-Auth-Answer MAA (286 in RFC4740 or 303 in TS 129 229) + RTR_E, // Registration-Termination-Request RTR (287 in RFC4740 or 304 in TS 129 229) + RTA_E, // Registration-Termination-Answer RTA (287 in RFC4740 or 304 in TS 129 229) + PPR_E, // Push-Profile-Request PPR (288 in RFC4740 or 305 in TS 129 229) + PPA_E, // Push-Profile-Answer PPA (288 in RFC4740 or 305 in TS 129 229) + + /* Codes on Sh/Dh interface */ + UDR_E, // UDR User-Data-Request AS->HSS UDR (306) + UDA_E, // UDA User-Data-Answer HSS->AS UDA (306) + PUR_E, // PUR Profile-Update-Request AS->HSS PUR (307) + PUA_E, // PUA Profile-Update-Answer HSS->AS PUA (307) + SNR_E, // SNR Subscribe-Notifications-Request AS->HSS SNR (308) + SNA_E, // SNA Subscribe-Notifications-Answer HSS->AS SNA (308) + PNR_E, // PNR Profile-Notification-Request HSS->AS PNR (309) + PNA_E, // PNA Profile-Notification-Answer AS->HSS PNA (309) + + /* Codes on Rx interface */ + AAR_E, // AAR Auth-Accounting-Request AAR (265) + AAA_E, // AAA Auth-Accounting-Request AAA (265) + + /* Codes on Gx interface - RFC4006 and TS 129 212 */ + CCR_E, // CCR Credit-Control-Request CCR (272) + CCA_E, // CCA Credit-Control-Request CCA (272) + + /* Codes on S6a interface - TS 129 272 */ + ULR_E, // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3 + ULA_E, // Update-Location-Answer ULA (316)- Ref: TS 129 272 7.2.4 + CLR_E, // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7 + CLA_E, // Cancel-Location-Answer CLA (317)- Ref: TS 129 272 7.2.8 + AIR_E, // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5 + AIA_E, // Authentication-Information-Answer AIA (318)- Ref: TS 129 272 7.2.6 + IDR_E, // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9 + IDA_E, // Insert-Subscriber-Data-Answer IDA (319)- Ref: TS 129 272 7.2.10 + DSR_E, // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11 + DSA_E, // Delete-Subscriber-Data-Answer DSA (320)- Ref: TS 129 272 7.2.12 + PUER_E, // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13 + PUEA_E, // Purge-UE-Answer PUA (321)- Ref: TS 129 272 7.2.14 + RSR_E, // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15 + RSA_E, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 + NOR_E, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 + NOA_E // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 + } + with { + variant "length=24;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCommandCode();decode=CodecHelper.decodeCommandCode()" + } + //RFC3588, chapter 3. Diameter Header: The Command-Code field is three octets + + + type union DIAMETER_MSG { + CER_MSG cER_MSG, + CEA_MSG cEA_MSG, + RAR_MSG rAR_MSG, + RAA_MSG rAA_MSG, + ACR_MSG aCR_MSG, + ACA_MSG aCA_MSG, + ASR_MSG aSR_MSG, + ASA_MSG aSA_MSG, + STR_MSG sTR_MSG, + STA_MSG sTA_MSG, + DWR_MSG dWR_MSG, + DWA_MSG dWA_MSG, + DPR_MSG dPR_MSG, + DPA_MSG dPA_MSG, + //RFC4740 + UAR_MSG uAR_MSG, + UAA_MSG uAA_MSG, + SAR_MSG sAR_MSG, + SAA_MSG sAA_MSG, + LIR_MSG lIR_MSG, + LIA_MSG lIA_MSG, + MAR_MSG mAR_MSG, + MAA_MSG mAA_MSG, + RTR_MSG rTR_MSG, + RTA_MSG rTA_MSG, + PPR_MSG pPR_MSG, + PPA_MSG pPA_MSG, + //Sh interface + UDR_MSG uDR_MSG, + UDA_MSG uDA_MSG, + PUR_MSG pUR_MSG, + PUA_MSG pUA_MSG, + SNR_MSG sNR_MSG, + SNA_MSG sNA_MSG, + PNR_MSG pNR_MSG, + PNA_MSG pNA_MSG, + //RFC4006 and TS 129 212 + CCR_MSG cCR_MSG, + CCA_MSG cCA_MSG, + //Rx interface + AAR_MSG aAR_MSG, + AAA_MSG aAA_MSG, + // S6a interface + ULR_MSG uLR_MSG, + ULA_MSG uLA_MSG, + AIR_MSG aIR_MSG, + AIA_MSG aIA_MSG, + CLR_MSG cLR_MSG, + CLA_MSG cLA_MSG, + IDR_MSG iDR_MSG, + IDA_MSG iDA_MSG, + DSR_MSG dSR_MSG, + DSA_MSG dSA_MSG, + + PUER_MSG pUER_MSG, // Purge-UE-Request: PUR (321)- Ref: TS 129 272 7.2.13 + PUEA_MSG pUEA_MSG, // Purge-UE-Answer: PUA (321)- Ref: TS 129 272 7.2.14 + + RSR_MSG rSR_MSG, + RSA_MSG rSA_MSG, + NOR_MSG nOR_MSG, + NOA_MSG nOA_MSG, + + UNKNOWN_MSG uNKNOWN_MSG + } + + /* ***** Diameter Message types ***** */ + group RFC3588{ + + type record UNKNOWN_MSG { + DiameterHeader header, + set of AVP_Type aVP_Type optional //changed + } + with { + variant "present=!bytes(4, 257, 258)" + variant "present=!bytes(4, 271, 275)" + variant "present=!bytes(4, 280)" + variant "present=!bytes(4, 282, 288)" + variant "present=!bytes(4, 306, 309)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CER_MSG{ + //Ref: RFC3588 5.3.1. Capabilities-Exchange-Request + DiameterHeader header,// ::= < Diameter Header: 257, REQ > + CER_Body_AVP cER_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CER), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit set + } + + type set CER_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + set length (1..infinity) of Host_IP_Address_AVP host_IP_Address, + Vendor_Id_AVP vendor_Id, + Product_Name_AVP product_Name,//required + Origin_State_Id_AVP origin_State_Id optional, //set of removed due to RFC3588 + set of Supported_Vendor_Id_AVP supported_Vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Inband_Security_Id_AVP inband_Security_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional, + set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Firmware_Revision_AVP firmware_Revision optional, + set of AVP_Type aVP_Type optional + } + with { + variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists + variant (origin_State_Id) "fieldPresent=bytes(4, 278)" //presence check for inline defined optional lists + variant (supported_Vendor_Id) "fieldPresent=bytes(4, 265)" //presence check for inline defined optional lists + variant (auth_Application_Id) "fieldPresent=bytes(4, 258)" //presence check for inline defined optional lists + variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" //presence check for inline defined optional lists + variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" //presence check for inline defined optional lists + variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" //presence check for inline defined optional lists + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CEA_MSG{ + //Ref: RFC3588 5.3.2. Capabilities-Exchange-Answer + DiameterHeader header,// ::= < Diameter Header: 257 > + CEA_Body_AVP cEA_Body + } with { + variant "present=bits(32,1,0) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CEA), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit clear + } + + type set CEA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set length (1..infinity) of Host_IP_Address_AVP host_IP_Address, + Vendor_Id_AVP vendor_Id, + Product_Name_AVP product_Name,//required + Origin_State_Id_AVP origin_State_Id optional, + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + set of Supported_Vendor_Id_AVP supported_Vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Inband_Security_Id_AVP inband_Security_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional, + set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Firmware_Revision_AVP firmware_Revision optional, + set of AVP_Type aVP_Type optional + } + with { + variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists + variant (failed) "fieldPresent=bytes(4, 278)" + variant (supported_Vendor_Id) "fieldPresent=bytes(4, 279)" + variant (auth_Application_Id) "fieldPresent=bytes(4, 265)" + variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" + variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" + variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RAR_MSG{ + //Ref: RFC3588 8.3.1. Re-Auth-Request + DiameterHeader header,// ::= < Diameter Header: 258, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 + RAR_Body_AVP rAR_Body + } with { + variant "present=bits(32,1,1) && bytes(5,3, 258)" //The RAR, indicated by the Command-Code set to 258 and the Command Flags' 'R' bit set + } + + type set RAR_Body_AVP { + Origin_Host_AVP origin_Host,//required //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Origin_Realm_AVP origin_Realm, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Destination_Realm_AVP destination_Realm, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Destination_Host_AVP destination_Host, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Specific_Action_AVP specific_Action optional, // TS 129 214 required + Re_Auth_Request_Type_AVP re_Auth_Request_Type optional, //RFC3588req & TS 129 214NOT present & TS 129 212req & TS129 215 req + User_Name_AVP user_Name optional, //RFC3588 + set of Access_Network_Charging_Identifier_AVP acc_nc_ident optional, // TS 129 214 + Access_Network_Charging_Address_AVP acc_nc_addr optional, // TS 129 214 + set of Flows_AVP flows optional, // TS 129 214 + set of Subscription_Id_AVP subscription_Id optional, // TS 129 214 + Abort_Cause_AVP abort_Cause optional, // TS 129 214 + IP_CAN_Type_AVP ip_Can optional, // TS 129 214 + RAT_Type_AVP rat_Type optional, // TS 129 214 + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional,// TS 129 214 + Origin_State_Id_AVP origin_State_Id optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Class_AVP class optional, // TS 129 214 + Session_Release_Cause_AVP session_Release_Cause optional, // TS 129 212 & TS129 215 + set of Event_Trigger_AVP event_Trigger optional, // TS 129 212 & TS129 215 + Event_Report_Indication_AVP event_Report_Indication optional, // TS 129 212 + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, // TS 129 212 + set of Charging_Rule_Install_AVP charging_Rule_Install optional, // TS 129 212 + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, // TS 129 212 + set of QoS_Information_AVP qoS_Information optional, // TS 129 212 & TS129 215 + Revalidation_Time_AVP revalidation_Time optional, // TS 129 212 + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, // TS 129 212 + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, //S9 (TS129 215) only + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, //S9 (TS129 215) only + set of Subses_Decision_Info_AVP subsession_Decision_Info optional, //S9 (TS129 215) only + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //S9 (TS129 215) only + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + G_S_U_Pool_Identifier_AVP g_s_u_Pool_Identifier optional, //TS132 299 only + Service_Identifier_AVP service_Identifier optional, //TS132 299 only + Rating_Group_AVP rating_Group optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + } + with { + variant (acc_nc_ident) "fieldPresent=bytes(4, 502)" + variant (flows) "fieldPresent=bytes(4, 510)" + variant (subscription_Id) "fieldPresent=bytes(4, 443)" + variant (class) "fieldPresent=bytes(4, 25)" + variant (event_Trigger) "fieldPresent=bytes(4, 1006)" + variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" + variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" + variant (qoS_Information) "fieldPresent=bytes(4, 1016)" + variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RAA_MSG{ + //Ref: RFC3588 8.3.2. Re-Auth-Answer + DiameterHeader header,// ::= < Diameter Header: 258, PXY > + Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 + RAA_Body_AVP rAA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 258)" + } + + type set RAA_Body_AVP { + Result_Code_AVP result_Code optional, //RFC3588req & TS 129 214opt & TS 129 212opt & TS129 215opt + Origin_Host_AVP origin_Host, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//required //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Experimental_Result_AVP experimental_Result optional, //TS 129 214 & TS 129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC3588 + set of Media_Component_Description_AVP media_Component_Description optional,//TS 129 214 + Service_URN_AVP service_URN optional, //TS 129 214 + Origin_State_Id_AVP origin_State_Id optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Class_AVP class optional, //TS 129 214 + IP_CAN_Type_AVP iP_CAN_Type optional, //TS 129 212 & TS129 215 + RAT_Type_AVP rat_Type optional, //TS 129 212 & TS129 215 + record length (0..2) of AN_GW_Address_AVP aN_GW_Address optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, //TS 129 212 & TS129 215 + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional,//TS 129 212 & TS129 215 + RAI_AVP rAI optional, //TS 129 212 & TS129 215 + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional,//TS 129 212 & TS129 215 + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, //TS 129 212 & TS129 215 + set of Charging_Rule_Report_AVP charging_Rule_Report optional, //TS 129 212 + Error_Message_AVP error_Message optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + Error_Reporting_Host_AVP error_Reporting_Host optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Failed_AVP failed optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of Redirect_Host_AVP redirect_Host optional, //RFC3588 & TS 129 214 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC3588 & TS 129 214 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC3588 & TS 129 214 + Framed_IP_Address_AVP framed_IP_Address optional, //S9 (TS129 215) only + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, //S9 (TS129 215) only + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, //S9 (TS129 215) only + QoS_Information_AVP qoS_Information optional, //S9 (TS129 215) only + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, //S9 (TS129 215) only + set of Subses_Enforcement_Info_AVP subsesion_Enforcement_Info optional, //S9 (TS129 215) only + User_CSG_Information_AVP user_CSG_Information optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 + } + with { + variant (media_Component_Description) "fieldPresent=bytes(4, 517)" + variant (class) "fieldPresent=bytes(4, 25)" + variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" + variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (redirect_Host) "fieldPresent=bytes(4, 292)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ACR_MSG{ + //Ref: RFC3588 9.7.1. Accounting-Request + DiameterHeader header,// ::= < Diameter Header: 271, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + ACR_Body_AVP aCR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 271)" + } + + type set ACR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Accounting_Record_Type_AVP accounting_Record_Type, + Accounting_Record_Number_AVP accounting_Record_Number,//required + Acct_Application_Id_AVP acct_Application_Id optional,//optional + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + User_Name_AVP user_Name optional, + set of Supported_Features_AVP supported_Features optional, //specified in RFC4006 + Accounting_Sub_Session_Id_AVP accounting_Sub_Session_Id optional, + Acct_Session_Id_AVP acct_Session_Id optional, + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, + Acct_Interim_Interval_AVP acct_Interim_Interval optional, + Accounting_Realtime_Required_AVP accounting_Realtime_Required optional, + Origin_State_Id_AVP origin_State_Id optional, + Event_Timestamp_AVP event_Timestamp optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + Service_Context_Id_AVP service_Context_Id optional, //TS132 299 only + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ACA_MSG{ + //Ref: RFC3588 9.7.2. Accounting-Answer + DiameterHeader header ,// ::= < Diameter Header: 271, PXY > + Session_Id_AVP session_Id,//fixed pos. + ACA_Body_AVP aCA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 271)" + } + + type set ACA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Accounting_Record_Type_AVP accounting_Record_Type, + Accounting_Record_Number_AVP accounting_Record_Number,//required + Acct_Application_Id_AVP acct_Application_Id optional,//optional + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + User_Name_AVP user_Name optional, + Accounting_Sub_Session_Id_AVP accounting_Sub_Session_Id optional, + Acct_Session_Id_AVP acct_Session_Id optional, + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + Acct_Interim_Interval_AVP acct_Interim_Interval optional, + Accounting_Realtime_Required_AVP accounting_Realtime_Required optional, + Origin_State_Id_AVP origin_State_Id optional, + Event_Timestamp_AVP event_Timestamp optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ASR_MSG{ + //Ref: RFC3588 8.5.1. Abort-Session-Request + DiameterHeader header ,// ::= < Diameter Header: 274, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + ASR_Body_AVP aSR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 274)" + } + + type set ASR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host, + Auth_Application_Id_AVP auth_Application_Id, + Abort_Cause_AVP abort_cause optional,//present in ETSI TS 129 214 p.5.6.7 + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record ASA_MSG{ + //Ref: RFC3588 8.5.2. Abort-Session-Answer + DiameterHeader header,// ::= < Diameter Header: 274, PXY > + Session_Id_AVP session_Id,//fixed pos. + ASA_Body_AVP aSA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 274)" + } + + type set ASA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + set of Failed_AVP failed optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant (failed) "fieldPresent=bytes(4, 279)" + variant (redirect_Host) "fieldPresent=bytes(4, 292)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record STR_MSG{ + //Ref: RFC3588 8.4.1. Session-Termination-Request + DiameterHeader header,// ::= < Diameter Header: 275, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + STR_Body_AVP sTR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 275)" + } + + type set STR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Auth_Application_Id_AVP auth_Application_Id, + Termination_Cause_AVP termination_Cause,//requ. + User_Name_AVP user_Name optional, + Destination_Host_AVP destination_Host optional, + set of Class_AVP class optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (class) "fieldPresent=bytes(4, 25)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record STA_MSG{ + //Ref: RFC3588 8.4.2. Session-Termination-Answer + DiameterHeader header,// ::= < Diameter Header: 275, PXY > + Session_Id_AVP session_Id,//fixed pos. + STA_Body_AVP sTA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 275)" + } + + type set STA_Body_AVP { + Result_Code_AVP result_Code optional,//required + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + User_Name_AVP user_Name optional, + set of Class_AVP class optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + set of Failed_AVP failed optional, + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional,//present in ETSI TS 129 214 p.5.6.6 + Origin_State_Id_AVP origin_State_Id optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant (class) "fieldPresent=bytes(4, 25)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (redirect_Host) "fieldPresent=bytes(4, 292)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + /**/ + type record DWR_MSG{ + //Ref: RFC3588 5.5.1. Device-Watchdog-Request + DiameterHeader header,// ::= < Diameter Header: 280, REQ > + DWR_Body_AVP dWR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 280)" + } + + type set DWR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Origin_State_Id_AVP origin_State_Id optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs + } + with { + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DWA_MSG{ + //Ref: RFC3588 5.5.2. Device-Watchdog-Answer + DiameterHeader header,// ::= < Diameter Header: 280 > + DWA_Body_AVP dWA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 280)" + } + + type set DWA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm,//required + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + Origin_State_Id_AVP origin_State_Id optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs + } + with { + variant (failed) "fieldPresent=bytes(4, 279)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DPR_MSG{ + // Ref: RFC3588 5.4.1. Disconnect-Peer-Request + DiameterHeader header,// ::= < Diameter Header: 282, REQ > + DPR_Body_AVP dPR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 282)" + } + + type set DPR_Body_AVP { + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Disconnect_Cause_AVP disconnect_Cause,//requ. + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs + } + with { + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record DPA_MSG{ + //Ref: RFC3588 5.4.2. Disconnect-Peer-Answer + DiameterHeader header,// ::= < Diameter Header: 282 > + DPA_Body_AVP dPA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 282)" + } + + type set DPA_Body_AVP { + Result_Code_AVP result_Code,//required + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm,//required + Error_Message_AVP error_Message optional, + set of Failed_AVP failed optional, + set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs + } + with { + variant (failed) "fieldPresent=bytes(4, 279)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group RFC3588 + group RFC4740{ + + /* Codes on Cx_Dx */ + type record UAR_MSG{ + //Ref: TS 129 229 6.1.1. User-Authorization-Request(UAR:300) Command + //Ref: RFC4740 8.1. User-Authorization-Request(UAR:283) Command + DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > + Session_Id_AVP session_Id,//fixed pos. + UAR_Body_AVP uAR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 283)" + } + + type set UAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required only inRFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + SIP_Visited_Network_Id_AVP sIP_Visited_Network_Id optional, //required only in RFC4740 + SIP_User_Authorization_Type_AVP sIP_User_Authorization_Type optional, //required only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only in TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + Visited_Network_Identifier_AVP visited_Network_Identifier optional, //required only in TS129 229 + User_Authorization_Type_AVP user_Authorization_Type optional, //only in TS129 229 + UAR_Flags_AVP uAR_Flags optional, //only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 + set of Route_Record_AVP route_Record optional, //RFC4740 + set of AVP_Type aVP_Type optional //RFC4740 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record UAA_MSG{ + //Ref: TS 129 229 6.1.2. User-Authorization-Answer (UAA:300) Command + //Ref: RFC4740 8.2. User-Authorization-Answer (UAA:283) Command + DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > + Session_Id_AVP session_Id,//fixed pos. + UAA_Body_AVP uAA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 283)" + } + + type set UAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //required in RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //RFC4740 + SIP_Server_Capabilities_AVP sIP_Server_Capabilities optional, //RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //RFC4740 + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Server_Capabilities_AVP server_Capabilities optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SAR_MSG{ + //Ref: TS 129 229 6.1.3. Server-Assignment-Request (SAR:301) Command + //Ref: RFC4740 8.3. Server-Assignment-Request (SAR:284) Command + DiameterHeader header,// ::= < Diameter Header: 284 or 301, PXY > + Session_Id_AVP session_Id,//fixed pos. + SAR_Body_AVP sAR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 284)" + } + + type set SAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_Server_Assignment_Type_AVP sIP_Server_Assignment_Type optional, //required only in RFC4740 + SIP_User_Data_Already_Available_AVP sIP_User_Data_Already_Available optional,//required only in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + set of SIP_Supported_User_Data_Type_AVP sIP_Supported_User_Data_Type optional, //only in RFC4740 + set of SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only in TS129 229 + set of Public_Identity_AVP public_Identity optional, //only in TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only in TS129 229 + Server_Name_AVP server_Name optional, //required only in TS129 229 + Server_Assignment_Type_AVP server_Assignment_Type optional, //required only in TS129 229 + User_Data_Already_Available_AVP user_Data_Already_Available optional, //required only in TS129 229 + SCSCF_Restoration_Info_AVP sCSCF_Restoration_Info optional, //only in TS129 229 + Multiple_Registration_Indication_AVP multiple_Registration_Indication optional,//only in TS129 229 + Session_Priority_AVP session_Priority optional, //only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 + set of Route_Record_AVP route_Record optional, //RFC4740 + set of AVP_Type aVP_Type optional //RFC4740 + } + with { + variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 375)" + variant (sIP_AOR) "fieldPresent=bytes(4, 122)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SAA_MSG{ + //Ref: TS 129 229 6.1.4. Server-Assignment-Answer (SAA:301) Command + // Ref: RFC4740 8.4. Server-Assignment-Answer (SAA:284) Command + DiameterHeader header ,// ::= < Diameter Header: 284 or 301, PXY > + Session_Id_AVP session_Id,//fixed pos. + SAA_Body_AVP sAA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 284)" + } + + type set SAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + set of SIP_User_Data_AVP sIP_User_Data optional, //required only in RFC4740 + SIP_Accounting_Information_AVP sIP_Accounting_Information optional, //required only in RFC4740 + set of SIP_Supported_User_Data_Type_AVP sIP_Supported_User_Data_Type optional, //only in RFC4740 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + User_Data_AVP user_Data optional, //only TS129 229 + Charging_Information_AVP charging_Information optional, //only TS129 229 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + Loose_Route_Indication_AVP loose_Route_Indication optional, //only TS129 229 + set of SCSCF_Restoration_Info_AVP sCSCF_Restoration_Info optional, //only TS129 229 + Associated_Registered_Identities_AVP associated_Registered_Identities optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only TS129 229 + Priviledged_Sender_Indication_AVP priviledged_Sender_Indication optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (sIP_User_Data) "fieldPresent=bytes(4, 389)" //presence check for inline defined lists + variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 388)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record LIR_MSG{ + //Ref: TS 129 229 6.1.5. Location-Info-Request (LIR:302) Command + //Ref: RFC4740 8.5. Location-Info-Request (LIR:285) Command + DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > + Session_Id_AVP session_Id,//fixed pos. + LIR_Body_AVP lIR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 285)" + } + + type set LIR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required only in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + Originating_Request_AVP originating_Request optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + User_Authorization_Type_AVP user_Authorization_Type optional, //only TS129 229 + Session_Priority_AVP session_Priority optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record LIA_MSG{ + //Ref: TS 129 229 6.1.6. Location-Info-Answer (LIA:302) Command + //Ref: RFC4740 8.6. Location-Info-Answer (LIA:285) Command + DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > + Session_Id_AVP session_Id,//fixed pos. + LIA_Body_AVP lIA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 285)" + } + + type set LIA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + SIP_Server_Capabilities_AVP sIP_Server_Capabilities optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + Server_Capabilities_AVP server_Capabilities optional, //only TS129 229 + Wildcarded_Public_Identity_AVP wildcarded_Public_Identity optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record MAR_MSG{ + //Ref: TS 129 229 6.1.7. Multimedia-Auth-Request (MAR:303) Command + //Ref: RFC4740 8.7. Multimedia-Auth-Request (MAR:286) Command + DiameterHeader header ,// ::= < Diameter Header: 286 or 303, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + MAR_Body_AVP mAR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 286)" + } + + type set MAR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_AOR_AVP sIP_AOR optional, //required in RFC4740 + SIP_Method_AVP sIP_Method optional, //required in RFC4740 + Destination_Host_AVP destination_Host optional, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + SIP_Server_URI_AVP sIP_Server_URI optional, //only in RFC4740 + SIP_Number_Auth_Items_AVP sIP_Number_Auth_Items optional, //RFC4740 & required in TS129 229 + SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //required in TS129 229 + Server_Name_AVP server_Name optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + + type record MAA_MSG{ + //Ref: TS 129 229 6.1.8. Multimedia-Auth-Answer (MAA:303) Command + //Ref: RFC4740 8.8. Multimedia-Auth-Answer (MAA:286) Command + DiameterHeader header ,// ::= < Diameter Header: 286 or 303, PXY > + Session_Id_AVP session_Id,//fixed pos. + MAA_Body_AVP mAA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 286)" + } + + type set MAA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + User_Name_AVP user_Name optional, //RFC4740 & TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + Public_Identity_AVP public_Identity optional, //required only in TS129 229 + SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + SIP_Number_Auth_Items_AVP sIP_Number_Auth_Items optional, //RFC4740 & TS129 229 + set of SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //TS129 229 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (sIP_Auth_Data_Item) "fieldPresent=bytes(4, 376)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RTR_MSG{ + //Ref: TS 129 229 6.1.9. Registration-Termination-Request (RTR:304) Command + //Ref: RFC4740 8.9. Registration-Termination-Request (RTR:287) Command + DiameterHeader header ,// ::= < Diameter Header: 287 or 304, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + RTR_Body_AVP rTR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 287)" + } + + type set RTR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Host_AVP destination_Host, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + SIP_Deregistration_Reason_AVP sIP_Deregistration_Reason optional, //required only in RFC4740 + User_Name_AVP user_Name optional, //RFC4740 & required in TS129 229 + set of SIP_AOR_AVP sIP_AOR optional, //only in RFC4740 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Public_Identity_AVP public_Identity optional, //only TS129 229 + Deregistration_Reason_AVP deregistration_Reason optional, //required only in TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (sIP_AOR) "fieldPresent=bytes(4, 122)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record RTA_MSG{ + //Ref: TS 129 229 6.1.10. Registration-Termination-Answer (RTA:304) Command + //Ref: RFC4740 8.10. Registration-Termination-Answer (RTA:287) Command + DiameterHeader header ,// ::= < Diameter Header: 287 or 304, PXY > + Session_Id_AVP session_Id,//fixed pos. + RTA_Body_AVP rTA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 287)" + } + + type set RTA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + Associated_Identities_AVP associated_Identities optional, //only TS129 229 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Identity_with_Emergency_Registration_AVP identity_with_Emergency_Registration optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PPR_MSG{ + //Ref: TS 129 229 6.1.11. Push-Profile-Request (PPR:305) Command + //Ref: RFC4740 8.11. Push-Profile-Request (PPR:288) Command + DiameterHeader header ,// ::= < Diameter Header: 288 or 305, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + PPR_Body_AVP pPR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 288)" + } + + type set PPR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Destination_Host_AVP destination_Host, //RFC4740 & TS129 229 + Destination_Realm_AVP destination_Realm, //RFC4740 & TS129 229 + User_Name_AVP user_Name , //RFC4740 & TS129 229 + set of SIP_User_Data_AVP sIP_User_Data optional, //only in RFC4740 + SIP_Accounting_Information_AVP sIP_Accounting_Information optional, //only in RFC4740 + Authorization_Lifetime_AVP authorization_Lifetime optional, //only in RFC4740 + Auth_Grace_Period_AVP auth_Grace_Period optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + User_Data_AVP user_Data optional, //only TS129 229 + Charging_Information_AVP charging_Information optional, //only TS129 229 + SIP_Auth_Data_Item_AVP sIP_Auth_Data_Item optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (sIP_User_Data) "fieldPresent=bytes(4, 289)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PPA_MSG{ + //Ref: TS 129 229 6.1.12. Push-Profile-Answer (PPA: 305) Command + //Ref: RFC4740 8.12. Push-Profile-Answer (PPA: 288) Command + DiameterHeader header ,// ::= < Diameter Header: 288 or 305, PXY > + Session_Id_AVP session_Id,//fixed pos. + PPA_Body_AVP pPA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 288)" + } + + type set PPA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional,//required only in TS129 229 + Auth_Application_Id_AVP auth_Application_Id optional, //required only in RFC4740 + Result_Code_AVP result_Code optional, //RFC4740 & TS129 229 + Experimental_Result_AVP experimental_Result optional, //only TS129 229 + Auth_Session_State_AVP auth_Session_State, //RFC4740 & TS129 229 + Origin_Host_AVP origin_Host, //RFC4740 & TS129 229 + Origin_Realm_AVP origin_Realm, //RFC4740 & TS129 229 + Redirect_Host_AVP redirect_Host optional, //only in RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //only in RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //only in RFC4740 + set of Supported_Features_AVP supported_Features optional, //only TS129 229 + set of Failed_AVP failed optional, //only TS129 229 + set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 + set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 + set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 + } + with { + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + }// End of group RFC4740 + + group Sh_Intf{ + /* Codes on Sh */ + type record UDR_MSG{ + // Ref: 3GPP TS 29.329 6.1.1 User-Data-Request (UDR) Command + DiameterHeader header ,//< User-Data-Request> ::= < Diameter Header: 306, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + UDR_Body_AVP uDR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 306)" + } + + type set UDR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity optional,//requi. but for testing set to optional TP_Sh_HSS_MS_01 + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + Server_Name_AVP server_Name optional, + set of Service_Indication_AVP service_Indication optional, + set of Data_Reference_AVP data_Reference,//requi. + set of Identity_Set_AVP identity_Set optional, + Requested_Domain_AVP requested_Domain optional, + Current_Location_AVP current_Location optional, + set of DSAI_Tag_AVP dSAI_Tag optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (service_Indication) "fieldPresent=bytes(4, 704)" + variant (data_Reference) "fieldPresent=bytes(4, 703)" + variant (identity_Set) "fieldPresent=bytes(4, 708)" + variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record UDA_MSG{ + // Ref: 3GPP TS 29.329 6.1.2 User-Data-Answer (UDA) Command + DiameterHeader header ,//< Diameter Header: 306, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + UDA_Body_AVP uDA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 306)" + } + + type set UDA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + User_Data_AVP user_Data optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PUR_MSG{ + // Ref: 3GPP TS 29.329 6.1.3 Profile-Update-Request (PUR) Command + DiameterHeader header ,//< Diameter Header: 307, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PUR_Body_AVP pUR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 307)" + } + + type set PUR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Data_Reference_AVP data_Reference, //ETSI TS 129 329 + User_Data_AVP user_Data,//Requi. + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PUA_MSG{ + // Ref: 3GPP TS 29.329 6.1.4 Profile-Update-Answer (PUA) Command + DiameterHeader header ,//< Diameter Header: 307, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PUA_Body_AVP pUA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 307)" + } + + type set PUA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + Repository_Data_ID_AVP repository_Data_Id optional, + Data_Reference_AVP data_Reference optional, //ETSI TS 129 329 + set of Supported_Features_AVP supported_Features optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SNR_MSG{ + // Ref: 3GPP TS 29.329 6.1.5 Subscribe-Notifications-Request (SNR) Command + DiameterHeader header ,//< Diameter Header: 308, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + SNR_Body_AVP sNR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 308)" + } + + type set SNR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Service_Indication_AVP service_Indication optional, + Send_Data_Indication_AVP send_Data_Indication optional, + Server_Name_AVP server_Name optional, + Subs_Req_Type_AVP subs_Req_Type, + set of Data_Reference_AVP data_Reference, + set of Identity_Set_AVP identity_Set optional, + Expiry_Time_AVP expiry_Time optional, + set of DSAI_Tag_AVP dSAI_Tag optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional, + User_Name_AVP user_Name optional //RFC4740 & required in TS129 229 + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (service_Indication) "fieldPresent=bytes(4, 704)" + variant (data_Reference) "fieldPresent=bytes(4, 703)" + variant (identity_Set) "fieldPresent=bytes(4, 708)" + variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record SNA_MSG{ + // Ref: 3GPP TS 29.329 6.1.6 Subscribe-Notifications-Answer (SNA) Command + DiameterHeader header ,//< Diameter Header: 308, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + SNA_Body_AVP sNA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 308)" + } + + type set SNA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + set of Supported_Features_AVP supported_Features optional, + User_Data_AVP user_Data optional, + Expiry_Time_AVP expiry_Time optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PNR_MSG{ + // Ref: 3GPP TS 29.329 6.1.7 Push-Notification-Request (PNR) Command + DiameterHeader header ,//< Diameter Header: 309, REQ, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PNR_Body_AVP pNR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 309)" + } + + type set PNR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Identity_AVP user_Identity,//requi. + Wildcarded_PSI_AVP wildcarded_PSI optional, + Wildcarded_IMPU_AVP wildcarded_IMPU optional, + User_Data_AVP user_Data,//Requi. + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record PNA_MSG{ + // Ref: 3GPP TS 29.329 6.1.8 Push-Notifications-Answer (PNA) Command + DiameterHeader header ,//< Diameter Header: 309, PXY, 16777217 > + Session_Id_AVP session_Id,//fixed pos. + PNA_Body_AVP pNA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 309)" + } + + type set PNA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + Redirect_Host_AVP redirect_Host optional, //RFC4740 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4740 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4740 + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group Sh_Intf + + group RFC4006{ + /* Codes on Ro and Rf interface */ + //ACR ACA message is defined in RFC3588 group + + + type record CCR_MSG{ + // Ref: RFC4006 3.1. Credit-Control-Request (CCR) Command + DiameterHeader header ,//< Diameter Header: 272, REQ, PXY> + Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 + CCR_Body_AVP cCR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 272)" + } + + type set CCR_Body_AVP { + Origin_Host_AVP origin_Host,//requi. //RFC4006 & TS129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Destination_Realm_AVP destination_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC4006 & TS129 212 & TS129 215 + Service_Context_Id_AVP service_Context_Id optional, //RFC4006 + CC_Request_Type_AVP cC_Request_Type, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Number_AVP cC_Request_Number, //RFC4006 & TS129 212 & TS129 215 + Destination_Host_AVP destination_Host optional, //RFC4006 & TS129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC4006 + CC_Sub_Session_Id_AVP cC_Sub_Session_Id optional, //RFC4006 + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, //RFC4006 + Origin_State_Id_AVP origin_State_Id optional, //RFC4006 & TS129 212 & TS129 215 + Event_Timestamp_AVP event_Timestamp optional, //RFC4006 + set of Subscription_Id_AVP subscription_Id optional, //RFC4006 & TS129 212 & TS129 215 + Service_Identifier_AVP service_Identifier optional, //RFC4006 + Termination_Cause_AVP termination_Cause optional, //RFC4006 & TS129 212 & TS129 215 + Requested_Service_Unit_AVP requested_Service_Unit optional, //RFC4006 + Requested_Action_AVP requested_Action optional, //RFC4006 + set of Used_Service_Unit_AVP used_Service_Unit optional, //RFC4006 + AoC_Request_Type_AVP aoc_Request_Type_AVP optional, //TS132 299 only + Multiple_Services_Indicator_AVP multiple_Services_Indicator optional, //RFC4006 + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, //RFC4006 + set of Service_Parameter_Info_AVP service_Parameter_Info optional, //RFC4006 + CC_Correlation_Id_AVP cC_Correlation_Id optional, //RFC4006 + set of Supported_Features_AVP supported_Features optional, //TS129 212 & TS129 215 + Network_Request_Support_AVP network_Request_Support optional, //TS129 212 & TS129 215 + set of Packet_Filter_Information_AVP packet_Filter_Information optional,//TS129 212 & TS129 215 + Packet_Filter_Operation_AVP packet_Filter_Operation optional, //TS129 212 & TS129 215 + Bearer_Identifier_AVP bearer_Identifier optional, //TS129 212 only + Bearer_Operation_AVP bearer_Operation optional, //TS129 212 only + Framed_IP_Address_AVP framed_IP_Address optional, //TS129 212 & TS129 215 + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, //TS129 212 & TS129 215 + IP_CAN_Type_AVP iP_CAN_Type optional, //TS129 212 & TS129 215 + ThreeGPP_RAT_Type_AVP threeGPP_RAT_Type optional, //TS129 212 only + RAT_Type_AVP rat_Type optional, //TS129 212 & TS129 215 + QoS_Information_AVP qoS_Information optional, //TS129 212 & TS129 215 + QoS_Negotiation_AVP qoS_Negotiation optional, //TS129 212 & TS129 215 + QoS_Upgrade_AVP qoS_Upgrade optional, //TS129 212 & TS129 215 + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, //TS129 212 only + record length (0..2) of AN_GW_Address_AVP aN_GW_Address optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, //TS129 212 & TS129 215 + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, //TS129 212 & TS129 215 + RAI_AVP rAI optional, //TS129 212 & TS129 215 + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, //TS129 212 & TS129 215 + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, //TS129 212 & TS129 215 + Called_Station_Id_AVP called_Station_Id optional, //TS129 212 only + PDN_Connection_ID_AVP pDN_Connection_ID optional, //TS129 212 only + Bearer_Usage_AVP bearer_Usage optional, //TS129 212 only + Online_AVP online optional, //TS129 212 only + Offline_AVP offline optional, //TS129 212 only + set of TFT_Packet_Filter_Information_AVP tFT_Packet_Filter_Information optional, //TS129 212 only + set of Charging_Rule_Report_AVP charging_Rule_Report optional, //TS129 212 only + set of Event_Trigger_AVP event_Trigger optional, //TS129 212 & TS129 215 + Event_Report_Indication_AVP event_Report_Indication optional, //TS129 212 only + Access_Network_Charging_Address_AVP access_Network_Charging_Address optional, //TS129 212 only + set of Access_Network_Charging_Identifier_Gx_AVP access_Network_Charging_Identifier_Gx optional,//TS129 212 only + set of CoA_Information_AVP coA_Information optional, //TS129 212 only + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, //TS129 212 only + Routing_Rule_Install_AVP routing_Rule_Install optional, //TS129 212 only + Routing_Rule_Remove_AVP routing_Rule_Remove optional, //TS129 212 only + Maximum_Bandwidth_AVP maximum_Bandwidth optional, //TS129 212 only + Logical_Access_ID_AVP logical_Access_ID optional, //TS129 212 only + Physical_Access_ID_AVP physical_Access_ID optional, //TS129 212 only + Session_Linking_Indicator_AVP session_Linking_Indicator optional,//Gxx TS129 212 only + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, //S9 (TS129 215) & Gxx (TS129 212) + set of Subses_Enforcement_Info_AVP subsesion_Enforcement_Info optional, //S9 (TS129 215) only + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, //S9 (TS129 215) & Gxx (TS129 212) + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, //S9 (TS129 215) only + User_CSG_Information_AVP user_CSG_Information optional, //S9 (TS129 215) & Gxx (TS129 212) + User_Equipment_Info_AVP user_Equipment_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Proxy_Info_AVP proxy_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC4006 & TS129 212 & TS129 215 + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 + } + with { + variant (subscription_Id) "fieldPresent=bytes(4, 443)" + variant (used_Service_Unit) "fieldPresent=bytes(4, 446)" + variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" + variant (service_Parameter_Info) "fieldPresent=bytes(4, 440)" + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (packet_Filter_Information) "fieldPresent=bytes(4, 1061)" + variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" + variant (tFT_Packet_Filter_Information) "fieldPresent=bytes(4, 1013)" + variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" + variant (event_Trigger) "fieldPresent=bytes(4, 1006)" + variant (access_Network_Charging_Identifier_Gx) "fieldPresent=bytes(4, 1022)" + variant (coA_Information) "fieldPresent=bytes(4, 1039)" + variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record CCA_MSG{ + // Ref: RFC4006 3.2. Credit-Control-Answer (CCA) Command + DiameterHeader header ,//< Diameter Header: 272, PXY> + Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 + CCA_Body_AVP cCA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 272)" + } + + type set CCA_Body_AVP { + Result_Code_AVP result_Code optional, //RFC4006 & TS129 212 & TS129 215 + Origin_Host_AVP origin_Host,//requi. //RFC4006 & TS129 212 & TS129 215 + Origin_Realm_AVP origin_Realm,//requi. //RFC4006 & TS129 212 & TS129 215 + Auth_Application_Id_AVP auth_Application_Id, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Type_AVP cC_Request_Type, //RFC4006 & TS129 212 & TS129 215 + CC_Request_Number_AVP cC_Request_Number, //RFC4006 & TS129 212 & TS129 215 + User_Name_AVP user_Name optional, //RFC4006 + CC_Session_Failover_AVP cC_Session_Failover optional, //RFC4006 + CC_Sub_Session_Id_AVP cC_Sub_Session_Id optional, //RFC4006 + Acct_Multi_Session_Id_AVP acct_Multi_Session_Id optional, //RFC4006 + Origin_State_Id_AVP origin_State_Id optional, //RFC4006 & TS129 212 & TS129 215 + Event_Timestamp_AVP event_Timestamp optional, //RFC4006 + Granted_Service_Unit_AVP granted_Service_Unit optional, //RFC4006 + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, //RFC4006 + Cost_Information_AVP cost_Information optional, //RFC4006 + Final_Unit_Indication_AVP final_Unit_Indication optional, //RFC4006 + Check_Balance_Result_AVP check_Balance_Result optional, //RFC4006 + Low_Balance_Indication_AVP low_Balance_Indication optional, //TS132 299 only + Remaining_Balance_AVP remaining_Balance optional, //TS132 299 only + Credit_Control_Failure_Handling_AVP credit_Control_Failure_Handling optional, //RFC4006 + Direct_Debiting_Failure_Handling_AVP direct_Debiting_Failure_Handling optional, //RFC4006 + Validity_Time_AVP validity_Time optional, //RFC4006 + set of Redirect_Host_AVP redirect_Host optional, //RFC4006 & TS129 212 + Redirect_Host_Usage_AVP redirect_Host_Usage optional, //RFC4006 & TS129 212 + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, //RFC4006 & TS129 212 + Experimental_Result_AVP experimental_Result optional, //TS129 212 & TS129 215 + set of Supported_Features_AVP supported_Features optional, //TS129 212 & TS129 215 + Bearer_Control_Mode_AVP bearer_Control_Mode optional, //TS129 212 & TS129 215 + set of Event_Trigger_AVP event_Trigger optional, //TS129 212 & TS129 215 + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, //TS129 212 only + set of Charging_Rule_Install_AVP charging_Rule_Install optional, //TS129 212 only + Charging_Information_AVP charging_Information optional, //TS129 212 & TS129 215 + Online_AVP online optional, //TS129 212 only + Offline_AVP offline optional, //TS129 212 only + set of QoS_Information_AVP qoS_Information optional, //TS129 212 & TS129 215 + Revalidation_Time_AVP revalidation_Time optional, //TS129 212 only + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, //TS129 212 only + Bearer_Usage_AVP bearer_Usage optional, //TS129 212 only + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, //TS129 212 only + set of Usage_Monitoring_Information_AVP usage_Monitoring_Information optional, //TS129 212 only + set of CSG_Information_Reporting_AVP cSG_Information_Reporting optional,//TS129 212 & TS129 215 + User_CSG_Information_AVP user_CSG_Information optional, //TS129 212 only + Error_Message_AVP error_Message optional, //TS129 212 & TS129 215 + Error_Reporting_Host_AVP error_Reporting_Host optional, //TS129 212 & TS129 215 + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, //S9 (TS129 215) only + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, //S9 (TS129 215) only + set of Subses_Decision_Info_AVP subsession_Decision_Info optional, //S9 (TS129 215) only + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //S9 (TS129 215) only + set of Proxy_Info_AVP proxy_Info optional, //RFC4006 & TS129 212 & TS129 215 + set of Route_Record_AVP route_Record optional, //RFC4006 & TS129 212 & TS129 215 + set of Failed_AVP failed optional, //RFC4006 & TS129 212 & TS129 215 + Service_Information_AVP service_Information optional, //TS132 299 only + set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 + } + with { + variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" + variant (redirect_Host) "fieldPresent=bytes(4, 292)" + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (event_Trigger) "fieldPresent=bytes(4, 1006)" + variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" + variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" + variant (qoS_Information) "fieldPresent=bytes(4, 1016)" + variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" + variant (cSG_Information_Reporting) "fieldPresent=bytes(4, 1071)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group RFC4006 + + group Rx_Intf{ + + type record AAR_MSG{ + //Ref: ETSI TS 129 214 5.6.1 -Request + DiameterHeader header ,// ::= < Diameter Header: 265, REQ, PXY > + Session_Id_AVP session_Id,//fixed pos. + AAR_Body_AVP aAR_Body + } + with { + variant "present=bits(32,1,1) && bytes(5,3, 265)" + } + + type set AAR_Body_AVP { + //DRMP dRMP optional, //ETSI TS 129 214 V15.5 from RFC 7944 + Auth_Application_Id_AVP auth_Application_Id, + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host optional, + IP_Domain_AVP iP_Domain optional, //ETSI TS 129 214 V15.5 + AF_Application_Identifier_AVP af_Application_Id optional,//present in ETSI TS 129 214 p.5.6.7 + set of Media_Component_Description_AVP media_Component_Description optional, + Service_Info_Status_AVP service_Info_Status optional, + AF_Charging_Identifier_AVP af_Charging_Identifier optional, + SIP_Forking_Indication_AVP sip_Forking_Indication optional, + set of Specific_Action_AVP specific_Action optional, + set of Subscription_Id_AVP subscription_Id optional, + //OC_Supported_Features_AVP oC_Supported_Features optional, //ETSI TS 129 214 V15.5 from RFC7583 + set of Supported_Features_AVP supported_Features optional, + Reservation_Priority_AVP reservation_Priority optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Address optional, + Called_Station_Id_AVP called_Station_Id optional, + Service_URN_AVP service_URN optional, + Sponsored_Connectivity_Data_AVP sponsored_Connectivity_Data optional, + MPS_Identifier_AVP mps_Identifier optional, + GCS_Identifier_AVP gcs_Identifier optional, //ETSI TS 129 214 V15.5 + MCPTT_Identifier_AVP mcptt_Identifier optional, //ETSI TS 129 214 V15.5 + MCVideo_Identifier_AVP mCVideo_Identifier optional, //ETSI TS 129 214 V15.5 + IMS_Content_Identifier_AVP iMS_Content_Identifier optional, //ETSI TS 129 214 V15.5 + IMS_Content_Type_AVP iMS_Content_Type optional, //ETSI TS 129 214 V15.5 + Rx_Request_Type_AVP rx_Request_Type optional, //ETSI TS 129 214 V15.5 + set of Required_Access_Info_AVP required_Access_Info optional, //ETSI TS 129 214 V15.5 + AF_Requested_Data_AVP aF_Requested_Data optional, //ETSI TS 129 214 V15.5 + //Reference_Id_AVP reference_Id optional, //ETSI TS 129 214 V15.5 from TS 129 154 + Pre_emption_Control_Info_AVP pre_emption_Control_Info optional, //ETSI TS 129 214 V15.5 + User_Name_AVP user_Name optional, + Origin_State_Id_AVP origin_State_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + with { + variant (media_Component_Description) "fieldPresent=bytes(4, 517)" + variant (specific_Action) "fieldPresent=bytes(4, 513)" + variant (subscription_Id) "fieldPresent=bytes(4, 443)" + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (route_Record) "fieldPresent=bytes(4, 282)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + type record AAA_MSG{ + //Ref: ETSI TS 129 214 5.6.2 -> Answer + DiameterHeader header,// ::= < Diameter Header: 265, PXY > + Session_Id_AVP session_Id,//fixed pos. + AAA_Body_AVP aAA_Body + } + with { + variant "present=bits(32,1,0) && bytes(5,3, 265)" + } + + type set AAA_Body_AVP { + //DRMP dRMP optional, //ETSI TS 129 214 V15.5 from RFC 7944 + Auth_Application_Id_AVP auth_Application_Id, + Origin_Host_AVP origin_Host,//required + Origin_Realm_AVP origin_Realm, + Result_Code_AVP result_Code optional,//required + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State optional, //ETSI TS 129 214 V15.5 + set of Access_Network_Charging_Identifier_AVP access_network_charging_Identifier optional, + Access_Network_Charging_Address_AVP access_network_charging_address optional, + Acceptable_Service_Info_AVP acceptable_service_info optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, //ETSI TS 129 214 V15.5 + //AN_Trusted_AVP aN_Trusted optional, //ETSI TS 129 214 V15.5 from TS 129 273 + Service_Authorization_Info_AVP service_Authorization_Info optional, //ETSI TS 129 214 V15.5 + IP_CAN_Type_AVP ip_Can_Type optional, + //NetLoc_Access_Support_AVP netLoc_Access_Support optional, //ETSI TS 129 214 V15.5 from TS 129 212 + RAT_Type_AVP rat_Type optional, + set of Flows_AVP flows optional, //ETSI TS 129 214 V15.5 + //OC_Supported_Features_AVP oC_Supported_Features optional, //ETSI TS 129 214 V15.5 from RFC7683 + //OC_OLR_AVP oC_OLR optional, //ETSI TS 129 214 V15.5 from RFC7683 + set of Supported_Features_AVP supported_Features optional, + set of Subscription_Id_AVP subscription_Id_AVP optional, //ETSI TS 129 214 V15.5 + User_Equipment_Info_AVP user_Equipment_Info optional, //ETSI TS 129 214 V15.5 + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, //ETSI TS 129 214 V15.5 + set of Class_AVP class_ optional, + User_Name_AVP user_Name optional, + Error_Message_AVP error_Message optional, + Error_Reporting_Host_AVP error_Reporting_Host optional, + Failed_AVP failed optional, + Retry_Interval_AVP retry_Interval optional, //ETSI TS 129 214 V15.5 + Origin_State_Id_AVP origin_State_Id optional, + set of Redirect_Host_AVP redirect_Host optional, + Redirect_Host_Usage_AVP redirect_Host_Usage optional, + Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, + set of Proxy_Info_AVP proxy_Info optional, + //set of Load_AVP load optional, //ETSI TS 129 214 V15.5 + set of AVP_Type aVP_Type optional + } + with { + variant (access_network_charging_Identifier) "fieldPresent=bytes(4, 502)" + variant (supported_Features) "fieldPresent=bytes(4, 628)" + variant (class) "fieldPresent=bytes(4, 25)" + variant (failed) "fieldPresent=bytes(4, 279)" + variant (redirect_Host) "fieldPresent=bytes(4, 292)" + variant (proxy_Info) "fieldPresent=bytes(4, 284)" + variant (aVP_Type) "fieldPresent=!isEOF" + } + + } // End of group Rx + + group S6a_Intf { + // Update-Location-Request (ULR) Command - Ref: TS 129 272 7.2.3 + type record ULR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 316, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + ULR_Body_AVP uLR_Body + } + + type set of Supported_Features_AVP Supported_Features_AVPs; + + type set ULR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + Supported_Features_AVPs supported_Features optional, + Terminal_Information_AVP terminal_Information optional, + RAT_Type_AVP rat_Type, + ULR_Flags_AVP ulr_Flags, + UE_SRVCC_Capability_AVP ue_SRVCC_Capability optional, + Visited_PLMN_Id_AVP visited_PLMN_Id, + SGSN_Number_AVP sgsn_Number optional, + Homogeneous_Support_AVP homogeneous_Support optional, + GMLC_Address_AVP gmlc_Address optional, + Active_APN_AVP active_APN optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Update-Location-Answer (ULA) Command - Ref: TS 129 272 7.2.4 + type record ULA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 316, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + ULA_Body_AVP uLA_Body + } + type set ULA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + ULA_Flags_AVP ula_Flags optional, + Subscription_Data_AVP subscription_Data optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Authentication-Information-Request (AIR) Command - Ref: TS 129 272 7.2.5 + type record AIR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 318, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + AIR_Body_AVP aIR_Body + } + type set AIR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Req_EUTRAN_Auth_Info_AVP req_EUTRAN_Auth_Info optional, + Req_UTRAN_GERAN_Auth_Info_AVP req_UTRAN_GERAN_Auth_Info optional, + Visited_PLMN_Id_AVP visited_PLMN_Id, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Authentication-Information-Answer (AIA) Command - Ref: TS 129 272 7.2.6 + type record AIA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 318, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + AIA_Body_AVP aIA_Body + } + type set AIA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + Authentication_Info_AVP authentication_Info optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Cancel-Location-Request (CLR) Command - Ref: TS 129 272 7.2.7 + type record CLR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 317, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + CLR_Body_AVP cLR_Body + } + type set CLR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Cancellation_Type_AVP cancellation_Type, + CLR_Flags_AVP cLR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Cancel-Location-Answer (CLA) Command - Ref: TS 129 272 7.2.8 + type record CLA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 317, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + CLA_Body_AVP cLA_Body + } + type set CLA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Insert-Subscriber-Data-Request (IDR) Command - Ref: TS 129 272 7.2.9 + type record IDR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 319, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + IDR_Body_AVP iDR_Body + } + type set IDR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Subscription_Data_AVP subscription_Data, + IDR_Flags_AVP iDR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Insert-Subscriber-Data-Answer (IDA) Command - Ref: TS 129 272 7.2.10 + type record IDA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 319, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + IDA_Body_AVP iDA_Body + } + type set IDA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + IMS_Voice_PS_Sessions_Support_AVP iMS_Voice_PS_Sessions_Support optional, + Last_UE_Activity_Time_AVP last_UE_Activity_Time_AVP optional, + RAT_Type_AVP rat_Type optional, + IDA_Flags_AVP iDA_Flags optional, + EPS_User_State_AVP ePS_User_State optional, + EPS_Location_Information_AVP ePS_Location_Information optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Delete-Subscriber-Data-Request (DSR) Command - Ref: TS 129 272 7.2.11 + type record DSR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 320, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + DSR_Body_AVP dSR_Body + } + type set DSR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + DSR_Flags_AVP dSR_Flags, + set of Context_Identifier_AVP context_Identifier optional, + Trace_Reference_AVP trace_Reference optional, + set of TS_Code_AVP tS_Code optional, + set of SS_Code_AVP sS_Code optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Delete-Subscriber-Data-Answer (DSA) Command - Ref: TS 129 272 7.2.12 + type record DSA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 320, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + DSA_Body_AVP dSA_Body + } + type set DSA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Error_Diagnostic_AVP error_Diagnostic optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + DSA_Flags_AVP dSA_Flags optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Purge-UE-Request (PUR) Command - Ref: TS 129 272 7.2.13 + type record PUER_MSG { + DiameterHeader header, + // ::= < Diameter Header: 321, REQ, PXY, 16777251 > + Session_Id_AVP session_Id, + // + PUER_Body_AVP pUER_Body + } + + type set PUER_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm,//requi. + set of Supported_Features_AVP supported_Features optional, + User_Name_AVP user_Name,//Requi. + PUER_Flags_AVP pUER_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Purge-UE-Answer (PUA) Command - Ref: TS 129 272 7.2.14 + type record PUEA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 321, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + PUEA_Body_AVP pUEA_Body + } + + type set PUEA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State,//requi. + Origin_Host_AVP origin_Host,//requi. + Origin_Realm_AVP origin_Realm,//requi. + PUEA_Flags_AVP pUEA_Flags optional, + set of Supported_Features_AVP supported_Features optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Reset-Request (RSR) Command - Ref: TS 129 272 7.2.15 + type record RSR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 322, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + RSR_Body_AVP rSR_Body + } + type set RSR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host, + Destination_Realm_AVP destination_Realm, + set of Supported_Features_AVP supported_Features optional, + set of User_Id_AVP user_Id optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Reset-Answer (RSA) Command - Ref: TS 129 272 7.2.16 + type record RSA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 322, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + RSA_Body_AVP rSA_Body + } + type set RSA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + set of Supported_Features_AVP supported_Features optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Notify-Request (NOR) Command - Ref: TS 129 272 7.2.17 + type record NOR_MSG { + DiameterHeader header, + // ::= < Diameter Header: 323, REQ, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + NOR_Body_AVP nOR_Body + } + type set NOR_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + Destination_Host_AVP destination_Host optional, + Destination_Realm_AVP destination_Realm, + User_Name_AVP user_Name, + set of Supported_Features_AVP supported_Features optional, + Terminal_Information_AVP terminal_Information optional, + MIP6_Agent_Info_AVP mIP6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + Context_Identifier_AVP context_Identifier optional, + Service_Selection_AVP service_Selection optional, + Alert_Reason_AVP alert_Reason optional, + UE_SRVCC_Capability_AVP uE_SRVCC_Capability optional, + NOR_Flags_AVP nOR_Flags optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + // Notify-Answer (NOA) Command - Ref: TS 129 272 7.2.18 + type record NOA_MSG { + DiameterHeader header, + // ::= < Diameter Header: 323, PXY, 16777251 > + + Session_Id_AVP session_Id, + // + NOA_Body_AVP nOA_Body + } + type set NOA_Body_AVP { + Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + Auth_Session_State_AVP auth_Session_State, + Origin_Host_AVP origin_Host, + Origin_Realm_AVP origin_Realm, + set of Supported_Features_AVP supported_Features optional, + set of Failed_AVP failed optional, + set of Proxy_Info_AVP proxy_Info optional, + set of Route_Record_AVP route_Record optional, + set of AVP_Type aVP_Type optional + } + + } // End of group S6a + + + } // End of group MessageTypes + with{ + encode "DIAMETERCodec" + } + + group Other{ + + // Diameter Message Record(Header and Body(AVP's)). + type record Lower_Layer_Primitive { + Lower_Layer_Header ll_header, + DIAMETER_MSG pdu optional + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + type record Lower_Layer_Header{ + ASP_type primitive, + charstring transport_used, + charstring ETS_address optional, + integer ETS_port optional, + charstring SUT_address optional, + integer SUT_port optional, + integer ETS_conn optional + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + // ASP type definition. + type enumerated ASP_type { + CONNECT_REQUEST_E(1), + CONNECT_INDICATION_E(2), + CONNECT_CONFIRM_E(3), + DISCONNECT_REQUEST_E(4), + DISCONNECT_INDICATION_E(5), + DATA_REQUEST_E(6), + DATA_INDICATION_E(7), + LISTEN_REQUEST_E(8) + } + //Abstract Service Primitive ist, Layer (TE) to Layer (SA) + + } // End of group Other + + }//End group HeaderAndBodyTypes + +} with { + variant "" + encode "DIAMETERCodec" +} // End module LibDiameter_TypesAndValues diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn new file mode 100644 index 0000000..ccb8fb4 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn @@ -0,0 +1,3233 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Base AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Base AVP types is ok; + */ +module LibDiameter_Types_Base_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; + + // LibDiameter + import from LibDiameter_Types_RfRo_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + + group AVPTypes{ + group AVP_Base_Types{ + //AVP Data Union(Integer,String,Record of and Grouped). + + type record GROUPED{ + AVP_Header aVP_Header, + set of AVP_Type aVP_Type + }; + + type union AVP_Data { + /* Ref: RFC3588 p.4.1 Basic Avp Data Formats */ + octetstring oCTETSTRING, + charstring cHARSTRING, + Int32 iNTEGER32, + Int64 iNTEGER64, + UInt32 uNSIGNED32, + UInt64 uNSIGNED64, + FLOAT32 fLOAT32, + FLOAT64 fLOAT64, + GROUPED gROUPED + } + + /* Ref: FRC3588 p.4.3 Derived Avp Data Formats */ + //changed addressFamily added ! + type record Address{ + Oct2 addressFamily, + IpAddress ipAddress + } + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (addressFamily) "intTag='addressFamily'" + variant (ipAddress) "encode=CodecHelper.encodeIpAddressWithPadding();decode=CodecHelper.decodeIpAddressWithPadding()" + } + type union IpAddress { + IPv4Addr ipv4, + IPv6Addr ipv6 + } + with { + variant (ipv4) "fieldPresent=getIntTag('addressFamily')==1" + variant (ipv6) "fieldPresent=getIntTag('addressFamily')==2" + } + //RFC3588 chapter 4.3: + // The Address format is derived from the OctetString AVP Base + // Format. It is a discriminated union, representing, for example a + // 32-bit (IPv4) [IPV4] or 128-bit (IPv6) [IPV6] address, most + // significant octet first. The first two octets of the Address + // AVP represents the AddressType, which contains an Address Family + // defined in [IANAADFAM]. The AddressType is used to discriminate + // the content and format of the remaining octets. + // -> check if IPv4(1) or IPv6(2) (http://www.iana.org/assignments/address-family-numbers/address-family-numbers.xml) + + type UInt32 Time; + + /* Diameter_Identity is FQDN - Fully Qualified Domain Name. + * host + * | 2nd level domain + * | | top level domain + * www.something.com + * host + * | 2nd level domain + * | | 3rd level domain + * | | | top level domain + * www.somtehing1.something2.com + * host + */ + type charstring Diameter_Identity + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCharstringWithPadding();decode=CodecHelper.decodeCharstringWithPadding()" +// variant "length=getIntTag('aVP_len')" + } + type record GenericParam{ + /* pid : ";transport=" or ";protocol=" + * paramValue : + * - for pid ";transport=" paramValue can be "tcp" / "udp" / "sctp" + * - for pid ";protocol=" paramValue can be "diameter" / "radius" / "tacacs+" + * */ + charstring pid optional, + charstring paramValue optional + } + + type set of GenericParam SemicolonParam_List; + type record DiameterURI{ + /* The DiameterURI MUST follow the Uniform Resource Identifiers (URI) + * syntax [URI] rules specified below: + * No transport security used : "aaa://" FQDN [ port ] [ transport ] [ protocol ] + * Transport security used : "aaas://" FQDN [ port ] [ transport ] [ protocol ] + * - port = ":" 1*DIGIT (If absent, the default Diameter port (3868) is assumed.) + * - transport = ";transport=" transport-protocol + * transport-protocol = ( "tcp" / "sctp" / "udp" ) + * - protocol = ";protocol=" aaa-protocol (If absent, the default AAA protocol is diameter.) + * aaa-protocol = ( "diameter" / "radius" / "tacacs+" ) + * Examples: + * aaa://host.example.com;transport=tcp + * aaa://host.example.com;protocol=diameter + * aaa://host.example.com:6666;protocol=diameter + * aaa://host.example.com:6666;transport=tcp;protocol=diameter + * aaa://host.example.com:1813;transport=udp;protocol=radius + */ +// charstring scheme, // "aaa://" +// UserInfo userInfo, +// HostPort hostPort optional, +// SemicolonParam_List urlParameters optional + + //charstring scheme, // "aaa://" + //charstring diameterId_FQDN, + //UInt16 portField optional, + //SemicolonParam_List uriParameters optional + charstring scheme ("aaa", "aaas"), + charstring diameterId_FQDN, + integer portField optional,//eg: 3868 + charstring transport ("transport=tcp", "transport=sctp", "transport=udp") optional, + charstring protocol ("protocol=diameter", "protocol=radius", "protocol=tacacs+") optional + } + + type record IP_AddressMask{ + UTF8String addr, + UTF8String mask optional, + UTF8String ports optional + } + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIP_AddressMask();decode=CodecHelper.decodeIP_AddressMask()" + } + + type record IPFilterRule_Type{ + //RFC3588 +/* Action actions permit - Allow packets that match the rule. + deny - Drop packets that match the rule. + + Dir dir "in" is from the terminal, "out" is to the + terminal. + + Proto proto An IP protocol specified by number. The "ip" + keyword means any protocol will match. + Aaddr_mask + src and dst
      [ports] +*/ + UTF8String action_, + UTF8String direction, + UTF8String proto, + IP_AddressMask src, //including optional ports + IP_AddressMask dst, //including optional ports + UTF8String options optional + } + //TODO Parser and Codec needed here (first version do not include this) + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIPFilterRule_Type();decode=CodecHelper.decodeIPFilterRule_Type()" + } + + type UInt32 AVP_Code (1..c_uInt32Max); + + //type Bit8 AVP_Flags; + type record AVP_Flags{ + Bit1 v_bit, + Bit1 m_bit, + Bit1 p_bit, + Bit5 reserved_bits + } + with { + variant (v_bit) "intTag='v_bit'" + } + + type UInt24 AVP_Length; + type integer AVP_Vendor_ID + with { + variant "length=32;unsigned" + } + + type record AVP_Header{ + AVP_Code aVP_Code, + AVP_Flags aVP_flags, + AVP_Length aVP_len, + AVP_Vendor_ID aVP_vid optional + } + with { + //The AVP Length field is three octets, and indicates the number of + // octets in this AVP including the AVP Code, AVP Length, AVP Flags, + // Vendor-ID field (if present) and the AVP data. + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_len) "intTag='aVP_len',value-4-1-3;intTag='aVP_len_tot';condition=CodecHelper.storeLen(dec)" //wert - 4=AVP Code - 1=AVP Flags - 3=AVP Length + variant (aVP_vid) "fieldPresent=getIntTag('v_bit')==1;intTag='aVP_len',getIntTag('aVP_len')-4" + //oder variant (aVP_vid) "fieldPresent=bits(32, 1, 1);intTag='aVP_len',getIntTag('aVP_len')-4" + //und hier ueberpruefen wir, ob der wert 1 ist, wenn ja, dann ist das optional feld aVP_vid da, dann subtrahieren wir 4 byte von der laenge + //so hat aVP_len den wert der laenge von aVP_Data, 0 oder mehr + } + + type record AVP_Type { + AVP_Header aVP_Header, + AVP_Data aVP_Data optional + } + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" + //as no differentiation can be done on the received AVP data type, always decode as octetstring +// variant (aVP_Data) "fieldPresent=getIntTag('aVP_len')>0;decode=CodecHelper.decodeAVP_Data();condition=CodecHelper.leaveScope()" + variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();decode=CodecHelper.decodeAVP_Data();condition=CodecHelper.leaveScope()" + } + }//end group AVP_Base_Types + + group RFC_AVP3588_Types{ + + type enumerated Result_Code_Type{ + DIAMETER_DUMMY_E (0), + + DIAMETER_MULTI_ROUND_AUTH_E (1001), + + DIAMETER_SUCCESS_E (2001), + DIAMETER_LIMITED_SUCCESS_E (2002), + + DIAMETER_COMMAND_UNSUPPORTED_E (3001), + DIAMETER_UNABLE_TO_DELIVER_E (3002), + DIAMETER_REALM_NOT_SERVED_E (3003), + DIAMETER_TOO_BUSY_E (3004), + DIAMETER_LOOP_DETECTED_E (3005), + DIAMETER_REDIRECT_INDICATION_E (3006), + DIAMETER_APPLICATION_UNSUPPORTED_E (3007), + DIAMETER_INVALID_HDR_BITS_E (3008), + DIAMETER_INVALID_AVP_BITS_E (3009), + DIAMETER_UNKNOWN_PEER_E (3010), + + DIAMETER_AUTHENTICATION_REJECTED_E (4001), + DIAMETER_OUT_OF_SPACE_E (4002), + DIAMETER_ELECTION_LOST_E (4003), + + DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE_E (4181), + + DIAMETER_AVP_UNSUPPORTED_E (5001), + DIAMETER_UNKNOWN_SESSION_ID_E (5002), + DIAMETER_AUTHORIZATION_REJECTED_E (5003), + DIAMETER_INVALID_AVP_VALUE_E (5004), + DIAMETER_MISSING_AVP_E (5005), + DIAMETER_RESOURCES_EXCEEDED_E (5006), + DIAMETER_CONTRADICTING_AVPS_E (5007), + DIAMETER_AVP_NOT_ALLOWED_E (5008), + DIAMETER_AVP_OCCURS_TOO_MANY_TIMES_E (5009), + DIAMETER_NO_COMMON_APPLICATION_E (5010), + DIAMETER_UNSUPPORTED_VERSION_E (5011), + DIAMETER_UNABLE_TO_COMPLY_E (5012), + DIAMETER_INVALID_BIT_IN_HEADER_E (5013), + DIAMETER_INVALID_AVP_LENGTH_E (5014), + DIAMETER_INVALID_MESSAGE_LENGTH_E (5015), + DIAMETER_INVALID_AVP_BIT_COMBO_E (5016), + DIAMETER_NO_COMMON_SECURITY_E (5017), + DIAMETER_ERROR_SUBSESSION_E (5470) + } + with { + variant "length=32" + } + + type enumerated Re_Auth_Req_Type{ + //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + AUTHORIZE_ONLY_E (0), + AUTHORIZE_AUTHENTICATE_E (1) + } + with { + variant "length=32" + } + type enumerated Redirect_Host_Usage_Type{ + DONT_CACHE_E (0), + ALL_SESSION_E (1), + ALL_REALM_E (2), + REALM_AND_APPLICATION_E (3), + ALL_APPLICATION_E (4), + ALL_HOST_E (5), + ALL_USER_E (6) + } + with { + variant "length=32" + } + type enumerated Acc_Record_Type{ + EVENT_RECORD_E (1), + START_RECORD_E (2), + INTERIM_RECORD_E (3), + STOP_RECORD_E (4) + } + with { + variant "length=32" + } + type enumerated Acc_Realtime_Req_Type{ + DELIVER_AND_GRANT_E (1), + GRANT_AND_STORE_E (2), + GRANT_AND_LOSE_E (3) + } + with { + variant "length=32" + } + + type enumerated Termination_Cause_Type{ + DIAMETER_LOGOUT_E (1), + DIAMETER_SERVICE_NOT_PROVIDED_E (2), + DIAMETER_BAD_ANSWER_E (3), + DIAMETER_ADMINISTRATIVE_E (4), + DIAMETER_LINK_BROKEN_E (5), + DIAMETER_AUTH_EXPIRED_E (6), + DIAMETER_USER_MOVED_E (7), + DIAMETER_SESSION_TIMEOUT_E (8) + } + with { + variant "length=32" + } + type enumerated Disconnect_Cause_Type{ + REBOOTING_E (0), + BUSY_E (1), + DO_NOT_WANT_TO_TALK_TO_YOU_E (2) + } + with { + variant "length=32" + } + type enumerated Auth_Session_State_Type{ + STATE_MAINTAINED_E (0), + NO_STATE_MAINTAINED_E (1) + } + with { + variant "length=32" + } + //type DiameterURI SIP_AOR_Type;// RFC 4740 sec. 9.8 + type enumerated SIP_User_Auth_Ty_Type{ + //Ref: RFC4740, section 9.10 + REGISTRATION_E (0), + DEREGISTRATION_E (1), + REGISTRATION_AND_CAPABILITIES_E (2) + } + with { + variant "length=32" + } + type enumerated SIP_Srv_Assgmt_Type{ + NO_ASSIGNMENT_E (0), + REGISTRATION_E (1), + RE_REGISTRATION_E (2), + UNREGISTERED_USER_E (3), + TIMEOUT_DEREGISTRATION_E (4), + USER_DEREGISTRATION_E (5), + TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME_E (6), + USER_DEREGISTRATION_STORE_SERVER_NAME_E (7), + ADMINISTRATIVE_DEREGISTRATION_E (8), + AUTHENTICATION_FAILURE_E (9), + AUTHENTICATION_TIMEOUT_E (10), + DEREGISTRATION_TOO_MUCH_DATA_E (11) + } + with { + variant "length=32" + } + + type enumerated SIP_Usr_Dat_Al_Av_Type{ + USER_DATA_NOT_AVAILABLE_E (0), + USER_DATA_ALREADY_AVAILABLE_E (1) + } + with { + variant "length=32" + } + type enumerated SIP_Auth_Schm_Type{ + DIGEST_E (0), // RFC4740 Clause 9.5.1. SIP-Authentication-Scheme AVP + DIGEST_AKAv1_MD5_E (1), // TODO CHeck the value are correct + NASS_BUNDLE_E (2), // TODO CHeck the value are correct + GIBA_E (3), // TODO CHeck the value are correct + UNKNOWN_E + } + with { + variant "length=32" + } + type enumerated SIP_Reason_Code_Type{ + PERMANENT_TERMINATION_E (0), + NEW_SIP_SERVER_ASSIGNED_E (1), + SIP_SERVER_CHANGE_E (2), + REMOVE_SIP_SERVER_E (3) + } + with { + variant "length=32" + } + /* Types on Sh interface */ + type enumerated Data_Reference_Type{ + REPOSITORY_DATA_E (0), + IMS_PUBLIC_IDENTITY_E (10), + IMS_USER_STATE_E (11), + S_CSCF_NAME_E (12), + INITIAL_FILTER_CRITERIA_E (13), + LOCATION_INFORMATION_E (14), + USER_STATE_E (15), + CHARGING_INFORMATION_E (16), + MSISDN (17), + PSI_ACTIVATION_E (18), + DSAI_E (19), + SERVICE_LEVEL_TRACE_INFO_E (21), + IP_ADDRESS_SECURE_BINDING_INFORMATION_E (22), + SERVICE_PRIORITY_LEVEL_E (23), + SMS_REGISTRATION_INFO_E (24), + UE_REACHABILITY_FOR_IP_E (25), + TADS_INFORMATION_E (26), + STN_SR_E (27), + UE_SRVCC_CAPABILITY_E (28), + EXTENDED_PRIORITY_E (29), + CSRN_E (30), + REFERENCE_LOCATION_INFORMATION (31), + IMSI (32), + IMS_PRIVATE_USER_IDENTITY_E (33) + } + with { + variant "length=32" + } + type enumerated Subs_Req_Ty_Type{ + SUBSCRIBE_E (0), + UNSUBSCRIBE_E (1) + } + with { + variant "length=32" + } + type enumerated Request_Domain_Type{ + CS_DOMAIN_E (0), + PS_DOMAIN_E (1) + } + with { + variant "length=32" + } + type enumerated Current_Location_Type{ + DO_NOT_NEED_INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (0), + INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (1) + } + with { + variant "length=32" + } + type enumerated Identity_Set_Type{ + ALL_IDENTITIES_E (0), + REGISTERED_IDENTITIES_E (1), + IMPLICIT_IDENTITIES_E (2), + ALIAS_IDENTITIES_E (3) + } + with { + variant "length=32" + } + type enumerated Send_Data_Indication_Type{ + USER_DATA_NOT_REQUESTED_E (0), + USER_DATA_REQUESTED_E (1) + } + with { + variant "length=32" + } + type enumerated Experimental_Result_Type{ // See http://diameter-protocol.blogspot.fr/2012/10/list-of-experimental-result-codes.html + DIAMETER_FIRST_REGISTRATION_E (2001), + DIAMETER_SUBSEQUENT_REGISTRATION_E (2002), + DIAMETER_UNREGISTERED_SERVICE_E (2003), // due to TS 129 299 Clause 6.2.1.3 + DIAMETER_SUCCESS_SERVER_NAME_NOT_STORED_E (2004), + //DIAMETER_UNREGISTERED_SERVICE_E (2005), // deleted because belongs to Result-Code AVP and not Experimental Result Code see: RFC 4740 Diameter SIP Application Clause 10.1.1. Success Result-Code AVP Values + DIAMETER_AUTHENTICATION_DATA_UNAVAILABLE_E (4181), + DIAMETER_ERROR_USER_UNKNOWN_E (5001), + DIAMETER_ERROR_IDENTITIES_DONT_MATCH_E (5002), + DIAMETER_ERROR_IDENTITY_NOT_REGISTERED_E (5003), + DIAMETER_ERROR_ROAMING_NOT_ALLOWED_E (5004), + DIAMETER_ERROR_IDENTITY_ALREADY_REGISTERED_E (5005), + DIAMETER_ERROR_AUTH_SCHEME_NOT_SUPPORTED_E (5006), + DIAMETER_ERROR_IN_ASSIGNMENT_TYPE_E (5007), + DIAMETER_ERROR_TOO_MUCH_DATA_E (5008), + DIAMETER_ERROR_NOT_SUPPORTED_USER_DATA_E (5009), + // Ref: ETSI TS 129 214 5.5 + INVALID_SERVICE_INFORMATION_E (5061), + FILTER_RESTRICTIONS_E (5062), + REQUESTED_SERVICE_NOT_AUTHORIZED_E (5063), + DUPLICATED_AF_SESSION_E (5064), + IP_CAN_SESSION_NOT_AVAILABLE_E (5065), + UNAUTHORIZED_NON_EMERGENCY_SESSION_E (5066), + UNAUTHORIZED_SPONSORED_DATA_CONNECTIVITY_E (5067), + + // Ref: ETSI TS 129 329 + DIAMETER_ERROR_USER_DATA_NOT_RECOGNIZED_E (5100), + DIAMETER_ERROR_OPERATION_NOT_ALLOWED_E (5101), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_READ_E (5102), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_MODIFIED_E (5103), + DIAMETER_ERROR_USER_DATA_CANNOT_BE_NOTIFIED_E (5104), + DIAMETER_ERROR_TRANSPARENT_DATA_OUT_OF_SYNC_E (5105), + DIAMETER_ERROR_SUBS_DATA_ABSENT(5106), + DIAMETER_ERROR_DSAI_NOT_AVAILABLE_E (5108), + DIAMETER_USER_DATA_NOT_AVAILABLE_E (4100), + DIAMETER_PRIOR_UPDATE_IN_PROGRESS_E (4101), + + + + + + DIAMETER_ERROR_INITIAL_PARAMETERS_E (5140), + DIAMETER_ERROR_TRIGGER_EVENT_E (5141), + DIAMETER_PCC_RULE_EVENT_E (5142), + DIAMETER_ERROR_BEARER_NOT_AUTHORIZED_E (5143), + DIAMETER_ERROR_TRAFFIC_MAPPING_INFO_REJECTED_E (5144), + DIAMETER_ERROR_CONFLICTING_REQUEST_E (5147), + // Ref: 3GPP TS 29.215 + DIAMETER_ERROR_SUBSESSION_E (5470), + DIAMETER_ERROR_UNKNOWN_EPS_SUBSCRIPTION_E (5420),//(9990), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + DIAMETER_ERROR_RAT_NOT_ALLOWED_E (5421),//(9991), // Set the correct error code value - See ETSI TS 129 272 Clause 5.2.1.1.3 Detailed behaviour of the HSS + DIAMETER_ERROR_EQUIPMENT_UNKNOWN_E (5422), //See ETSI TS 129 272 Clause 7.4.3 + DIAMETER_ERROR_UNKOWN_SERVING_NODE_E (5423),//See ETSI TS 129 272 Clause 7.4.3 + unknown + } + with { + variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;length=32;decode=CodecHelper.decodeExperimental_Result_Type()" + } + + type enumerated CC_Request_Ty_Type{ + // Ref: RFC4006 8.3. CC-Request-Type AVP + INITIAL_REQUEST_E (1), + UPDATE_REQUEST_E (2), + TERMINATION_REQUEST_E (3), + EVENT_REQUEST_E (4) + } + with { + variant "length=32" + } + + type enumerated Subscription_Id_Ty_Type{ + // Ref: RFC4006 8.47. Subscription-Id-Type AVP + END_USER_E164_E (0), + END_USER_IMSI_E (1), + END_USER_SIP_URI_E (2), + END_USER_NAI_E (3), + END_USER_PRIVATE_E (4) + } + with { + variant "length=32" + } + type enumerated Requested_Action_Type{ + // Ref: RFC4006 8.41. Requested-Action AVP + DIRECT_DEBITING_E (0), + REFUND_ACCOUNT_E (1), + CHECK_BALANCE_E (2), + PRICE_ENQUIRY_E (3) + } + with { + variant "length=32" + } + type enumerated Tariff_Change_Usage_Type{ + // Ref: RFC4006 8.27. Tariff-Change-Usage AVP + UNIT_BEFORE_TARIFF_CHANGE_E (0), + UNIT_AFTER_TARIFF_CHANGE_E (1), + UNIT_INDETERMINATE_E (2) + } + with { + variant "length=32" + } + type enumerated Multiple_Serv_Indi_Type{ + // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + MULTIPLE_SERVICES_NOT_SUPPORTED_E (0), + MULTIPLE_SERVICES_SUPPORTED_E (1) + } + with { + variant "length=32" + } + type enumerated CC_Unit_Ty_Type { + // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + TIME_E (0), + MONEY_E (1), + TOTAL_OCTETS_E (2), + INPUT_OCTETS_E (3), + OUTPUT_OCTETS_E (4), + SERVICE_SPECIFIC_UNITS_E (5) + } + with { + variant "length=32" + } + + type enumerated Final_Unit_Action_Type{ + // Ref: RFC4006 8.35. Final-Unit-Action AVP + TERMINATE_E (0), + REDIRECT_E (1), + RESTRICT_ACCESS_E (2) + } + with { + variant "length=32" + } + type enumerated Redirect_Address_Ty_Type{ + // Ref: RFC4006 8.38. Redirect-Address-Type AVP + IPV4_ADDRESS_E (0), + IPV6_ADDRESS_E (1), + URL_E (2), + SIP_URI_E (3) + } + with { + variant "length=32" + } + type enumerated User_Equipment_Info_Ty_Type { + // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + IMEISV_E (0), + MAC_E (1), + EUI64_E (2), + MODIFIED_EUI64_E (3) + } + with { + variant "length=32" + } + type enumerated CC_Session_Failover_Type{ + // Ref: RFC4006 8.4. CC-Session-Failover AVP + FAILOVER_NOT_SUPPORTED_E (0), + FAILOVER_SUPPORTED_E (1) + } + with { + variant "length=32" + } + type enumerated Check_Balance_Result_Type{ + // Ref: RFC4006 8.6. Check-Balance-Result AVP + ENOUGH_CREDIT_E (0), + NO_CREDIT_E (1) + } + with { + variant "length=32" + } + type enumerated Credit_Cont_Fail_Hand_Type{ + // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + TERMINATE_E (0), + CONTINUE_E (1), + RETRY_AND_TERMINATE_E (2) + } + with { + variant "length=32" + } + type enumerated Direct_Debi_Fail_Hand_Type{ + // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + TERMINATE_OR_BUFFER_E (0), + CONTINUE_E (1) + } + with { + variant "length=32" + } + }//end group RFC3588 types + + group AVP_GxFrom132_299_Types{ + + type enumerated CSG_Access_Mode{ + // Ref: ETSI TS 132 299 7.2.46A + CLOSED_MODE_E (0), + HYBRID_MODE_E (1) + } + with { + variant "length=32" + } + + type enumerated CSG_Membership_Indication{ + // Ref: ETSI TS 132 299 7.2.46B + NOT_CSG_MEMBER_E (0), + CSG_MEMBER_E (1) + } + with { + variant "length=32" + } + + }//end group AVP_GxFrom132_299_Types + + group AVP_GxFrom132_422_Types{ + + type enumerated Job_Type{ + // Ref: ETSI TS 132 422 5.10.1 + IMMEDIATE_MDT_ONLY_E (0), + LOGGED_MDT_ONLY_E (1), + TRACE_ONLY_E (2), + IMMEDIATE_MDT_AND_TRACE_E (3) + } + with { + variant "length=32" + } + + type enumerated Report_Interval{ + // Ref: ETSI TS 132 422 5.10.5 + REPORT_INTERVAL_250MS_E (0), + REPORT_INTERVAL_500MS_E (1), + REPORT_INTERVAL_1000MS_E (2), + REPORT_INTERVAL_2000MS_E (3), + REPORT_INTERVAL_3000MS_E (4), + REPORT_INTERVAL_4000MS_E (5), + REPORT_INTERVAL_6000MS_E (6), + REPORT_INTERVAL_8000MS_E (7), + REPORT_INTERVAL_12000MS_E (8), + REPORT_INTERVAL_16000MS_E (9), + REPORT_INTERVAL_20000MS_E (10), + REPORT_INTERVAL_24000MS_E (11), + REPORT_INTERVAL_28000MS_E (12), + REPORT_INTERVAL_32000MS_E (13), + REPORT_INTERVAL_64000MS_E (14), + REPORT_INTERVAL_120MS_E (15), + REPORT_INTERVAL_240MS_E (16), + REPORT_INTERVAL_480MS_E (17), + REPORT_INTERVAL_640MS_E (18), + REPORT_INTERVAL_1024MS_E (19), + REPORT_INTERVAL_2048MS_E (20), + REPORT_INTERVAL_5120MS_E (21), + REPORT_INTERVAL_10240MS_E (22), + REPORT_INTERVAL_60000MS_E (23), + REPORT_INTERVAL_360000MS_E (24), + REPORT_INTERVAL_720000MS_E (25), + REPORT_INTERVAL_1800000MS_E (26), + REPORT_INTERVAL_3600000MS_E (27) + } + with { + variant "length=32" + } + + type enumerated Report_Amount{ + // Ref: ETSI TS 132 422 5.10.6 + AMOUNT_1_E (0), + AMOUNT_2_E (1), + AMOUNT_4_E (2), + AMOUNT_8_E (3), + AMOUNT_16_E (4), + AMOUNT_32_E (5), + AMOUNT_64_E (6), + AMOUNT_INFINITY_E (7) + } + with { + variant "length=32" + } + + type enumerated Logging_Interval{ + // Ref: ETSI TS 132 422 5.10.8 + LOGGING_INTERVAL_1_28_E (0), + LOGGING_INTERVAL_2_56_E (1), + LOGGING_INTERVAL_3_12_E (2), + LOGGING_INTERVAL_10_24_E (3), + LOGGING_INTERVAL_20_49_E (4), + LOGGING_INTERVAL_30_72_E (5), + LOGGING_INTERVAL_40_96_E (6), + LOGGING_INTERVAL_61_44_E (7) + } + with { + variant "length=32" + } + + type enumerated Logging_Duration{ + // Ref: ETSI TS 132 422 5.10.9 + LOGGING_DURATION_600SEC_E (0), + LOGGING_DURATION_1200SEC_E (1), + LOGGING_DURATION_2400SEC_E (2), + LOGGING_DURATION_3600SEC_E (3), + LOGGING_DURATION_5400SEC_E (4), + LOGGING_DURATION_7200SEC_E (5) + } + with { + variant "length=32" + } + + type enumerated Trace_Depth{ + // Ref: ETSI TS 132 422 5.3 + MINIMUM_E (0), + MEDIUM_E (1), + MAXIMUM_E (2), + MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), + MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), + MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) + } + with { + variant "length=32" + } + + }//end group AVP_GxFrom132_422_Types + + }//end group AVP_Types + group AVPs{ + /* AVPNs */ + group RFC3588_AVPs{ + type record Origin_Host_AVP{ + //Ref: RFC3588 6.3. Origin-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 264);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Origin_Realm_AVP{ + //Ref: RFC3588 6.4. Origin-Realm AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 296);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Host_IP_Address_AVP{ + //Ref: RFC3588 5.3.5. Host-IP-Address AVP + AVP_Header aVP_Header,// + Address aVP_Data + } + with { + variant "present=bytes(4, 257);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Vendor_Id_AVP{ + //Ref: RFC3588 5.3.3. Vendor-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 266)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Product_Name_AVP{ + //Ref: RFC3588 5.3.7. Product-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 269);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Origin_State_Id_AVP{ + //Ref: RFC3588 8.16. Origin-State-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 278);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Supported_Vendor_Id_AVP{ + //Ref; 5.3.6. Supported-Vendor-Id AVP + AVP_Header aVP_Header,// + Int32 aVP_Data + } + with { + variant "present=bytes(4, 265);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Auth_Application_Id_AVP{ + //Ref: RFC3588 6.8. Auth-Application-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 258)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Inband_Security_Id_AVP{ + //Ref: RFC3588 6.10. Inband-Security-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 299);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Acct_Application_Id_AVP{ + //Ref: RFC3588 6.9. Acct-Application-Id AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 259)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Vendor_Specific_Appl_Id_AVP{ + //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + AVP_Header aVP_Header,// ::= < AVP Header: 260 > + set of Vendor_Id_AVP vendor_Id optional, + set of Auth_Application_Id_AVP auth_Application_Id optional, + set of Acct_Application_Id_AVP acct_Application_Id optional + } + with { + variant "present=bytes(4, 260);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (vendor_Id) "fieldPresent=bytes(4, 266)&&CodecHelper.isAvailable()" + variant (auth_Application_Id) "fieldPresent=bytes(4, 258)&&CodecHelper.isAvailable()" + variant (acct_Application_Id) "fieldPresent=bytes(4, 259)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Firmware_Revision_AVP{ + //Ref: RFC3588 5.3.4. Firmware-Revision AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 267);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Result_Code_AVP{ + //Ref: RFC3588 7.1. Result-Code AVP + AVP_Header aVP_Header,// + //UInt32 + Result_Code_Type aVP_Data + } + with { + variant "present=bytes(4, 268);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Error_Message_AVP{ + //Ref: RFC3588 7.3. Error-Message AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 281);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Failed_AVP{ + //Ref: RFC3588 7.5. Failed-AVP AVP + AVP_Header aVP_Header,// + set of AVP_Type aVP + } + with { + variant "present=bytes(4, 279);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP) "condition=CodecHelper.leaveScope()" + } + type record Session_Id_AVP{ + //Ref: RFC3588 8.8. Session-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 263);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Destination_Realm_AVP{ + //Ref: RFC3588 6.6. Destination-Realm AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Destination_Host_AVP{ + //Ref: RFC3588 6.5. Destination-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 293);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Re_Auth_Request_Type_AVP{ + //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + AVP_Header aVP_Header,// + Re_Auth_Req_Type aVP_Data + } + with { + variant "present=bytes(4, 285);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record User_Name_AVP{ + //Ref: RFC3588 8.14. User-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 1);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Proxy_Host_AVP{ + //Ref: RFC3588 6.7.3. Proxy-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 280);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Proxy_State_AVP{ + //Ref: RFC3588 6.7.4. Proxy-State AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 33);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record Proxy_Info_AVP{ + //Ref: RFC3588 6.7.2. Proxy-Info AVP + AVP_Header aVP_Header,// + Proxy_Host_AVP proxy_Host,//requi. + Proxy_State_AVP proxy_State,//requi. + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 284);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Route_Record_AVP{ + //Ref: RFC3588 6.7.1. Route-Record AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 282);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Error_Reporting_Host_AVP{ + //Ref: RFC3588 7.4. Error-Reporting-Host AVP + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 294);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Redirect_Host_AVP{ + /* Ref: RFC3588 6.12. Redirect-Host AVP + NOTE: In Ref aVP_Data type is not defined, I presume it should be Diameter_Identity as the other xxx_Host_AVPs */ + AVP_Header aVP_Header,// + Diameter_Identity aVP_Data + } + with { + variant "present=bytes(4, 292);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Redirect_Host_Usage_AVP{ + //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + AVP_Header aVP_Header,// + Redirect_Host_Usage_Type aVP_Data + } + with { + variant "present=bytes(4, 261);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + +// type record Redirect_Host_Cache_Time_AVP{ +// // NOTE Ref: RFC3588 Redirect_Host_Cache_Time_AVP is NOT defined. +// // I presume it should be Time type. rmag +// AVP_Header aVP_Header,// +// Time aVP_Data +// }; + type record Accounting_Record_Type_AVP{ + //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + AVP_Header aVP_Header,// + Acc_Record_Type aVP_Data + } + with { + variant "present=bytes(4, 480);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Accounting_Record_Number_AVP{ + //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 485);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Accounting_Sub_Session_Id_AVP{ + //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + AVP_Header aVP_Header,// + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 287);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Acct_Session_Id_AVP{ + //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 44);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record Acct_Multi_Session_Id_AVP{ + //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 50);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Acct_Interim_Interval_AVP{ + //Ref: RFC3588 9.8.2. Acct-Interim-Interval + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 85);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Accounting_Realtime_Required_AVP{ + //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + AVP_Header aVP_Header,// + Acc_Realtime_Req_Type aVP_Data + } + with { + variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Event_Timestamp_AVP{ + //Ref: RFC3588 8.21. Event-Timestamp AVP + AVP_Header aVP_Header,// + Time aVP_Data + } + with { + variant "present=bytes(4, 55);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Termination_Cause_AVP{ + //Ref: RFC3588 8.15. Termination-Cause AVP + AVP_Header aVP_Header,// + Termination_Cause_Type aVP_Data + } + with { + variant "present=bytes(4, 295);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Class_AVP{ + //Ref: RFC3588 8.20. Class AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 25);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record Disconnect_Cause_AVP{ + //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + AVP_Header aVP_Header,// + Disconnect_Cause_Type aVP_Data + } + with { + variant "present=bytes(4, 273);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + }//enf of group RFC3855_AVPs + group RFC4740_AVPs{ + /* ******** Cx *******/ + type record Auth_Session_State_AVP{ + // Ref: RFC3588 8.11. Auth-Session-State AVP + AVP_Header aVP_Header,// + Auth_Session_State_Type aVP_Data + } + with { + variant "present=bytes(4, 277);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_AOR_AVP{ + // Ref: RFC4740 9.8. SIP-AOR AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI/SIP_AOR_Type replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + with { + variant "present=bytes(4, 122);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" + } + type record SIP_Visited_Network_Id_AVP{ + // Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 386);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_User_Authorization_Type_AVP{ + // Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP + AVP_Header aVP_Header,// + SIP_User_Auth_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 387);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Server_URI_AVP{ + // Ref: RFC4740 9.2 SIP-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 371);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_MandatoryCapability_AVP{ + //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 373);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_OptionalCapability_AVP{ + //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 374);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_Server_Capabilities_AVP{ + //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP + AVP_Header aVP_Header,// + set of SIP_MandatoryCapability_AVP sIP_MandatoryCapability optional, + set of SIP_OptionalCapability_AVP sIP_OptionalCapability optional, + set of SIP_Server_URI_AVP sIPServerURI optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 372);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (sIP_MandatoryCapability) "fieldPresent=bytes(4, 373)&&CodecHelper.isAvailable()" + variant (sIP_OptionalCapability) "fieldPresent=bytes(4, 374)&&CodecHelper.isAvailable()" + variant (sIPServerURI) "fieldPresent=bytes(4, 371)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Authorization_Lifetime_AVP{ + //Ref: RFC35888.9. Authorization-Lifetime AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 291);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Auth_Grace_Period_AVP{ + //Ref: RFC35888.10. Auth-Grace-Period AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 276);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Redirect_Max_Cache_Time_AVP { + //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 262);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Server_Assignment_Type_AVP{ + //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP + AVP_Header aVP_Header,// + SIP_Srv_Assgmt_Type aVP_Data + } + with { + variant "present=bytes(4, 375);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_User_Data_Already_Available_AVP{ + //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP + AVP_Header aVP_Header,// + SIP_Usr_Dat_Al_Av_Type aVP_Data + } + with { + variant "present=bytes(4, 392);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_Supported_User_Data_Type_AVP{ + //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 388);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_User_Data_Type_AVP{ + // Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 390);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_User_Data_Contents_AVP{ + // Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 391);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record SIP_User_Data_AVP{ + //Ref: RFC4740 9.12. SIP-User-Data AVP + AVP_Header aVP_Header,// < AVP Header: 389 > + SIP_User_Data_Type_AVP sIP_User_Data_Type,//req. + SIP_User_Data_Contents_AVP sIP_User_Data_Contents,//req. + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 389);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record SIP_Accounting_Information_AVP{ + //Ref: RFC4740 9.1. SIP-Accounting-Information AVP + AVP_Header aVP_Header,// + set of SIP_Accounting_Server_URI_AVP sIP_Accounting_Server_URI optional, + set of SIP_Credit_Control_Server_URI_AVP sIP_Credit_Control_Server_URI optional, + set of AVP_Type aVP_Type optional + } + + with { + variant "present=bytes(4, 368);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (sIP_Accounting_Server_URI) "fieldPresent=bytes(4, 369)&&CodecHelper.isAvailable()" + variant (sIP_Credit_Control_Server_URI) "fieldPresent=bytes(4, 370)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record SIP_Accounting_Server_URI_AVP{ + //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + with { + variant "present=bytes(4, 369);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// encode (aVP_Data) "SipNist" +// variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" + variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" + } + + type record SIP_Credit_Control_Server_URI_AVP{ + //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + with { + variant "present=bytes(4, 370);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// encode (aVP_Data) "SipNist" +// variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" + variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" + } + type record SIP_Method_AVP{ + //Ref: RFC4740 9.14. SIP-Method AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 393);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Number_Auth_Items_AVP{ + //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 382);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type union SIP_Auth_Data_Item_AVP { + SIP_Auth_Data_Item_RFC_AVP sIP_Auth_Data_Item_RFC_AVP, //RFC type definition + SIP_Auth_Data_Item_3GPP_AVP sIP_Auth_Data_Item_3GPP_AVP //3GPP type definition + } + type record SIP_Auth_Data_Item_RFC_AVP{ + //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + AVP_Header aVP_Header,//SIP-Auth-Data-Item ::= < AVP Header: 376 > + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme,//requ. + SIP_Item_Number_AVP sIP_Item_Number optional, + SIP_Authenticate_AVP sIP_Authenticate optional, + SIP_Authorization_AVP sIP_Authorization optional, + SIP_Authentication_Info_AVP sIP_Authentication_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 376);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type union SIP_Authentication_Scheme_AVP{ + SIP_Authentication_Scheme_RFC_AVP sIP_Authentication_Scheme_RFC_AVP, + SIP_Authentication_Scheme_3GPP_AVP sIP_Authentication_Scheme_3GPP_AVP + } + + type record SIP_Authentication_Scheme_RFC_AVP{ + //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + AVP_Header aVP_Header,// + SIP_Auth_Schm_Type aVP_Data + } + with { + variant "present=bytes(4, 377);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Item_Number_AVP{ + //Ref: RFC4740 9.5.2 SIP-Item-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 378);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type union SIP_Authenticate_AVP { + SIP_Authenticate_RFC_AVP sIP_Authenticate_RFC_AVP, //RFC type definition + SIP_Authenticate_3GPP_AVP sIP_Authenticate_3GPP_AVP //3GPP type definition + } + + type record SIP_Authenticate_RFC_AVP{ + //Ref: RFC4740 9.5.3. SIP-Authenticate AVP + AVP_Header aVP_Header,//SIP-Authenticate ::= < AVP Header: 379 > + Digest_Realm_AVP digest_Realm,//requ. + Digest_Nonce_AVP digest_Nonce,//requ. + Digest_Domain_AVP digest_Domain optional, + Digest_Opaque_AVP digest_Opaque optional, + Digest_Stale_AVP digest_Stale optional, + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_QoP_AVP digest_QoP optional, + Digest_HA1_AVP digest_HA1 optional, + set of Digest_Auth_Param_AVP digest_Auth_Param optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 379);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type union SIP_Authorization_AVP { + SIP_Authorization_RFC_AVP sIP_Authorization_RFC_AVP, //RFC type definition + SIP_Authorization_3GPP_AVP sIP_Authorization_3GPP_AVP //3GPP type definition + } + + type record SIP_Authorization_RFC_AVP{ + // Ref: RFC4740 9.5.4. SIP-Authorization AVP + AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 380 > + Digest_Username_AVP digest_Username,//requi. + Digest_Realm_AVP digest_Realm, + Digest_Nonce_AVP digest_Nonce, + Digest_URI_AVP digest_URI, + Digest_Response_AVP digest_Response,//requi. + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_CNonce_AVP digest_CNonce optional, + Digest_Opaque_AVP digest_Opaque optional, + Digest_QoP_AVP digest_QoP optional, + Digest_Nonce_Count_AVP digest_Nonce_Count optional, + Digest_Method_AVP digest_Method optional, + Digest_Entity_Body_Hash_AVP digest_Entity_Body_Hash optional, + set of Digest_Auth_Param_AVP digest_Auth_Param optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 380);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record SIP_Authentication_Info_AVP{ + // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + AVP_Header aVP_Header,//SIP-Authentication-Info ::= < AVP Header: 381 > + Digest_Nextnonce_AVP digest_Nextnonce optional, + Digest_QoP_AVP digest_QoP optional, + Digest_Response_Auth_AVP digest_Response_Auth optional, + Digest_CNonce_AVP digest_CNonce optional, + Digest_Nonce_Count_AVP digest_Nonce_Count optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 381);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + + type record SIP_Reason_Info_AVP{ + //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 385);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Deregistration_Reason_AVP{ + // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 383 > + SIP_Reason_Code_AVP sIP_Reason_Code_AVP,//requi. + SIP_Reason_Info_AVP sIP_Reason_Info_AVP optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 383);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record SIP_Reason_Code_AVP{ + // Ref: RFC4740 .7.1. SIP-Reason-Code AVP + AVP_Header aVP_Header,// + SIP_Reason_Code_Type aVP_Data + } + with { + variant "present=bytes(4, 384);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + }//end of group RFC4740_AVPs + + /* ******** Digest AVPs ********* */ + group Digest_AVPs{ + //type UInt8 Digest_Ty_Type; + + type record Digest_Realm_AVP{ + //Ref:RFC4590 3.2. Digest-Realm Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of type system +// Digest_Ty_Type Type,//104 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 104)" +// variant (Length) "intTag='aVP_len', value-2" +// } + + type record Digest_Nonce_AVP{ + //Ref:RFC4590 3.3. Digest-Nonce Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//105 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 105)" +// variant (Length) "intTag='aVP_len', value-2" +// } + + type record Digest_Domain_AVP{ + //Ref:RFC4590 3.17. Digest-Domain Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//119 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 119)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Opaque_AVP{ + //Ref:RFC4590 3.14. Digest-Opaque Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//116 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 116)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Stale_AVP{ + //Ref:RFC4590 3.18. Digest-Stale Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//120 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 120)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Algorithm_AVP{ + //Ref:RFC4590 3.9. Digest-Algorithm Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//111 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 111)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_QoP_AVP{ + //Ref:RFC4590 3.8. Digest-Qop Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //110 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 110)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_HA1_AVP{ + //Ref:RFC4590 3.19. Digest-HA1 Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//121 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 121)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Auth_Param_AVP{ + //Ref:RFC4590 3.15. Digest-Auth-Param Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//117 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 117);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (Length) "intTag='aVP_len', value-2" +// variant (Text) "condition=CodecHelper.leaveScope()" +// } + type record Digest_Username_AVP{ + //Ref:RFC4590 3.13. Digest-Username Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //115 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 115)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_URI_AVP{ + //Ref:RFC4590 3.7. Digest-URI Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //109 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 109)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Response_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//103 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 103)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_CNonce_AVP{ + //Ref:RFC4590 3.11. Digest-CNonce Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //113 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 113)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Nonce_Count_AVP{ + //Ref:RFC4590 3.12. Digest-Nonce-Count Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//114 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 114)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Method_AVP{ + //Ref:RFC4590 3.6. Digest-Method Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type, //108 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 108)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Entity_Body_Hash_AVP{ + //Ref:RFC4590 3.10. Digest-Entity-Body-Hash Attribute + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//112 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 112)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Nextnonce_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//107 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 107)" +// variant (Length) "intTag='aVP_len', value-2" +// } + type record Digest_Response_Auth_AVP{ + //Ref:RFC4590 + AVP_Header aVP_Header,// + UTF8String aVP_Data +// Changed due to the common syntax of Diameter data type system +// Digest_Ty_Type Type,//106 +// UInt8 Length, +// UTF8String Text + } +// with { +// variant "present=bytes(1, 106)" +// variant (Length) "intTag='aVP_len', value-2" +// } + /* ************ end of Digest AVPs************ */ + }//end of Digest AVPs + /* ***** Sh Ref: 3GPP TS 29.329 Table 6.3.1: Diameter Multimedia Application AVPs ***** + User_Identity (700), + MSISDN (701), + Data_Reference (703), + Service_Indication (704), + Subs_Req_Type (705), + Requested-Domain (706), + Current-Location (707), + Identity-Set (708), + Expiry-Time (709), + Send-Data-Indication (710), + Server-Name (602), + Supported-Features (628), + Feature-List-ID (629), + Feature-List (630), + Supported-Applications (631), + Public-Identity (601), + DSAI-Tag (711), + Wildcarded-PSI (634), + Wildcarded-IMPU (636) */ + group Sh_AVPs{ + type record Public_Identity_AVP{ + // Ref: 3GPP TS 29.329 6.3.15 Public-Identity AVP + // 3GPP TS 29.229 6.3.2 Public-Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 601);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type set of Public_Identity_AVP Public_Identity_AVPs; + + type record User_Identity_AVP{ + // Ref: 3GPP TS 29.329 6.3.1 User-Identity AVP + AVP_Header aVP_Header,// + Public_Identity_AVP public_Identity_AVP optional, + MSISDN_AVP mSISDN_AVP optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record MSISDN_AVP{ + // Ref: 3GPP TS 29.329 6.3.2 MSISDN AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Data_Reference_AVP{ + // Ref: 3GPP TS 29.3296.3.4 Data-Reference AVP + AVP_Header aVP_Header,// + Data_Reference_Type aVP_Data + } + with { + variant "present=bytes(4, 703);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Service_Indication_AVP{ + // Ref: 3GPP TS 29.329 6.3.5 Service-Indication AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 704);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + + type record Subs_Req_Type_AVP{ + // Ref: 3GPP TS 29.329 6.3.6 Subs-Req-Type AVP + AVP_Header aVP_Header,// + Subs_Req_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 705);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Requested_Domain_AVP{ + // Ref: 3GPP TS 29.329 6.3.7 Requested-Domain AVP + AVP_Header aVP_Header,// + Request_Domain_Type aVP_Data + } + with { + variant "present=bytes(4, 706);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Current_Location_AVP{ + // Ref: 3GPP TS 29.329 6.3.8 Current-Location AVP + AVP_Header aVP_Header,// + Current_Location_Type aVP_Data + } + with { + variant "present=bytes(4, 707);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Identity_Set_AVP{ + // Ref: 3GPP TS 29.329 6.3.10 Identity-Set AVP + AVP_Header aVP_Header,// + Identity_Set_Type aVP_Data + } + with { + variant "present=bytes(4, 708);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Expiry_Time_AVP{ + // Ref: 3GPP TS 29.329 6.3.16 Expiry-Time + AVP_Header aVP_Header,// + Time aVP_Data + } + with { + variant "present=bytes(4, 709);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Send_Data_Indication_AVP{ + // Ref: 3GPP TS 29.329 6.3.17 Send-Data-Indication AVP + AVP_Header aVP_Header,// + Send_Data_Indication_Type aVP_Data + } + with { + variant "present=bytes(4, 710);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Repository_Data_ID_AVP { + //ref: TS129 328 6.3.24 + AVP_Header aVP_Header, //Repository Data ID ::= + Service_Indication_AVP service_Indication, + Sequence_Number_AVP sequence_Number, + set of AVP_Type aVP_Type optional + } + + type record Sequence_Number_AVP{ + //Ref: TS129 328 6.3.25 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + + type record Server_Name_AVP{ + // Ref: 3GPP TS 29.329 6.3.9 Server-Name AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 602);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Supported_Features_AVP{ + // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) + AVP_Header aVP_Header,// + Vendor_Id_AVP vendor_Id, + Feature_List_ID_AVP feature_list_Id optional, + Feature_List_AVP feature_list, + set of AVP_Type aVP_Data optional //other parameters. + } + with { + variant "present=bytes(4, 628);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Feature_List_ID_AVP{ + // Ref: 3GPP TS 29.229, clause 6.3.30 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 629);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Feature_List_AVP{ + // Ref: 3GPP TS 29.229, clause 6.3.31 + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 630);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Wildcarded_PSI_AVP{ + // Ref: 3GPP TS 29.329 6.3.19 Wildcarded-PSI AVP , 3GPP TS 29.229 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Wildcarded_IMPU_AVP{ + // Ref: 3GPP TS 29.329 6.3.20 Wildcarded-IMPU AVP , 3GPP TS 29.229 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 636);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record DSAI_Tag_AVP{ + // Ref: 3GPP TS 29.329 6.3.18 DSAI-Tag AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 711);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record Experimental_Result_Code_AVP{ + // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + AVP_Header aVP_Header,// + Experimental_Result_Type aVP_Data + } + with { + variant "present=bytes(4, 298);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Experimental_Result_AVP{ + // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values + // FUN 766300-PCL-030 : Experimental-Result AVP shall be used for Sh/Dh errors. + // This is a grouped AVP which contains the 3GPP Vendor ID in the Vendor-Id AVP, and the error code in + // the Experimental-Result-Code AVP. + AVP_Header aVP_Header,// + Vendor_Id_AVP vendor_Id, + Experimental_Result_Code_AVP experimental_Result_Code + } + with { + variant "present=bytes(4, 297);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (experimental_Result_Code) "condition=CodecHelper.leaveScope()" + } + type record User_Data_AVP{ + // Ref: 3GPP TS 29.229 6.3.7 User-Data AVP + // Ref: + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 606);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + } + + group RFC4005_AVPs{ + group NAS_Session_AVPs{ + + type record Called_Station_Id_AVP{ + // Ref: RFC4005 4.5 Called_Station_Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 30);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + }//end group NAS_Session_AVPs + + group IP_Access_Authorization_AVPs { + + type record Framed_IP_Address_AVP{ + // Ref: RFC4005 6.11.1 Framed_IP_Address AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 8);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Framed_IPv6_Prefix_AVP{ + // Ref: RFC4005 6.11.1 Framed_IPv6_Prefix AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Framed_Interface_Id_AVP{ + // Ref: RFC4005 6.11.5. Framed-Interface-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + }//end group IP_Access_Authorization_AVPs + + }//end group RFC4005_AVPs + + /* ***** Rf and Ro Ref: RFC4006 ***** */ + group RFC4006_AVPs{ + type record Service_Context_Id_AVP{ + // Ref: RFC4006 8.42. Service-Context-Id AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 461);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Request_Type_AVP{ + // Ref: RFC4006 8.3. CC-Request-Type AVP + AVP_Header aVP_Header,// + CC_Request_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 416);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Request_Number_AVP{ + // Ref: RFC4006 8.2. CC-Request-Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 415);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Sub_Session_Id_AVP{ + // Ref: RFC4006 8.5. CC-Sub-Session-Id AVP + AVP_Header aVP_Header,// + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 419);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Subscription_Id_Type_AVP{ + // Ref: RFC4006 8.47. Subscription-Id-Type AVP + AVP_Header aVP_Header,// + Subscription_Id_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 450);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Subscription_Id_Data_AVP{ + // Ref: RFC4006 + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 444);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Subscription_Id_AVP{ + // Ref: RFC4006 8.46. Subscription-Id AVP + AVP_Header aVP_Header,//< AVP Header: 443 > + Subscription_Id_Type_AVP subscription_Id_Type, + Subscription_Id_Data_AVP subscription_Id_Data + } + with { + variant "present=bytes(4, 443);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (subscription_Id_Data) "condition=CodecHelper.leaveScope()" + } + type record Service_Identifier_AVP{ + // Ref: RFC4006 8.28. Service-Identifier AVP + AVP_Header aVP_Header,//< AVP Header: 439 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 439);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Time_AVP{ + // Ref: RFC4006 8.21. CC-Time AVP + AVP_Header aVP_Header,//< AVP Header: 420 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 420);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Value_Digits_AVP{ + // Ref: RFC4006 8.10. Value-Digits AVP + AVP_Header aVP_Header,//< AVP Header: 447 > + Int64 aVP_Data + } + with { + variant "present=bytes(4, 447);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Exponent_AVP{ + // Ref: RFC4006 8.9. Exponent AVP + AVP_Header aVP_Header,//< AVP Header: 429 > + Int32 aVP_Data + } + with { + variant "present=bytes(4, 429);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Unit_Value_AVP{ + // Ref: RFC4006 8.8. Unit-Value AVP + AVP_Header aVP_Header,//< AVP Header: 445 > + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } + with { + variant "present=bytes(4, 445);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (exponent) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Currency_Code_AVP{ + // Ref: RFC4006 8.11. Currency-Code AVP + AVP_Header aVP_Header,//< AVP Header: 425 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 425);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set CC_Money_AVP{ + // Ref: RFC4006 8.22. CC-Money AVP + AVP_Header aVP_Header,//< AVP Header: 413 > + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code optional + } + with { + variant "present=bytes(4, 413);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (currency_Code) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record CC_Total_Octets_AVP{ + // Ref: RFC4006 8.23. CC-Total-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 421 > + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 421);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Input_Octets_AVP{ + // Ref: RFC4006 8.24. CC-Input-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 412 > + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 412);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Output_Octets_AVP{ + // Ref: RFC4006 8.25. CC-Output-Octets AVP + AVP_Header aVP_Header,//< AVP Header: 414 > + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 414);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record CC_Service_Specific_Units_AVP{ + // Ref: RFC4006 8.26. CC-Service-Specific-Units AVP + AVP_Header aVP_Header,//< AVP Header: 417 > + UInt64 aVP_Data + } + with { + variant "present=bytes(4, 417);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set Requested_Service_Unit_AVP{ + // Ref: RFC4006 8.18. Requested-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 437 > + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 437);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Requested_Action_AVP{ + // Ref: RFC4006 8.41. Requested-Action AVP + AVP_Header aVP_Header,//< AVP Header: 436 > + Requested_Action_Type aVP_Data + } + with { + variant "present=bytes(4, 436);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Tariff_Change_Usage_AVP{ + // Ref: RFC4006 8.27. Tariff-Change-Usage AVP + AVP_Header aVP_Header,//< AVP Header: 452 > + Tariff_Change_Usage_Type aVP_Data + } + with { + variant "present=bytes(4, 452);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set Used_Service_Unit_AVP{ + // Ref: RFC4006 8.19. Used-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 446 > + Reporting_Reason_AVP reporting_Reason optional, // TS 132 299 + Tariff_Change_Usage_AVP tariff_Change_Usage optional, + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + Event_Charging_TimeStamp_AVP event_Charging_TimeStamp optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 446);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Multiple_Services_Indicator_AVP{ + // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + AVP_Header aVP_Header,//< AVP Header: 455 > + Multiple_Serv_Indi_Type aVP_Data + } + with { + variant "present=bytes(4, 455);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Tariff_Time_Change_AVP{ + // Ref: RFC4006 8.20. Tariff-Time-Change AVP + AVP_Header aVP_Header,//< AVP Header: 451 > + Time aVP_Data + } + with { + variant "present=bytes(4, 451);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type set Granted_Service_Unit_AVP{ + // Ref: RFC4006 8.17. Granted-Service-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 431 > + Tariff_Time_Change_AVP tariff_Time_Change optional, + CC_Time_AVP cC_Time optional, + CC_Money_AVP cC_Money optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 431);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Rating_Group_AVP{ + // Ref: RFC4006 8.29. Rating-Group AVP + AVP_Header aVP_Header,//< AVP Header: 433 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record G_S_U_Pool_Identifier_AVP{ + // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP + AVP_Header aVP_Header,//< AVP Header: 453 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 453);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record CC_Unit_Type_AVP{ + // Ref: RFC4006 8.32. CC-Unit-Type AVP + AVP_Header aVP_Header,//< AVP Header: 454 > + CC_Unit_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 454);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set G_S_U_Pool_Reference_AVP{ + // Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP + AVP_Header aVP_Header,//< AVP Header: 457 > + G_S_U_Pool_Identifier_AVP g_S_U_Pool_Identifier, + CC_Unit_Type_AVP cC_Unit_Type, + Unit_Value_AVP unit_Value + } + with { + variant "present=bytes(4, 457);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (unit_Value) "condition=CodecHelper.leaveScope()" + } + type record Validity_Time_AVP{ + // Ref: RFC4006 8.33. Validity-Time AVP + AVP_Header aVP_Header,//< AVP Header: 448 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 448);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Final_Unit_Action_AVP{ + // Ref: RFC4006 8.35. Final-Unit-Action AVP + AVP_Header aVP_Header,//< AVP Header: 449 > + Final_Unit_Action_Type aVP_Data + } + with { + variant "present=bytes(4, 449);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Restriction_Filter_Rule_AVP{ + // Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + AVP_Header aVP_Header,//< AVP Header: 438 > + IPFilterRule_Type aVP_Data + } + with { + variant "present=bytes(4, 438);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Filter_Id_AVP{ + // Ref: RFC4005 6.7. Filter-Id AVP + AVP_Header aVP_Header,//< AVP Header: 11 > + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 11);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Redirect_Address_Type_AVP{ + // Ref: RFC4006 8.38. Redirect-Address-Type AVP + AVP_Header aVP_Header,//< AVP Header: 433 > + Redirect_Address_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Redirect_Server_Address_AVP{ + // Ref: RFC4006 8.39. Redirect-Server-Address AVP + AVP_Header aVP_Header,//< AVP Header: 435 > + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 435);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Redirect_Server_AVP{ + // Ref: RFC4006 8.37. Redirect-Server AVP + AVP_Header aVP_Header,//< AVP Header: 434 > + Redirect_Address_Type_AVP redirect_Address_Type, + Redirect_Server_Address_AVP redirect_Server_Address + } + with { + variant "present=bytes(4, 434);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set Final_Unit_Indication_AVP{ + // Ref: RFC4006 8.34. Final-Unit-Indication AVP + AVP_Header aVP_Header,//< AVP Header: 430 > + Final_Unit_Action_AVP final_Unit_Action, + set of Restriction_Filter_Rule_AVP restriction_Filter_Rule optional, + set of Filter_Id_AVP filter_Id optional, + Redirect_Server_AVP redirect_Server optional + } + with { + variant "present=bytes(4, 430);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (restriction_Filter_Rule) "fieldPresent=bytes(4, 438)&&CodecHelper.isAvailable()" + variant (filter_Id) "fieldPresent=bytes(4, 11)&&CodecHelper.isAvailable()" + variant (redirect_Server) "condition=CodecHelper.leaveScope()" + } + + type set Multiple_Services_Credit_Control_AVP{ + // Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP + // Ref: TS 132 299 Clause 7.1.9 Multiple-Services-Credit-Control + AVP_Header aVP_Header,//< AVP Header: 456 > + Granted_Service_Unit_AVP granted_Service_Unit optional, + Requested_Service_Unit_AVP requested_Service_Unit optional, + set of Used_Service_Unit_AVP used_Service_Unit optional, + Tariff_Change_Usage_AVP tariff_Change_Usage optional, + set of Service_Identifier_AVP service_Identifier optional, + Rating_Group_AVP rating_Group optional, + set of G_S_U_Pool_Reference_AVP g_S_U_Pool_Reference optional, + Validity_Time_AVP validity_Time optional, + Result_Code_AVP result_Code optional, + Final_Unit_Indication_AVP final_Unit_Indication optional, + Time_Quota_Threshold_AVP time_Quota_Threshold optional, // TS 132 299 + Volume_Quota_Threshold_AVP volume_Quota_Threshold optional, // TS 132 299 + Unit_Quota_Threshold_AVP unit_Quota_Threshold optional, // TS 132 299 + Quota_Holding_Time_AVP quota_Holding_Time optional, // TS 132 299 + Quota_Consumption_Time_AVP quota_Consumption_Time optional, // TS 132 299 + set of Reporting_Reason_AVP reporting_Reason optional, // TS 132 299 + Trigger_AVP trigger_ optional, // TS 132 299 + PS_Furnish_Charging_Information_AVP ps_Furnish_Charging_Information optional, // TS 132 299 + Refund_Information_AVP refund_Information optional, // TS 132 299 + set of AF_Correlation_Information_AVP aF_Correlation_Information optional, // TS 132 299 + set of Envelope_AVP envelope optional, // TS 132 299 + Envelope_Reporting_AVP envelope_Reporting optional, // TS 132 299 + Time_Quota_Mechanism_AVP time_Quota_Mechanism optional, // TS 132 299 + set of Service_Specific_Info_AVP service_Specific_Info optional, // TS 132 299 + QoS_Information_AVP qoS_Information optional, // TS 132 299 + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 456);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (used_Service_Unit) "fieldPresent=bytes(4, 446)&&CodecHelper.isAvailable()" + variant (service_Identifier) "fieldPresent=bytes(4, 439)&&CodecHelper.isAvailable()" + variant (g_S_U_Pool_Reference) "fieldPresent=bytes(4, 457)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Service_Parameter_Type_AVP{ + // Ref: RFC4006 8.44. Service-Parameter-Type AVP + AVP_Header aVP_Header,//< AVP Header: 441 > + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 441);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Service_Parameter_Value_AVP{ + // Ref: RFC4006 8.45. Service-Parameter-Value AVP + AVP_Header aVP_Header,//< AVP Header: 442 > + octetstring aVP_Data + } + with { + variant "present=bytes(4, 442);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type set Service_Parameter_Info_AVP{ + // Ref: RFC4006 8.43. Service-Parameter-Info AVP + AVP_Header aVP_Header,//< AVP Header: 440 > + Service_Parameter_Type_AVP service_Parameter_Type, + Service_Parameter_Value_AVP service_Parameter_Value + } + with { + variant "present=bytes(4, 440);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record CC_Correlation_Id_AVP{ + // Ref: RFC4006 8.1. CC-Correlation-Id AVP + AVP_Header aVP_Header,//< AVP Header: 411 > + octetstring aVP_Data + } + with { + variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record User_Equipment_Info_Type_AVP{ + // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP + AVP_Header aVP_Header,//< AVP Header: 459 > + User_Equipment_Info_Ty_Type aVP_Data + } + with { + variant "present=bytes(4, 459);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record User_Equipment_Info_Value_AVP{ + // Ref: RFC4006 8.51. User-Equipment-Info-Value AVP + AVP_Header aVP_Header,//< AVP Header: 460 > + octetstring aVP_Data + } + with { + variant "present=bytes(4, 460);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type set User_Equipment_Info_AVP{ + // Ref: RFC4006 8.49. User-Equipment-Info AVP + AVP_Header aVP_Header,//< AVP Header: 458 > + User_Equipment_Info_Type_AVP user_Equipment_Info_Type, + User_Equipment_Info_Value_AVP user_Equipment_Info_Value + } + with { + variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (user_Equipment_Info_Value) "condition=CodecHelper.leaveScope()" + } + type record CC_Session_Failover_AVP{ + // Ref: RFC4006 8.4. CC-Session-Failover AVP + AVP_Header aVP_Header,//< AVP Header: 418 > + CC_Session_Failover_Type aVP_Data + } + with { + variant "present=bytes(4, 418);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Cost_Unit_AVP{ + // Ref: RFC4006 8.12. Cost-Unit AVP + AVP_Header aVP_Header,//< AVP Header: 424 > + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 424);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type set Cost_Information_AVP{ + // Ref: RFC4006 8.7. Cost-Information AVP + AVP_Header aVP_Header,//< AVP Header: 423 > + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code, + Cost_Unit_AVP cost_Unit optional + } + with { + variant "present=bytes(4, 423);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (cost_Unit) "condition=CodecHelper.leaveScope()" + } + type record Check_Balance_Result_AVP{ + // Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP + AVP_Header aVP_Header,//< AVP Header: 422 > + Check_Balance_Result_Type aVP_Data + } + with { + variant "present=bytes(4, 422);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Credit_Control_Failure_Handling_AVP{ + // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP + AVP_Header aVP_Header,//< AVP Header: 427 > + Credit_Cont_Fail_Hand_Type aVP_Data + } + with { + variant "present=bytes(4, 427);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Direct_Debiting_Failure_Handling_AVP{ + // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP + AVP_Header aVP_Header,//< AVP Header: 428 > + Direct_Debi_Fail_Hand_Type aVP_Data + } + with { + variant "present=bytes(4, 428);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + }//end of group RFC4006_AVPa + + group RFC5580_AVPS { + + /** + * @desc The Operator-Name Attribute (AVP code 126) + * @member aVP_Header Header AVP + * @member namespace_Id Namespace ID + * @member operator_Name Contains the operator namespace identifier AND an Access Network Operator Name + * + * @see RFC5580 Clause 4.1. Operator-Name Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Operator_Name_AVP { + AVP_Header aVP_Header,// + UInt8 namespace_Id, + UTF8String operator_Name + } // End of type Operator_Name_AVP + + /** + * @desc The Operator-Name Attribute (AVP code 127) + * @member aVP_Header Header AVP + * @member index Allows this attribute to provide information relating to the information included in the Location- Data Attribute to which it refers (via the Index) + * @member code Indicates the content of the location profile carried in the Location-Data Attribute + * @member entity Refers to as an unsigned 8-bit integer value + * @member sighting_Time Indicates when the location information was accurate + * @member time_to_Live Gives a hint regarding for how long location information should be considered current + * @member method Describes the way that the location information was determined + * + * @see RFC5580 Clause 4.2. Location-Information Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Location_Information_AVP { + AVP_Header aVP_Header,// + UInt16 index, + UInt8 code, + UInt8 entity, + UInt64 sighting_Time, + UInt64 time_to_Live, + UTF8String method + } // End of type Location_Information_AVP + + /** + * @desc The Location-Data Attribute (AVP code 128) + * @member aVP_Header Header AVP + * @member index TODO + * @member aVP_Data TODO + * + * @see RFC5580 Clause 4.3. Location-Data Attribute + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Location_Data_AVP { + AVP_Header aVP_Header,// + UInt16 index, + UTF8String aVP_Data + } // End of type Location_Data_AVP + + } // End of group RFC5580_AVPS + + // FIXME Can be moved in TTCN-3 module LibDiameter_Types_GiSGi_AVPs if GiSGi interface will be ddeveloped + group TS129_061_AVPSGiSGi{ + + type record RAI_AVP{ + //Ref: ETSI TS 129 061 RAI_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 909);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_SGSN_Address_AVP{ + //Ref: ETSI TS 129 061 3GPP_SGSN_Address + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 6);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_SGSN_IPv6_Address_AVP{ + //Ref: ETSI TS 129 061 3GPP_SGSN_Address + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 15);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_User_Location_Info_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_User_Location_Info_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 22);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_MS_TimeZone_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_MS_TimeZone_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 23);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_RAT_Type_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_RAT_Type_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 21);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ThreeGPP_SGSN_MCC_MNC_AVP{ + //Ref: ETSI TS 129 061 ThreeGPP_SGSN_MCC_MNC_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 18);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_IMSI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_IMSI_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Charging_Id_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type ThreeGPP_Charging_Id_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_PDP_Type_AVP { + AVP_Header aVP_Header,// + ThreeGPP_PDP_Type aVP_Data + } // End of type ThreeGPP_PDP_Type_AVP + + /** + * @desc PDP context ot type + * + * @see ETSI TS 129 061 V10.12.0 Table 7: List of the 3GPP Vendor-Specific sub-attributes + */ + type enumerated ThreeGPP_PDP_Type { + IP (0), + PPP (1), + IPv4 (2), + IPv6 (3), + IPv4v6 (4) + } with { + variant "length=32" + } // End of type ThreeGPP_PDP_Type + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_IMSI_MCC_MNC_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_IMSI_MCC_MNC_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_GGSN_MCC_MNC_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_GGSN_MCC_MNC_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_NSAPI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_NSAPI_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Session_Stop_Indicator_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Session_Stop_Indicator_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Selection_Mode_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Selection_Mode_AVP + + /** + * @desc TODO + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 129 061 V10.12.0 Table 9a: Gi/SGi specific AVPs + */ + type record ThreeGPP_Charging_Characteristics_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type ThreeGPP_Charging_Characteristics_AVP + + }//end of group TS129_061_AVPSGiSGi + + group TS129_272_AVPs{ + + type record Trace_Data_AVP{ + //Ref: ETSI TS 129 272 Trace_Data_AVP + AVP_Header aVP_Header, // + Trace_Reference_AVP trace_Reference, + Trace_Depth_AVP trace_Depth, + Trace_NE_Type_List_AVP trace_NE_Type_List, + Trace_Event_List_AVP trace_Event_List, + Trace_Collection_Entity_AVP trace_Collection_Entityt, + Trace_Interface_List_AVP trace_Interface_List optional, + OMC_Id_AVP oMC_Id optional, + MDT_Configuration_AVP mDT_Configuration optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1485);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Trace_Reference_AVP{ + //Ref: ETSI TS129 272 Trace_Reference_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1459);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Trace_Depth_AVP{ + //Ref: ETSI TS129 272 Trace_Depth_AVP + AVP_Header aVP_Header, // + Trace_Depth aVP_Data + } + with { + variant "present=bytes(4, 1462);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + + type record Trace_NE_Type_List_AVP{ + //Ref: ETSI TS129 272 Trace_NE_Type_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1463);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Trace_Event_List_AVP{ + //Ref: ETSI TS129 272 Trace_Event_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1465);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Trace_Collection_Entity_AVP{ + //Ref: ETSI TS129 272 Trace_Collection_Entity_AVP + AVP_Header aVP_Header, // + Address aVP_Data + } + with { + variant "present=bytes(4, 1452);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Trace_Interface_List_AVP{ + //Ref: ETSI TS129 272 Trace_Interface_List_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1464);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record OMC_Id_AVP{ + //Ref: ETSI TS129 272 OMC_Id_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1466);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record MDT_Configuration_AVP{ + //Ref: ETSI TS129 272 MDT_Configuration_AVP + AVP_Header aVP_Header, // + Job_Type_AVP job_Type, + Area_Scope_AVP area_Scope optional, + List_Of_Measurements_AVP list_Of_Measurements optional, + Reporting_Trigger_AVP reporting_Trigger optional, + Report_Interval_AVP report_Interval optional, + Report_Amount_AVP report_Amount optional, + Event_Treshold_RSRP_AVP event_Treshold_RSRP optional, + Event_Treshold_RSRQ_AVP event_Treshold_RSRQ optional, + Logging_Interval_AVP logging_Interval optional, + Logging_Duration_AVP logging_Duration optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1622);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Job_Type_AVP{ + //Ref: ETSI TS129 272 Job_Type_AVP + AVP_Header aVP_Header, // + Job_Type aVP_Data + } + with { + variant "present=bytes(4, 1623);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Area_Scope_AVP{ + //Ref: ETSI TS129 272 Area_Scope_AVP + AVP_Header aVP_Header, // + set of Cell_Global_Identity_AVP cell_Global_Identity optional, + set of E_UTRAN_Cell_Global_Identity_AVP e_UTRAN_Cell_Global_Identity_AVP optional, + set of Routing_Area_Identity_AVP routing_Area_Identity optional, + set of Location_Area_Identity_AVP location_Area_Identity optional, + set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1624);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (cell_Global_Identity) "fieldPresent=bytes(4, 1604)&&CodecHelper.isAvailable()" + variant (e_UTRAN_Cell_Global_Identity_AVP) "fieldPresent=bytes(4, 1602)&&CodecHelper.isAvailable()" + variant (routing_Area_Identity) "fieldPresent=bytes(4, 1605)&&CodecHelper.isAvailable()" + variant (location_Area_Identity) "fieldPresent=bytes(4, 1606)&&CodecHelper.isAvailable()" + variant (tracking_Area_Identity) "fieldPresent=bytes(4, 1603)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record List_Of_Measurements_AVP{ + //Ref: ETSI TS129 272 List_Of_Measurements_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1625);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Reporting_Trigger_AVP{ + //Ref: ETSI TS129 272 Reporting_Trigger_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1626);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Report_Interval_AVP{ + //Ref: ETSI TS129 272 Report_Interval_AVP + AVP_Header aVP_Header, // + Report_Interval aVP_Data + } + with { + variant "present=bytes(4, 1627);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Report_Amount_AVP{ + //Ref: ETSI TS129 272 Report_Amount_AVP + AVP_Header aVP_Header, // + Report_Amount aVP_Data + } + with { + variant "present=bytes(4, 1628);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Event_Treshold_RSRP_AVP{ + //Ref: ETSI TS129 272 Event_Treshold_RSRP_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1629);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Event_Treshold_RSRQ_AVP{ + //Ref: ETSI TS129 272 Event_Treshold_RSRQ_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1630);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Logging_Interval_AVP{ + //Ref: ETSI TS129 272 Logging_Interval_AVP + AVP_Header aVP_Header, // + Logging_Interval aVP_Data + } + with { + variant "present=bytes(4, 1631);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Logging_Duration_AVP{ + //Ref: ETSI TS129 272 Logging_Duration_AVP + AVP_Header aVP_Header, // + Logging_Duration aVP_Data + } + with { + variant "present=bytes(4, 1632);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Cell_Global_Identity_AVP{ + //Ref: ETSI TS129 272 Cell_Global_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1604);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record E_UTRAN_Cell_Global_Identity_AVP{ + //Ref: ETSI TS129 272 E_UTRAN_Cell_Global_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1602);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Routing_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Routing_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1605);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Location_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Location_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1606);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Tracking_Area_Identity_AVP{ + //Ref: ETSI TS129 272 Tracking_Area_Identity_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1603);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + }//end of group TS129_272_AVPs + + group TS129_299_AVPs{ + + type record Charging_Information_AVP{ + //Ref: ETSI TS 129 299 Charging_Information_AVP + AVP_Header aVP_Header, // + Primary_Event_Charging_Function_Name_AVP primary_Event_Charging_Function_Name optional, + Secondary_Event_Charging_Function_Name_AVP secondary_Event_Charging_Function_Name optional, + Primary_Charging_Collection_Function_Name_AVP primary_Charging_Collection_Function_Name optional, + Secondary_Charging_Collection_Function_Name_AVP secondary_Charging_Collection_Function_Name optional, + set of AVP_Type aVP_Type optional + } + + type record Primary_Event_Charging_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Primary_Event_Charging_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Secondary_Event_Charging_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Secondary_Event_Charging_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Primary_Charging_Collection_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Primary_Charging_Collection_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + type record Secondary_Charging_Collection_Function_Name_AVP{ + //Ref: ETSI TS 129 299 Secondary_Charging_Collection_Function_Name_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps + } + + }//end of group TS129_299_AVPs + + group TS132_299_AVPs{ + //Types were moved to LibDiameter_Types_RfRo_AVPs + }//end of group TS132_299_AVPs + + group X_S0057_1_AVPs{ + type record ThreeGPP2_BSID_AVP{ + //Ref: Draft X.S0057-1 ThreeGPP2_BSID_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 621);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + }//end of group X_S0057_1_AVPs + + group TS283_034_AVPs{ + type record Logical_Access_ID_AVP{ + //Ref: Draft TS283_034 Logical_Access_ID_AVP + AVP_Header aVP_Header, // + octetstring aVP_Data + } + with { + variant "present=bytes(4, 302);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Physical_Access_ID_AVP{ + //Ref: Draft TS283_034 Physical_Access_ID_AVP + AVP_Header aVP_Header, // + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 313);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + }//end of group TS283_034_AVPs + + }//end group AVPs + + + + group NumberTypes { + + type float FLOAT32 + with { + variant "length=32" + } + //not supported so far but not used as well + type float FLOAT64; + + type record length (4) of UInt8 IPv4Addr; + + type record length (8) of UInt16 IPv6Addr; + + type universal charstring UTF8String + with { + variant "charset=UTF-8;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeUtf8stringWithPadding();decode=CodecHelper.decodeUtf8stringWithPadding()" + } + + }// end group NumberTypes + +} //end module LibDiameter_Types_Base_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn new file mode 100644 index 0000000..a9407be --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn @@ -0,0 +1,513 @@ +/** + * @author STF 480 + * @version $Id$ + * @desc This module defines Diameter Cx and Dx AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Rx AVP types is ok; + */ +module LibDiameter_Types_CxDx_AVPs { + + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + + group AVPCodeConstants { + + /** + * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.42 Line-Identifier AVP + */ + const integer c_line_Identifier_AVP_Code := 500; + + } + + group AVPTypes{ + + group Enum_AVP_Cx_Dx_Types{ + + type enumerated User_Authorization_Type_Code{ + // Ref: ETSI TS 129 299 6.3.24 + REGISTRATION (0), + DE_REGISTRATION (1), + REGISTRATION_AND_CAPABILITIES (2) + } + with { + variant "length=32" + } + + type enumerated Srv_Assgmt_Type_Code{ + NO_ASSIGNMENT_E (0), + REGISTRATION_E (1), + RE_REGISTRATION_E (2), + UNREGISTERED_USER_E (3), + TIMEOUT_DEREGISTRATION_E (4), + USER_DEREGISTRATION_E (5), + TIMEOUT_DEREGISTRATION_STORE_SERVER_NAME_E (6), + USER_DEREGISTRATION_STORE_SERVER_NAME_E (7), + ADMINISTRATIVE_DEREGISTRATION_E (8), + AUTHENTICATION_FAILURE_E (9), + AUTHENTICATION_TIMEOUT_E (10), + DEREGISTRATION_TOO_MUCH_DATA_E (11), + AAA_USER_DATA_REQUEST (12), + PGW_UPDATE (13) + } + with { + variant "length=32" + } + + type enumerated Usr_Dat_Al_Av_Code{ + USER_DATA_NOT_AVAILABLE_E (0), + USER_DATA_ALREADY_AVAILABLE_E (1) + } + with { + variant "length=32" + } + + type enumerated Multiple_Reg_Id_Code{ + NOT_MULTIPLE_REGISTRATION (0), + MULTIPLE_REGISTRATION (1) + } + with { + variant "length=32" + } + + type enumerated Session_Prio_Code{ + PRIORITY_0 (0), + PRIORITY_1 (1), + PRIORITY_2 (2), + PRIORITY_3 (3), + PRIORITY_4 (4) + } + with { + variant "length=32" + } + + type enumerated Loose_Route_Ind_Code{ + LOOSE_ROUTE_NOT_REQUIRED (0), + LOOSE_ROUTE_REQUIRED (1) + } + with { + variant "length=32" + } + + type enumerated Priviledged_Sender_Ind_Code{ + NOT_PRIVILEDGED_SENDER (0), + PRIVILEDGED_SENDER (1) + } + with { + variant "length=32" + } + + type enumerated Originating_Request_Code{ + ORIGINATING (0) + } + with { + variant "length=32" + } + + type enumerated Reason_Code_Type{ + PERMANENT_TERMINATION_E (0), + NEW_SERVER_ASSIGNED_E (1), + SERVER_CHANGE_E (2), + REMOVE_S_CSCF_E (3) + } + with { + variant "length=32" + } + + }//end group Enum_AVP_Cx_Dx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_229Cx_Dx_AVPS{ + type record Server_Capabilities_AVP{ + // Ref: ETSI TS 129 229 6.3.4 Server-Capabilities AVP + AVP_Header aVP_Header,// + set of MandatoryCapability_AVP mandatoryCapability optional, + set of OptionalCapability_AVP optionalCapability optional, + set of Server_Name_AVP server_Name optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" + variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" + variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record MandatoryCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.5. Mandatory-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record OptionalCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.6. Optional-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Visited_Network_Identifier_AVP{ + // Ref: ETSI TS 129 229 6.3.1 Visited-Network-Id AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 600);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Authentication_Context_AVP{ + // Ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.13 SIP-Authentication-Context AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + + type record UAR_Flags_AVP{ + //Ref: ETSI TS 129 229 6.3.44 UAR_Flags_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 637);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record User_Authorization_Type_AVP{ + //Ref: ETSI TS 129 229 6.3.24 User_Authorization_Type AVP + AVP_Header aVP_Header,// + User_Authorization_Type_Code aVP_Data + } + with { + variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Wildcarded_Public_Identity_AVP{ + //Ref: ETSI TS 129 229 6.3.35 Wildcarded_Public_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Server_Assignment_Type_AVP{ + //Ref: ETSI TS 129 229 6.3.15 Server-Assignment-Type AVP + AVP_Header aVP_Header,// + Srv_Assgmt_Type_Code aVP_Data + } + with { + variant "present=bytes(4, 614);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record User_Data_Already_Available_AVP{ + //Ref: ETSI TS 129 229 6.3.26 User_Data_Already_Available AVP + AVP_Header aVP_Header,// + Usr_Dat_Al_Av_Code aVP_Data + } + with { + variant "present=bytes(4,624);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record SIP_Digest_Authenticate_AVP{ + //Ref: RFC4740 9.5.3. SIP-Digest-Authenticate AVP + AVP_Header aVP_Header,//SIP-Digest-Authenticate ::= < AVP Header: 635 > + Digest_Realm_AVP digest_Realm,//requ. + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_QoP_AVP digest_QoP optional, + Digest_HA1_AVP digest_HA1 optional, + set of AVP_Type aVP_Type optional + } + + type record SCSCF_Restoration_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.46 SCSCF_Restoration_Info AVP + AVP_Header aVP_Header,// < AVP Header: 639 > + set length (1..infinity) of Restoration_Info_AVP restoration_Info, + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 639);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Restoration_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.52 Restoration_Info AVP + AVP_Header aVP_Header,// < AVP Header: 649 > + Path_AVP path, + Contact_AVP contact, + Subscription_Info_AVP subscription_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 649);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Path_AVP{ + // Ref: ETSI TS 129 229 6.3.47 Path AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 640);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Subscription_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.49 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 642 > + Call_ID_SIP_Header_AVP call_ID_SIP_Header, + From_SIP_Header_AVP from_SIP_Header, + To_SIP_Header_AVP to_SIP_Header, + Record_Route_AVP record_Route, + Contact_AVP contact, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 642);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Contact_AVP{ + // Ref: ETSI TS 129 229 6.3.48 Contact AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 641);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Call_ID_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.1 Call_ID_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 643);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record From_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.2 From_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 644);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record To_SIP_Header_AVP{ + // Ref: ETSI TS 129 229 6.3.49.3 To_SIP_Header AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 645);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Record_Route_AVP{ + // Ref: ETSI TS 129 229 6.3.49.4 Record_Route AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 646);use=com.testingtech.ttcn.tci.codec.CodecHelper;" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Multiple_Registration_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.51 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Multiple_Reg_Id_Code aVP_Data + } + with { + variant "present=bytes(4,648);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Session_Priority_AVP{ + //Ref: ETSI TS 129 229 6.3.56 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Session_Prio_Code aVP_Data + } + with { + variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Associated_Identities_AVP{ + //Ref: ETSI TS 129 229 6.3.33 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 632 > + User_Name_AVP user_Name optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 632);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Associated_Registered_Identities_AVP{ + //Ref: ETSI TS 129 229 6.3.50 Subscription_Info AVP + AVP_Header aVP_Header,// < AVP Header: 647 > + User_Name_AVP user_Name optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 647);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Loose_Route_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.45 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Loose_Route_Ind_Code aVP_Data + } + with { + variant "present=bytes(4,638);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Priviledged_Sender_Indication_AVP{ + //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Priviledged_Sender_Ind_Code aVP_Data + } + with { + variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Originating_Request_AVP{ + //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Originating_Request_Code aVP_Data + } + with { + variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Deregistration_Reason_AVP{ + //Ref: ETSI TS 129 229 6.3.16 Deregistration_Reason AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 615 > + Reason_Code_AVP reason_Code,//requi. + Reason_Info_AVP reason_Info optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 615);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Reason_Code_AVP{ + //Ref: ETSI TS 129 229 6.3.17 Reason_Code AVP + AVP_Header aVP_Header,// + Reason_Code_Type aVP_Data + } + with { + variant "present=bytes(4, 616);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Reason_Info_AVP{ + //Ref: ETSI TS 129 229 6.3.18 Reason_Info AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 617);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + /** + * ETSI TS 129 229 Clause 6.3.9 SIP-Authentication-Scheme AVP + */ + type record SIP_Authentication_Scheme_3GPP_AVP{ + //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + + /** + * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + */ + type record SIP_Auth_Data_Item_3GPP_AVP { + AVP_Header aVP_Header, //SIP-Auth-Data-Item ::= < AVP Header: 612 > + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme optional, + SIP_Item_Number_AVP sIP_Item_Number optional, + SIP_Authenticate_AVP sIP_Authenticate optional, + SIP_Authorization_AVP sIP_Authorization optional, + SIP_Authentication_Context_AVP sIP_Authentication_Context optional, + SIP_Digest_Authenticate_AVP sIP_Digest_Authenticate optional, + Confidentiality_Key_AVP confidentiality_Key optional, + Integrity_Key_AVP integrity_Key optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + Framed_Interface_Id_AVP framed_Interface_Id optional, + Line_Identifier_AVP line_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record SIP_Authenticate_3GPP_AVP{ + // Ref: 129 229 6.3.10. SIP-Authenticate AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + type record SIP_Authorization_3GPP_AVP{ + // Ref: 129 229 6.3.11. SIP-Authorization AVP + AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 610 > + octetstring aVP_Data + } + + type record Identity_with_Emergency_Registration_AVP{ + //Ref: ETSI TS 129 229 6.3.57 Identity_with_Emergency_Registration AVP + AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 651 > + User_Name_AVP user_Name, + Public_Identity_AVP public_Identity, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 651);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Confidentiality_Key_AVP { //ref: 7.3.57 + AVP_Header aVP_Header, //Confidentiality-Key ::= + octetstring aVP_Data + } + + type record Integrity_Key_AVP { //ref: 7.3.58 + AVP_Header aVP_Header, //Integrity-Key ::= + octetstring aVP_Data + } + + type record Line_Identifier_AVP { //ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.42 + AVP_Header aVP_Header, //Line_Identifier-Key ::= + octetstring aVP_Data + } + + }//end of group TS129_229Cx_Dx_AVPs + + }//end group AVPs + + +} //end module LibDiameter_Types_Cx_Dx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn new file mode 100644 index 0000000..fd3f78f --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn @@ -0,0 +1,1225 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Gx and Gxx AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Gx and Gxx AVP types is ok; + */ +module LibDiameter_Types_Gx_AVPs { + + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + group AVPTypes{ + group AVP_Gx_Types{ + + type enumerated IP_CAN_Type{ + // Ref: ETSI TS 129 212 5.3.27 + ThreeGPP_GPRS_E (0), + DOCSIS_E (1), + XDSL_E (2), + WIMAX_E (3), + ThreeGPP2_E (4), + ThreeGPP_EPS_E (5), + NON_3GPP_EPS_E (6) + } + with { + variant "length=32" + } + + type enumerated RAT_Type{ + // Ref: ETSI TS 129 212 5.3.31 + WLAN_E (0), + VIRTUAL_E (1), + UTRAN_E (1000), + GERAN_E (1001), + GAN_E (1002), + HSPA_EVOLUTION_E (1003), + EUTRAN_E (1004), + CDMA2000_IX_E (2000), + HRPD_E(2001), + UMB_E(2002), + EHRPD_E(2003) + } + with { + variant "length=32" + } + type enumerated Bearer_Control_Mode{ + // Ref: ETSI TS 129 212 5.3.23 + UE_ONLY_E (0), + RESERVED_E (1), + UE_NW_E (2) + } + with { + variant "length=32" + } + type enumerated Bearer_Operation{ + // Ref: ETSI TS 129 212 5.3.21 + TERMINATION_E (0), + ESTABLISHMENT_E (1), + MODIFICATION_E (2) + } + with { + variant "length=32" + } + type enumerated Bearer_Usage{ + // Ref: ETSI TS 129 212 5.3.1 + GENERAL_E (0), + IMS_SIGNALLING_E (1) + } + with { + variant "length=32" + } + type enumerated Charging_Correlation_Indicator{ + // Ref: ETSI TS 129 212 5.3.67 + CHARGING_IDENTIFIER_REQUIRED_E (0) + } + with { + variant "length=32" + } + type enumerated CSG_Information_Reporting{ + // Ref: ETSI TS 129 212 5.3.64 + CHANGE_CSG_CELL_E (0), + CHANGE_CSG_SUBSCRIBED_HYBRID_CELL_E (1), + CHANGE_CSG_UNSUBSCRIBED_HYBRID_CELL_E (2) + } + with { + variant "length=32" + } + + type enumerated Event_Trigger{ + // Ref: ETSI TS 129 212 5.3.7 + SGSN_CHANGE_E (0), + QOS_CHANGE_E (1), + RAT_CHANGE_E (2), + TFT_CHANGE_E (3), + PLMN_CHANGE_E (4), + LOSS_OF_BEARER_E (5), + RECOVERY_OF_BEARER_E (6), + IP_CAN_CHANGE_E (7), + QOS_CHANGE_EXCEEDING_AUTHORIZATION_E (11), + RAI_CHANGE_E (12), + USER_LOCATION_CHANGE_E (13), + NO_EVENT_TRIGGERS_E (14), + OUT_OF_CREDIT_E (15), + REALLOCATION_OF_CREDIT_E (16), + REVALIDATION_TIMEOUT_E (17), + UE_IP_ADDRESS_ALLOCATE_E (18), + UE_IP_ADDRESS_RELEASE_E (19), + DEFAULT_EPS_BEARER_QOS_CHANGE_E (20), + AN_GW_CHANGE_E (21), + SUCCESSFUL_RESOURCE_ALLOCATION_E (22), + RESOURCE_MODIFICATION_REQUEST_E (23), + PGW_TRACE_CONTROL_E (24), + UE_TIME_ZONE_CHANGE_E (25), + TAI_CHANGE_E (26), + ECGI_CHANGE_E (27), + CHARGING_CORRELATION_EXCHANGE_E (28), + APN_AMBR_MODIFICATION_FAILURE_E (29), + USER_CSG_INFORMATION_CHANGE_E (30), + USAGE_REPORT_E (33), + DEFAULT_EPS_BEARER_QOS_MODIFICATION_FAILURE_E (34), + USER_CSG_HYBRID_SUBSCRIBED_INFORMATION_CHANGE_E (35), + USER_CSG_HYBRID_UNSUBSCRIBED_INFORMATION_CHANGE_E (36), + ROUTING_RULE_CHANGE_E (37), + MAX_MBR_APN_AMBR_CHANGE_E (38) + } + with { + variant "length=32" + } + type enumerated Flow_Direction{ + // Ref: ETSI TS 129 212 5.3.65 + UNSPECIFIED_E (0), + DOWNLINK_E (1), + UPLINK_E (2), + BIDIRECTIONAL_E (3) + } + with { + variant "length=32" + } + type enumerated Metering_Method{ + // Ref: ETSI TS 129 212 5.3.8 + DURATION_E (0), + VOLUME_E (1), + DURATION_VOLUME_E (2) + } + with { + variant "length=32" + } + type enumerated Network_Request_Support{ + // Ref: ETSI TS 129 212 5.3.24 + NETWORK_REQUEST_NOT_SUPPORTED_E (0), + NETWORK_REQUEST_SUPPORTED_E (1) + } + with { + variant "length=32" + } + type enumerated Offline{ + // Ref: ETSI TS 129 212 5.3.9 + DISABLE_OFFLINE_E (0), + ENABLE_OFFLINE_E (1) + } + with { + variant "length=32" + } + type enumerated Online{ + // Ref: ETSI TS 129 212 5.3.10 + DISABLE_ONLINE_E (0), + ENABLE_ONLINE_E (1) + } + with { + variant "length=32" + } + + type enumerated Packet_Filter_Operation{ + // Ref: ETSI TS 129 212 5.3.57 + DELETION_E (0), + ADDITION_E (1), + MODIFICATION_E (2) + } + with { + variant "length=32" + } + + type enumerated Packet_Filter_Usage{ + // Ref: ETSI TS 129 212 5.3.66 + SEND_TO_UE_E (1) + } + with { + variant "length=32" + } + + type enumerated Pre_emption_Capability{ + // Ref: ETSI TS 129 212 5.3.46 + PRE_EMPTION_CAPABILITY_ENABLED_E (0), + PRE_EMPTION_CAPABILITY_DISABLED_E (1) + } + with { + variant "length=32" + } + + type enumerated Pre_emption_Vulnerability{ + // Ref: ETSI TS 129 212 5.3.47 + PRE_EMPTION_VULNERABILITY_ENABLED_E (0), + PRE_EMPTION_VULNERABILITY_DISABLED_E (1) + } + with { + variant "length=32" + } + + type enumerated Reporting_Level{ + // Ref: ETSI TS 129 212 5.3.12 + SERVICE_IDENTIFIER_LEVEL_E (0), + RATING_GROUP_LEVEL_E (1), + SPONSORED_CONNECTIVITY_LEVEL_E (2) + } + with { + variant "length=32" + } + + type enumerated PCC_Rule_Status{ + // Ref: ETSI TS 129 212 5.3.19 + ACTIVE_E (0), + INACTIVE_E (1), + TEMPORARILY_INACTIVE_E (2) + } + with { + variant "length=32" + } + + type enumerated Session_Release_Cause{ + // Ref: ETSI TS 129 212 5.3.44 + UNSPECIFIED_REASON_E (0), + UE_SUBSCRIPTION_REASON_E (1), + INSUFFICIENT_SERVER_RESOURCES_E (2) + } + with { + variant "length=32" + } + + type enumerated QoS_Class_Identifier{ + // Ref: ETSI TS 129 212 5.3.17 + Reserved1_E ( 0), + QCI_1_E (1),//examle service=conversational voice + QCI_2_E (2),//examle service=conversational video + QCI_3_E (3),//examle service=real time gaming + QCI_4_E (4),//examle service=non-conversational video + QCI_5_E (5),//examle service=IMS signalling + QCI_6_E (6),//examle service=video(TCP based) + QCI_7_E (7),//examle service=voice,video(life streaming) + QCI_8_E (8),//examle service=video(buffered streaming) + QCI_9_E (9),//examle service=video(buffered streaming) + Reserved2_E ( 10), // .. 127 + OperatorSpecific_E (128), // .. 254 + Reserved3_E (255) + } + with { + variant "length=32" + } + + type enumerated QoS_Negotiation{ + // Ref: ETSI TS 129 212 5.3.28 + NO_QoS_NEGOTIATION_E (0), + QoS_NEGOTIATION_SUPPORTED_E (1) + } + with { + variant "length=32" + } + + type enumerated QoS_Upgrade{ + // Ref: ETSI TS 129 212 5.3.29 + QoS_UPGRADE_NOT_SUPPORTED_E (0), + QoS_UPGRADE_SUPPORTED_E (1) + } + with { + variant "length=32" + } + + type enumerated Resource_Allocation_Notification{ + // Ref: ETSI TS 129 212 5.3.50 + ENABLE_NOTIFICATION_E (0) + } + with { + variant "length=32" + } + + type enumerated Rule_Failure_Code{ + // Ref: ETSI TS 129 212 5.3.38 + UNKNOWN_RULE_NAME_E (1), + RATING_GROUP_ERROR_E (2), + SERVICE_IDENTIFIER_ERROR_E (3), + GW_PCEF_MALFUNCTION_E (4), + RESOURCES_LIMITATION_E (5), + MAX_NR_BEARERS_REACHED_E (6), + UNKNOWN_BEARER_ID_E (7), + MISSING_BEARER_ID_E (8), + MISSING_FLOW_INFORMATION_E (9), + RESOURCE_ALLOCATION_FAILURE_E (10), + UNSUCCESSFUL_QOS_VALIDATION_E (11), + INCORRECT_FLOW_INFORMATION_E (12), + PS_TO_CS_HANDOVER_E (13), + NO_BEARER_BOUND_E (15) + } + with { + variant "length=32" + } + + type enumerated Usage_Monitoring_Level{ + // Ref: ETSI TS 129 212 5.3.61 + SESSION_LEVEL_E (0), + PCC_RULE_LEVEL_E (1) + } + with { + variant "length=32" + } + + type enumerated Usage_Monitoring_Report{ + // Ref: ETSI TS 129 212 5.3.62 + USAGE_MONITORING_REPORT_REQUIRED_E (0) + } + with { + variant "length=32" + } + + type enumerated Usage_Monitoring_Support{ + // Ref: ETSI TS 129 212 5.3.63 + USAGE_MONITORING_DISABLED_E (0) + } + with { + variant "length=32" + } + + }//end group AVP_Gx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_212Gx_AVPs{ + + type record IP_CAN_Type_AVP{ + //Ref: ETSI TS 129 212 IP CAN Type AVP + AVP_Header aVP_Header,// + IP_CAN_Type aVP_Data + } + with { + variant "present=bytes(4, 1027);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record RAT_Type_AVP{ + //Ref: ETSI TS 129 212 RAT Type AVP + AVP_Header aVP_Header,// + RAT_Type aVP_Data + } + with { + variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Bearer_Control_Mode_AVP{ + //Ref: ETSI TS 129 212 Bearer_Control_Mode_AVP + AVP_Header aVP_Header,// + Bearer_Control_Mode aVP_Data + } + with { + variant "present=bytes(4, 1023);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Bearer_Operation_AVP{ + //Ref: ETSI TS 129 212 Bearer_Operation_AVP + AVP_Header aVP_Header,// + Bearer_Operation aVP_Data + } + with { + variant "present=bytes(4, 1021);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Bearer_Usage_AVP{ + //Ref: ETSI TS 129 212 Bearer_Usage_AVP + AVP_Header aVP_Header,// + Bearer_Usage aVP_Data + } + with { + variant "present=bytes(4, 1000);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Charging_Correlation_Indicator_AVP{ + //Ref: ETSI TS 129 212 Charging_Correlation_Indicator_AVP + AVP_Header aVP_Header,// + Charging_Correlation_Indicator aVP_Data + } + with { + variant "present=bytes(4, 1073);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record CSG_Information_Reporting_AVP{ + //Ref: ETSI TS 129 212 CSG_Information_Reporting_AVP + AVP_Header aVP_Header,// + CSG_Information_Reporting aVP_Data + } + with { + variant "present=bytes(4, 1071);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Event_Trigger_AVP{ + //Ref: ETSI TS 129 212 Event_Trigger_AVP + AVP_Header aVP_Header,// + Event_Trigger aVP_Data + } + with { + variant "present=bytes(4, 1006);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Flow_Direction_AVP{ + //Ref: ETSI TS 129 212 Flow_Direction_AVP + AVP_Header aVP_Header,// + Flow_Direction aVP_Data + } + with { + variant "present=bytes(4, 1080);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Metering_Method_AVP{ + //Ref: ETSI TS 129 212 Metering_Method_AVP + AVP_Header aVP_Header,// + Metering_Method aVP_Data + } + with { + variant "present=bytes(4, 1007);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Network_Request_Support_AVP{ + //Ref: ETSI TS 129 212 Network_Request_Support_AVP + AVP_Header aVP_Header,// + Network_Request_Support aVP_Data + } + with { + variant "present=bytes(4, 1024);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Offline_AVP{ + //Ref: ETSI TS 129 212 Offlinet_AVP + AVP_Header aVP_Header,// + Offline aVP_Data + } + with { + variant "present=bytes(4, 1008);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Online_AVP{ + //Ref: ETSI TS 129 212 Online_AVP + AVP_Header aVP_Header,// + Online aVP_Data + } + with { + variant "present=bytes(4, 1009);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Packet_Filter_Operation_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Operation_AVP + AVP_Header aVP_Header,// + Packet_Filter_Operation aVP_Data + } + with { + variant "present=bytes(4, 1062);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Packet_Filter_Usage_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Usage_AVP + AVP_Header aVP_Header,// + Packet_Filter_Usage aVP_Data + } + with { + variant "present=bytes(4, 1072);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Pre_emption_Capability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP + AVP_Header aVP_Header,// + Pre_emption_Capability aVP_Data + } + with { + variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Pre_emption_Vulnerability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Vulnerabilitye_AVP + AVP_Header aVP_Header,// + Pre_emption_Vulnerability aVP_Data + } + with { + variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Reporting_Level_AVP{ + //Ref: ETSI TS 129 212 Reporting_Levele_AVP + AVP_Header aVP_Header,// + Reporting_Level aVP_Data + } + with { + variant "present=bytes(4, 1011);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record PCC_Rule_Status_AVP{ + //Ref: ETSI TS 129 212 PCC_Rule_Status_AVP + AVP_Header aVP_Header,// + PCC_Rule_Status aVP_Data + } + with { + variant "present=bytes(4, 1019);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Session_Release_Cause_AVP{ + //Ref: ETSI TS 129 212 Session_Release_Cause_AVP + AVP_Header aVP_Header,// + Session_Release_Cause aVP_Data + } + with { + variant "present=bytes(4, 1045);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record QoS_Class_Identifier_AVP{ + //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP + AVP_Header aVP_Header,// + QoS_Class_Identifier aVP_Data + } + with { + variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record QoS_Negotiation_AVP{ + //Ref: ETSI TS 129 212 QoS_Negotiation_AVP + AVP_Header aVP_Header,// + QoS_Negotiation aVP_Data + } + with { + variant "present=bytes(4, 1029);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record QoS_Upgrade_AVP{ + //Ref: ETSI TS 129 212 QoS_Upgrade_AVP + AVP_Header aVP_Header,// + QoS_Upgrade aVP_Data + } + with { + variant "present=bytes(4, 1030);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Resource_Allocation_Notification_AVP{ + //Ref: ETSI TS 129 212 Resource_Allocation_Notification_AVP + AVP_Header aVP_Header,// + Resource_Allocation_Notification aVP_Data + } + with { + variant "present=bytes(4, 1063);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Rule_Failure_Code_AVP{ + //Ref: ETSI TS 129 212 Rule_Failure_Code_AVP + AVP_Header aVP_Header,// + Rule_Failure_Code aVP_Data + } + with { + variant "present=bytes(4, 1031);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Usage_Monitoring_Level_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Level_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Level aVP_Data + } + with { + variant "present=bytes(4, 1068);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Usage_Monitoring_Report_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Report_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Report aVP_Data + } + with { + variant "present=bytes(4, 1069);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Usage_Monitoring_Support_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Support_AVP + AVP_Header aVP_Header,// + Usage_Monitoring_Support aVP_Data + } + with { + variant "present=bytes(4, 1070);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Bearer_Identifier_AVP{ + //Ref: ETSI TS 129 212 Bearer_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Name_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Name_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1005);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Flow_Label_AVP{ + //Ref: ETSI TS 129 212 Flow_Label_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1057);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Monitoring_Key_AVP{ + //Ref: ETSI TS 129 212 Monitoring_Key_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1066);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Packet_Filter_Identifier_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1060);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + type record PDN_Connection_ID_AVP{ + //Ref: ETSI TS 129 212 PDN_Connection_ID_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1065);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Routing_Rule_Identifier_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1077);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Security_Parameter_Index_AVP{ + //Ref: ETSI TS 129 212 Security_Parameter_Index_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1056);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record ToS_Traffic_Class_AVP{ + //Ref: ETSI TS 129 212 ToS_Traffic_Class_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 1014);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record APN_Aggregate_Max_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record APN_Aggregate_Max_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Guaranteed_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Guaranteed_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Max_Supported_Bandwidth_DL_AVP{ + //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1083);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Max_Supported_Bandwidth_UL_AVP{ + //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1084);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Precedence_AVP{ + //Ref: ETSI TS 129 212 Precedence_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1010);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Priority_Level_AVP{ + //Ref: ETSI TS 129 212 Priority_Level_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Tunnel_Header_Length_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Header_Length_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 1037);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Base_Name_AVP { + //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record AN_GW_Address_AVP{ + //Ref: ETSI TS 129 212 AN_GW_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } + with { + variant "present=bytes(4, 1050);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record CoA_IP_Address_AVP{ + //Ref: ETSI TS 129 212 CoA_IP_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } + with { + variant "present=bytes(4, 1035);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Routing_IP_Address_AVP{ + //Ref: ETSI TS 129 212 Routing_IP_Address_AVP + AVP_Header aVP_Header,// + Address aVP_Data + } + with { + variant "present=bytes(4, 1079);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Packet_Filter_Content_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Content_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + with { + variant "present=bytes(4, 1059);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record TFT_Filter_AVP{ + //Ref: ETSI TS 129 212 TFT_Filter_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + with { + variant "present=bytes(4, 1012);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Tunnel_Header_Filter_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Header_Filter_AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + with { + variant "present=bytes(4, 1036);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Revalidation_Time_AVP{ + //Ref: ETSI TS 129 212 Revalidation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } + with { + variant "present=bytes(4, 1042);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Rule_Activation_Time_AVP{ + //Ref: ETSI TS 129 212 Rule_Activation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } + with { + variant "present=bytes(4, 1043);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Rule_DeActivation_Time_AVP{ + //Ref: ETSI TS 129 212 Rule_DeActivation_Time_AVP + AVP_Header aVP_Header,// + Time aVP_Data + } + with { + variant "present=bytes(4, 1044);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Access_Network_Charging_Identifier_Gx_AVP{ + //Ref: ETSI TS 129 212 Access_Network_Charging_Identifier_Gx_AVP + AVP_Header aVP_Header, // + Access_Network_Charging_Identifier_Value_AVP acc_Net_Charging_Id_Val, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + set of Charging_Rule_Name_AVP charging_Rule_Name optional + } + with { + variant "present=bytes(4, 1022);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" + variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Allocation_Retention_Priority_AVP{ + //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP + AVP_Header aVP_Header, // + Priority_Level_AVP priority_Level, + Pre_emption_Capability_AVP pre_emption_Capability optional, + Pre_emption_Vulnerability_AVP pre_emption_Vulnerability optional + } + with { + variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Install_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Definition_AVP charging_Rule_Definition optional, + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Rule_Activation_Time_AVP rule_Activation_Time optional, + Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, + Resource_Allocation_Notification_AVP resource_Allocation_Notification optional, + Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1001);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (charging_Rule_Definition) "fieldPresent=bytes(4, 1003)&&CodecHelper.isAvailable()" + variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" + variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Remove_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1002);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" + variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Definition_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Definition_AVP + AVP_Header aVP_Header, // + Charging_Rule_Name_AVP charging_Rule_Name, + Service_Identifier_AVP service_Identifier optional, + Rating_Group_AVP rating_Group optional, + set of Flow_Information_AVP flow_Information optional, + Flow_Status_AVP flow_Status optional, + QoS_Information_AVP qoS_Information optional, + Reporting_Level_AVP reporting_Level optional, + Online_AVP online optional, + Offline_AVP offline optional, + Metering_Method_AVP metering_Method optional, + Precedence_AVP precedence optional, + AF_Charging_Identifier_AVP aF_Charging_Identifier optional, + set of Flows_AVP flows optional, + Monitoring_Key_AVP monitoring_Key optional, + AF_Signalling_Protocol_AVP aF_Signalling_Protocol optional, + Sponsor_Identity_AVP sponsor_Identity optional, + Application_Service_Provider_Identity_AVP application_Service_Provider_Identity optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1003);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (flow_Information) "fieldPresent=bytes(4, 1058)&&CodecHelper.isAvailable()" + variant (flows) "fieldPresent=bytes(4, 510)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Charging_Rule_Report_AVP{ + //Ref: ETSI TS 129 212 Charging_Rule_Report_AVP + AVP_Header aVP_Header, // + set of Charging_Rule_Name_AVP charging_Rule_Name optional, + set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Bearer_Identifier_AVP bearer_Identifier optional, + PCC_Rule_Status_AVP pCC_Rule_Status optional, + Rule_Failure_Code_AVP rule_Failure_Code optional, + Final_Unit_Indication_AVP final_Unit_Indication optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1018);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" + variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Flow_Information_AVP{ + //Ref: ETSI TS 129 212 Flow_Information_AVP + AVP_Header aVP_Header, // + Flow_Description_AVP flow_Description optional, + Packet_Filter_Identifier_AVP packet_Filter_Identifier optional, + Packet_Filter_Usage_AVP packet_Filter_Usage optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1058);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record QoS_Information_AVP{ + //Ref: ETSI TS 129 212 QoS_Information_AVP + AVP_Header aVP_Header, // + QoS_Class_Identifier_AVP qoS_Class_Identifier optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bandwidth_UL optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bandwidth_DL optional, + Guaranteed_Bitrate_UL_AVP guaranteed_Bitrate_UL optional, + Guaranteed_Bitrate_DL_AVP guaranteed_Bitrate_DL optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, + APN_Aggregate_Max_Bitrate_UL_AVP aPN_Aggregate_Max_Bitrate_UL optional, + APN_Aggregate_Max_Bitrate_DL_AVP aPN_Aggregate_Max_Bitrate_DL optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record CoA_Information_AVP{ + //Ref: ETSI TS 129 212 CoA_Information_AVP + AVP_Header aVP_Header, // + Tunnel_Information_AVP tunnel_Information, + CoA_IP_Address_AVP coA_IP_Address, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1039);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Default_EPS_Bearer_QoS_AVP{ + //Ref: ETSI TS 129 212 Default_EPS_Bearer_QoS_AVP + AVP_Header aVP_Header, // + QoS_Class_Identifier_AVP qoS_Class_Identifier optional, + Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1049);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Event_Report_Indication_AVP{ + //Ref: ETSI TS 129 212 Event_Report_Indication_AVP + AVP_Header aVP_Header, // + set of Event_Trigger_AVP event_Trigger optional, + User_CSG_Information_AVP user_CSG_Information optional, + RAT_Type_AVP rAT_Type optional, + QoS_Information_AVP qoS_Information optional, + RAI_AVP rAI optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + Trace_Data_AVP trace_Data optional, + Trace_Reference_AVP trace_Reference optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, + Routing_IP_Address_AVP routing_IP_Address optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1033);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (event_Trigger) "fieldPresent=bytes(4, 1006)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Maximum_Bandwidth_AVP{ + //Ref: ETSI TS 129 212 Maximum_Bandwidth_AVP + AVP_Header aVP_Header, // + Max_Supported_Bandwidth_UL_AVP max_Supported_Bandwidth_UL optional, + Max_Supported_Bandwidth_DL_AVP max_Supported_Bandwidth_DL optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1082);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Packet_Filter_Information_AVP{ + //Ref: ETSI TS 129 212 Packet_Filter_Information_AVP + AVP_Header aVP_Header, // + Packet_Filter_Identifier_AVP packet_Filter_Identifier optional, + Precedence_AVP precedence optional, + Packet_Filter_Content_AVP packet_Filter_Content optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1061);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Routing_Filter_AVP{ + //Ref: ETSI TS 129 212 Routing_Filter_AVP + AVP_Header aVP_Header, // + Flow_Description_AVP flow_Description, + Flow_Direction_AVP flow_Direction, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1078);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Routing_Rule_Definition_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Definition_AVP + AVP_Header aVP_Header, // + Routing_Rule_Identifier_AVP routing_Rule_Identifier, + set of Routing_Filter_AVP routing_Filter optional, + Precedence_AVP precedence optional, + Routing_IP_Address_AVP routing_IP_Address optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1076);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (routing_Filter) "fieldPresent=bytes(4, 1078)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Routing_Rule_Install_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Install_AVP + AVP_Header aVP_Header, // + set of Routing_Rule_Definition_AVP routing_Rule_Definition optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1081);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (routing_Rule_Definition) "fieldPresent=bytes(4, 1076)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Routing_Rule_Remove_AVP{ + //Ref: ETSI TS 129 212 Routing_Rule_Remove_AVP + AVP_Header aVP_Header, // + set of Routing_Rule_Identifier_AVP routing_Rule_Identifier optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1075);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (routing_Rule_Identifier) "fieldPresent=bytes(4, 1077)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record TFT_Packet_Filter_Information_AVP{ + //Ref: ETSI TS 129 212 TFT_Packet_Filter_Information_AVP + AVP_Header aVP_Header, // + Precedence_AVP precedence optional, + TFT_Filter_AVP tFT_Filter optional, + ToS_Traffic_Class_AVP toS_Traffic_Class optional, + Security_Parameter_Index_AVP security_Parameter_Index optional, + Flow_Label_AVP flow_Label optional, + Flow_Direction_AVP flow_Direction optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1013);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Tunnel_Information_AVP{ + //Ref: ETSI TS 129 212 Tunnel_Information_AVP + AVP_Header aVP_Header, // + Tunnel_Header_Length_AVP tunnel_Header_Length optional, + record length (0..2) of Tunnel_Header_Filter_AVP tunnel_Header_Filter optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1038);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (tunnel_Header_Filter) "fieldPresent=bytes(4, 1036)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Usage_Monitoring_Information_AVP{ + //Ref: ETSI TS 129 212 Usage_Monitoring_Information_AVP + AVP_Header aVP_Header, // + Monitoring_Key_AVP monitoring_Key optional, + Granted_Service_Unit_AVP granted_Service_Unit optional, + Used_Service_Unit_AVP used_Service_Unit optional, + Usage_Monitoring_Level_AVP usage_Monitoring_Level optional, + Usage_Monitoring_Report_AVP usage_Monitoring_Report optional, + Usage_Monitoring_Support_AVP usage_Monitoring_Support optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 1067);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + }//end of group TS129_212Gx_AVPs + + }//end group AVPs + +} //end module LibDiameter_Types_Gx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn new file mode 100644 index 0000000..78b965d --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn @@ -0,0 +1,625 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter Rx AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new Rx AVP types is ok; + */ +module LibDiameter_Types_Rx_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + + group AVPTypes{ + + group AVP_Rx_Types{ + + type enumerated Abort_Cause_Type{ + // Ref: ETSI TS 129 214 5.3.1 + BEARER_RELEASED_E (0), + INSUFFICIENT_SERVER_RESOURCES_E (1), + INSUFFICIENT_BEARER_RESOURCES_E (2), + PS_TO_CS_HANDOVER_E (3), + SPONSORED_DATA_CONNECTIVITY_DISALLOWED_E (4) + } + with { + variant "length=32" + } + + type enumerated Flow_Status_Type{ + // Ref: ETSI TS 129 214 5.3.11 + ENABLED_UPLINK_E (0), + ENABLED_DOWNLINK_E (1), + ENABLED_E (2), + DISABLED_E (3), + REMOVED_E (4) + } + with { + variant "length=32" + } + + type enumerated Flow_Usage_Type{ + // Ref: ETSI TS 129 214 5.3.12 + NO_INFORMATION_E (0), + RTCP_E (1), + AF_SIGNALLING_E (2) + } + with { + variant "length=32" + } + + + type enumerated IMS_Content_Type{ + // Ref: ETSI TS 129 214 5.3.61 + NO_CONTENT_DETAIL_E (0), + CAT_E (1) + } + with { + variant "length=32" + } + + type enumerated Specific_Action_Type{ + // Ref: ETSI TS 129 214 5.3.13 + VOID_0_E (0), + CHARGING_CORRELATION_EXCHANGE_E (1), + INDICATION_OF_LOSS_OF_BEARER_E (2), + INDICATION_OF_RECOVERY_OF_BEARER_E (3), + INDICATION_OF_RELEASE_OF_BEARER_E (4), + VOID_5_E (5), + IP_CAN_CHANGE_E (6), + INDICATION_OF_OUT_OF_CREDIT_E (7), + INDICATION_OF_SUCCESSFUL_RESOURCES_ALLOCATION_E (8), + INDICATION_OF_FAILED_RESOURCES_ALLOCATION_E (9), + INDICATION_OF_LIMITED_PCC_DEPLOYMENT_E (10), + USAGE_REPORT_E (11), + ACCESS_NETWORK_INFO_REPORT_E (12) + } + with { + variant "length=32" + } + + type enumerated Media_Type_Type{ + // Ref: ETSI TS 129 214 5.3.19 + AUDIO_E (0), + VIDEO_E (1), + DATA_E (2), + APPLICATION_E (3), + CONTROL_E (4), + TEXT_E (5), + MESSAGE_E (6), + OTHER_E (7) // OTHER is defined as c_uInt32Max = 0xFFFFFFFF + } + with { + variant "length=32" + } + + type enumerated Rx_Request_Type{ + // Ref: ETSI TS 129 214 5.3.31 + INITIAL_REQUEST_E (0), + UPDATE_REQUEST_E (1), + PCSCF_RESTORATION_E (2) + } + with { + variant "length=32" + } + + type enumerated Service_Info_Type{ + // Ref: ETSI TS 129 214 5.3.25 + FINAL_SERVICE_INFORMATION_E (0), + PRELIMINARY_SERVICE_INFORMATION_E (1) + } + with { + variant "length=32" + } + + type enumerated SIP_Forking_Indication_Type{ + // Ref: ETSI TS 129 214 5.3.22 + SINGLE_DIALOGUE_E (0), + SEVERAL_DIALOGUES_E (1) + } + with { + variant "length=32" + } + + type enumerated AF_Signalling_Protocol_Type{ + // Ref: ETSI TS 129 214 5.3.26 + NO_INFORMATION_E (0), + SIP_E (1) + } + with { + variant "length=32" + } + + type enumerated Reservation_Priority_Type{ + // Ref: ETSI TS 183 017 7.3.9 + PRIORITY_ONE_E (1), + PRIORITY_TWO_E (2), + PRIORITY_THREE_E (3), + PRIORITY_FOUR_E (4), + PRIORITY_FIVE_E (5), + PRIORITY_SIX_E (6), + PRIORITY_SEVEN_E (7), + PRIORITY_EIGHT_E (8), + PRIORITY_NINE_E (9), + PRIORITY_TEN_E(10), + PRIORITY_ELEVEN_E (11), + PRIORITY_TWELVE_E (12), + PRIORITY_THIRTEEN_E (13), + PRIORITY_FOURTEEN_E (14), + PRIORITY_FIFTEEN_E (15) + } + with { + variant "length=32" + } + + }//end group AVP_Rx_Types + + }//end group AVP_Types + group AVPs{ + group TS129_214Rx_AVPS{ + + type record Abort_Cause_AVP{ + //Ref: ETSI TS 129 214 Abort Cause AVP + AVP_Header aVP_Header,// + Abort_Cause_Type aVP_Data + } + with { + variant "present=bytes(4, 500);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Access_Network_Charging_Address_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Address AVP + AVP_Header aVP_Header,// + Address aVP_Data + } + with { + variant "present=bytes(4, 501);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Access_Network_Charging_Identifier_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier AVP + AVP_Header aVP_Header, // + Access_Network_Charging_Identifier_Value_AVP acc_Net_Charging_Id_Val, + set of Flows_AVP flows + } + with { + variant "present=bytes(4, 502);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (flows) "condition=CodecHelper.leaveScope()" + } + + type record Access_Network_Charging_Identifier_Value_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Acceptable_Service_Info_AVP{ + //Ref: ETSI TS 129 214 Acceptable_Service_Info_AVP + AVP_Header aVP_Header,// + set of Media_Component_Description_AVP media_component_description optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (media_component_description) "fieldPresent=bytes(4, 511)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record AF_Application_Identifier_AVP{ + //Ref: ETSI TS 129 214 AF_Application_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 504);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record AF_Charging_Identifier_AVP{ + //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record AF_Requested_Data_AVP{ + //Ref: ETSI TS 129 214 AF_Requested_Data AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 551);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Application_Service_Provider_Identity_AVP{ + //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Codec_Data_AVP{ + //Ref: ETSI TS 129 214 Codec_data AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 524);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope();condition=CodecHelper.leaveScope()" + } + + type record Flow_Description_AVP{ + //Ref: ETSI TS 129 214 Flow_Description AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + with { + variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Flow_Number_AVP{ + //Ref: ETSI TS 129 214 Flow_Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Flows_AVP{ + //Ref: ETSI TS 129 214 Flows_AVP + AVP_Header aVP_Header,// + Media_Component_Number_AVP media_component_number, + set of Flow_Number_AVP flow_Number optional, + Final_Unit_Action_AVP final_unit_action optional + } + with { + variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" + variant (final_unit_action) "condition=CodecHelper.leaveScope()" + } + + type record Flow_Status_AVP{ + //Ref: ETSI TS 129 214 Flow_Status AVP + AVP_Header aVP_Header,// + Flow_Status_Type aVP_Data + } + with { + variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Flow_Usage_AVP{ + //Ref: ETSI TS 129 214 Flow_Usage AVP + AVP_Header aVP_Header,// + Flow_Usage_Type aVP_Data + } + with { + variant "present=bytes(4, 512);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record GCS_Identifier_AVP{ + //Ref: ETSI TS 129 214 GCS_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 538);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record IMS_Content_Identifier_AVP{ + //Ref: ETSI TS 129 214 IMS_Content_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 563);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record IMS_Content_Type_AVP{ + //Ref: ETSI TS 129 214 IMS_Content_Type AVP + AVP_Header aVP_Header,// + IMS_Content_Type aVP_Data + } + with { + variant "present=bytes(4, 564);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record IP_Domain_AVP{ + //Ref: ETSI TS 129 214 IP_Domain AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 525);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Specific_Action_AVP{ + //Ref: ETSI TS 129 214 Specific_Action AVP + AVP_Header aVP_Header,// + Specific_Action_Type aVP_Data + } + with { + variant "present=bytes(4, 513);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type set of Specific_Action_AVP Setof_Specific_Action_AVP + with { + variant "present=bytes(4, 513)" + } + + type record Max_Requested_Bandwidth_DL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record MCPTT_Identifier_AVP{ + //Ref: ETSI TS 129 214 MCPTT_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 547);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record MCVideo_Identifier_AVP{ + //Ref: ETSI TS 129 214 MCVideo_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 562);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Max_Requested_Bandwidth_UL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Media_Component_Description_AVP{ + //Ref: ETSI TS 129 214 Media_Component_Decription_AVP + AVP_Header aVP_Header,// + Media_Component_Number_AVP media_Component_Nr, + set of Media_Sub_Component_AVP media_Sub_component optional, + AF_Application_Identifier_AVP af_Application_Id optional, + Media_Type_AVP media_type optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + Flow_Status_AVP flow_Status optional, + Reservation_Priority_AVP reservation_Priority optional, + RS_Bandwidth_AVP rs_Bw optional, + RR_Bandwidth_AVP rr_Bw optional, + set of Codec_Data_AVP codec_data optional + } + with { + variant "present=bytes(4, 517);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (media_Sub_component) "fieldPresent=bytes(4, 519)&&CodecHelper.isAvailable()" + variant (codec_data) "fieldPresent=bytes(4, 524)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record Media_Component_Number_AVP{ + //Ref: ETSI TS 129 214 Media_Component_Number_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record Media_Sub_Component_AVP{ + //Ref: ETSI TS 129 214 Media_Sub_Component_AVP + AVP_Header aVP_Header,// + Flow_Number_AVP flow_Number, + record length (0..2) of Flow_Description_AVP flow_Description optional, + Flow_Status_AVP flow_Status optional, + Flow_Usage_AVP flow_Usage optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, + AF_Signalling_Protocol_AVP af_Signalling_Protocol optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 519);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (flow_Description) "fieldPresent=bytes(4, 507)&&CodecHelper.isAvailable()" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + type record Media_Type_AVP{ + //Ref: ETSI TS 129 214 Media_Type AVP + AVP_Header aVP_Header,// + Media_Type_Type aVP_Data + } + with { + variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record MPS_Identifier_AVP{ + //Ref: ETSI TS 129 214 MPS_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + with { + variant "present=bytes(4, 528);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" + } + + type record Pre_emption_Control_Info_AVP{ + //Ref: ETSI TS 129 214 Pre_emption_Control_Info AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 553);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Retry_Interval_AVP{ + //Ref: ETSI TS 129 214 Retry_Interval AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 541);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Rx_Request_Type_AVP{ + //Ref: ETSI TS 129 214 Rx_Request_Type AVP + AVP_Header aVP_Header,// + Rx_Request_Type aVP_Data + } + with { + variant "present=bytes(4, 533);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record RR_Bandwidth_AVP{ + //Ref: ETSI TS 129 214 RR Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 521);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record RS_Bandwidth_AVP{ + //Ref: ETSI TS 129 214 RS Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 522);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Service_Info_Status_AVP{ + //Ref: ETSI TS 129 214 Service_Info AVP + AVP_Header aVP_Header,// + Service_Info_Type aVP_Data + } + with { + variant "present=bytes(4, 527);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Service_Authorization_Info_AVP { + //Ref: ETSI TS 129 214 RS Bandwidth_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } + with { + variant "present=bytes(4, 548);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + type record SIP_Forking_Indication_AVP{ + //Ref: ETSI TS 129 214 SIP_Forking_Indication AVP + AVP_Header aVP_Header,// + SIP_Forking_Indication_Type aVP_Data + } + with { + variant "present=bytes(4, 523);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Sponsor_Identity_AVP{ + //Ref: ETSI TS 129 214 Sponsor_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + with { + variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Sponsored_Connectivity_Data_AVP{ + //Ref: ETSI TS 129 214 Sponsored_Connectivity_Data AVP + AVP_Header aVP_Header, // + Sponsor_Identity_AVP sponsor_Identity optional, + Application_Service_Provider_Identity_AVP application_service_provider_Id optional, + Granted_Service_Unit_AVP granted_Service_Unit optional, + Used_Service_Unit_AVP used_service_unit optional, + set of AVP_Type aVP_Type optional + } + with { + variant "present=bytes(4, 530);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record AF_Signalling_Protocol_AVP{ + //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP + AVP_Header aVP_Header,// + AF_Signalling_Protocol_Type aVP_Data + } + with { + variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record Reservation_Priority_AVP{ + //Ref: ETSI TS 183 017 Reservation_Priority AVP + AVP_Header aVP_Header,// + Reservation_Priority_Type aVP_Data + } + with { + variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" + variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + }//end of group TS129_214Rx_AVPs + + }//end group AVPs + + +} //end module LibDiameter_Types_Rx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 new file mode 100644 index 0000000..f0e3d3d --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 @@ -0,0 +1,1160 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S6a AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S6a AVP types is ok; + */ +module LibDiameter_Types_S6a_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibCommon_DataStrings all; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + group AVPs { + + group TS129_272_AVPs { + type record Terminal_Information_AVP { //ref: 7.3.3 + AVP_Header aVP_Header, //Terminal Information ::= + IMEI_AVP imei optional, + ThreeGPP2_MEID_AVP meid optional, + Sofware_Version_AVP sofware_Version optional, + set of AVP_Type aVP_Type optional + } + + type UTF8String IMEI length (14..15); + type record IMEI_AVP { //ref: 7.3.4 + AVP_Header aVP_Header, //IMEI ::= + IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). + //It may also include a 15th digit + } + + type UTF8String SVN length (2); + type record Sofware_Version_AVP { //ref: 7.3.5 + AVP_Header aVP_Header, //Software-Version ::= + SVN aVP_Data //2-digit Software Version Number (SVN) + } + + type octetstring ThreeGPP2_MEID length (8); + type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 + AVP_Header aVP_Header, //3GPP2-MEID ::= + ThreeGPP2_MEID aVP_Data + } + + type record ULR_Flags_AVP { //ref: 7.3.7 + AVP_Header aVP_Header, //ULR-Flags ::= + UInt32 aVP_Data + } + + type record ULA_Flags_AVP { //ref: 7.3.8 + AVP_Header aVP_Header, //ULA-Flags ::= + UInt32 aVP_Data + } + + type record Visited_PLMN_Id_AVP { //ref: 7.3.9 + AVP_Header aVP_Header, //Visited-PLMN-Id ::= + Oct3 aVP_Data + } + + type enumerated UE_SRVCC_Capability_Type { + UE_SRVCC_NOT_SUPPORTED_E (0), + UE_SRVCC_SUPPORTED_E (1) + } + + type record UE_SRVCC_Capability_AVP { //ref: 7.3.130 + AVP_Header aVP_Header, //UE-SRVCC-Capability ::= + UE_SRVCC_Capability_Type aVP_Data + } + + type record SGSN_Number_AVP { //ref: 7.3.102 + AVP_Header aVP_Header, //SGSN-Number ::= + octetstring aVP_Data + } + + type enumerated Homogeneous_Support_Type { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record Homogeneous_Support_AVP { //ref: 7.3.107 + AVP_Header aVP_Header, //Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ::= + Homogeneous_Support_Type aVP_Data + } + + type record GMLC_Address_AVP { //ref: 7.3.109 - TS 129 173 6.4.7 + AVP_Header aVP_Header, //GMLC-Address ::= + Address aVP_Data + } + + type record Context_Identifier_AVP { //ref: 7.3.27 + AVP_Header aVP_Header, //Context-Identifier ::= + UInt32 aVP_Data + } + + type record Service_Selection_AVP { //ref: 7.3.36 - IETF RFC 5778 6.2 + AVP_Header aVP_Header, //Service-Selection ::= + UTF8String aVP_Data + } + + type record MIP_Home_Agent_Address_AVP { //ref: 7.3.42 - IETF RFC 4004 7.4 + AVP_Header aVP_Header, //MIP-Home-Agent-Address ::= + Address aVP_Data + } + + type record MIP_Home_Agent_Host_AVP { //ref: 7.3.43 - IETF RFC 4004 7.11 + AVP_Header aVP_Header, //MIP-Home-Agent-Host ::= + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host, + set of AVP_Type aVP_Type optional + } + + type record MIP6_Home_Link_Prefix_AVP { //ref:IETF RFC 5447 4.2.4 + AVP_Header aVP_Header, //MIP6-Home-Link-Prefix ::= + octetstring aVP_Data + } + + type record MIP6_Agent_Info_AVP { //ref: 7.3.45 + AVP_Header aVP_Header, //MIP6-Agent-Info ::= < AVP Header: 486 > + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address1 optional, + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address2 optional, + MIP_Home_Agent_Host_AVP mip_Home_Agent_Host optional, + MIP6_Home_Link_Prefix_AVP mip6_Home_Link_Prefix optional, + set of AVP_Type aVP_Type optional + } + + type record Specific_APN_Info_AVP { //ref: 7.3.82 + AVP_Header aVP_Header, //Specific-APN-Info ::= + Service_Selection_AVP service_Selection, + MIP6_Agent_Info_AVP mip6_Agent_Info, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record Active_APN_AVP { //ref: 7.3.127 + AVP_Header aVP_Header, //Active-APN ::= + Context_Identifier_AVP context_Identifier, + Service_Selection_AVP service_Selection optional, + MIP6_Agent_Info_AVP mip6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + Specific_APN_Info_AVP specific_APN_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Error_Diagnostic_Code_Type { + GPRS_DATA_SUBSCRIBED_E (0), + NO_GPRS_DATA_SUBSCRIBED_E (1), + ODB_ALL_APN_E (2), + ODB_HPLMN_APN_E (3), + ODB_VPLMN_APN_E (4) + } + + type record Error_Diagnostic_AVP { //ref: 7.3.128 + AVP_Header aVP_Header, //Error-Diagnostic ::= + Error_Diagnostic_Code_Type error_Diagnostic_Code + } + + type enumerated Subscriber_Status_Code { + SERVICE_GRANTED_E (0), + OPERATOR_DETERMINED_BARRING_E (1) + } + + type record Subscriber_Status_AVP { //ref: 7.3.29 + AVP_Header aVP_Header, //Subscriber-Status ::= + Subscriber_Status_Code subscriber_Status_Code + } + + type record STN_SR_AVP { //ref: 7.3.39 + AVP_Header aVP_Header, //STN-SR ::= + octetstring sTN_SR + } + + type enumerated ICS_Indicator_Code { + FALSE_E (0), + TRUE_E (1) + } + + type record ICS_Indicator_AVP { //ref: 7.3.104 + AVP_Header aVP_Header, //ICS-Indicator ::= + ICS_Indicator_Code iCS_Indicator_Code + } + + type enumerated Network_Access_Mode_Code { + PACKET_AND_CIRCUIT_E (0), + Reserved_E (1), + ONLY_PACKET_E (2) + } + + type record Network_Access_Mode_AVP { //ref: 7.3.21 + AVP_Header aVP_Header, //Network-Access-Mode ::= + Network_Access_Mode_Code network_Access_Mode + } + + type record Operator_Determined_Barring_AVP { //ref: 7.3.30 + AVP_Header aVP_Header, //Operator-Determined-Barring ::= + UInt32 aVP_Data + } + + type record HPLMN_ODB_AVP { //ref: 7.3.22 + AVP_Header aVP_Header, //HPLMN-ODB ::= + UInt32 aVP_Data + } + + type record Regional_Subscription_Zone_Code_AVP { //ref: 7.3.52 + AVP_Header aVP_Header, //Regional-Subscription-Zone-Code ::= + octetstring aVP_Data + } + + type record Access_Restriction_Data_AVP { //ref: 7.3.31 + AVP_Header aVP_Header, //Access-Restriction-Data ::= + UInt32 aVP_Data + } + + type record APN_OI_Replacement_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //APN-OI-Replacement ::= + UTF8String aVP_Data + } + + type record GMLC_Number_AVP { //ref: 7.3.85 + AVP_Header aVP_Header, //GMLC-Number ::= + octetstring aVP_Data + } + + type record SS_Code_AVP { //ref: 7.3.87 + AVP_Header aVP_Header, //SS-Code ::= + octetstring aVP_Data + } + + type record SS_Status_AVP { //ref: 7.3.88 + AVP_Header aVP_Header, //SS-Status ::= + octetstring aVP_Data + } + + type enumerated Notification_To_UE_User_Code { + NOTIFY_LOCATION_ALLOWED_E (0), + NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE_E (1), + NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE_E (2), + LOCATION_NOT_ALLOWED_E (3) + } + + type record Notification_To_UE_User_AVP { //ref: 7.3.89 + AVP_Header aVP_Header, //Notification-To-UE-User ::= + Notification_To_UE_User_Code notification_To_UE_User_Code + } + + type record External_Client_AVP { //ref: 7.3.90 + AVP_Header aVP_Header, //External-Client ::= > + Client_Identity_AVP client_Identity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record Client_Identity_AVP { //ref: 7.3.91 + AVP_Header aVP_Header, //Client-Identity ::= + octetstring aVP_Data + } + + type enumerated GMLC_Restriction_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record GMLC_Restriction_AVP { //ref: 7.3.92 + AVP_Header aVP_Header, //GMLC-Restriction ::= + GMLC_Restriction_Code gMLC_Restriction_Code + } + + type enumerated PLMN_Client_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record PLMN_Client_AVP { //ref: 7.3.93 + AVP_Header aVP_Header, //PLMN-Client ::= + PLMN_Client_Code pLMN_Client_Code + } + + type record ServiceTypeIdentity_AVP { //ref: 7.3.95 + AVP_Header aVP_Header, //ServiceTypeIdentity ::= + UInt32 aVP_Data + } + + type record Service_Type_AVP { //ref: 7.3.94 + AVP_Header aVP_Header, //Service-Type ::= + ServiceTypeIdentity_AVP serviceTypeIdentity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_PrivacyException_AVP { //ref: 7.3.86 + AVP_Header aVP_Header, //LCS-PrivacyException ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of External_Client_AVP external_Client optional, + set of PLMN_Client_AVP pLMN_Client optional, + set of Service_Type_AVP service_Type optional, + set of AVP_Type aVP_Type optional + } + + type record MO_LR_AVP { //ref: 7.3.96 + AVP_Header aVP_Header, //MO-LR ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_Info_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //LCS-Info ::= + set of GMLC_Number_AVP gMLC_Number optional, + set of LCS_PrivacyException_AVP lCS_PrivacyException optional, + set of MO_LR_AVP mO_LR optional, + set of AVP_Type aVP_Type optional + } + + type record TS_Code_AVP { //ref: 7.3.100 + AVP_Header aVP_Header, //TS-Code ::= + octetstring aVP_Data + } + + type record Teleservice_List_AVP { //ref: 7.3.99 + AVP_Header aVP_Header, //Teleservice-List ::= + set length (1..infinity) of TS_Code_AVP tS_Code, + set of AVP_Type aVP_Type optional + } + + type record Call_Barring_Info_AVP { //ref: 7.3.101 + AVP_Header aVP_Header, //Call-Barring-Info ::= + SS_Code_AVP sS_Code, + SS_Status_AVP sS_Status, + set of AVP_Type aVP_Type optional + } + + type record AMBR_AVP { //ref: 7.3.41 + AVP_Header aVP_Header, //AMBR ::= + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul,//max_Requested_Bandwidth_UL,//max_Requested_Bw_Ul + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl,//max_Requested_Bandwidth_DL,//max_Requested_Bw_Dl + set of AVP_Type aVP_Type optional + } + + type record ThreeGPP_Charging_Char_AVP { //ref: TS 129 601 + AVP_Header aVP_Header, //3GPP-Charging-Characteristics ::= + octetstring aVP_Data + } + + type enumerated All_APN_Conf_Included_Id_Code { + All_APN_CONFIGURATIONS_INCLUDED_E (0), + MODIFIED_ADDED_APN_CONFIGURATIONS_INCLUDED_E (1) + } + + type record All_APN_Conf_Included_Id_AVP { //ref: 7.3.33 + AVP_Header aVP_Header, //All-APN-Configurations-Included-Indicator ::= + All_APN_Conf_Included_Id_Code all_APN_Conf_Included_Indicator + } + + type record APN_Configuration_Profile_AVP { //ref: 7.3.34 + AVP_Header aVP_Header, //APN-Configuration-Profile ::= + Context_Identifier_AVP context_Identifier, + All_APN_Conf_Included_Id_AVP all_APN_Conf_Included_Id, + set length (1 .. infinity) of APN_Configuration_AVP aPN_Configuration, + set of AVP_Type aVP_Type optional + } + + type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 + AVP_Header aVP_Header, //Served-Party-IP-Address ::= + Address aVP_Data + } + + type enumerated PDN_Type_Code { + IPv4_E (0), + IPv6_E (1), + IPv4v6_E (2), + IPv4_OR_IPv6_E (3) + } + + type record PDN_Type_AVP { //ref: 7.3.62 + AVP_Header aVP_Header, //PDN-Type ::= + PDN_Type_Code pDN_Type_Code + } + + type record EPS_Subscribed_QoS_Profile_AVP { //ref: 7.3.37 + AVP_Header aVP_Header, //EPS-Subscribed-QoS-Profile ::= + QoS_Class_Identifier_AVP qoS_Class_Identifier, + Allocation_Retention_Priority_AVP allocation_Retention_Priority, + set of AVP_Type aVP_Type optional + } + + type enumerated VPLMN_Dynamic_Address_Allowed_Code { + NOTALLOWED_E (0), + ALLOWED_E (1) + } + + type record VPLMN_Dynamic_Address_Allowed_AVP { //ref: 7.3.38 + AVP_Header aVP_Header, //VPLMN-Dynamic-Address-Allowed ::= + VPLMN_Dynamic_Address_Allowed_Code vPLMN_Dynamic_Address_Allowed + } + + type enumerated PDN_GW_Allocation_Type_Code { + STATIC_E (0), + DYNAMIC_E (1) + } + + type record PDN_GW_Allocation_Type_AVP { //ref: 7.3.44 + AVP_Header aVP_Header, //PDN-GW-Allocation-Type ::= + PDN_GW_Allocation_Type_Code pDN_GW_Allocation_Type + } + + type enumerated SIPTO_Permission_Code { + SIPTO_ALLOWED_E (0), + SIPTO_NOTALLOWED_E (1) + } + + type record SIPTO_Permission_AVP { //ref: 7.3.135 + AVP_Header aVP_Header, //SIPTO-Permission ::= + SIPTO_Permission_Code sIPTO_Permission + } + + type enumerated LIPA_Permission_Code { + LIPA_PROHIBITED_E (0), + LIPA_ONLY_E (1), + LIPA_CONDITIONAL_E (2) + } + + type record LIPA_Permission_AVP { //ref: 7.3.133 + AVP_Header aVP_Header, //LIPA-Permission ::= + LIPA_Permission_Code lIPA_Permission + } + + type record APN_Configuration_AVP { //ref: 7.3.35 + AVP_Header aVP_Header, //APN-Configuration ::= + Context_Identifier_AVP context_Identifier, + set length (2) of Served_Party_IP_Address_AVP served_Party optional, + PDN_Type_AVP pDN_Type, + Service_Selection_AVP service_Selection, + EPS_Subscribed_QoS_Profile_AVP ePS_Subscribed_QoS_Profile optional, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + MIP6_Agent_Info_AVP mIP6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + PDN_GW_Allocation_Type_AVP pDN_GW_Allocation_Type optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + set of Specific_APN_Info_AVP specific_APN_Info optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record RAT_Freq_Sel_Priority_ID_AVP { //ref: 7.3.46 + AVP_Header aVP_Header, //PRAT-Frequency-Selection-Priority-ID ::= + UInt32 aVP_Data + } + + type enumerated Trace_Depth_Code { + MINIMUM_E (0), + MEDIUM_E (1), + MAXIMUM_E (2), + MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), + MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), + MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) + } + + type record Trace_Depth_AVP { //ref: 7.3.67 + AVP_Header aVP_Header, //Trace-Depth ::= + Trace_Depth_Code trace_Depth + } + + type record Trace_NE_Type_List_AVP { //ref: 7.3.68 + AVP_Header aVP_Header, //Trace-NE-Type-List ::= + octetstring aVP_Data + } + + type record Trace_Interface_List_AVP { //ref: 7.3.69 + AVP_Header aVP_Header, //Trace-Interface-List ::= + octetstring aVP_Data + } + + type record Trace_Event_List_AVP { //ref: 7.3.70 + AVP_Header aVP_Header, //Trace-Event-List ::= + octetstring aVP_Data + } + + type record OMC_Id_AVP { //ref: 7.3.71 + AVP_Header aVP_Header, //OMC-Id ::= + octetstring aVP_Data + } + + type record Trace_Collection_Entity_AVP { //ref: 7.3.98 + AVP_Header aVP_Header, //Trace-Collection-Entitys ::= + Address aVP_Data + } + + type enumerated Job_Type_Code { + IMMEDIATE_MDT_ONLY_E (0), + LOGGED_MDT_ONLY_E (1), + TRACE_ONLY_E (2), + IMMEDIATE_MDT_AND_TRACE_E (3), + RLF_REPORTS_ONLY_E (4), + RCEF_REPORTS_ONLY_E (5) + } + + type record Job_Type_AVP { //ref: 7.3.137 - TS 132 422 5.9a + AVP_Header aVP_Header, //Job-Type ::= + Job_Type_Code job_Type + } + + type record Cell_Global_Identity_AVP { //ref: 7.3.119 + AVP_Header aVP_Header, //Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record E_UTRAN_Cell_Gl_Identity_AVP { //ref: 7.3.117 + AVP_Header aVP_Header, //E-UTRAN-Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record Routing_Area_Identity_AVP { //ref: 7.3.120 + AVP_Header aVP_Header, //Routing-Area-Identity ::= + octetstring aVP_Data + } + + type record Location_Area_Identity_AVP { //ref: 7.3.121 + AVP_Header aVP_Header, //Location-Area-Identity ::= + octetstring aVP_Data + } + + type record Tracking_Area_Identity_AVP { //ref: 7.3.118 + AVP_Header aVP_Header, //Tracking-Area-Identity::= + octetstring aVP_Data + } + + type record Area_Scope_AVP { //ref: 7.3.138 - TS 132 422 5.10.2 + AVP_Header aVP_Header, //Area-Scope ::= + set of Cell_Global_Identity_AVP cell_Global_Identity optional, + set of E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Global_Identity optional, + set of Routing_Area_Identity_AVP routing_Area_Identity optional, + set of Location_Area_Identity_AVP location_Area_Identity optional, + set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, + set of AVP_Type aVP_Type optional + } + + type record List_Of_Measurements_AVP { //ref: 7.3.139 + AVP_Header aVP_Header, //List-Of-Measurements ::= + UInt32 aVP_Data + } + + type record Reporting_Trigger_AVP { //ref: 7.3.140 + AVP_Header aVP_Header, //Reporting-Trigger ::= + UInt32 aVP_Data + } + + type enumerated Report_Interval_Code { + T_250ms_E ( 0), + T_500ms_E ( 1), + T_1000ms_E ( 2), + T_2000ms_E ( 3), + T_3000ms_E ( 4), + T_4000ms_E ( 5), + T_6000ms_E ( 6), + T_8000ms_E ( 7), + T_12000ms_E ( 8), + T_16000ms_E ( 9), + T_20000ms_E (10), + T_24000ms_E (11), + T_28000ms_E (12), + T_32000ms_E (13), + T_64000ms_E (14), + T_120ms_E (15), + T_240ms_E (16), + T_480ms_E (17), + T_640ms_E (18), + T_1024ms_E (19), + T_2048ms_E (20), + T_5120ms_E (21), + T_10240ms_E (22), + T_60000ms_E (23), // 1 min + T_360000ms_E (24), // 6 min + T_720000ms_E (25), // 12 min + T_1800000ms_E (26), // 30 min + T_3600000ms_E (27) // 60 min + } + + type record Report_Interval_AVP { //ref: 7.3.141 - TS 132 422 5.10.5 + AVP_Header aVP_Header, //Report-Interval ::= + Report_Interval_Code report_Interval + } + + type enumerated Report_Amount_Code { + N_1_E (0), + N_2_E (1), + N_4_E (2), + N_8_E (3), + N_16_E (4), + N_32_E (5), + N_64_E (6), + N_INFINITY_E (7) + } + + type record Report_Amount_AVP { //ref: 7.3.142 - TS 132 422 5.10.6 + AVP_Header aVP_Header, //Report-Amount ::= + Report_Amount_Code report_Amount + } + + type record Event_Threshold_RSRP_AVP { //ref: 7.3.143 - TS 132 422 5.10.7 + AVP_Header aVP_Header, //Event-Threshold-RSRP ::= + UInt32 aVP_Data + } + + type record Event_Threshold_RSRQ_AVP { //ref: 7.3.144 - TS 132 422 5.10.7a + AVP_Header aVP_Header, //Event-Threshold-RSRQ ::= + UInt32 aVP_Data + } + + type enumerated Logging_Interval_Code { + T_1dot28_E (0), + T_2dot56_E (1), + T_5dot12_E (2), + T_10dot24_E (3), + T_20dot48_E (4), + T_30dot72_E (5), + T_40dot96_E (6), + T_61dot44_E (7) + } + + type record Logging_Interval_AVP { //ref: 7.3.145 - TS 132 422 5.10.8 + AVP_Header aVP_Header, //Logging-Interval ::= + Logging_Interval_Code logging_Interval + } + + type enumerated Logging_Duration_Code { + T_600sec_E (0), + T_1200sec_E (1), + T_2400sec_E (2), + T_3600sec_E (3), + T_5400sec_E (4), + T_7200sec_E (5) + } + + type record Logging_Duration_AVP { //ref: 7.3.146 - TS 132 422 5.10.9 + AVP_Header aVP_Header, //Logging-Duration ::= + Logging_Duration_Code logging_Duration + } + + type record MDT_Configuration_AVP { //ref: 7.3.136 + AVP_Header aVP_Header, //MDT-Configuration ::= + Job_Type_AVP job_Type, + Area_Scope_AVP area_Scope optional, + List_Of_Measurements_AVP list_Of_Measurements optional, + Reporting_Trigger_AVP reporting_Trigger optional, + Report_Interval_AVP report_Interval optional, + Report_Amount_AVP report_Amount optional, + Event_Threshold_RSRP_AVP event_Threshold_RSRP optional, + Event_Threshold_RSRQ_AVP event_Threshold_RSRQ optional, + Logging_Interval_AVP logging_Interval optional, + Logging_Duration_AVP logging_Duration optional, + set of AVP_Type aVP_Type optional + } + + type record Trace_Data_AVP { //ref: 7.3.63 + AVP_Header aVP_Header, //Trace-Data ::= + Trace_Reference_AVP trace_Reference, + Trace_Depth_AVP trace_Depth, + Trace_NE_Type_List_AVP trace_NE_Type_List, + Trace_Interface_List_AVP trace_Interface_List optional, + Trace_Event_List_AVP trace_Event_List, + OMC_Id_AVP oMC_Id optional, + Trace_Collection_Entity_AVP trace_Collection_Entity, + MDT_Configuration_AVP mDT_Configuration optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Complete_DL_Included_Indicator_Code { + All_PDP_CONTEXTS_INCLUDED_E (0), + MODIFIED_ADDED_PDP_CONTEXTS_INCLUDED_E (1) + } + + type record Complete_DL_Included_Indicator_AVP { //ref: 7.3.73 + AVP_Header aVP_Header, //Complete-Data-List-Included-Indicator ::= + Complete_DL_Included_Indicator_Code complete_DL_Included_Indicator + } + + type record PDP_Type_AVP { //ref: 7.3.75 + AVP_Header aVP_Header, //PDP-Type ::= + octetstring aVP_Data + } + + type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 + AVP_Header aVP_Header, //PDP-Address ::= + Address aVP_Data + } + + type record QoS_Subscribed_AVP { //ref: 7.3.77 + AVP_Header aVP_Header, //QoS-Subscribed ::= + octetstring aVP_Data + } + + type record Ext_PDP_Type_AVP { //ref: 7.3.75A + AVP_Header aVP_Header, //Ext-PDP-Type ::= + octetstring aVP_Data + } + + type record Ext_PDP_Address_AVP { //ref: 7.3.129 + AVP_Header aVP_Header, //Ext-PDP-Address ::= + Address aVP_Data + } + + type record PDP_Context_AVP { //ref: 7.3.74 + AVP_Header aVP_Header, //PDP-Context ::= + Context_Identifier_AVP context_Identifier, + PDP_Type_AVP pDP_Type, + PDP_Address_AVP pDP_Address optional, + QoS_Subscribed_AVP qoS_Subscribed, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + Service_Selection_AVP service_Selection, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + Ext_PDP_Type_AVP ext_PDP_Type optional, + Ext_PDP_Address_AVP ext_PDP_Address optional, + AMBR_AVP aMBR optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record GPRS_Subscription_Data_AVP { //ref: 7.3.72 + AVP_Header aVP_Header, //GPRS-Subscription-Data ::= + Complete_DL_Included_Indicator_AVP complete_Data_List_Included_Indicator, + set length (1..50) of PDP_Context_AVP pDP_Context, + set of AVP_Type aVP_Type optional + } + +// type record CSG_Id_AVP { //ref: 7.3.79 +// AVP_Header aVP_Header, //CSG-Id ::= +// UInt32 aVP_Data +// } + + type record Expiration_Date_AVP { //ref: 7.3.80 + AVP_Header aVP_Header, //Expiration-Date ::= + Time aVP_Data + } + + type record CSG_Subscription_Data_AVP { //ref: 7.3.78 + AVP_Header aVP_Header, //CSG-Subscription-Data ::= + CSG_Id_AVP cSG_Id, + Expiration_Date_AVP expiration_Date optional, + set of Service_Selection_AVP service_Selection optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Roaming_Rest_Unsupp_Feature_Code { + ROAMING_RESTRICTED_DUE_TO_UNSUPPORTED_FEATURE_E (0) + } + + type record Roaming_Rest_Unsupp_Feature_AVP { //ref: 7.3.81 + AVP_Header aVP_Header, //Roaming-Restricted-Due-To-Unsupported-Feature ::= + Roaming_Rest_Unsupp_Feature_Code roaming_Restricted_Due_To_Unsupported_Feature + } + + type record RAU_TAU_Timer_AVP { //ref: 7.3.134 + AVP_Header aVP_Header, //Subscribed-Periodic-RAU-TAU-Timer ::= + UInt32 aVP_Data + } + + type record MPS_Priority_AVP { //ref: 7.3.131 + AVP_Header aVP_Header, //MPS-Priority ::= + UInt32 aVP_Data + } + + type enumerated VPLMN_LIPA_Allowed_Code { + LIPA_NOTALLOWED_E (0), + LIPA_ALLOWED_E (1) + } + + type record VPLMN_LIPA_Allowed_AVP { //ref: 7.3.132 + AVP_Header aVP_Header, //VPLMN-LIPA-Allowed ::= + VPLMN_LIPA_Allowed_Code vPLMN_LIPA_Allowed + } + + type enumerated Relay_Node_Indicator_Code { + NOT_RELAY_NODE_E (0), + RELAY_NODE_E (1) + } + + type record Relay_Node_Indicator_AVP { //ref: 7.3.147 + AVP_Header aVP_Header, //Relay-Node-Indicator ::= + Relay_Node_Indicator_Code relay_Node_Indicator + } + + type enumerated MDT_User_Consent_Code { + CONSENT_NOT_GIVEN_E (0), + CONSENT_GIVEN_E (1) + } + + type record MDT_User_Consent_AVP { //ref: 7.3.148 + AVP_Header aVP_Header, //MDT-User-Consent ::= + MDT_User_Consent_Code mDT_User_Consent + } + + type record Subscription_Data_AVP { //ref: 7.3.2 + AVP_Header aVP_Header, //Subscription-Data ::= + Subscriber_Status_AVP subscriber_Status optional, + MSISDN_AVP mSISDN optional, + STN_SR_AVP sTN_SR optional, + ICS_Indicator_AVP iCS_Indicator optional, + Network_Access_Mode_AVP network_Access_Mode optional, + Operator_Determined_Barring_AVP operator_Determined_Barring optional, + HPLMN_ODB_AVP hPLMN_ODB optional, + set length (10) of Regional_Subscription_Zone_Code_AVP zone_Code optional, + Access_Restriction_Data_AVP access_Restriction_Data optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + LCS_Info_AVP lCS_Info optional, + Teleservice_List_AVP teleservice_List optional, + set of Call_Barring_Info_AVP call_Barring_Info optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + APN_Configuration_Profile_AVP aPN_Configuration_Profile optional, + RAT_Freq_Sel_Priority_ID_AVP rAT_Freq_Sel_Priority_ID optional, + Trace_Data_AVP trace_Data optional, + GPRS_Subscription_Data_AVP gPRS_Subscription_Data optional, + CSG_Subscription_Data_AVP cSG_Subscription_Data optional, + Roaming_Rest_Unsupp_Feature_AVP roaming_Rest_Unsupp_Feature optional, + RAU_TAU_Timer_AVP subscribed_Perio_RAUTAU_Timer optional, + MPS_Priority_AVP mPS_Priority optional, + VPLMN_LIPA_Allowed_AVP vPLMN_LIPA_Allowed optional, + Relay_Node_Indicator_AVP relay_Node_Indicator optional, + MDT_User_Consent_AVP mDT_User_Consent optional, + set of AVP_Type aVP_Type optional + } + + type record Number_Of_Requested_Vectors_AVP { //ref: 7.3.14 + AVP_Header aVP_Header, //Number-Of-Requested-Vectors ::= + UInt32 aVP_Data + } + + type record Immediate_Response_Preferred_AVP { //ref: 7.3.16 + AVP_Header aVP_Header, //Immediate-Response-Preferred ::= + UInt32 aVP_Data + } + + type record Re_synchronization_Info_AVP { //ref: 7.3.15 + AVP_Header aVP_Header, //Re-synchronization-Info ::= + octetstring aVP_Data + } + + type record Req_EUTRAN_Auth_Info_AVP { //ref: 7.3.11 + AVP_Header aVP_Header, //Requested-EUTRAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Req_UTRAN_GERAN_Auth_Info_AVP { //ref: 7.3.12 + AVP_Header aVP_Header, //Requested-EUTRAN-GERAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Item_Number_AVP { //ref: 7.3.23 + AVP_Header aVP_Header, //Item-Number ::= + UInt32 aVP_Data + } + + type record RAND_AVP { //ref: 7.3.53 + AVP_Header aVP_Header, //RAND ::= + octetstring aVP_Data + } + + type record XRES_AVP { //ref: 7.3.54 + AVP_Header aVP_Header, //XRES ::= + octetstring aVP_Data + } + + type record AUTN_AVP { //ref: 7.3.55 + AVP_Header aVP_Header, //AUTN ::= + octetstring aVP_Data + } + + type record KASME_AVP { //ref: 7.3.56 + AVP_Header aVP_Header, //KASME ::= + octetstring aVP_Data + } + + type record E_UTRAN_Vector_AVP { //ref: 7.3.18 + AVP_Header aVP_Header, //E-UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + KASME_AVP kASME, + set of AVP_Type aVP_Type optional + } + + type record Confidentiality_Key_AVP { //ref: 7.3.57 + AVP_Header aVP_Header, //Confidentiality-Key ::= + octetstring aVP_Data + } + + type record Integrity_Key_AVP { //ref: 7.3.58 + AVP_Header aVP_Header, //Integrity-Key ::= + octetstring aVP_Data + } + + type record UTRAN_Vector_AVP { //ref: 7.3.19 + AVP_Header aVP_Header, //UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + Confidentiality_Key_AVP confidentiality_Key, + Integrity_Key_AVP integrity_Key, + set of AVP_Type aVP_Type optional + } + + type record SRES_AVP { //ref: 7.3.60 + AVP_Header aVP_Header, //SRES ::= + octetstring aVP_Data + } + + type record Kc_AVP { //ref: 7.3.59 + AVP_Header aVP_Header, //Kc ::= + octetstring aVP_Data + } + + type record GERAN_Vector_AVP { //ref: 7.3.20 + AVP_Header aVP_Header, //GERAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + SRES_AVP sRES, + Kc_AVP kc, + set of AVP_Type aVP_Type optional + } + + type record Authentication_Info_AVP { //ref: 7.3.17 + AVP_Header aVP_Header, //Authentication-Info ::= + set of E_UTRAN_Vector_AVP e_UTRAN_Vector optional, + set of UTRAN_Vector_AVP uTRAN_Vector optional, + set of GERAN_Vector_AVP gERAN_Vector optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Cancellation_Type_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Cancellation_Type_AVP { //ref: 7.3.24 + AVP_Header aVP_Header, //Cancellation-Type ::= + Cancellation_Type_Code cancellation_Type + } + + type record CLR_Flags_AVP { //ref: 7.3.152 + AVP_Header aVP_Header, //CLR-Flags ::= + UInt32 aVP_Data + } + + type record IDR_Flags_AVP { //ref: 7.3.103 + AVP_Header aVP_Header, //IDR-Flags ::= + UInt32 aVP_Data + } + + type record DSR_Flags_AVP { //ref: 7.3.25 + AVP_Header aVP_Header, //DSR-Flags ::= + UInt32 aVP_Data + } + + type record DSA_Flags_AVP { //ref: 7.3.26 + AVP_Header aVP_Header, //DSA-Flags ::= + UInt32 aVP_Data + } + + type record PUER_Flags_AVP { //ref: 7.3.149 + AVP_Header aVP_Header, //PUR-Flags ::= + UInt32 aVP_Data + } + + type record PUEA_Flags_AVP { //ref: 7.3.48 + AVP_Header aVP_Header, //PUA-Flags ::= + UInt32 aVP_Data + } + + type record IDA_Flags_AVP { //ref: 7.3.47 + AVP_Header aVP_Header, //IDA-Flags ::= + UInt32 aVP_Data + } + + type record NOR_Flags_AVP { //ref: 7.3.49 + AVP_Header aVP_Header, //NOR-Flags ::= + UInt32 aVP_Data + } + + type enumerated IMS_Voice_PS_Sessions_Support_Code { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record IMS_Voice_PS_Sessions_Support_AVP { //ref: 7.3.106 + AVP_Header aVP_Header, //IMS-Voice-Over-PS-Sessions-Supported ::= + IMS_Voice_PS_Sessions_Support_Code iMS_Voice_Over_PS_Sessions_Supported + } + + type record Last_UE_Activity_Time_AVP { //ref: 7.3.108 + AVP_Header aVP_Header, //Last-UE-Activity-Time ::= + Time aVP_Data + } + + type record EPS_User_State_AVP { //ref: 7.3.110 + AVP_Header aVP_Header, //EPS-User-State ::= + MME_User_State_AVP mME_User_State optional, + SGSN_User_State_AVP sGSN_User_State optional, + set of AVP_Type aVP_Type optional + } + + type record EPS_Location_Information_AVP { //ref: 7.3.111 + AVP_Header aVP_Header, //EPS-Location-Information ::= + MME_Location_Information_AVP mME_Location_Information optional, + SGSN_Location_Information_AVP sGSN_Location_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Service_Area_Identity_AVP { //ref: 7.3.122 + AVP_Header aVP_Header, //Service-Area-Identity ::= + octetstring aVP_Data + } + + type record Geographical_Information_AVP { //ref: 7.3.123 + AVP_Header aVP_Header, //Geographical-Information ::= + octetstring aVP_Data + } + + type record Geodetic_Information_AVP { //ref: 7.3.124 + AVP_Header aVP_Header, //Geodetic-Information ::= + octetstring aVP_Data + } + + type enumerated Current_Location_Retrieved_Code { + ACTIVE_LOCATION_RETRIEVAL_E (0) + } + + type record Current_Location_Retrieved_AVP { //ref: 7.3.125 + AVP_Header aVP_Header, //Current-Location-Retrieved ::= + Current_Location_Retrieved_Code current_Location_Retrieved + } + + type record Age_Of_Location_Informations_AVP { //ref: 7.3.126 + AVP_Header aVP_Header, //Age-Of-Location-Information ::= + UInt32 aVP_Data + } + + type enumerated CSG_Access_Mode_Code { + CLOSED_MODE_E (0), + HYBRID_MODE_E (1) + } + + type record CSG_Access_Mode_AVP { //ref: TS 132 299 7.2.46A + AVP_Header aVP_Header, //CSG-Access-Mode ::= + CSG_Access_Mode_Code cSG_Access_Mode + } + + type enumerated CSG_Membership_Indication_Code { + NOT_CSG_MEMBER_E (0), + CSG_MEMBER_E (1) + } + + type record CSG_Membership_Indication_AVP { //ref: TS 132 299 7.2.46B + AVP_Header aVP_Header, //CSG-Membership-Indication ::= + CSG_Membership_Indication_Code cSG_Membership_Indication + } + + type record MME_Location_Information_AVP { //ref: 7.3.115 + AVP_Header aVP_Header, //MME-Location-Information ::= + E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Gl_Identity optional, + Tracking_Area_Identity_AVP tracking_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_Location_Information_AVP { //ref: 7.3.116 + AVP_Header aVP_Header, //SGSN-Location-Information ::= + Cell_Global_Identity_AVP cell_Global_Identity optional, + Location_Area_Identity_AVP location_Area_Identity optional, + Service_Area_Identity_AVP service_Area_Identity optional, + Routing_Area_Identity_AVP routing_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record MME_User_State_AVP { //ref: 7.3.112 + AVP_Header aVP_Header, //MME-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_User_State_AVP { //ref: 7.3.113 + AVP_Header aVP_Header, //SGSN-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type enumerated User_State_Code { + DETACHED_E (0), + ATTACHED_NOT_REACHABLE_FOR_PAGING_E (1), + ATTACHED_REACHABLE_FOR_PAGING_E (2), + CONNECTED_NOT_REACHABLE_FOR_PAGING_E (3), + CONNECTED_REACHABLE_FOR_PAGING_E (4), + NETWORK_DETERMINED_NOT_REACHABLE_E (5) + } + + type record User_State_AVP { //ref: 7.3.114 + AVP_Header aVP_Header, //User-State ::= + User_State_Code user_State + } + + type record User_Id_AVP { //ref: 7.3.50 + AVP_Header aVP_Header, //User-Id ::= + UTF8String aVP_Data + } + + type enumerated Alert_Reason_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Alert_Reason_AVP { //ref: 7.3.83 + AVP_Header aVP_Header, //Alert-Reason ::= + Alert_Reason_Code alert_Reason + } + + } // End of group TS129_272_AVPs + + } // End of group AVPs + +} // End of LibDiameter_Types_S6a_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn new file mode 100644 index 0000000..bbe8502 --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn @@ -0,0 +1,289 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S9 AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S9 AVP types is ok; + */ +module LibDiameter_Types_S9_AVPs { + + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + group AVPs{ + group TS129_215_AVPs { + type octetstring DiameterIdentity; // Alias + + type record TDF_Information_AVP { //ref: TS129 212 5.3.78 + AVP_Header aVP_Header, //TDF-Information ::= + TDF_Destination_Realm_AVP tDF_Destination_Realm optional, + TDF_Destination_Host_AVP tDF_Destination_Host optional, + TDF_IP_Address_AVP tDF_IP_Address optional + } + + type record TDF_Destination_Realm_AVP { //ref: TS129 212 5.3.79 + AVP_Header aVP_Header, //TDF-Destination-Realm ::= + DiameterIdentity aVP_Data + } + + type record TDF_Destination_Host_AVP { //ref: TS129 212 5.3.80 + AVP_Header aVP_Header, //TDF-Destination-Host ::= + DiameterIdentity aVP_Data + } + + type record TDF_IP_Address_AVP { //ref: TS129 212 5.3.81 + AVP_Header aVP_Header, //TDF-IP-Address ::= + Address aVP_Data + } + + type enumerated AN_GW_Status_Code { + AN_GW_FAILED_E (0) + } + + type record AN_GW_Status_AVP { //ref: TS129 212 5.3.100 + AVP_Header aVP_Header, //AN-GW-Statush ::= + AN_GW_Status_Code aN_GW_Status + } + + type record ThreeGPP_GGSN_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-Address ::= + octetstring aVP_Data + } + + type record ThreeGPP_GGSN_IPv6_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-IPv6-Address ::= + octetstring aVP_Data + } + + type record TWAN_Identifier_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //TWAN-Identifier ::= + octetstring aVP_Data + } + + type record QoS_Rule_Report_AVP { //ref: TS129 212 5a.3.5 + AVP_Header aVP_Header, //QoS-Rule-Report ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + PCC_Rule_Status_AVP pCC_Rule_Status optional, + Rule_Failure_Code_AVP rule_Failure_Code optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Name_AVP { //ref: TS129 212 5a.3.4 + AVP_Header aVP_Header, //QoS-Rule-Name ::= + octetstring aVP_Data + } + + type record QoS_Rule_Base_Name_AVP { //ref: TS129 212 5a.3.7 + AVP_Header aVP_Header, //QoS-Rule-Base-Name ::= + UTF8String aVP_Data + } + + type record Appl_Detection_Info_AVP { //ref: TS129 212 5.3.91 + AVP_Header aVP_Header, //Application-Detection-Information ::= + TDF_Application_Identifier_AVP tDF_Application_Identifier, + TDF_Application_Instance_Id_AVP tDF_Application_Instance_Id optional, + set of Flow_Information_AVP flow_Information optional, + set of AVP_Type aVP_Type optional + } + + type record TDF_Application_Identifier_AVP { //ref: TS129 212 5.3.77 + AVP_Header aVP_Header, //TDF-Application-Identifier ::= + octetstring aVP_Data + } + + type record TDF_Application_Instance_Id_AVP { //ref: TS129 212 5.3.92 + AVP_Header aVP_Header, //TDF-Application-Instance-Identifier ::= + octetstring aVP_Data + } + + type record HeNB_Local_IP_Address_AVP { //ref: TS129 212 5.3.95 + AVP_Header aVP_Header, //HeNB-Local-IP-Address ::= + Address aVP_Data + } + + type record UE_Local_IP_Address_AVP { //ref: TS129 212 5.3.96 + AVP_Header aVP_Header, //UE-Local-IP-Address ::= + Address aVP_Data + } + + type record UDP_Source_Port_AVP { //ref: TS129 212 5.3.97 + AVP_Header aVP_Header, //UDP-Source-Port ::= + UInt32 aVP_Data + } + + type enumerated Session_Linking_Indicator_Code { + SESSION_LINKING_IMMEDIATE_E (0), + SESSION_LINKING_DEFERRED_E (1) + } + + type record Session_Linking_Indicator_AVP { //ref: TS129 212 5a.3.6 + AVP_Header aVP_Header, //Session-Linking-Indicator ::= + Session_Linking_Indicator_Code session_Linking_Indicator + } + + type record Subses_Decision_Info_AVP { //ref: TS129 215 5.3.1 + AVP_Header aVP_Header, //Subsession-Decision-Info ::= + Subsession_Id_AVP subsession_Id, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, + set of Charging_Rule_Install_AVP charging_Rule_Install optional, + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Session_Release_Cause_AVP session_Release_Cause optional, + Bearer_Control_Mode_AVP bearer_Control_Mode optional, + set of Event_Trigger_AVP event_Trigger optional, + Revalidation_Time_AVP revalidation_Time optional, + Online_AVP online optional, + Offline_AVP offline optional, + QoS_Information_AVP qoS_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Subses_Enforcement_Info_AVP { //ref: TS129 215 5.3.2 + AVP_Header aVP_Header, //Subsession-Enforcement-Info ::= + Subsession_Id_AVP subsession_Id, + Subsession_Operation_AVP subsession_Operation optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Bearer_Operation_AVP bearer_Operation optional, + set of Packet_Filter_Info_AVP packet_Filter_Information optional, + Packet_Filter_Operation_AVP packet_Filter_Operation optional, + QoS_Information_AVP qoS_Information optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + set of CoA_Information_AVP coA_Information optional, + Called_Station_Id_AVP called_Station_Id optional, + PDN_Connection_ID_AVP pDN_Connection_ID optional, + Bearer_Usage_AVP bearer_Usage optional, + set of TFT_Packet_Filter_Info_AVP tFT_Packet_Filter_Information optional, + Online_AVP online optional, + Offline_AVP offline optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Report_AVP charging_Rule_Report optional, + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, + IP_CAN_Type_AVP iP_CAN_Type optional, + RAT_Type_AVP rat_Type optional, + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, + RAI_AVP rAI optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + User_CSG_Information_AVP user_CSG_Information optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + Network_Request_Support_AVP network_Request_Support optional, + Routing_Rule_Install_AVP routing_Rule_Install optional, + Routing_Rule_Remove_AVP routing_Rule_Remove optional, + Logical_Access_ID_AVP logical_Access_ID optional, + Physical_Access_ID_AVP physical_Access_ID optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, + set of Event_Trigger_AVP event_Trigger optional, + Access_Netw_Charging_Addr_AVP access_Network_Charging_Address optional, + set of Access_Netw_Charg_Id_Gx_AVP access_Network_Charging_Id_Gx optional, + Session_Linking_Indicator_AVP session_Linking_Indicator optional, + set of AVP_Type aVP_Type optional + } + + type record Subsession_Id_AVP { //ref: TS129 215 5.3.3 + AVP_Header aVP_Header, //Subsession-Id ::= + UInt32 aVP_Data + } + + type enumerated Subsession_Operation_Code { + TERMINATION_E (0), + ESTABLISHMENT_E (1), + MODIFICATION_E (2) + } + + type record Subsession_Operation_AVP { //ref: TS129 215 5.3.4 + AVP_Header aVP_Header, //Subsession-Operation ::= + Subsession_Operation_Code subsession_Operation + } + + type enumerated Multiple_BBERF_Action_Code { + ESTABLISHMENT_E (0), + TERMINATION_E (1) + } + + type record Multiple_BBERF_Action_AVP { //ref: TS129 215 5.3.6 + AVP_Header aVP_Header, //Multiple-BBERF-Action ::= + Multiple_BBERF_Action_Code multiple_BBERF_Action + } + + type Resource_Allocation_Notification_AVP + Resource_Alloc_Notification_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Value_AVP + ANw_Charging_Id_Value_AVP; // Shortened Name - Alias + type record QoS_Rule_Install_AVP { //ref: TS129 212 5a.3.1 + AVP_Header aVP_Header, //QoS-Rule-Install ::= + set of QoS_Rule_Definition_AVP qoS_Rule_Definition optional, + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + Tunnel_Information_AVP tunnel_Information optional, + ANw_Charging_Id_Value_AVP acc_Net_Charging_Id_Val optional, + Resource_Alloc_Notification_AVP resource_Alloc_Notification optional, + Rule_Activation_Time_AVP rule_Activation_Time optional, + Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, + ThreeGPP_GGSN_Address_AVP threeGPP_GGSN_Address optional, + ThreeGPP_GGSN_IPv6_Address_AVP threeGPP_GGSN_IPv6_Address optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + UDP_Source_Port_AVP uDP_Source_Port optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Remove_AVP { //ref: TS129 212 5a.3.2 + AVP_Header aVP_Header, //QoS-Rule-Remove ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Definition_AVP { //ref: TS129 212 5a.3.3 + AVP_Header aVP_Header, //QoS-Rule-Definition ::= + QoS_Rule_Name_AVP qoS_Rule_Name, + set of Flow_Information_AVP flow_Information optional, + QoS_Information_AVP qoS_Information optional, + Precedence_AVP precedence optional, + set of Required_Access_Info_AVP required_Access_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Required_Access_Info_Code { + USER_LOCATION_E (0), + MS_TIME_ZONE_E (1) } + + type record Required_Access_Info_AVP { //ref: TS129 214 5.3.34 + AVP_Header aVP_Header, //Required-Access-Info ::= + Required_Access_Info_Code required_Access_Info + } + }//end of group TS129_215_AVPs + }//end group AVPs + + group ShorterNames { + type Packet_Filter_Information_AVP Packet_Filter_Info_AVP; // Shortened Name - Alias + type AN_GW_Address_AVP AN_GW_Addr_AVP; // Shortened Name - Alias + type TFT_Packet_Filter_Information_AVP TFT_Packet_Filter_Info_AVP; // Shortened Name - Alias + type Access_Network_Charging_Address_AVP + Access_Netw_Charging_Addr_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Gx_AVP + Access_Netw_Charg_Id_Gx_AVP; // Shortened Name - Alias + type Multiple_Services_Credit_Control_AVP + Multiple_Services_CC_AVP; // Shortened Name - Alias + type Usage_Monitoring_Information_AVP Usage_Monitoring_Info_AVP; // Shortened Name - Alias + type CSG_Information_Reporting_AVP CSG_Info_Reporting_AVP; // Shortened Name - Alias + } + +} //end module LibDiameter_Types_S9_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn new file mode 100644 index 0000000..1d0d3c2 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Steps.ttcn @@ -0,0 +1,1548 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the steps used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Steps { + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_Interface all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + // LibIms + import from LibIms_Templates all; + import from LibIms_Interface all; + import from LibIms_SIPTypesAndValues all; + + group externalfunctions { + } // end group externalfunctions + group parameterOperations { + + /** + * @desc Adds new Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewViaParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intVia; + var integer i := 0; + if (isvalue(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody); + while (i < v_intVia) { + p_message.msgHeader.via.viaBody[v_intVia] := p_message.msgHeader.via.viaBody[v_intVia - 1]; + v_intVia := v_intVia - 1; + } + vc_branch := c_branchCookie & f_getRndTag(); + p_message.msgHeader.via.viaBody[0] := valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)); + vc_via := p_message.msgHeader.via; + } + } + + /** + * @desc Removes own Via parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_removeOwnViaParameter( + in Response p_message + ) runs on ImsComponent { + var integer v_intVia; + var Via v_via := c_empty_Via; + var integer i := 0; + + if (ispresent(p_message.msgHeader.via)) { + + v_intVia := lengthof(p_message.msgHeader.via.viaBody) - 1; + + for (i := 0; i < v_intVia; i := i + 1) { + v_via.viaBody[i] := p_message.msgHeader.via.viaBody[i + 1]; + } + vc_via := v_via; + } + } + + /** + * @desc Adds new RecordRoute parameter and removes Route parameter + * @param p_message (request) SIP message to be used to prepair via header + */ + function f_addNewRecordRouteAndRemoveRoutParameter( + in Request p_message + ) runs on ImsComponent { + var integer v_intRoute, v_intRecordRoute; + var integer i := 1; + var RouteBody v_route1; + var Route v_newRoute; + v_newRoute.fieldName := ROUTE_E; + if (isvalue(p_message.msgHeader.route)) { + v_intRoute := lengthof(p_message.msgHeader.route.routeBody); + v_route1 := p_message.msgHeader.route.routeBody[0]; + while (i < v_intRoute) { + v_newRoute.routeBody[i - 1] := p_message.msgHeader.route.routeBody[i]; + i := i + 1; + } + vc_route := v_newRoute; + } + + if (isvalue(p_message.msgHeader.recordRoute)) { + + v_intRecordRoute := lengthof(p_message.msgHeader.recordRoute.routeBody); + while (0 < v_intRecordRoute) { + p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute] := p_message.msgHeader.recordRoute.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_message.msgHeader.recordRoute.routeBody[0] := v_route1; + vc_recordRoute := valueof(p_message.msgHeader.recordRoute); + } + } + + /** + * @desc Adds new RecordRoute parameter (IMS) + * @param p_rr The recordRoute parameter to add + */ + function f_addNewRecordRouteIMS( + in RecordRoute p_rr + ) runs on ImsComponent + return template RecordRoute { + var integer v_intRecordRoute; + var template RecordRoute v_recordRoute := omit; + + v_intRecordRoute := lengthof(p_rr.routeBody); + if (v_intRecordRoute > 0) { + while (0 < v_intRecordRoute) { + p_rr.routeBody[v_intRecordRoute] := p_rr.routeBody[v_intRecordRoute - 1]; + v_intRecordRoute := v_intRecordRoute - 1; + } + p_rr.routeBody[0] := valueof(m_routeBody_currIpAddr(vc_userprofile)); + vc_recordRoute := p_rr; + return vc_recordRoute; + } + else { + return (v_recordRoute); + } + } + + } // end group parameterOperations + + group fieldOperations { + + /** + * @desc Sets BYE header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersBYE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + } // end f_setHeadersBYE + + /** + * @desc Sets CANCEL header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + */ + function f_setHeadersCANCEL( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_route := f_route(); // update the route header field depending on vc_boo_route + vc_recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route + LibSip_Steps.f_setHeadersCANCEL(p_cSeq_s); + } // end f_setHeadersCANCEL + + /** + * @desc Sets headers for forward request from AS in case if AS acts as Proxy + * @param p_cSeq_s The current cSeq + * @param p_proxyMode true = proxyMode, false = B2BMode + */ + function f_setHeadersForwardRequestFromAS( + inout CSeq p_cSeq_s, + boolean p_proxyMode + ) runs on ImsComponent { + var Request v_request; + v_request := vc_request; + + if (p_proxyMode) { + vc_requestUri2 := v_request.requestLine.requestUri; + vc_to := v_request.msgHeader.toField; + vc_contact := v_request.msgHeader.contact; + f_addNewViaParameter(v_request); + f_addNewRecordRouteAndRemoveRoutParameter(v_request); + } + else { + // B2Bmode + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + } + } // end function f_setHeadersForwardRequest + + /** + * @desc Sets header fields for forward request from AS in case if AS acts as Proxy + */ + function f_setHeadersForwardResponseFromAS( + ) runs on ImsComponent { + var Response v_response; + v_response := vc_response; + + vc_caller_To := v_response.msgHeader.toField; + vc_to := v_response.msgHeader.toField; + vc_contact := v_response.msgHeader.contact; + + if (ispresent(v_response.msgHeader.recordRoute)) { + vc_recordRoute := v_response.msgHeader.recordRoute; + } + f_removeOwnViaParameter(v_response); + } // end function f_setHeadersForwardResponse + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersINVITE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersINVITE(p_cSeq_s); + } // end f_setHeadersINVITE + + /** + * @desc Sets Invite header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersUPDATE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersUPDATE(p_cSeq_s); + } // end f_setHeadersUPDATE + + /** + * @desc Sets Message header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersMESSAGE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersMESSAGE(p_cSeq_s); + } // end f_setHeadersMESSAGE + + /** + * @desc Sets Notify header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersNOTIFY( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersNOTIFY(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of NOTIFY from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersNOTIFY + + /** + * @desc Sets Options header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersOPTIONS(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + // contact header initialization for sending of OPTIONS from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersOPTIONS + + /** + * @desc Sets Publish header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersPUBLISH( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersPUBLISH(p_cSeq_s); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_via := { + fieldName := VIA_E, + viaBody := {valueof(m_ViaBody_virtual_XCSCF(vc_branch, vc_userprofile))} + }; + + vc_to := f_initToHeader(p_to_user); // init of vc_to using userProfile identifier + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + // contact header initialization for sending of PUBLISH from CSCF component + vc_contact := m_Contact(m_SipUrl_currIpaddr_CSCF(vc_userprofile)); + } // end f_setHeadersPUBLISH + + /** + * @desc Sets Subscribe header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersSUBSCRIBE( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in SipUrl p_from_user + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_to_user // SipUrl + } + }, // end addressField + toParams := omit + }; + vc_from := f_initFromHeader(p_from_user, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + LibSip_Steps.f_setHeadersSUBSCRIBE(p_cSeq_s); + } // end f_setHeadersSUBSCRIBE + + /** + * @desc Sets headers for ReINVITE method + * @param p_cSeq_s The current cSeq + * @param p_orginatingSide true in case of Re-INVITE is send from the orgination endpoint otherwise false. + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersReINVITE( + inout CSeq p_cSeq_s, + in boolean p_orginatingSide, + in SipUrl p_to_user + ) runs on ImsComponent { + var integer v_tmp, i, j, v_nbroute; + var Request v_request; + v_request := vc_request; + + f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + vc_requestUri := p_to_user; + + if (p_orginatingSide) { + vc_to := vc_caller_To; + vc_from := vc_caller_From; + } + else { + vc_to := vc_callee_To; + vc_from := vc_callee_From; + + // get route from previous ACK request + // Route Management + if (isvalue(v_request.msgHeader.recordRoute)) { + vc_recordRoute := valueof(v_request.msgHeader.recordRoute); + v_nbroute := lengthof(vc_recordRoute.routeBody); + // copy and reverse the order of the routes in route header + for (i := 0; i <= (v_nbroute - 1); i := i + 1) { + j := v_nbroute - 1 - i; + vc_route.routeBody[j] := vc_recordRoute.routeBody[i]; + } + vc_route.fieldName := ROUTE_E; + vc_boo_recordRoute := true; + vc_boo_route := true; + } + else { + vc_boo_recordRoute := false; + vc_boo_route := false; + } + } + + v_tmp := str2int(vc_sdp_local.origin.session_id); + vc_sdp_local.origin.session_id := int2str(v_tmp + 1); + v_tmp := str2int(vc_sdp_local.origin.session_version); + vc_sdp_local.origin.session_version := int2str(v_tmp + 1); + } // end function f_setHeadersReINVITE + + /** + * @desc Sets component variables related to message header fields when sending requests from the home I-CSCF (TS) to the visited P-CSCF (SUT) (message type independent: CSeq, contact, via), function uses information from userprofile and interfaceprofile + * @param p_cSeq_s The CSeq parameter + * @param p_method The method name for cSeq header field + */ + function f_setHeadersGeneral_ICSCF( + inout CSeq p_cSeq_s, + in charstring p_method + ) runs on SipComponent { + p_cSeq_s.fieldName := CSEQ_E; + p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; + p_cSeq_s.method := p_method; + vc_cSeq := p_cSeq_s; + + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + + vc_branch := c_branchCookie & f_getRndTag(); + vc_branch_ICSCF := c_branchCookie & f_getRndTag(); + + vc_via := { + fieldName := VIA_E, + viaBody := { + valueof(m_ViaBody_currIpaddr(vc_branch, vc_userprofile)), + valueof(m_ViaBody_virtualUEinPCSCF(vc_branch_ICSCF, vc_userprofile)) + } + }; + } // end function f_setHeadersGeneral_ICSCF + + /** + * @desc Sets header field for the next outgoing REGISTER message from the visited P-CSCF to the home I-CSCF + * @param p_cSeq_s The CSeq parameter to be applied + */ + function f_setHeaders_REGISTER_PCSCF( + inout CSeq p_cSeq_s + ) runs on SipComponent { + var SemicolonParam_List v_params; + + f_setHeadersGeneral(p_cSeq_s, "REGISTER"); // cseq, contact, branch, via + vc_requestUri := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := omit, + hostPort := { + host := vc_userprofile.registrarDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + }; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + + if (PX_SEED) { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() + }; + } else { + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + } + vc_callIdReg := vc_callId; + + vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); + v_params := { + { + id := c_tagId, + paramValue := { + tokenOrHost := f_getRndTag() + } + } + }; + vc_from := { + fieldName := FROM_E, + addressField := vc_to.addressField, + fromParams := v_params + }; + + if (not vc_firstREGISTER_sent) { + v_params := { + { + id := c_expiresId, + paramValue := { + tokenOrHost := c_shortRegistration + } + } + }; + vc_contact.contactBody.contactAddresses[0].contactParams := v_params; + } + + vc_firstREGISTER_sent := true; // f_setHeaders_Register is called in deREGISTER function + vc_authorization := { + fieldName := AUTHORIZATION_E, + body := {f_calculatecCredentials_empty(vc_userprofile)} + }; + } // end function setHeaders_REGISTER_PCSCF + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_to_user The selected user's SIP URL + */ + function f_setHeadersREFER( + inout CSeq p_cSeq_s, + in SipUrl p_to_user + ) runs on ImsComponent { + vc_requestUri := p_to_user; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER + + /** + * @desc Sets REFER header fields (IMS addresses) extension of general settings from LibSip basic function + * @param p_cSeq_s The current cSeq + * @param p_uri The SipUrl for request URI and To header + */ + function f_setHeadersREFER_conf( + inout CSeq p_cSeq_s, + in SipUrl p_uri + ) runs on ImsComponent { + vc_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_uri // SipUrl + } + }, // end addressField + toParams := omit + }; + + vc_from := f_initFromHeader(p_uri, f_getRndTag()); // init of vc_from using userProfile identifier + vc_requestUri := p_uri; // Request URI of Invite is identical with To header + if (vc_boo_route) { + vc_route := m_route_interface(vc_interfaceprofile); + } + if (vc_boo_recordRoute) { + vc_recordRoute := m_recordRoute_currIpAddr(vc_userprofile); + } + + LibSip_Steps.f_setHeadersREFER(p_cSeq_s); + } // end f_setHeadersREFER_conf + + } // end group fieldOperations + + group awaitingMessage { + } + + group sendMessage { + + /** + * @desc Sends PRACK message + * @param p_mb The message body of the PRACK message + * @param p_rack_cseq The cSeq of the PRACK message + */ + function f_sendPRACK_sdp( + template(value) MessageBody p_mb, + CSeq p_rack_cseq + ) runs on SipComponent { + var integer v_responseNum := 1; + var template(value) PRACK_Request v_prackReq; + + f_setHeadersGeneral(vc_cSeq, "PRACK"); // cseq, contact, branch, via + if (isvalue(vc_response.msgHeader.rSeq.responseNum)) { + v_responseNum := vc_response.msgHeader.rSeq.responseNum; + } + vc_rAck := m_RAck(v_responseNum, p_rack_cseq.seqNumber, p_rack_cseq.method); + + v_prackReq := m_PRACK_Request_sdp(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, vc_rAck, p_mb); + + // added route header if required + if (isvalue(vc_response.msgHeader.recordRoute)) { + v_prackReq.msgHeader.route := f_route(); + } + + SIPP.send(v_prackReq) to vc_sent_label; + } + + } + group globalSteps { + + //NOTE STF471: removed function f_init_userprofile, have to move up to specific ATS + + /** + * @desc Initializes the To header + * @param p_user Identifies the selected user's SIP URL + * @return The To header + */ + function f_initToHeader( + in SipUrl p_user + ) runs on ImsComponent + return To { + var To v_to := c_empty_To; + v_to := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + toParams := omit + }; + return (v_to); + } + + /** + * @desc Initializes the From header + * @param p_user Identifies the selected user' SIP URL + * @param p_tag_str The string value of the tag id + * @return The From header + */ + function f_initFromHeader( + in SipUrl p_user, + charstring p_tag_str + ) runs on ImsComponent + return From { + var From v_from := c_empty_From; + v_from := { + fieldName := FROM_E, + addressField := { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_user // SipUrl + } + }, // end addressField + fromParams := { + { + id := c_tagId, + paramValue := { + tokenOrHost := p_tag_str + } + } + } + }; + return v_from; + } + + //NOTE STF471: removed function f_initSipUrl, have to move up to specific ATS + + //NOTE STF471: removed function f_init_interfaceprofile, have to move up to specific ATS + + /** + * @desc Retrieves user DomainPort value of the user profile + * @param p_userProfile Identifies the selected user profile + * @return The Domain HostPort + */ + function f_get_userDomainPort( + in SipUserProfile p_userProfile + ) runs on ImsComponent + return HostPort { + return + { + p_userProfile.homeDomain, + p_userProfile.currPort + }; + } + + /** + * @desc Retrieves HostPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The HostPort + */ + function f_get_interfaceHostPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTIpaddr, + p_interface.SUTPort + }; + } + + /** + * @desc Retrieves DomainPort value of the interface profile + * @param p_interface Identifies the selected interface + * @return The Domain HostPort + */ + function f_get_interfaceDomainPort( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return HostPort { + return + { + p_interface.SUTHomeDomain, + p_interface.SUTPort + }; + } + + /** + * @desc Gets the receive template for the NameAddr of the interface + * @param p_interface Identifies the selected interface + * @return The NameAddr template + */ + function f_get_interfaceNameAddr( + in ImsInterfaceProfile p_interface + ) runs on ImsComponent + return template NameAddr { + return mw_SipUrl_SUTinterface(p_interface.SUTIpaddr, p_interface.SUTPort); + } + + } + + group registration { + + /** + * @desc Registration and authentication + * @param p_cSeq_s The current cseq + * @param p_auth flag indicating if authentication is needed + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_Registration_IMS( + inout CSeq p_cSeq_s, + in boolean p_auth, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + f_setHeaders_REGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_no}), p_host, p_port)); // LibSip + // awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER + if (p_auth) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization, {c_Integrity_protected_yes}), p_host, p_port)); // LibSip + // awaiting 200 OK REGISTER + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) { + tc_ack.stop; + log("*** " & __SCOPE__ & ": INCONC: Authorization was not requested as expected ***"); + setverdict(inconc); + } + } + } + else { + f_awaitingOkResponse(p_cSeq_s); + f_getServiceRouteMapIntoRouteInRegistration(vc_response); + } + } // end function f_Registration_IMS + + /** + * @desc awaiting UE1 registration (with authentication) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @param p_register The expected REGISTER_Request - default: mw_REGISTER_authorizedRequest_IMS + */ + function f_awaitingRegistration_IMS( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop, + in template(present) REGISTER_Request p_register := + mw_REGISTER_authorizedRequest_IMS( + mw_Authorization_digest( + mw_digestResponse( + (c_Integrity_protected_yes, c_Integrity_protected_ip_assoc_pending) + ) + ) + ) + ) runs on ImsComponent { + var SipUrl v_passociated_url; + + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse( + m_Response_WWWauthenticate_IMS( + c_statusLine401, + vc_callId, + p_cSeq_s, + vc_caller_From, + vc_caller_To, + vc_via, + m_wwwAuthenticate( + f_calculatecChallenge_forWWWAuthorization( + p_qop, + valueof(vc_authorization.body[0].digestResponse) + ) + ) + ) + ); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(p_register); + + // 200OK to complete the request + if (isvalue(vc_request.msgHeader.contact)) { + vc_contact := valueof(vc_request.msgHeader.contact); + vc_contact.contactBody.contactAddresses[0].contactParams := { + { + "expires", + { + tokenOrHost := int2str(3600) + } + } + }; + } + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, p_cSeq_s, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } // end function f_awaitingRegistration_IMS + + /** + * @desc Awaiting UE1 registration (with authentication, without security headers) + * @param p_cSeq_s The current cseq + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_awaitingRegistration_IMS_gm( + inout CSeq p_cSeq_s, + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + vc_ignore_subscribe := true; // handle SUBSCRIBE during the call + + f_awaitingRegistration_IMS(p_cSeq_s, p_to_user, p_qop, mw_REGISTER_authorizedRequest_wo_securityheaders_IMS); + + vc_DeregDone := false; + } // end function f_awaitingRegistration_IMS_gm + + /** + * @desc Remove registration + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_removeRegistration_IMS( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on SipComponent { + var template(value) REGISTER_Request v_request; + + if (PX_SIP_REGISTRATION) { + f_setHeaders_deREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + + f_SendREGISTER(v_request); + if (PX_SIP_REGISTER_AUTHENTICATION_ENABLED) { + // receiving 401 Unauthorized response. + // and Re-send REGISTER request with Authorization header + tc_ack.start; + alt { + [] SIPP.receive(mw_Response_Base(c_statusLine401, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + // set headers via, cseq and authorization + f_setHeaders_2ndREGISTER(p_cSeq_s); + v_request := m_REGISTER_Request_expires_IMS(vc_requestUri, vc_callIdReg, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_authorization, p_host, p_port, "0"); + v_request.msgHeader.route := f_route(); + // Re-send protected REGISTER + f_SendREGISTER(v_request); // LibSip + // awaiting 200 OK REGISTER + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)) -> value vc_response { + tc_ack.stop; + f_setHeadersOnReceiptOfResponse(vc_response); + log("*** " & __SCOPE__ & ": INFO: Authorization was not requested as expected ***"); + } + } + } + else { + f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s)); + } + } + } // end f_RemoveRegistration_IMS + + } // end group registration + + group preambles { + + /** + * @desc Sets variables and default initialization for user profile where proxy role is present + * @param p_userprofile User profile of call + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_MGCF( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + vc_boo_recordRoute := true; + vc_boo_route := true; + //NOTE STF471: removed f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_MGCF); + + f_IMS_preamble_woRegistration(p_cSeq_s); + } + + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_woRegistration_as( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + + // Variables & defaults initialization + LibSip_Steps.f_init_component(p_cSeq_s); + + // Preamble + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withEmergencyRegistration( + inout CSeq p_cSeq_s, + template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, true); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistration( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + //NOTE STF471 added + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 + * @param p_cSeq_s The current cseq + * @param p_register Register template + */ + function f_IMS_preamble_withRegistrationWoSubscription( + inout CSeq p_cSeq_s, + out template REGISTER_Request p_register + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED); + + // deregistration in case of successful registration + vc_DeregDone := false; + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + * @param p_host P-CSCF domain name (formerly value from module parameter PX_IMS_TS_PCSCF_HOME_DOMAIN) + * @param p_port P-CSCF port number (formerly value from module parameter PX_IMS_TS_PCSCF_PORT) + */ + function f_IMS_preamble_withRegistrationBasic( + inout CSeq p_cSeq_s, + template(value) charstring p_host, + template(value) integer p_port + ) runs on ImsComponent { + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + // Variables & defaults initialization + f_IMS_preamble_woRegistration(p_cSeq_s); + + // Preamble + f_Registration_IMS(p_cSeq_s, PX_SIP_REGISTER_AUTHENTICATION_ENABLED, p_host, p_port); + f_setHeaders_SUBSCRIBE(p_cSeq_s); + f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG)); + } + + /** + * @desc Sets variables and default initialization for user profile and handle registration and authentication with MD5 (basic registration template) + * @param p_cSeq_s The current cseq + */ + function f_IMS_preamble_AS( + inout CSeq p_cSeq_s + ) runs on ImsComponent { + // avoid deregistration in default behavior + vc_DeregDone := true; + vc_boo_route := true; + vc_boo_recordRoute := true; + vc_cSeq := p_cSeq_s; + + // Defaults + vc_def_catchSyncStop := activate(a_Sip_catchSyncStop()); + vc_default := activate(a_altstep_AS()); + + // Preamble + //NOTE STF471: removed f_init_interfaceprofile(p_interface); + //NOTE STF471: removed f_init_userprofile(p_userprofile); // assignment of PIXIT values to component variable + vc_sdp_local := valueof(m_SDP_bandwidth(m_media_dynPT(PX_SIP_SDP_DYN, PX_SIP_SDP_ENCODING, PX_SIP_SDP_CLOCKRATE, omit), vc_userprofile)); + vc_contact := m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)); + } + + } // end group preambles + + group postambles { + + /** + * @desc Terminates component and handles deregistration + * @param p_cSeq_s The current cseq + */ + function f_IMS_postamble_withDeRegistration( + CSeq p_cSeq_s + ) runs on ImsComponent { + f_RemoveRegistration(p_cSeq_s); + f_terminate_component(); + } + + /** + * @desc Terminates component and optionally handles deregistration on AS as TS + * @param p_deRegistration Handle deregistration? + */ + function f_IMS_postamble_AS_withDeRegistration( + boolean p_deRegistration + ) runs on ImsComponent { + + if (p_deRegistration == true) { + f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true); + } + f_terminate_component(); + } + + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_IMS1_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component without de-registration + */ + function f_IMS_postamble_withoutDeRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_SIP_postamble_IMS1_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + /** + * @desc Terminates component with de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_postamble_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + + f_terminate_component(); + } + + + /** + * @desc Awaits de-registration + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + */ + function f_IMS_awaitDeRegistration( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var SipUrl v_passociated_url; + // Awaiting 1st REGISTER + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 401 response + f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization(p_qop, valueof(vc_authorization.body[0].digestResponse))))); + + // Awaiting 2nd REGISTER with authorization header + f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS); + + // 200OK to complete the request + v_passociated_url := vc_caller_From.addressField.nameAddr.addrSpec; + f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact, p_to_user, v_passociated_url)); + } + + //NOTE STF471: renamed f_SIP_postamble_UE(1|2)_withoutRegistration to f_SIP_postamble_UE_withoutRegistration + /** + * @desc Terminates component without registration + */ + function f_SIP_postamble_UE_withoutRegistration( + ) runs on ImsComponent { + f_terminate_component(); + } + + /** + * @desc Sends BYE and awaits response (IMS) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + */ + function f_terminateCall_IMS( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_IMS(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_IMS + + /** + * @desc Sends BYE and awaits response (UE) + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_recordRoute RecordRoute parameter for outgoing BYE - default: omit + */ + function f_terminateCall_UE( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + template RecordRoute p_recordRoute := omit + ) runs on ImsComponent { + var Route v_route; + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + if (ispresent(p_recordRoute)) { + v_route := {ROUTE_E, valueof(p_recordRoute.routeBody)}; + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, v_route)); + } + else { + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, valueof(p_to), vc_via, vc_route)); + } + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + } // end function f_terminateCall_UE + + /** + * @desc Sends BYE and awaits response and De-registration + * @param p_requestUri The Request URI + * @param p_callId CallId parameter for outgoing BYE + * @param p_cSeq_s CSeq parameter for outgoing BYE + * @param p_from From parameter for outgoing BYE + * @param p_to To parameter for outgoing BYE + * @param p_qop of the peer UE (alternatively) + */ + function f_terminateCall_UE_withDeReg( + SipUrl p_requestUri, + CallId p_callId, + inout CSeq p_cSeq_s, + From p_from, + template(value) To p_to, + in charstring p_qop + ) runs on ImsComponent { + LibSip_Steps.f_setHeadersBYE(p_cSeq_s); + // Sending of a BYE request to release the call and expect a final response + f_SendBYE(m_BYE_Request_UE(p_requestUri, p_callId, p_cSeq_s, p_from, p_to, vc_via, vc_route)); + + tc_resp.start; + alt { + [] SIPP.receive(mw_Response_Base(mw_statusLine1xx, p_callId, p_cSeq_s)) { + repeat; + } + [] SIPP.receive(mw_Response_Base(mw_statusLineFinal, p_callId, p_cSeq_s)) { + tc_resp.stop; + } + // timeout should be handled in default_alt_step + } + action("Please de-register"); + f_IMS_awaitDeRegistration(p_requestUri, p_qop); + } // end function f_terminateCall_UE_withDeReg + + } + group defaults { + + /** + * @desc Altstep for clearing registration (IMS user) + * @param p_to_user The selected user's SIP URL + * @param p_qop of the peer UE (alternatively) + * @verdict fail for all unexpected branches + */ + altstep a_clearRegistration_IMSuser( + in SipUrl p_to_user, + in charstring p_qop + ) runs on ImsComponent { + var Response v_response; + var Request v_request; + var SUBSCRIBE_Request v_subscribe_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + var NOTIFY_Request v_notify_request; + var INFO_Request v_info_request; + var CSeq v_cSeq; + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + vc_callId := vc_callIdReg; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // allow repeated BYEs after ack of the first BYE + [vc_ignore_bye] SIPP.receive(mw_BYE_Request_Base(?)) { + repeat; + } + [] SIPP.receive(mw_ACK_Request_Base(?)) { + repeat; + } + // allow 100 replies + [] SIPP.receive(mw_Response_Base(c_statusLine100, ?, ?)) { + repeat; + } + // ignore 181 if flag is set (following TS 183004 ����4.5.2.1) + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response sender vc_sent_label { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // ignore 484 if flag is set + [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { + repeat; + } + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + repeat; + } + [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { + repeat; + } + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_info_request); + f_send200OK(); + repeat; + } + // awaiting of Notify + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_notify_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe from UE + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { + f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); + f_send200OK(); + repeat; + } + // awaiting of subscribe on proxy + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { + f_setHeadersOnReceiptOfRequest(v_subscribe_request); + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_SendNOTIFY(m_NOTIFY_Request_contact(v_subscribe_request.msgHeader.contact.contactBody.contactAddresses[0].addressField.nameAddr.addrSpec, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); + f_awaitingOkResponse(vc_cSeq); + repeat; + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + // Answer to the CANCEL + f_send200OK(); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 4xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected 4xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch 5xx response + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected 5xx response received. ***"); + setverdict(fail); + v_cSeq := valueof(v_response.msgHeader.cSeq); + f_setHeadersOnReceiptOfResponse(v_response); + LibSip_Steps.f_setHeadersACK(); + f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + // catch invalid REGISTER + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected REGISTER received. ***"); + setverdict(fail); + f_componentStop(); + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + action("Please de-register"); + f_IMS_awaitDeRegistration(p_to_user, p_qop); + f_componentStop(); + } + } + + /** + * @desc Main default altstep to handle unexpected messages and timeout + * @verdict fail for all unexpected branches + */ + altstep a_altstep_AS( + ) runs on SipComponent { + var Request v_request; + var REGISTER_Request v_register_request; + var BYE_Request v_bye_request; + var CANCEL_Request v_cancel_request; + + [] any timer.timeout { + log("*** " & testcasename() & ": FAIL: Timeout while waiting for message. ***"); + setverdict(fail); + all timer.stop; + } + // allow repeated INVITEs + [vc_ignore_invite] SIPP.receive(mw_INVITE_Request_Base) { + repeat; + } + // handle REGISTER requests + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { + f_setHeadersOnReceiptOfREGISTER(v_register_request); + // vc_contact := vc_request.msgHeader.contact; + f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact)); + repeat; + } + // according to SIP chap.8.1.3.2 + [] SIPP.receive(mw_Response_Base(c_statusLine183, vc_callId, vc_cSeq)) { + repeat; + } + // unexpected CANCEL is acknowledged to avoid retransmissions + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected CANCEL message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_cancel_request); + f_send200OK(); + } + // unexpected BYE is acknowledged to avoid retransmissions + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { + log("*** " & testcasename() & ": FAIL: Unexpected BYE message received. ***"); + setverdict(fail); + f_setHeadersOnReceiptOfRequest(v_bye_request); + f_send200OK(); + } + [] SIPP.receive(mw_Response_Base(?, vc_callId, vc_cSeq)) -> value vc_response { + log("*** " & testcasename() & ": FAIL: Unexpected response message in " & __SCOPE__ & " received. ***"); + setverdict(fail); + repeat; + } + // any + [] SIPP.receive { + log("*** " & testcasename() & ": FAIL: Unexpected message received. ***"); + setverdict(fail); + all timer.stop; + } + } + } +} // module LibIms_Steps diff --git a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn new file mode 100644 index 0000000..cb866f3 --- /dev/null +++ b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn @@ -0,0 +1,4632 @@ +/** + * @author STF471 + * @version $Id$ + * @desc This module provides the templates used by the test component for SIP-IMS tests. + * This module is part of LibImsV3. + */ +module LibIms_Templates { + // LibCommon + import from LibCommon_DataStrings all; + + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Steps all; + import from LibSip_PIXITS all; + import from LibSip_XMLTypes all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Common all; + + // LibIms + import from LibIms_SIPTypesAndValues all; + + // LibXMLTypes + import from XSD all; + + import from urn_ietf_params_xml_ns_resource_lists language "XSD" all + with { + extension "File:../xsd/ResourceList.xsd"; + } + + import from urn_ietf_params_xml_ns_reginfo language "XSD" all except {type Contact;} + with { + extension "File:../xsd/regInfo.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_xcap language "XSD" all + with { + extension "File:../xsd/SupplementaryServices.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_mcid language "XSD" all + with { + extension "File:../xsd/MCID.xsd"; + } + + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } + + import from urn_ietf_params_xml_ns_conference_info language "XSD" all + with { + extension "File:../xsd/CONF.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_simservs_pstn language "XSD" all + with { + extension "File:../xsd/PSTN.xsd"; + } + + import from urn_ietf_params_xml_ns_common_policy language "XSD" all + with { + extension "File:../xsd/common-policy.xsd"; + } + + import from http_uri_etsi_org_ngn_params_xml_comm_div_info language "XSD" all + with { + extension "File:../xsd/CDIVN.xsd"; + } + + import from urn_3gpp_ns_cw_1_0 language "XSD" all + with { + extension "File:../xsd/cw.xsd"; + } + + import from urn_ietf_params_xml_ns_pidf language "XSD" all + with { + extension "File:../xsd/pidf.xsd"; + } + + template(present) charstring mw_international_number_format := pattern "\\+\d+"; + + template(present) NameAddr mw_SipUrl_SUTinterface( + template(present) charstring p_host := ?, + template(present) integer p_port := ? + ) := { + displayName := *, + addrSpec := { + scheme := "sip:", + components := { + sip := { + userInfo := *, + hostPort := mw_hostPort(p_host, p_port) + } + }, + urlParameters := *, + headers := * + } + } + + template(present) Addr_Union mw_UE1_Addr_display( + template(present) DisplayName p_displayName + ) := { + nameAddr := { + displayName := p_displayName, + addrSpec := ? + } + } + + // MIME name application + template(value) charstring m_mimeMultipart := "multipart/mixed;boundary=""" & PX_SIP_MIME_BOUNDARY & """"; + + group subfields { + + template(value) SipUrl m_SipUrl_currIpaddr_CSCF( + template(value) SipUserProfile p_userprofile + ) := { + scheme := c_sipScheme, //* contains "sip" + components := { + sip := { + userInfo := omit, //* optional + hostPort := { + host := p_userprofile.currIpaddr, //* hostname, IPv4 or IPv6 as a charstring + portField := p_userprofile.currPort //* optional integer + } + } + }, + urlParameters := omit, + headers := omit + } + + template(present) SemicolonParam_List mw_semicolonParams_realm( + template GenValue p_realm + ) := + superset( + { + "realm", + p_realm + }, + { + "nonce", + ? + }, + { + "algorithm", + { tokenOrHost := "AKAv1-MD5" } + }, + { + "ik", + ? + }, + { + "ck", + ? + } + ); + + template(value) SemicolonParam_List m_semicolonParams_language( + template(omit) GenValue p_language := omit + ) := { + { + "language", + p_language + } + } + + template(present) SemicolonParam_List mw_semicolonParams_language( + template GenValue p_language + ) := { + { + "language", + p_language + } + } + + template(value) SemicolonParam_List m_semicolonParams_isub( + template(omit) GenValue p_address := omit + ) := { + { + "isub", + p_address + } + } + } + + group headerFieldTemplates { + + template(value) MinSE m_minSE( + template(value) DeltaSec p_ds + ) := { + fieldName := MIN_SE_E, + deltaSec := p_ds, + minSeParam := omit + } + + template(present) PathValue mw_pathvalue( + template(present) SipUrl p_sipUrl := ? + ) := { + nameAddr := { + displayName := *, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := * + } + + template(value) Path m_path( + template(value) charstring p_host, + template(value) integer p_port, + template(value) SipUrl p_sipUrl + ) modifies m_path_TS := { + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := p_sipUrl // SipUrl + }, + rrParam := omit + } + } + } + + template(value) Path m_path_TS( + template(value) charstring p_host, + template(value) integer p_port + ) := { + fieldName := PATH_E, + pathValues := { + { + nameAddr := { + displayName := omit, // optional charstring + addrSpec := { + scheme := c_sipScheme, + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "registrar", + password := omit + }, + hostPort := {p_host, p_port} + } + }, + urlParameters := { + { + id := "lr", + paramValue := omit + } + }, + headers := omit + } + }, + rrParam := omit + } + } + } + + /** + * @desc Path header field expectation with at least one path value + * @param p_sipUrl value of the last element in the list of path values + */ + template(present) Path mw_path( + template(present) SipUrl p_sipUrl := ? + ) := { + fieldName := PATH_E, + pathValues := {mw_pathvalue(p_sipUrl)} // any number of SipUrl may occur before p_sipUrl + } + + template(value) PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a := { + fieldName := P_ACCESS_NETWORK_INFO_E, + accessType := "IEEE-802.11a", + genericParams := { + { + id := "extension-access-info", + paramValue := { tokenOrHost := "192.1.1.20" } + } + } + } + + template(value) PAssertedService m_pAssertedService( + template(value) PAssertedServiceValue p_pAssertedServiceValue + ) := { + fieldName := P_ASSERTED_SERVICE_E, + pAssertedServiceValue := p_pAssertedServiceValue + } + + template(value) PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue := { + fieldName := P_CHARGING_FUNCTION_ADDRESSES_E, + chargeAddrParams := { + { + id := "ccf", + paramValue := { tokenOrHost := "192.1.1.1" } + }, // value is fixed because it is deleted on proxy + { + id := "ecf", + paramValue := { tokenOrHost := "192.1.1.2" } + } // value is fixed because it is deleted on proxy + } + } + + template(value) PChargingVector m_pChargingVector( + template(value) charstring p_icidValue, + template(omit) SemicolonParam_List p_chargeParams := omit + ) modifies m_pChargingVector_icid_TS := { + icidValue := p_icidValue, + chargeParams := p_chargeParams + } + + // NOTE STF471 change: icidValue extracted from chargeParams, chargeParams removed + template(value) PChargingVector m_pChargingVector_icid_TS := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := c_icid_value, + chargeParams := omit + } + + template(value) PChargingVector m_pChargingVector_origIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_orig_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_termIoi_fixedValue( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_icid_generated_at, + paramValue := { tokenOrHost := "192.1.1.10" } + }, + { + id := c_term_ioi, + paramValue := p_homeDomain + } + } + } + + template(value) PChargingVector m_pChargingVector_accessNetwInfo( + template(value) GenValue p_homeDomain + ) modifies m_pChargingVector_icid_TS := { + chargeParams := { + { + id := c_term_ioi, + paramValue := p_homeDomain + }, + { + id := c_access_network_charging_info, + paramValue := { tokenOrHost := "192.1.1.10" } + } + } + } + + // NOTE STF471 change: icidValue added + template(present) PChargingVector mw_pChargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) := { + fieldName := P_CHARGING_VECTOR_E, + icidValue := ?, + chargeParams := + superset( + { + id := p_id, + paramValue := p_paramValue + } + ) + } + + template(value) PMediaAuthorization m_pMediaAuthorization_fixedValue := { + fieldName := P_MEDIA_AUTHORIZATION_E, + pMediaAuthorizations := {"A"} // example + } + + + template(value) PEarlyMedia m_pEarlyMedia_sup := { + fieldName := P_EARLY_MEDIA_E, + em_param := {"supported"} + } + + + template(value) ProxyRequire m_proxyRequire_secAgree := { + fieldName := PROXY_REQUIRE_E, + optionsTags := {"sec-agree"} + } + + template(value) PVisitedNetworkID m_pVisitedNetworkID_TS := { + fieldName := P_VISITED_NETWORK_E, + vNetWorkSpec := { + { + vNetworkSpecToken := "Visited ETSI 1", + genericParams := omit + } + } + } + + template(present) PVisitedNetworkID mw_pVisitedNetworkID( + template(present) charstring p_vNetworkSpecToken + ) modifies m_pVisitedNetworkID_TS := { + vNetWorkSpec := { + { + vNetworkSpecToken := p_vNetworkSpecToken, + genericParams := * + } + } + } + + template(value) RecordRoute m_recordRoute_notmatching := { + fieldName := RECORD_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Require m_require := { + fieldName := REQUIRE_E, + optionsTags := {} + } + + template(value) Require m_require_secAgree + modifies m_require := { + optionsTags := {"sec-agree"} + } + + template(present) Require mw_require_path + modifies m_require := { + optionsTags := superset("path") + } + + template(value) Route m_route_interface( + template(value) ImsInterfaceProfile p_interfaceprofile + ) modifies m_route_notmatching := { + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := omit, + hostPort := { + host := p_interfaceprofile.SUTHomeDomain, + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + template(value) Route m_route_notmatching := { + fieldName := ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := { + scheme := c_sipScheme, // contains "sip" + components := { + sip := { + userInfo := { + userOrTelephoneSubscriber := "unknown", + password := omit + }, + hostPort := { + host := "unknown.domain.name", // hostname, IPv4 or IPv6 as a charstring + portField := omit + } + } + }, + urlParameters := omit, + headers := omit + } + }, + rrParam := omit + } + } + } + + + template(value) SessionExpires m_se( + template(value) DeltaSec p_ds + ) modifies mw_se := { + deltaSec := p_ds + } + + template(present) SessionExpires mw_se := { + fieldName := SESSION_EXPIRES_E, + deltaSec := ?, + seParam := omit + } + + template(value) Supported m_supported := { + fieldName := SUPPORTED_E, + optionsTags := {} + } + + template(value) Supported m_supported_timer + modifies m_supported := { + optionsTags := {"timer"} + } + + template(value) Supported m_supported_histinfo + modifies m_supported := { + optionsTags := {"histinfo"} + } + + + template(value) Supported m_supported_fromChange + modifies m_supported := { + optionsTags := {"from-change"} + } + + template(value) To m_To_targetRefreshRequest( + template(value) To p_To + ) := { + fieldName := TO_E, + addressField := { + nameAddr := { + displayName := p_To.addressField.nameAddr.displayName, + addrSpec := p_To.addressField.nameAddr.addrSpec + } + }, // end addressField + toParams := { + { + id := c_tagId, + paramValue := { tokenOrHost := f_getRndTag() } + } + } + } + + template(value) ViaBody m_ViaBody_virtualUEinPCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) := { + sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT), + sentBy := { + host := p_userprofile.contactIpaddr, + portField := p_userprofile.contactPort + }, + viaParams := { + { + id := c_branchId, + paramValue := { + tokenOrHost := p_branch_val + } + } + } + } + + template(value) ViaBody m_ViaBody_virtual_XCSCF( + template(value) charstring p_branch_val, + template(value) SipUserProfile p_userprofile + ) modifies m_ViaBody_virtualUEinPCSCF := { + sentBy := { + host := p_userprofile.currIpaddr, + portField := p_userprofile.currPort + } + } + + template(value) Via m_via_notmatching := { + fieldName := VIA_E, + viaBody := { + { + sentProtocol := m_SentProtocol("UDP"), + sentBy := { + host := "unknown.domain.name", + portField := 10000 + }, + viaParams := { + { + id := c_branchId, + paramValue := { tokenOrHost := "abcd0000" } + } + } + } + } + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(value) WwwAuthenticate m_wwwAuthenticate( + template(value) Challenge p_challenge + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := p_challenge + } + + /** + * @desc WWW-Authenticate header field + * @param p_challenge value + */ + template(present) WwwAuthenticate mw_wwwAuthenticate( + template(present) SemicolonParam_List p_semicolonParam_List := ? + ) := { + fieldName := WWW_AUTHENTICATE_E, + challenge := { + digestCln := p_semicolonParam_List // set of GenericParam + } + } + + template(present) SemicolonParam_List mw_challenge := superset(mw_ck, mw_ik); + + template(present) GenericParam mw_ck := { + "ck", * + } + + template(present) GenericParam mw_ik := { + "ik", * + } + + /** + * @desc AcceptContact header field + * @param p_semicolonParam_List value + */ + template(value) AcceptContact m_acceptContact( + template(omit) SemicolonParam_List p_semicolonParam_List := omit + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + /** + * @desc Authenticate header field + * @param p_semicolonParam_List value + */ + template(present) AcceptContact mw_acceptContact( + template SemicolonParam_List p_semicolonParam_List + ) := { + fieldName := ACCEPT_CONTACT_E, + acValues := { + { + wildcard := c_WILDCARD, + acRcParams := p_semicolonParam_List // set of GenericParam + } + } + } + + template(present) SubscriptionState mw_subscriptionState( + template(present) charstring p_state := ? + ) := { + fieldName := SUBSCRIPTION_STATE_E, + subState := p_state, + substateParams := omit + } + + // [3455/5.1 ] + template(value) PAssociatedURI m_pAssociatedURI( + template(value) NameAddr p_nameAddr + ) := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + { + nameAddr := p_nameAddr, + genericParams := omit + } + } + } + + template(present) SecurityServer mw_securityServer( + template(present) SecurityMechanism_List p_securityMechanism_List := ? + ) := { + fieldName := SECURITY_SERVER_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityClient m_securityClient( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_CLIENT_E, + securityMech := p_securityMechanism_List + } + + template(value) SecurityVerify m_securityVerify( + template(value) SecurityMechanism_List p_securityMechanism_List + ) := { + fieldName := SECURITY_VERIFY_E, + securityMech := p_securityMechanism_List + } + + template(value) RSeq m_rseq9999 := { + fieldName := RSEQ_E, + responseNum := 9999 // Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7 + } + + template(value) Expires m_expires( + template(value) integer p_deltaSec + ) := { + fieldName := EXPIRES_E, + deltaSec := int2str(valueof(p_deltaSec)) + } + + + } // end group headerFieldTemplates + + group messageBodyTemplates { + + group xmlTemplates { + + template(value) XmlBody m_XmlBody_ConfInfo( + template(value) Conference_type p_confInfo + ) := { + conference := p_confInfo + } + + template(value) XmlBody m_XmlBody_CW( + template(value) Ims_cw p_cw + ) := { + cw := p_cw + } + + template(value) XmlBody m_XmlBody_CUG( + template(value) Cug p_cug + ) := { + cug := p_cug + } + + template(value) XmlBody m_XmlBody_MCID( + template(value) Mcid p_mcid + ) := { + mcid := p_mcid + } + + template(value) XmlBody m_XmlBody_PSTNTransit( + template(value) PSTN_transit p_pstn + ) := { + pstnTransit := p_pstn + } + + template(value) XmlBody m_XmlBody_simservs( + template(value) Simservs p_simservs + ) := { + simservs := p_simservs + } + + template(value) XmlBody m_XmlBody_ACR_ICB( + template(value) Incoming_communication_barring p_icb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_icb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_ACR_OCB( + template(value) Outgoing_communication_barring p_ocb + ) := { + simservs := { + attr := omit, + //absServiceGroup_list := {}, + extensions := { + elem_list := valueof(p_ocb.attr) + } + } + } + + template(value) XmlBody m_XmlBody_CDIVN( + template(value) Comm_div_info_type p_cdivn + ) := { + cdivn := p_cdivn + } + + template(value) XmlBody m_XmlBody_Reginfo( + template(value) Reginfo p_regInfo + ) := { + regInfo := p_regInfo + } + + template(value) XmlBody m_XmlBody_Presence( + template(value) Presence p_presence + ) := { + presence := p_presence + } + + template(value) MessageBody m_messageBodyXML( + template(value) XmlBody p_xmlBody + ) := { + xmlBody := p_xmlBody + } + + template(value) Reginfo m_reginfo( + template(value) XSD.AnyURI p_user + ) := { + full, + 0, + {m_registration(p_user)}, + {} + } + + template(value) Registration m_registration( + template(value) XSD.AnyURI p_user + ) := { + p_user, // XSD.anyURI aor + "a7", // XSD.string id + init, // enumerated {active,init,terminated} state, + {}, // record of Contact contact_list optional, + {} // record of anytype elem_list optional + } + + template(present) XmlBody mw_XmlBody_ConfInfo( + template(present) Conference_type p_confInfo := ? + ) := { + conference := p_confInfo + } + + template(present) XmlBody mw_XmlBody_CUG( + template(present) Cug p_cug := ? + ) := { + cug := p_cug + } + + template(present) XmlBody mw_XmlBody_MCID( + template(present) Mcid p_mcid := ? + ) := {mcid := p_mcid} + + template(present) XmlBody mw_XmlBody_PSTNTransit( + template(present) PSTN_transit p_pstn := ? + ) := { + pstnTransit := p_pstn + } + + template(present) XmlBody mw_XmlBody_CDIVN( + template(present) Comm_div_info_type p_cdivn := ? + ) := { + cdivn := p_cdivn + } + + template(present) XmlBody mw_XmlBody_simservs( + template(present) Simservs p_simservs := ? + ) := { + simservs := p_simservs + } + + template(present) XmlBody mw_XmlBody_ResourceLists( + template(present) Resource_lists p_resourceLists := ? + ) := { + resourceLists := p_resourceLists + } + + template(present) XmlBody mw_XmlBody_Reginfo( + template(present) Reginfo p_regInfo := ? + ) := { + regInfo := p_regInfo + } + + template(present) MessageBody mw_messageBodyXML( + template(present) XmlBody p_xmlBody := ? + ) := { + xmlBody := p_xmlBody + } + + + } // end group xmlTemplates + + group acrCbTemplates { + + template(value) Incoming_communication_barring m_ICB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) Outgoing_communication_barring m_OCB( + template(value) RuleType p_ruleType + ) := { + active := omit, + attr := omit, + ruleset := { + {p_ruleType} + } + } + + template(value) RuleType m_ruleType_actionFalse( + template(value) ConditionsType p_condition + ) := { + id := "rule66", + conditions := p_condition, + actions := { + elem_list := {""} + }, + transformations := omit + } + + template(value) ConditionsType m_conditionsType_identity( + template(value) charstring p_id + ) := { + { + { + identity_list := { + { + { + { + one := { + id := p_id, + elem := omit + } + } + } + } + } + } + } + } + + + } // end group acr_cbTemplates + + group cugTemplates { + + template(value) Cug m_CUG( + template(omit) CugRequestType p_crt := omit, + template(omit) NetworkIdentityType p_nit := omit, + template(omit) SixteenbitType p_cibc := omit, + template(omit) TwobitType p_cci := omit + ) := { + active := omit, + attr := omit, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(present) Cug mw_CUG( + template CugRequestType p_crt, + template NetworkIdentityType p_nit, + template SixteenbitType p_cibc, + template TwobitType p_cci + ) := { + active := omit, + attr := *, + cugCallOperation := p_crt, + networkIndicator := p_nit, + cugInterlockBinaryCode := p_cibc, + cugCommunicationIndicator := p_cci + } + + template(value) CugRequestType m_cugReqType( + template(value) boolean p_outAccessRequest, + template(value) CugIndexType p_cugIndex + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + template(present) CugRequestType mw_cugReqType( + template(present) boolean p_outAccessRequest := ?, + template(present) CugIndexType p_cugIndex := ? + ) := { + outgoingAccessRequest := p_outAccessRequest, + cugIndex := p_cugIndex + } + + } // end group cugTemplates + + group cwTemplates { + + template(value) Ims_cw m_CW( + template(value) TEmptyType p_cwi + ) := { + attr := omit, + communication_waiting_indication := p_cwi, + elem_list := {} + } + + template(present) Ims_cw mw_ims_cw( + template(present) TEmptyType p_cwi := ? + ) := { + attr := *, + communication_waiting_indication := p_cwi, + elem_list := ? + } + + } // end group cwTemplates + + group mcidTemplates { + + template(value) Mcid m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + mcidRequestIndicator := "1", + holdingIndicator := "0" + } + } + } + + template(value) Mcid m_mcid_request_mcidIndicatorTrue_holdIndTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := "1" + } + } + } + + template(present) Mcid mw_mcid_request_mcidIndicatorTrue + modifies m_mcid_request_mcidIndicatorTrue := { + choice := { + request := { + holdingIndicator := ? + } + } + } + + template(value) Mcid m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + mcidResponseIndicator := "1", + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue + modifies m_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := ? + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndFalse + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "0" + } + } + } + + template(present) Mcid mw_mcid_response_mcidIndicatorTrue_holdProvIndTrue + modifies mw_mcid_response_mcidIndicatorTrue := { + choice := { + response := { + holdingProvidedIndicator := "1" + } + } + } + + } // end group mcidTemplates + + group pstnTemplates { + + template(value) PSTN_transit m_PSTN_transit_BC1( + template(value) BearerCapabilityType p_bct + ) := { + bearerInfomationElement_list := {p_bct}, + highLayerCompatibility_list := {}, + lowLayerCompatibility := omit, + progressIndicator_list := {}, + display_list := {} + } + + template(value) PSTN_transit m_PSTN_transit_BC2( + template(value) BearerCapabilityType p_bct, + template(value) BearerCapabilityType p_bct2 + ) modifies m_PSTN_transit_BC1 := { + bearerInfomationElement_list := {p_bct, p_bct2} + } + + template(present) PSTN_transit mw_PSTN_transit_bc( + template(present) BearerCapabilityType p_bct := ?, + template(present) BearerCapabilityType p_bct2 := ? + ) := { + bearerInfomationElement_list := {p_bct, p_bct2}, + highLayerCompatibility_list := {*, *}, + lowLayerCompatibility := *, + progressIndicator_list := ?, + display_list := ? + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc + ) modifies m_PSTN_transit_BC1 := { + highLayerCompatibility_list := {p_hlc} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC2( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) HighLayerCompatibilityType p_hlc2 + ) modifies m_PSTN_transit_BC1_HLC1 := { + highLayerCompatibility_list := {p_hlc, p_hlc2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_LLC( + template(value) BearerCapabilityType p_bct, + template(value) LowLayerCompatibilityType p_llc + ) modifies m_PSTN_transit_BC1 := { + lowLayerCompatibility := p_llc + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI2( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2 + ) modifies m_PSTN_transit_BC1_PI1 := { + progressIndicator_list := {p_pi1, p_pi2} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_PI3( + template(value) BearerCapabilityType p_bct, + template(value) ProgressIndicatorType p_pi1, + template(value) ProgressIndicatorType p_pi2, + template(value) ProgressIndicatorType p_pi3 + ) modifies m_PSTN_transit_BC1_PI2 := { + progressIndicator_list := {p_pi1, p_pi2, p_pi3} + } + + template(value) PSTN_transit m_PSTN_transit_BC1_HLC1_PI1( + template(value) BearerCapabilityType p_bct, + template(value) HighLayerCompatibilityType p_hlc, + template(value) ProgressIndicatorType p_pi1 + ) modifies m_PSTN_transit_BC1_HLC1 := { + progressIndicator_list := {p_pi1} + } + + template(value) BearerCapabilityType m_BearerCapabilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + bCoctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCabability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + bCoctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + bCoctet4_1 := omit, + bCoctet5 := omit, + bCoctet5a := omit, + bCoctet5bV110 := omit, + bCoctet5bV120 := omit, + bCoctet5c := omit, + bCoctet5d := omit, + bCoctet6 := omit, + bCoctet7 := omit, + bCoctet7a := omit, + bCoctet7b := omit + } + + template(present) BearerCapabilityType mw_BearerCapabilityType( + template(present) BCOctet3Type p_BCOctet3Type := ?, + template(present) BCOctet4Type p_BCOctet4Type := ? + ) := { + bCoctet3 := p_BCOctet3Type, + bCoctet4 := p_BCOctet4Type, + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(present) BearerCapabilityType mw_BearerCapabilityType_TrfCap( + template(value) Bit5 p_InfoTrfCap + ) modifies m_BearerCapabilityType := { + bCoctet4_1 := *, + bCoctet5 := *, + bCoctet5a := *, + bCoctet5bV110 := *, + bCoctet5bV120 := *, + bCoctet5c := *, + bCoctet5d := *, + bCoctet6 := *, + bCoctet7 := *, + bCoctet7a := *, + bCoctet7b := * + } + + template(value) ProgressIndicatorType m_ProgressIndicatorType( + template(value) Bit7 p_progDesc + ) := { + progressOctet3 := { + codingStandard := "00", + location := "0000" + }, + progressOctet4 := { + progressDescription := bit2str(valueof(p_progDesc)) + } + } + + template(present) ProgressIndicatorType mw_ProgressIndicatorType( + template(present) ProgressOctet3Type p_ProgressOctet3Type := ?, + template(present) ProgressOctet4Type p_ProgressOctet4Type := ? + ) := { + progressOctet3 := p_ProgressOctet3Type, + progressOctet4 := p_ProgressOctet4Type + } + + template(value) LowLayerCompatibilityType m_LowLayerCompatibilityType( + template(value) Bit5 p_InfoTrfCap + ) := { + lLOctet3 := { + codingStandard := "00", // Coding standard = CCITT standardized coding + informationTransferCapability := bit2str(valueof(p_InfoTrfCap)) // Information transfer capability + }, + lLOctet3a := omit, + lLOctet4 := { + transferMode := "00", // Coding standard = CCITT standardized coding + informationTransferRate := "10000" // Information transfer rate = 64 kbit/s + }, + lLOctet4_1 := omit, + lLOctet5 := omit, + lLOctet5a := omit, + lLOctet5bV110 := omit, + lLOctet5bV120 := omit, + lLOctet5c := omit, + lLOctet5d := omit, + lLOctet6 := omit, + lLOctet6aHDLC := omit, + lLOctet6aUserSpecific := omit, + lLOctet6b := omit, + lLOctet7 := { + layer3Identification := "11", + userInfoLayer3Protocol := "00010" + }, + lLOctet7aUserSpecific := omit, + lLOctet7aX25 := omit, + lLOctet7bX25 := omit, + lLOctet7c := omit, + lLOctet7aTR9577 := omit, + lLOctet7bTR9577 := omit + } + + template(present) LowLayerCompatibilityType mw_LowLayerCompatibilityType( + template(present) LLOctet3Type p_LLOctet3 := ?, + template(present) LLOctet4Type p_LLOctet4 := ?, + template(present) LLOctet7Type p_LLOctet7 := ? + ) := { + lLOctet3 := p_LLOctet3, + lLOctet3a := *, + lLOctet4 := p_LLOctet4, + lLOctet4_1 := *, + lLOctet5 := *, + lLOctet5a := *, + lLOctet5bV110 := *, + lLOctet5bV120 := *, + lLOctet5c := *, + lLOctet5d := *, + lLOctet6 := *, + lLOctet6aHDLC := *, + lLOctet6aUserSpecific := *, + lLOctet6b := *, + lLOctet7 := p_LLOctet7, + lLOctet7aUserSpecific := *, + lLOctet7aX25 := *, + lLOctet7bX25 := *, + lLOctet7c := *, + lLOctet7aTR9577 := *, + lLOctet7bTR9577 := * + } + + template(value) HighLayerCompatibilityType m_HighLayerCompatibilityType( + template(value) Bit7 p_HLOctet4 + ) := { + hLOctet3 := { + codingStandard := "00", + interpretation := "100", + presentationMethod := "01" + }, + hLOctet4 := { + highLayerCharacteristics := bit2str(valueof(p_HLOctet4)) + }, + hLOctet4aMaintenance := omit, + hLOctet4Audio := omit + } + + template(present) HighLayerCompatibilityType mw_HighLayerCompatibilityType( + template(present) HLOctet3Type p_HLOctet3 := ?, + template(present) HLOctet4Type p_HLOctet4 := ? + ) := { + hLOctet3 := p_HLOctet3, + hLOctet4 := p_HLOctet4, + hLOctet4aMaintenance := *, + hLOctet4Audio := * + } + + } // end group pstnTemplates + + group cdivnTemplates { + + /* general CDIVN subscription */ + template(value) Comm_div_info_type m_CDIVN_sub := { + entity := "comm-div-info", + comm_div_subs_info := { + attr := omit, + comm_div_selection_criteria := { + attr := omit, + originating_user_selection_criteria := omit, + diverting_user_selection_criteria := omit, + diverted_to_user_selection_criteria := omit, + diversion_time_selection_criteria := omit, + diversion_reason_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_trigger_criteria := omit, + comm_div_info_selection_criteria := omit, + elem_list := {} + }, + comm_div_ntfy_info := omit, + elem_list := {} + } + + } // end group cdivnTemplates + + group resourceListsTemplates { + + template(value) Resource_lists m_ResourceList_2Users( + template(value) EntryType p_user1, + template(value) EntryType p_user2 + ) := { + sequence_list := { + { + list := { + name := omit, + attr := omit, + display_name := omit, + sequence_list := { + { + choice := { + entry := p_user1 + } + }, + { + choice := { + entry := p_user2 + } + } + }, + elem_list := {} + } + } + } + } + + template(value) EntryType m_EntryUser( + template(value) SipUrl p_user + ) := { + uri := + valueof(p_user.components.sip.userInfo.userOrTelephoneSubscriber) + & "@" + & valueof(p_user.components.sip.hostPort.host), + attr := omit, + display_name := omit, + elem_list := {} + } + + } // end group resourceListsTemplates + + group ims3GppTemplates { + + template(present) TIMS3GPP mw_Ims_3gpp_CW := { + version := 1.0, + attr := *, + choice := { + alternative_service := { + attr := *, + type_ := ?, + reason := ?, + elem_list := ? + } + }, + elem_list := ? + } + + } // end group ims3gppTemplates + + group confTemplates { + + template(value) XSD.Boolean m_boolXSD_true := true; + + template(value) XSD.Boolean m_boolXSD_false := false; + + template(value) urn_ietf_params_xml_ns_conference_info.Media_type m_mediatype_status( + template(value) Media_status_type p_status + ) := { + id := "1", + attr := omit, + display_text := omit, + type_ := omit, + label_ := omit, + src_id := omit, + status := p_status, + elem_list := {} + } + + template(value) Endpoint_type m_endpoint( + template(omit) charstring p_Uri := omit, + template(omit) Endpoint_status_type p_epStatus := omit, + template(omit) Joining_type p_joinMethod := omit, + template(omit) Disconnection_type p_discMethod := omit, + template(value) urn_ietf_params_xml_ns_conference_info.Media_type p_mediastatus + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + referred := omit, + status := p_epStatus, + joining_method := p_joinMethod, + joining_info := omit, + disconnection_method := p_discMethod, + disconnection_info := omit, + media_list := {p_mediastatus}, // optional, + call_info := omit, + elem_list := {} + } + + template(value) User_type m_1user( + template(omit) charstring p_Uri := omit, + template(value) Endpoint_type p_endpoint + ) := { + entity := p_Uri, + state := full, + attr := omit, + display_text := omit, + associated_aors := omit, + roles := omit, + languages := omit, + cascaded_focus := omit, + endpoint_list := {p_endpoint}, // optional, + elem_list := {} + } + + template(value) Users_type m_users_1user_full( + template(value) User_type p_user + ) := { + state := full, + attr := omit, + user_list := {p_user}, + elem_list := {} + } + + template(value) Users_type m_users_2user_full( + template(value) User_type p_user, + template(value) User_type p_user2 + ) modifies m_users_1user_full := { + user_list := {p_user, p_user2} + } + + template(value) Conference_state_type m_conference_state( + template(value) UnsignedInt p_nUsers, + template(value) boolean p_active, + template(value) boolean p_locked + ) := { + attr := omit, + user_count := p_nUsers, + active := p_active, + locked := p_locked, + elem_list := {} + } + + template(value) Conference_type m_ci_cUri_cState_userEntity( + template(value) charstring p_cUri, + template(value) Conference_state_type p_cState, + template(value) Users_type p_users + ) := { + entity := p_cUri, + state := full, + version := 1, + attr := omit, + conference_description := omit, + host_info := omit, + conference_state := p_cState, + users := p_users, + sidebars_by_ref := omit, + sidebars_by_val := omit, + elem_list := {} + } + + template(present) Conference_type mw_conferenceInfo_active := { + entity := ?, + state := *, + version := *, + attr := *, + conference_description := *, + host_info := *, + conference_state := ?, + users := { + state := ?, + attr := *, + user_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + associated_aors := *, + roles := *, + languages := *, + cascaded_focus := *, + endpoint_list := { + { + entity := *, + state := *, + attr := *, + display_text := *, + referred := *, + status := connected, + joining_method := dialed_in, + joining_info := *, + disconnection_method := *, + disconnection_info := *, + media_list := ?, + call_info := *, + elem_list := ? + } + }, + elem_list := ? + } + }, + elem_list := ? + }, + sidebars_by_ref := *, + sidebars_by_val := *, + elem_list := ? + } + } + + } // end group messageBodyTemplates + + group messageTemplates { + + group modifiedTemplates { + + group requestSend { + + template(value) ACK_Request m_ACK_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) ACK_Request m_ACK_Request_AS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_ACK_Request_IMS := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute + } + } + + template(value) ACK_Request m_ACK_Request_sdp_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + route := p_route + }, + messageBody := p_mb + } + + template(value) ACK_Request m_ACK_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_ACK_Request_Base := { + msgHeader := { + contentLength := { + fieldName := CONTENT_LENGTH_E, + len := f_MessageBodyLength(valueof(p_mb)) + }, + contentType := { + fieldName := CONTENT_TYPE_E/*, + mediaType := m_mimeMultipart*/ + }, + route := p_route + }, + messageBody := p_mb + } + + template(value) BYE_Request m_BYE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + recordRoute := p_recordRoute // used in case of AS as TS - for ISC interface + } + } // end of temlate m_BYE_Request_IMS + + template(value) BYE_Request m_BYE_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) GenValue p_cause + ) modifies m_BYE_Request_Base := { + msgHeader := { + reason := mw_Reason(p_cause), + route := p_route + } + } + + template(value) BYE_Request m_BYE_Request_UserToUser_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_BYE_Request_Base := { + msgHeader := { + route := p_route, + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) BYE_Request m_BYE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_BYE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + route := p_route + } + } + + template(value) CANCEL_Request m_CANCEL_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_Base := { + msgHeader := {route := p_route} + } + + template(value) CANCEL_Request m_CANCEL_Request_Reason_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(value) integer p_cause + ) modifies m_CANCEL_Request_IMS := { + msgHeader := {reason := m_Reason(p_cause)} + } + + template(value) CANCEL_Request m_CANCEL_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit + ) modifies m_CANCEL_Request_IMS := { + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS_Base( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)) + }, + messageBody := p_mb + } + + /** + * @desc INFO message + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + /** + * @desc INFO message + * @desc + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_mb + */ + template(value) INFO_Request m_INFO_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) INFO_Request m_INFO_Request_Xml_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_INFO_Request_IMS_Base := { + msgHeader := { + contentType := m_contentType(c_xmlApplication) + } + } + + template(value) INVITE_Request m_INVITE_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) LibSip_SIPTypesAndValues.Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_noBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + } + } + + template(value) INVITE_Request m_INVITE_Request_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_UE := { + msgHeader := {allow := p_allow} + } + + template(value) INVITE_Request m_INVITE_Request_noBody_Allow_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) LibSip_SIPTypesAndValues.Allow p_allow + ) modifies m_INVITE_Request_noBody_UE := { + msgHeader := {allow := p_allow} + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_historyInfo + */ + template(value) INVITE_Request m_INVITE_Request_HistoryInfo_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_Mime_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + */ + template(value) INVITE_Request m_INVITE_Request_IMS_noBody( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_INVITE_Request_Base := { + msgHeader := { + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedID + * @param p_privacy + */ + template(value) INVITE_Request m_INVITE_Request_Mime_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_Mime_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_acceptContact + * @param p_pAssertedID + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) AcceptContact p_acceptContact, + template(value) PAssertedID p_pAssertedID, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + acceptContact := p_acceptContact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_pAssertedID + * @param p_privacy + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector, + privacy := p_privacy, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_pAssertedService + */ + template(value) INVITE_Request m_INVITE_Request_PAssertedService_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) PAssertedService p_pAssertedService + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + pAssertedService := p_pAssertedService + }, + messageBody := p_mb + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) INVITE_Request m_INVITE_Request_PEarlyMedia_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + pEarlyMedia := m_pEarlyMedia_sup + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) INVITE_Request m_INVITE_Request_PPreferred_Privacy_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID, + template(value) Privacy p_privacy + ) modifies m_INVITE_Request_UE := { + msgHeader := { + pPreferredID := p_pPreferredID, + privacy := p_privacy + } + } + + template(value) INVITE_Request m_INVITE_Request_SessionExpires_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) SessionExpires p_se + ) modifies m_INVITE_Request_UE := { + msgHeader := { + sessionExpires := p_se + } + } + + template(value) INVITE_Request m_INVITE_Request_minSE_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_UE := { + msgHeader := { + minSE := p_minSE + } + } + + /** + * @desc INVITE message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_from + * @param p_to + * @param p_via + * @param p_contact + * @param p_require + * @param p_route + * @param p_supported + * @param p_pChargingVector + * @param p_mb + * @param p_minSE + */ + template(value) INVITE_Request m_INVITE_Request_minSE_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) MinSE p_minSE + ) modifies m_INVITE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + pChargingVector := p_pChargingVector, + route := p_route, + supported := p_supported, + minSE := p_minSE + }, + messageBody := p_mb + } + + template(value) INVITE_Request m_INVITE_Request_User2UserData_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) LibSip_SIPTypesAndValues.Contact p_contact, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_INVITE_Request_IMS := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_MBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) MessageBody p_mb + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText), + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) MESSAGE_Request m_MESSAGE_Request_NoBody_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + require := p_require, + route := p_route, + supported := p_supported + }, + messageBody := omit + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) GenValue p_homeDomain + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := m_pChargingVector_origIoi_fixedValue(p_homeDomain) + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PCharging_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pAccessNetworkInfo := omit, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_PPreferred_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) Supported p_supported := omit + ) modifies m_MESSAGE_Request_NoBody_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(m_MBody_longPlainText)), + contentType := m_contentType(c_plainText) + }, + messageBody := m_MBody_longPlainText + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_Conference( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication), + event := { + fieldName := EVENT_E, + eventType := "conference", + eventParams := omit + }, + subscriptionState := { + fieldName := SUBSCRIPTION_STATE_E, + subState := "active", + substateParams := omit + }, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) NOTIFY_Request m_NOTIFY_Request_Xml_IMS_RegInfo( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_NOTIFY_Request_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlreginfoApplication), + event := m_Event_reg, + subscriptionState := m_SubscriptionState_active, + expires := m_expires(3600) + }, + messageBody := p_mb + } + + template(value) PRACK_Request m_PRACK_Request_sdp( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) RAck p_RAck, + template(value) MessageBody p_mb + ) modifies m_PRACK_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + cSeq := m_cSeq(p_cSeq.seqNumber, "PRACK"), + fromField := p_from, + rAck := p_RAck, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit + ) modifies m_PUBLISH_Request_Base := { + requestLine := {requestUri := p_requestUri}, + msgHeader := { + callId := p_callId, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_plainText /*c_sdpApplication*/), + cSeq := m_cSeq(p_cSeq.seqNumber, "PUBLISH"), + event := p_event, + fromField := p_from, + route := p_route, + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + toField := p_to, + via := p_via + }, + messageBody := p_mb + } + + template(value) PUBLISH_Request m_PUBLISH_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Event p_event := omit, + template(omit) RAck p_RAck := omit, + template(value) MessageBody p_mb, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) PChargingVector p_pChargingVector := omit + ) modifies m_PUBLISH_Request_UE := { + msgHeader := { + recordRoute := p_recordRoute, + pChargingVector := p_pChargingVector + } + } + + /** + * @desc REFER message exchanged at Mw + * @param p_requestUri + * @param p_callId + * @param p_cSeq + * @param p_contact + * @param p_from + * @param p_to + * @param p_via + * @param p_referTo + * @param p_referredBy + * @param p_require + * @param p_route + * @param p_recordRoute + * @param p_supported + * @param p_pChargingVector + * @param p_mb + */ + template(value) REFER_Request m_REFER_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) ReferTo p_referTo, + template(omit) ReferredBy p_referredBy := omit, + template(omit) Require p_require := omit, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(omit) Supported p_supported := omit, + template(omit) PChargingVector p_pChargingVector := omit, + template(value) MessageBody p_mb + ) modifies m_REFER_Request_Base := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + referredBy := p_referredBy, + referTo := p_referTo, + require := p_require, + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + supported := p_supported + }, + messageBody := p_mb + } + + template(value) REGISTER_Request m_REGISTER_Request_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(omit) ProxyRequire p_proxyRequire := omit, + template(omit) Require p_require := omit, + template(omit) SecurityClient p_securityClient := omit, + template(omit) SecurityVerify p_securityVerify := omit, + template(omit) Supported p_supported := omit + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + proxyRequire := p_proxyRequire, + require := p_require, + securityClient := p_securityClient, + securityVerify := p_securityVerify, + supported := p_supported, + toField := p_to, + via := p_via + } + } + + + template(value) REGISTER_Request m_REGISTER_Request_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port + ) modifies m_REGISTER_Request_Base := { + requestLine := { + method := REGISTER_E, + requestUri := p_requestUri + }, + msgHeader := { + authorization := p_authorization, + callId := p_callId, + contact := p_contact, + cSeq := p_cSeq, + fromField := p_from, + path := m_path_TS(p_host, p_port), + pChargingVector := m_pChargingVector_icid_TS, + pVisitedNetworkID := m_pVisitedNetworkID_TS, + require := { + fieldName := REQUIRE_E, + optionsTags := {"path"} + }, + toField := p_to, + via := p_via + } + } + + template(value) REGISTER_Request m_REGISTER_Request_IMS_3party( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(omit) Path p_path := omit + ) modifies m_REGISTER_Request_IMS := { + msgHeader := {path := p_path} + } + + template(value) REGISTER_Request m_REGISTER_Request_expires_IMS( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Authorization p_authorization := omit, + template(value) charstring p_host, + template(value) integer p_port, + template(value) DeltaSec p_deltaSec + ) modifies m_REGISTER_Request_IMS := { + msgHeader := { + expires := m_expires(str2int(valueof(p_deltaSec))) + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_UE( + template(value) SipUrl p_requestUri, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) Route p_route := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000, + route := p_route + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a, + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + }, + messageBody := p_mb + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_event_UE( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(value) Event p_event, + template(value) charstring p_contentType + ) modifies m_SUBSCRIBE_Request_mb_UE := { + msgHeader := { + contentType := m_contentType(p_contentType), + event := p_event + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_requestUri + }, + msgHeader := { + contact := p_contact, + cSeq := m_cSeq(p_cSeq.seqNumber, "SUBSCRIBE"), + event := m_Event_reg, + expires := m_Expires_600000 + } + } + + template(value) SUBSCRIBE_Request m_SUBSCRIBE_Request_Event( + template(value) SipUrl p_requestUri, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Event p_event + ) modifies m_SUBSCRIBE_Request_IMS := { + msgHeader := { + event := p_event + } + } + + } // end group requestSend + + group requestReceive { + + template(present) ACK_Request mw_ACK_Request_noPaccessNetworkInfo( + template CallId p_callId + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) ACK_Request mw_ACK_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_ACK_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) BYE_Request mw_BYE_Request_noPChargingFunction_UE( + template CallId p_callId + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) BYE_Request mw_BYE_Request_via_PChargingVector_UE( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ?, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_via_UE( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + via := p_via + } + } + + template(present) BYE_Request mw_BYE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_BYE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_noPChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PChargingFunction + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := ? + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPCharging + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_NoPChargingPreferred + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred( + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_PAsserted_AcceptContact( + template(present) PAssertedID p_pAssertedID := ?, + template(present) AcceptContact p_acceptContact := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + acceptContact := p_acceptContact + } + } + + template(present) INVITE_Request mw_INVITE_Request_RecordRoute_Via( + template(present) RecordRoute p_recordRoute := ?, + template(present) Via p_via := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + recordRoute := p_recordRoute, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_route( + template(present) Route p_route := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + route := p_route + } + } + + template(present) INVITE_Request mw_INVITE_Request_require( + template(present) Require p_require := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + require := p_require + } + } + + template(present) INVITE_Request mw_INVITE_Request_supported( + template(present) Supported p_supported := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + supported := p_supported + } + } + + template(present) INVITE_Request mw_INVITE_Request_SessionExpires( + template(present) SessionExpires p_sessionExpires := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + sessionExpires := p_sessionExpires + } + } + + template(present) INVITE_Request mw_INVITE_Request_User2UserData( + template(present) UserToUser.uuiData p_U2UData := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + userToUser := mw_UserToUserData(p_U2UData) + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_requestLine( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) SipUrl p_requestUri := ? + ) modifies mw_INVITE_Request_IMS := { + requestLine := { + requestUri := p_requestUri + }, + msgHeader := { + pChargingVector := p_pChargingVector, + recordRoute := p_recordRoute, + route := p_route, + via := p_via + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_PAsserted_noPPreferred( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_IMS := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_mb( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ? + } + + template(present) INVITE_Request mw_INVITE_Request_IMS_cug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) Cug p_cug := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_CUG(p_cug)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_CUG(p_cug)) + ) + } + + /* TITAN compiler error: Restriction on template formal parameter does not allow usage of complemented list match without omit or AnyValueOrNone in the list + template(present) INVITE_Request mw_INVITE_Request_IMS_noCug( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(complement(mw_XmlBody_CUG(?))), + mw_MBody_MIMESdpXml(?, complement(mw_XmlBody_CUG(?))) + ) + }*/ + + template(present) INVITE_Request mw_INVITE_Request_IMS_pstn( + template PChargingVector p_pChargingVector, + template RecordRoute p_recordRoute, + template Route p_route, + template Via p_via, + template(present) PSTN_transit p_pstn := ? + ) modifies mw_INVITE_Request_IMS := { + messageBody := ( + mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)), + mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)) + ) + } + + /** + * @desc Await INVITE using topology hiding + */ + template(present) INVITE_Request mw_INVITE_Request_TH + modifies mw_INVITE_Request_TH_R10 := { + msgHeader := { + pChargingVector := omit + } + } + + template(present) INVITE_Request mw_INVITE_Request_TH_R10 + modifies mw_INVITE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + /** + * @desc Await INVITE without PAsserted and Privacy + * @param p_from + */ + template(present) INVITE_Request mw_INVITE_Request_noPasserted_noPrivacy( + template From p_from + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := omit, + pPreferredID := omit + } + } + + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_PassertedPrivacy( + template From p_from, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_noPasserted_noPrivacy := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy + } + } + + /** + * @desc Await INVITE with PAsserted and Privacy + * @param p_from + * @param p_pAssertedID + * @param p_privacy + */ + template(present) INVITE_Request mw_INVITE_Request_Passerted_ifPrivacy( + template From p_from, + template PAssertedID p_pAssertedID, + template(present) Privacy p_privacy := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + pAssertedID := p_pAssertedID, + privacy := p_privacy ifpresent + } + } + + /** + * @desc Await INVITE with history info + * @param p_historyInfo + */ + template(present) INVITE_Request mw_INVITE_Request_HistoryInfo( + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_INVITE_Request_Base := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunctionPrefId_UE + modifies mw_MESSAGE_Request_noPchargingFunction_UE := { + msgHeader := { + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS := + mw_MESSAGE_Request_noPchargingFunction_UE; + + template(present) MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred( + template CallId p_callId, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + pAssertedID := p_pAssertedID, + pPreferredID := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_route( + template CallId p_callId, + template(present) Route p_route := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + route := p_route + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_via( + template CallId p_callId, + template(present) Via p_via := ? + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + callId := p_callId, + via := p_via + } + } + + template(present) NOTIFY_Request mw_NOTIFY_Request( + template CallId p_callId, + template(present) charstring p_state := ?, + template(present) charstring p_contentType := ?, + template Event p_event, + template MessageBody p_mb + ) modifies mw_NOTIFY_Request_Base := { + msgHeader := { + subscriptionState := mw_subscriptionState(p_state), + contentType := mw_contentType(p_contentType), + event := p_event + }, + messageBody := p_mb + } + + template(present) PRACK_Request mw_PRACK_Request_sdp( + template CallId p_callId, + template MessageBody p_mb + ) modifies mw_PRACK_Request_Base := { + msgHeader := { + callId := p_callId + }, + messageBody := p_mb + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_PchargingVector( + template(present) charstring p_id := ?, + template GenValue p_paramValue + ) modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pChargingVector := mw_pChargingVector(p_id, p_paramValue) + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + template(present) MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization + modifies mw_MESSAGE_Request_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + template(present) PUBLISH_Request mw_PUBLISH_Request_PchargingVector( + template CallId p_callId, + template(present) PChargingVector p_pChargingVector := ? + ) modifies mw_PUBLISH_Request_Base := { + msgHeader := { + pChargingVector := p_pChargingVector + } + } + + template(present) REGISTER_Request mw_REGISTER_Request_IMS( + template Path p_Path, + template PChargingVector p_pChargingVector, + template PVisitedNetworkID p_pVisitedNetworkID + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := ?, + path := p_Path, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID, + require := mw_require_path, + securityClient := omit, + securityVerify := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := p_authorization + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS( + template(present) Authorization p_authorization := ? + ) modifies mw_REGISTER_authorizedRequest_IMS := { + msgHeader := { + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_auth_via_nosecclient_IMS( + template(present) Authorization p_authorization := ?, + template(present) Via p_via + ) modifies mw_REGISTER_authorizedRequest_wo_securityclient_IMS := { + msgHeader := { + via := p_via + } + } + + template(present) REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + securityVerify := omit, + securityClient := omit + } + } + + template(present) REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS + modifies mw_REGISTER_Request_Base := { + msgHeader := { + authorization := * + } + } + + template(present) SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS( + template(present) From p_from := ?, + template(present) To p_to := ?, + template PAssertedID p_pAssertedID, + template PChargingVector p_pChargingVector + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + pAccessNetworkInfo := *, + pAssertedID := p_pAssertedID, + pChargingVector := p_pChargingVector + } + } + + template(present) UPDATE_Request mw_UPDATE_Request_fromChange( + template CallId p_callId, + template(present) From p_from := ? + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + callId := p_callId, + fromField := p_from + } + } + + } // end group requestReceive + + group responseSend { + + group responseSend1xx { + + template(value) Response m_Response_18x_Base( + template(value) StatusLine_18x p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_18XonINVITE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact // mandatory field due to 24 229 rel 7.9 + } + } + + template(value) Response m_Response_18XonINVITE_AlertInfo( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) AlertInfo p_alertInfo + ) modifies m_Response_18x_Base := { + msgHeader := { + alertInfo := p_alertInfo + } + } + + template(value) Response m_Response_18XonINVITE_sdp_require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + require := p_require, + rSeq := m_rseq9999 + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_AS( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + recordRoute := p_recordRoute + } + } + + template(value) Response m_Response_18XonINVITE_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + rSeq := m_rseq9999 + } + } + + template(value) Response m_Response_18XonINVITE_HistoryInfo_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_18XonINVITE_PchargingVector( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_18x_Base := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_18XonINVITE_pEearlyMedia( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PEarlyMedia p_pEarlyMedia + ) modifies m_Response_18x_Base := { + msgHeader := { + pEarlyMedia := p_pEarlyMedia + } + } + + template(value) Response m_Response_18XonINVITE_pPreferred_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + template(value) Response m_Response_18XonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + template(value) Response m_Response_18XonINVITE_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported and p_privacy to be able to modify from m_Response_18XonINVITE_privacy_UE + template(value) Response m_Response_18XonINVITE_supported_privacy_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_18XonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_18XonINVITE_recordRoute_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) RecordRoute p_recordRoute + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + recordRoute := p_recordRoute // for INVITE response + } + } + + template(value) Response m_Response_18XonINVITE_Require( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) Require p_require + ) modifies m_Response_18x_Base := { + msgHeader := { + require := p_require + } + } + + // NOTE STF471: removed m_Response_18XonINVITE_Require_ifpresent as it is same as m_Response_18XonINVITE_Require + template(value) Response m_Response_18XonINVITE_UserToUser( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_18x_Base := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_18XonINVITE_Xml( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_UE := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_xmlApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_18XonINVITE_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb + ) modifies m_Response_18XonINVITE_Xml := { + msgHeader := { + contentType := m_contentType(c_sdpApplication) + } + } + + // NOTE STF471: changed order of parameter p_require and p_mb to be able to modify from m_Response_18XonINVITE_sdp_UE + template(value) Response m_Response_18XonINVITE_require_sdp_UE( + template(value) StatusLine_18x p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) MessageBody p_mb, + template(omit) Require p_require := omit, + template(omit) LibSip_SIPTypesAndValues.Allow p_allow := omit + ) modifies m_Response_18XonINVITE_sdp_UE := { + msgHeader := { + require := p_require, + allow := p_allow + } + } + + } // end group responseSend1xx + + group responseSend2xx { + + template(value) Response m_Response_2xx_Base( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_2xx_ext( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + route := p_route, // f_route(), + recordRoute := + p_recordroute // f_recordroute() + } + } + + template(value) Response m_Response_2xx_mbody( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_ext := { + msgHeader := { + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication) + }, + messageBody := p_mb + } + + template(value) Response m_Response_2xxonBYE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonINVITE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute // for INVITE response + }, + messageBody := p_mb + } + + // NOTE STF471: changed order of parameter p_historyInfo and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2xxonINVITE_HistoryInfo( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) HistoryInfo p_historyInfo + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + historyInfo := p_historyInfo + } + } + + template(value) Response m_Response_2xxonINVITE_Mime( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + contentType := m_contentType(m_mimeMultipart) + } + } + + template(value) Response m_Response_2xxonINVITE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xxonINVITE := { + } + + template(value) Response m_Response_2xxonINVITE_PchargingVector( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) Route p_route := omit, + template(omit) RecordRoute p_recordroute := omit, + template(value) MessageBody p_mb, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_mbody := { + msgHeader := { + contact := p_contact, + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pPreferred_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed order of parameter p_pPreferredID and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_pAsserted_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } + + // NOTE STF471: changed order of parameter p_pAssertedID/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_pAsserted_UE + template(value) Response m_Response_2XXonINVITE_pAsserted_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) PAssertedID p_pAssertedID, + template(value) Privacy p_privacy + ) modifies m_Response_2XXonINVITE_pAsserted_UE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_privacy and p_mb to be able to modify from m_Response_2xxonINVITE + template(value) Response m_Response_2XXonINVITE_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + privacy := p_privacy + } + } + + // NOTE STF471: changed order of parameter p_supported/p_privacy and p_mb to be able to modify from m_Response_2XXonINVITE_privacy_UE + template(value) Response m_Response_2XXonINVITE_supported_privacy_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) Privacy p_privacy, + template(value) Supported p_supported + ) modifies m_Response_2XXonINVITE_privacy_UE := { + msgHeader := { + supported := p_supported + } + } + + template(value) Response m_Response_2xxonINVITE_UserToUser( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb, + template(value) UserToUser.uuiData p_U2UData + ) modifies m_Response_2xxonINVITE := { + msgHeader := { + userToUser := m_UserToUserData(p_U2UData) + } + } + + template(value) Response m_Response_2xxonREGISTER_IMS( + template(value) StatusLine_2xx p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) SipUrl p_serviceroute_sip_url, + template(value) SipUrl p_passociated_uri + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := omit, + addrSpec := p_serviceroute_sip_url + }, + rrParam := omit + } + } + }, + pAssociatedURI := + m_pAssociatedURI( + { + displayName := omit, + addrSpec := p_passociated_uri + } + ) // PAssociatedURI RFC3455 + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_2xxonSUBSCRIBE_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_2xxonSUBSCRIBE_IMS := { + } + + template(value) Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue, + pChargingVector := p_pChargingVector + } + } + + template(value) Response m_Response_2xxonMESSAGE_PCharging_IMS( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PChargingVector p_pChargingVector + ) modifies m_Response_2xxonMESSAGE_PCharging_UE := { + } + + template(value) Response m_Response_2xxonMESSAGE_PMediaAuth_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := m_pMediaAuthorization_fixedValue + } + } + + template(value) Response m_Response_2xxonMESSAGE_pPreferredID_UE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) PPreferredID p_pPreferredID + ) modifies m_Response_2xx_Base := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } + + template(value) Response m_Response_2xxonUPDATE( + template(value) StatusLine_2xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(omit) RecordRoute p_recordRoute := omit, + template(value) MessageBody p_mb + ) modifies m_Response_2xx_Base := { + msgHeader := { + contact := p_contact, + contentLength := m_contentLength(f_MessageBodyLength(p_mb)), + contentType := m_contentType(c_sdpApplication), + recordRoute := p_recordRoute + }, + messageBody := p_mb + } + + } // end group responseSend2xx + + group responseSend3xx { + + template(value) Response m_Response_3xx_Base( + template(value) StatusLine_3xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_3XXonINVITE( + template(value) StatusLine_3xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_3xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend3xx + + group responseSend4xx { + + template(value) Response m_Response_4xx_Base( + template(value) StatusLine_4xx p_statusLine, + template(omit) CallId p_callId := omit, + template(omit) CSeq p_cSeq := omit, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Dummy := { + statusLine := p_statusLine, + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + maxForwards := omit, + toField := p_to, + via := p_via + }, + messageBody := omit, + payload := omit + } + + template(value) Response m_Response_4XXonINVITE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_4XXonINVITE_UE( + template(value) StatusLine_4xx p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_4xx_Base := { + msgHeader := { + contact := p_contact + } + } + + } // end group responseSend4xx + + template(value) Response m_Response_onCANCEL( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via + ) modifies m_Response_Base := { + } + + template(value) Response m_Response_onMESSAGE_IMS( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit + ) modifies m_Response_Base := { + msgHeader := { + contact := p_contact + } + } + + template(value) Response m_Response_onINVITE_Reason( + template(value) StatusLine p_statusLine, + template(value) CallId p_callId, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(omit) LibSip_SIPTypesAndValues.Contact p_contact := omit, + template(value) GenValue p_cause + ) modifies m_Response_onINVITE := { + msgHeader := { + reason := mw_Reason(p_cause) + } + } + + template(value) Response m_Response_WWWauthenticate_IMS( + template(value) StatusLine p_statusLine, + template(omit) CallId p_callId := omit, + template(value) CSeq p_cSeq, + template(value) From p_from, + template(value) To p_to, + template(value) Via p_via, + template(value) WwwAuthenticate p_wwwAuthenticate + ) modifies m_Response_Base := { + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseSend + + group responseReceive { + + group responseReceive2xx { + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_noPChargingVector_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is fixed 200 status code + template(present) Response mw_Response_200onINVITE_SDP_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + messageBody := { + sdpMessageBody := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a 200.299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pChargingFunctionAddresses := omit, + pChargingVector := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPCharging_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xxonMESSAGE_noPCharging_UE := { + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pAccessNetworkInfo := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a 200..299 status code + template(present) Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_2xx_Base := { + msgHeader := { + pMediaAuthorization := omit + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 200 status code + template(present) Response mw_Response_200onREGISTER_IMS( + template CallId p_callId, + template CSeq p_cSeq, + template SipUrl p_ue_uri, + template LibSip_SIPTypesAndValues.Contact p_contact, + template SipUrl p_sut_scscf_uri + ) modifies mw_Response_2xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 200, + reasonPhrase := ? + }, + msgHeader := { + pAssociatedURI := { + fieldName := P_ASSOCIATED_URI_E, + nameAddrList := { + *, + { + nameAddr := { + displayName := *, + addrSpec := p_ue_uri + }, + genericParams := * + }, + * + } + }, + path := ?, + serviceRoute := { + fieldName := SERVICE_ROUTE_E, + routeBody := { + { + nameAddr := { + displayName := *, + addrSpec := p_sut_scscf_uri + }, + rrParam := * + } + } + }, + pChargingFunctionAddresses := ?, + pChargingVector := ?, + contact := p_contact + } + } + + } // end group responseReceive2xx + + group responseReceive4xx { + + // NOTE STF471: removed statusline parameter as it is a fixed 401 status code + template(present) Response mw_Response_401onREGISTER_securityServer_UE( + template CallId p_callId, + template CSeq p_cSeq + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + securityServer := ?, + wwwAuthenticate := ? + } + } + + // NOTE STF471: removed statusline parameter as it is a fixed 400 status code + template(present) Response mw_Response_401onREGISTER_WWWauthenticate_IMS( + template CallId p_callId, + template CSeq p_cSeq, + template(present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_Response_4xx_Base := { + statusLine := { + sipVersion := c_sipNameVersion, + statusCode := 401, + reasonPhrase := ? + }, + msgHeader := { + wwwAuthenticate := p_wwwAuthenticate + } + } + + } // end group responseReceive4xx + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_SecServer_WWWAuth_UE( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) SecurityServer p_securityServer := ?, + template WwwAuthenticate p_wwwAuthenticate + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + securityServer := p_securityServer, + wwwAuthenticate := p_wwwAuthenticate + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PpreferredID_PassertedID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PPreferredID p_pPreferredID := ?, + template(present) PAssertedID p_pAssertedID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + pPreferredID := p_pPreferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_Privacy_History( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) Privacy p_privacy := ?, + template(present) HistoryInfo p_historyInfo := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + privacy := p_privacy, + historyInfo := p_historyInfo + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PAsserted_ContentType( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PAssertedID p_pAssertedID := ?, + template(present) ContentType p_contentType := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pAssertedID := p_pAssertedID, + contentType := p_contentType + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector + } + } + + // NOTE STF471: changed name from mw_Response_PchargingVecFctadrId + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingVector_PchargingFunctionAddr_PpreferredID( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingVector p_chargingVector := ?, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ?, + template(present) PPreferredID p_preferredID := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingVector := p_chargingVector, + pChargingFunctionAddresses := p_chargingFunctionAddresses, + pPreferredID := p_preferredID + } + } + + // NOTE STF471: changed statusline parameter to statusCode parameter + template(present) Response mw_Response_PchargingFunctionAddr( + template(present) StatusLine.statusCode p_statusCode := ?, + template CallId p_callId, + template CSeq p_cSeq, + template(present) PChargingFunctionAddresses p_chargingFunctionAddresses := ? + ) modifies mw_Response_StatusCode_Base := { + msgHeader := { + pChargingFunctionAddresses := p_chargingFunctionAddresses + } + } + + } // end group responseReceive + + } // end group modifiedTemplates + + } // end group messageTemplates + +} // end module LibIms_Templates diff --git a/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn b/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn new file mode 100644 index 0000000..169c8c8 --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_www_opengis_net_gml.ttcn @@ -0,0 +1,1008 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* 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: http_www_opengis_net_gml.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - basicTypes.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - gmlBase.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - measures.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic0d1d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryBasic2d.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +// - geometryPrimitives.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/gml" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_gml { + + +import from XSD all; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type enumerated SignType +{ + x, + x_1 +} +with { + variant "text 'x' as '-'"; + variant "text 'x_1' as '+'"; +}; + + +type record of XSD.Boolean BooleanList +with { + variant "name as uncapitalized"; + variant "list"; + //variant "text 'true' as '1'"; + //variant "text 'false' as '0'"; +}; + + +type record of XSD.Name NameList +with { + variant "list"; +}; + + +type record of XSD.Double DoubleList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record of XSD.Integer IntegerList +with { + variant "name as uncapitalized"; + variant "list"; +}; + + +type record MeasureType +{ + XSD.AnyURI uom, + XSD.Double base +} +with { + variant (uom) "attribute"; + variant (base) "untagged"; +}; + + +type record of XSD.NCName NCNameList +with { + variant "list"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type record AbstractGMLType +{ + Id id optional +} +with { + variant "abstract"; + variant (id) "attribute"; +}; + + +type XSD.ID Id +with { + variant "name as uncapitalized"; + variant "attribute"; +}; +/* + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + +*/ +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type MeasureType Measure +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType LengthType; + + +type MeasureType Angle +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type MeasureType AngleType; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ +/* + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; +*/ + +type record AbstractGeometryType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant "abstract"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractGeometricPrimitiveType +with { + variant "abstract"; +}; + + +type PointType Point +with { + variant "name as 'Point'"; + variant "element"; +}; + + +type record PointType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Pos pos +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PointPropertyType PointProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record PointPropertyType +{ + Point point +} +with { + variant (point) "name as capitalized"; +}; + + +type AbstractGeometricPrimitiveType AbstractCurveType +with { + variant "abstract"; +}; + + +type CurvePropertyType CurveProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurvePropertyType +{ + Curve_group curve +} +with { + variant (curve) "name as '_Curve'"; +}; + + +type LineStringType LineString +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LineStringType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type DirectPositionType Pos +with { + variant "name as 'pos'"; + variant "element"; +}; + + +type DoubleList DirectPositionType; + + +type DirectPositionListType PosList +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record DirectPositionListType +{ + XSD.PositiveInteger count optional, + DoubleList base +} +with { + variant (count) "attribute"; + variant (base) "untagged"; +}; + + +type EnvelopeType Envelope +with { + variant "element"; +}; + + +type record EnvelopeType +{ + NCNameList axisLabels optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record { + DirectPositionType lowerCorner, + DirectPositionType upperCorner + } sequence, + record length(2) of Pos pos_list + } choice +} +with { + variant (axisLabels) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.sequence) "untagged"; + variant (choice.pos_list) "untagged"; + variant (choice.pos_list[-]) "name as 'pos'"; +}; + +/* + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +*/ +type union Curve_group +{ + AbstractCurveType curve, + Curve curve_1, + LineString lineString +} +with { + variant "untagged"; + variant (curve) "name as '_Curve'"; + variant (curve) "form as qualified"; + variant (curve) "abstract"; + variant (curve_1) "name as 'Curve'"; + variant (lineString) "name as capitalized"; +}; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type AbstractGeometricPrimitiveType AbstractSurfaceType; + +/* +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + +*/ + + +type PolygonType Polygon +with { + variant "element"; +}; + + +type record PolygonType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Exterior exterior optional +} +with { + variant "name as 'Polygon'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type AbstractGeometryType AbstractRingType +with { + variant "abstract"; +}; + + +type AbstractRingPropertyType Exterior +with { + variant "name as 'exterior'"; + variant "element"; +}; + + +type record AbstractRingPropertyType +{ + Ring_group ring +} +with { + variant "name as 'exterior'"; + variant (ring) "name as '_Ring'"; +}; + + +type LinearRingType LinearRing +with { + variant "name as 'LinearRing'"; + variant "element"; +}; + + +type record LinearRingType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + union { + record length(4 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant "name as 'LinearRing'"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; + variant (choice.choice_list[-].pos[-]) "name as 'pos'"; +}; + +/* +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + +*/ +type union Ring_group +{ + AbstractRingType ring, + LinearRing linearRing +} +with { + variant "untagged"; + variant (ring) "name as '_Ring'"; + variant (ring) "form as qualified"; + variant (ring) "abstract"; + variant (linearRing) "name as capitalized"; +}; + + +const XSD.Integer c_defaultForEmpty_1 := 0; + + +const CurveInterpolationType c_defaultForEmpty_2 := linear; + + +const CurveInterpolationType c_defaultForEmpty_3 := circularArcCenterPointWithRadius; + + +const XSD.Integer c_defaultForEmpty_4 := 1; + + +const SurfaceInterpolationType c_defaultForEmpty_5 := planar; + + +/* Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CurveType Curve +with { + variant "element"; +}; + + +type record CurveType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Segments segments +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractCurveSegmentType +{ + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional +} +with { + variant "abstract"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; +}; + + +type CurveSegmentArrayPropertyType Segments +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record CurveSegmentArrayPropertyType +{ + record of CurveSegment_group curveSegment_list +} +with { + variant (curveSegment_list) "untagged"; + variant (curveSegment_list[-]) "name as '_CurveSegment'"; +}; + + +type LineStringSegmentType LineStringSegment +with { + variant "element"; +}; + + +type record LineStringSegmentType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_2) optional, + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + record length(2 .. infinity) of union { + Pos pos, + PointProperty pointProperty + } choice_list, + PosList posList + } choice +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_2"; + variant (interpolation) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; + variant (choice.choice_list) "untagged"; + variant (choice.choice_list[-]) "untagged"; +}; + + +type record ArcByCenterPointType +{ + CurveInterpolationType interpolation (c_defaultForEmpty_3) optional, + XSD.Integer numArc (c_defaultForEmpty_4), + XSD.Integer numDerivativeInterior optional, + XSD.Integer numDerivativesAtEnd optional, + XSD.Integer numDerivativesAtStart optional, + union { + Pos pos, + PointProperty pointProperty + } choice, + LengthType radius, + AngleType startAngle optional, + AngleType endAngle optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_3"; + variant (interpolation) "attribute"; + variant (numArc) "defaultForEmpty as c_defaultForEmpty_4"; + variant (numArc) "attribute"; + variant (numDerivativeInterior) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativeInterior) "attribute"; + variant (numDerivativesAtEnd) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtEnd) "attribute"; + variant (numDerivativesAtStart) "defaultForEmpty as c_defaultForEmpty_1"; + variant (numDerivativesAtStart) "attribute"; + variant (choice) "untagged"; +}; + + +type CircleByCenterPointType CircleByCenterPoint +with { + variant "element"; +}; + + +type ArcByCenterPointType CircleByCenterPointType; + + +type record SurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + Patches_group patches +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type record AbstractSurfacePatchType +{ + +} +with { + variant "abstract"; +}; + + +type record SurfacePatchArrayPropertyType +{ + record of record { + SurfacePatch_group surfacePatch + } sequence_list +} +with { + variant (sequence_list) "untagged"; + variant (sequence_list[-]) "untagged"; + variant (sequence_list[-].surfacePatch) "name as '_SurfacePatch'"; +}; + + +type PolygonPatchType PolygonPatch +with { + variant "element"; +}; + + +type record PolygonPatchType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior optional +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type RectangleType Rectangle +with { + variant "element"; +}; + + +type record RectangleType +{ + SurfaceInterpolationType interpolation (c_defaultForEmpty_5) optional, + Exterior exterior +} +with { + variant (interpolation) "defaultForEmpty as c_defaultForEmpty_5"; + variant (interpolation) "attribute"; +}; + + +type PolyhedralSurfaceType PolyhedralSurface +with { + variant "element"; +}; + + +type record PolyhedralSurfaceType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PolygonPatchArrayPropertyType PolygonPatches +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type SurfacePatchArrayPropertyType PolygonPatchArrayPropertyType; + + +type AbstractGeometricPrimitiveType AbstractSolidType; + +/* +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + +*/ +type enumerated CurveInterpolationType +{ + circularArc3Points, + circularArcCenterPointWithRadius, + geodesic, + linear +}; + + +type enumerated SurfaceInterpolationType +{ + planar +}; + + +type union CurveSegment_group +{ + AbstractCurveSegmentType curveSegment, + ArcByCenterPoint_group arcByCenterPoint, + LineStringSegment lineStringSegment +} +with { + variant "untagged"; + variant (curveSegment) "name as '_CurveSegment'"; + variant (curveSegment) "form as qualified"; + variant (curveSegment) "abstract"; + variant (arcByCenterPoint) "name as capitalized"; + variant (lineStringSegment) "name as capitalized"; +}; + + +type union ArcByCenterPoint_group +{ + ArcByCenterPointType arcByCenterPoint, + CircleByCenterPoint circleByCenterPoint +} +with { + variant "untagged"; + variant (arcByCenterPoint) "name as capitalized"; + variant (arcByCenterPoint) "form as qualified"; + variant (circleByCenterPoint) "name as capitalized"; +}; + + +type union SurfacePatch_group +{ + AbstractSurfacePatchType surfacePatch, + PolygonPatch polygonPatch, + Rectangle rectangle +} +with { + variant "untagged"; + variant (surfacePatch) "name as '_SurfacePatch'"; + variant (surfacePatch) "form as qualified"; + variant (surfacePatch) "abstract"; + variant (polygonPatch) "name as capitalized"; + variant (rectangle) "name as capitalized"; +}; + + +type union Surface_group +{ + SurfaceType surface, + PolyhedralSurface polyhedralSurface +} +with { + variant "untagged"; + variant (surface) "name as capitalized"; + variant (surface) "form as qualified"; + variant (polyhedralSurface) "name as capitalized"; +}; + + +type union Patches_group +{ + SurfacePatchArrayPropertyType patches, + PolygonPatches polygonPatches +} +with { + variant "untagged"; + variant (patches) "form as qualified"; +}; + +/* +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; +*/ + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn b/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn new file mode 100644 index 0000000..dbdcb7d --- /dev/null +++ b/ttcn/patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn @@ -0,0 +1,409 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4A +* +* 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: http_www_opengis_net_pidflo_1_0.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Jul 3 08:58:44 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - GML-pidf-lo-shape.xsd +// /* xml version = "1.0" */ +// /* targetnamespace = "http://www.opengis.net/pidflo/1.0" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module http_www_opengis_net_pidflo_1_0 { + + +import from XSD all; + + +import from http_www_opengis_net_gml all; + + +/* This document defines geodetic shape types for PIDF-LO. + + Copyright (c) 2007,2009 Open Geospatial Consortium. + To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ . */ + + +type CircleType Circle +with { + variant "name as 'Circle'"; + variant "element"; +}; + + +type record CircleType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant "name as uncapitalized"; + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipseType Ellipse +with { + variant "element"; +}; + + +type record EllipseType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type ArcBandType ArcBand +with { + variant "element"; +}; + + +type record ArcBandType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType innerRadius, + LengthType outerRadius, + AngleType startAngle, + AngleType openingAngle +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type PrismType Prism +with { + variant "element"; +}; + + +type record PrismType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType base, + LengthType height +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type SphereType Sphere +with { + variant "element"; +}; + + +type record SphereType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType radius +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type EllipsoidType Ellipsoid +with { + variant "element"; +}; + + +type record EllipsoidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + CenterGroup centerGroup, + LengthType semiMajorAxis, + LengthType semiMinorAxis, + LengthType verticalAxis, + AngleType orientation +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union CenterGroup +{ + Pos pos, + PointProperty pointProperty +} +with { + variant "untagged"; + variant (pos) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; + variant (pointProperty) "namespace as 'http://www.opengis.net/gml' prefix 'gml'"; +}; + + + + + +type union Object_group +{ + XSD.AnyType object, + GML_group gML +} +with { + variant "untagged"; + variant (object) "name as '_Object'"; + variant (object) "form as qualified"; + variant (object) "abstract"; + variant (gML) "name as '_GML'"; +}; + + +type union GML_group +{ + AbstractGMLType gML, + Geometry_group geometry +} +with { + variant "untagged"; + variant (gML) "name as '_GML'"; + variant (gML) "form as qualified"; + variant (gML) "abstract"; + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryPropertyType +{ + Geometry_group geometry +} +with { + variant (geometry) "name as '_Geometry'"; +}; + + +type record GeometryArrayPropertyType +{ + record of Geometry_group geometry_list +} +with { + variant (geometry_list) "untagged"; + variant (geometry_list[-]) "name as '_Geometry'"; +}; + +type union Geometry_group +{ + AbstractGeometryType geometry, + GeometricPrimitive_group geometricPrimitive, + Ring_group ring +} +with { + variant "untagged"; + variant (geometry) "name as '_Geometry'"; + variant (geometry) "form as qualified"; + variant (geometry) "abstract"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (ring) "name as '_Ring'"; +}; + + +type union GeometricPrimitive_group +{ + AbstractGeometricPrimitiveType geometricPrimitive, + Curve_group curve, + Point point, + Solid_group solid, + Surface_group_1 surface +} +with { + variant "untagged"; + variant (geometricPrimitive) "name as '_GeometricPrimitive'"; + variant (geometricPrimitive) "form as qualified"; + variant (geometricPrimitive) "abstract"; + variant (curve) "name as '_Curve'"; + variant (point) "name as capitalized"; + variant (solid) "name as '_Solid'"; + variant (surface) "name as '_Surface'"; +}; + +type SolidType Solid +with { + variant "element"; +}; + + +type record SolidType +{ + NCNameList axisLabels optional, + XSD.String gid optional, + Id id optional, + XSD.PositiveInteger srsDimension optional, + XSD.AnyURI srsName optional, + NCNameList uomLabels optional, + SurfacePropertyType exterior optional +} +with { + variant (axisLabels) "attribute"; + variant (gid) "attribute"; + variant (id) "attribute"; + variant (srsDimension) "attribute"; + variant (srsName) "attribute"; + variant (uomLabels) "attribute"; +}; + + +type union Solid_group +{ + AbstractSolidType solid, + Ellipsoid ellipsoid, + Prism prism, + Solid solid_1, + Sphere sphere +} +with { + variant "untagged"; + variant (solid) "name as '_Solid'"; + variant (solid) "form as qualified"; + variant (solid) "abstract"; + variant (ellipsoid) "name as capitalized"; + variant (prism) "name as capitalized"; + variant (solid_1) "name as 'Solid'"; + variant (sphere) "name as capitalized"; +}; + + +type SurfacePropertyType SurfaceProperty +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record SurfacePropertyType +{ + Surface_group_1 surface +} +with { + variant (surface) "name as '_Surface'"; +}; + + +type union Surface_group_1 +{ + AbstractSurfaceType surface, + ArcBand arcBand, + Circle circle, + Ellipse ellipse, + Polygon polygon, + Surface_group surface_1 +} +with { + variant "untagged"; + variant (surface) "name as '_Surface'"; + variant (surface) "form as qualified"; + variant (surface) "abstract"; + variant (arcBand) "name as capitalized"; + variant (circle) "name as capitalized"; + variant (ellipse) "name as capitalized"; + variant (polygon) "name as capitalized"; + variant (surface_1) "name as 'Surface'"; +}; + + +} +with { + encode "XML"; + variant "namespace as 'http://www.opengis.net/pidflo/1.0' prefix 'gs'"; + variant "controlNamespace 'http://www.w3.org/2001/XMLSchema-instance' prefix 'xsi'"; + variant "elementFormQualified"; +} diff --git a/ttcn/patch_lib_sip_titan/module.mk b/ttcn/patch_lib_sip_titan/module.mk index c761093..fd0780a 100644 --- a/ttcn/patch_lib_sip_titan/module.mk +++ b/ttcn/patch_lib_sip_titan/module.mk @@ -1,26 +1,35 @@ sources := \ - ttcn/LibSip_Library.ttcn \ - ttcn/LibSip_Interface.ttcn \ - ttcn/LibSip_SDPTypes.ttcn \ - ttcn/LibSip_XMLTypes.ttcn \ - ttcn/LibSip_SimpleMsgSummaryTypes.ttcn \ - ttcn/LibSip_SIPTypesAndValues.ttcn \ - ttcn/LibSip_SMSFunctions.ttcn \ - ttcn/LibSip_Common.ttcn \ - ttcn/LibSip_SMSTemplates.ttcn \ - ttcn/LibSip_EncdecDeclarations.ttcn \ - ttcn/LibSip_SMSTypesAndValues.ttcn \ - ttcn/LibSip_MessageBodyTypes.ttcn \ - ttcn/LibSip_Steps.ttcn \ - ttcn/LibSip_PIXITS.ttcn \ - ttcn/LibSip_Templates.ttcn \ - ttcn/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ - ttcn/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ - ttcn/urn_3gpp_ns_cw_1_0.ttcn \ - ttcn/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ - ttcn/urn_ietf_params_xml_ns_common_policy.ttcn \ - ttcn/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ - ttcn/urn_ietf_params_xml_ns_conference_info.ttcn \ - ttcn/urn_ietf_params_xml_ns_reginfo.ttcn \ - ttcn/urn_ietf_params_xml_ns_resource_lists.ttcn \ - ttcn/urn_oma_xml_xdm_common_policy.ttcn + ttcn/LibSip_Library.ttcn \ + ttcn/LibSip_Interface.ttcn \ + ../patch_lib_sip_titan/LibSip_SDPTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_XMLTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSFunctions.ttcn \ + ../patch_lib_sip_titan/LibSip_Common.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSTemplates.ttcn \ + ../patch_lib_sip_titan/LibSip_EncdecDeclarations.ttcn \ + ../patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn \ + ../patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn \ + ../patch_lib_sip_titan/LibSip_Steps.ttcn \ + ../patch_lib_sip_titan/LibSip_PIXITS.ttcn \ + ../patch_lib_sip_titan/LibSip_Templates.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_comm_div_info.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_mcid.ttcn \ + ../patch_lib_sip_titan/urn_3gpp_ns_cw_1_0.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_pstn.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_common_policy.ttcn \ + ../patch_lib_sip_titan/http_uri_etsi_org_ngn_params_xml_simservs_xcap.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_conference_info.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_reginfo.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_resource_lists.ttcn \ + ../patch_lib_sip_titan/urn_oma_xml_xdm_common_policy.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_basicPolicy.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10.ttcn \ + ../patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf_geopriv10_civicAddr.ttcn \ + ../patch_lib_sip_titan/http_www_opengis_net_gml.ttcn \ + ../patch_lib_sip_titan/http_www_opengis_net_pidflo_1_0.ttcn \ + + +modules := ../../titan-test-system-framework/ttcn/LibXsd diff --git a/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn new file mode 100644 index 0000000..916fdca --- /dev/null +++ b/ttcn/patch_lib_sip_titan/urn_ietf_params_xml_ns_pidf.ttcn @@ -0,0 +1,177 @@ +/******************************************************************************* +* Copyright (c) 2000-2018 Ericsson Telecom AB +* +* XSD to TTCN-3 Translator version: CRL 113 200/6 R4B +* +* All rights reserved. This program and the accompanying materials +* are made available under the terms of the Eclipse Public License v2.0 +* which accompanies this distribution, and is available at +* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html +*******************************************************************************/ +// +// File: urn_ietf_params_xml_ns_pidf.ttcn +// Description: +// References: +// Rev: +// Prodnr: +// Updated: Tue Aug 7 08:36:53 2018 +// Contact: http://ttcn.ericsson.se +// +//////////////////////////////////////////////////////////////////////////////// +// Generated from file(s): +// - RFC3863_pidf.xsd +// /* xml version = "1.0" encoding = "UTF-8" */ +// /* targetnamespace = "urn:ietf:params:xml:ns:pidf" */ +//////////////////////////////////////////////////////////////////////////////// +// Modification header(s): +//----------------------------------------------------------------------------- +// Modified by: +// Modification date: +// Description: +// Modification contact: +//------------------------------------------------------------------------------ +//////////////////////////////////////////////////////////////////////////////// + + +module urn_ietf_params_xml_ns_pidf { + + +import from XSD all; + +import from urn_ietf_params_xml_ns_pidf_geopriv10 all; + +import from http_www_w3_org_XML_1998_namespace all; + + +const XSD.Boolean c_defaultForEmpty_1 := false; + + +/* This import brings in the XML language attribute xml:lang */ + + +type Presence_1 Presence +with { + variant "name as uncapitalized"; + variant "element"; +}; + + +type record Presence_1 +{ + XSD.AnyURI entity, + record of Tuple tuple_list, + record of Note note_list, + record of XSD.String elem_list +} +with { + variant "name as 'presence'"; + variant (entity) "attribute"; + variant (tuple_list) "untagged"; + variant (tuple_list[-]) "name as 'tuple'"; + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' +}; + + +type record Tuple +{ + XSD.ID id, + Status status, + record of XSD.String elem_list, + Contact contact optional, + record of Note note_list, + XSD.DateTime timestamp_ optional +} +with { + variant "name as uncapitalized"; + variant (id) "attribute"; + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified"; // , 'urn:ietf:params:xml:ns:pidf' + variant (note_list) "untagged"; + variant (note_list[-]) "name as 'note'"; +}; + + +type record Status +{ + Basic basic optional, + Geopriv_1 geopriv, + record of XSD.String elem_list +} +with { + variant "name as uncapitalized"; + variant (geopriv) "namespace as 'urn:ietf:params:xml:ns:pidf:geopriv10'" + variant (elem_list) "untagged"; + variant (elem_list[-]) "anyElement except unqualified, 'urn:ietf:params:xml:ns:pidf'"; +}; + + +type enumerated Basic +{ + closed, + open +} +with { + variant "name as uncapitalized"; +}; + + +type record Contact +{ + Qvalue priority optional, + XSD.AnyURI base +} +with { + variant "name as uncapitalized"; + variant (priority) "attribute"; + variant (base) "untagged"; +}; + + +type record Note +{ + Lang lang optional, + XSD.String base +} +with { + variant "name as uncapitalized"; + variant (lang) "namespace as 'http://www.w3.org/XML/1998/namespace' prefix 'xml'"; + variant (lang) "attribute"; + variant (base) "untagged"; +}; + + +/* xs:pattern value="0(.[0-9]{0,3})?"/> + Date: Fri, 9 Jun 2023 14:03:37 +0200 Subject: [PATCH 47/84] Update LibDiameter TITAN patch --- install.sh | 5 +- ttcn/AtsImsIot/module.mk | 2 + ttcn/patch_lib_common_titan/module.mk | 8 +- .../ttcn/LibCommon_BasicTypesAndValues.ttcn | 3 + ttcn/patch_lib_diameter_titan/module.mk | 16 +- .../ttcn/LibDiameter_Interface.ttcn | 96 - .../ttcn/LibDiameter_Steps.ttcn | 2017 -------- .../ttcn/LibDiameter_Templates.ttcn | 3849 --------------- .../ttcn/LibDiameter_TypesAndValues.ttcn | 794 +-- .../ttcn/LibDiameter_Types_Base_AVPs.ttcn | 1787 ++++--- .../ttcn/LibDiameter_Types_CxDx_AVPs.ttcn | 292 +- .../ttcn/LibDiameter_Types_Gx_AVPs.ttcn | 788 ++- .../ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 | 4260 +++++++++++++++++ .../ttcn/LibDiameter_Types_Rx_AVPs.ttcn | 413 +- .../ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 | 1160 ----- .../ttcn/LibDiameter_Types_S9_AVPs.ttcn | 289 -- .../ttcn/LibDiameter_Types_ShDh_AVPs.ttcn | 26 + 17 files changed, 6311 insertions(+), 9494 deletions(-) delete mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn delete mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn delete mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 delete mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 delete mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn diff --git a/install.sh b/install.sh index c1bb886..439e766 100755 --- a/install.sh +++ b/install.sh @@ -20,11 +20,8 @@ cd ./ttcn/LibHttp ln -sf module_emtel.mk module.mk cd $BASE_PATH -ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ -cp ./ttcn/patch_lib_common_titan/ttcn/*.ttcn ./ttcn/LibCommon/ttcn/ -cp ./ttcn/patch_lib_ims_titan/ttcn/*.ttcn ./ttcn/LibIms/ttcn/ +ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/\ ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ -cp ./ttcn/patch_lib_sip_titan/*.ttcn ./ttcn/LibSip/ttcn/ ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/ ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter ln -f ./ttcn/patch_lib_msrp_titan/module.mk ./ttcn/LibMsrp diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index e98312a..05d8125 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -24,6 +24,8 @@ sources := \ AtsImsIot_TP_behavior_MW_PS.ttcn \ AtsImsIot_TP_behavior_MW_EC.ttcn \ AtsImsIot_TP_behavior_MW_EB.ttcn \ + AtsImsIot_TP_behavior_MM.ttcn \ + AtsImsIot_TP_behavior_ML.ttcn \ AtsImsIot_TP_behavior_S6A.ttcn \ AtsImsIot_PIXITS.ttcn \ AtsImsIot_TD_INI.ttcn \ diff --git a/ttcn/patch_lib_common_titan/module.mk b/ttcn/patch_lib_common_titan/module.mk index 3b3b660..905b488 100644 --- a/ttcn/patch_lib_common_titan/module.mk +++ b/ttcn/patch_lib_common_titan/module.mk @@ -1,9 +1,9 @@ sources := \ ttcn/LibCommon_AbstractData.ttcn \ - ttcn/LibCommon_BasicTypesAndValues.ttcn \ - ttcn/LibCommon_DataStrings.ttcn \ - ttcn/LibCommon_Sync.ttcn \ ttcn/LibCommon_TextStrings.ttcn \ ttcn/LibCommon_Time.ttcn \ - ttcn/LibCommon_VerdictControl.ttcn + ttcn/LibCommon_VerdictControl.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_DataStrings.ttcn \ + ../patch_lib_common_titan/ttcn/LibCommon_Sync.ttcn \ diff --git a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn index 9b5477d..14f8f57 100644 --- a/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn +++ b/ttcn/patch_lib_common_titan/ttcn/LibCommon_BasicTypesAndValues.ttcn @@ -170,6 +170,8 @@ const integer c_int31Max := 1073741823; const integer c_int32Min := -2147483648; const integer c_int32Max := 2147483647; + const integer c_int64Min := -9223372036854775808; + const integer c_int64Max := 9223372036854775807; type integer Int; type integer Int1 (c_int1Min .. c_int1Max) with { variant "1 bit"}; @@ -204,6 +206,7 @@ type integer Int30 (c_int30Min .. c_int30Max) with { variant "30 bit"}; type integer Int31 (c_int31Min .. c_int31Max) with { variant "31 bit"}; type integer Int32 (c_int32Min .. c_int32Max) with { variant "32 bit"}; + type integer Int64 (c_int64Min .. c_int64Max) with { variant "64 bit"}; } // end group signedIntegerDefintions diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index 74239b0..b2519be 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -1,15 +1,15 @@ sources := \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ - ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 \ - ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ ttcn/LibDiameter_PIXITS.ttcn \ + ttcn/LibDiameter_Interface.ttcn \ + ttcn/LibDiameter_Steps.ttcn \ + ttcn/LibDiameter_Templates.ttcn \ + ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ + ttcn/LibDiameter_Types_S9_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn deleted file mode 100644 index e9ecc48..0000000 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Interface.ttcn +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @author STF 434 - * @version $Id$ - * @desc This module provides the types used by the test component - * for DIAMETER tests. - */ - -module LibDiameter_Interface -{ - //LibCommon - import from LibCommon_Sync {type SelfSyncComp; - modulepar PX_TSYNC_TIME_LIMIT;}; - import from LibCommon_BasicTypesAndValues all; - - //LibDiameter - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Rx_AVPs {type Media_Component_Description_AVP;}; - import from LibDiameter_TypesAndValues all; - import from LibDiameter_PIXITS all; - -// type component BaseSyncComp { -// port SyncPort syncPort; -// timer tc_sync := PX_TSYNC_TIME_LIMIT; -// } - - type port LowerLayerPPort message { - inout Lower_Layer_Primitive}; //LLP - - type port DiameterPort message { - inout DIAMETER_MSG}; //DIAMETER_MSG - - type component DiameterComponent extends SelfSyncComp - { - //port - port LowerLayerPPort LLPP; - port DiameterPort DIAMP; - - //global variables - var charstring vc_ETS_address := ""; //defined in init - var charstring vc_ETS_address2 := ""; //defined in init - var integer vc_ETS_port := 3868; //defined in init - var integer vc_ETS_port2 := 3869; //defined in init - var charstring vc_SUT_address := ""; //defined in init - var integer vc_SUT_port := 3868; //defined in init - var integer vc_ETS_conn := 0; //used if LLP primitives are in use - var DIAMETER_MSG vc_sendDiamMsg ; - var DIAMETER_MSG vc_recvDiamMsg ; - var DIAMETER_MSG vc_recvDiamMsgDefault ; //global variable defined to save Dimeter message received within default altstep - - //init of values at component started - var UInt32 vc_send_hopid:=0;// hex2int('00000100'H); - var UInt32 vc_send_endid:=0;// hex2int('01000000'H); - var UInt32 vc_recv_hopid:=0; - var UInt32 vc_recv_endid:=0; - - var UInt32 vc_recv_cC_Request_Number:= 0; - - var template (value) Session_Id_AVP vc_sessionId; - var template (value) Session_Id_AVP vc_sessionId2; - // Origin Host of the test system - var template (value) Origin_Host_AVP vc_originHost; - var template (value) Origin_Host_AVP vc_originHost2; - var template (value) Origin_Realm_AVP vc_originRealm; - // Origin Host of the IUT - var template (value) Origin_Host_AVP vc_originHost_IUT; - var template (value) Origin_Realm_AVP vc_originRealm_IUT; - var Address vc_hostIPAddress; //Address of CER for hostIPAddress AVP - var Address vc_hostIPAddress2; //Address of CER for hostIPAddress AVP - - var template (value) Destination_Host_AVP vc_destinationHost; - var template (value) Destination_Realm_AVP vc_destinationRealm; - - var template (value) Destination_Host_AVP vc_destinationHost_IUT; - var template (value) Destination_Realm_AVP vc_destinationRealm_IUT; - - var template (value) Accounting_Record_Number_AVP vc_accountingRecordNumber; - -// var UTF8String vc_serverName := "NULL"; - - var template Termination_Cause_AVP vc_terminationCause; - var template Result_Code_AVP vc_resultCode; - var template Media_Component_Description_AVP vc_mediaComponentDescription; - - //general timers - timer tc_wait := PX_DIAMETER_TWAIT; - timer tc_delay := 0.3; // delay next Request - - // variables for storing default references - var default vc_default_diameter; - var default vc_def_catchSyncStop_diameter; - - var boolean vc_isAF := false; - var boolean vc_serverStop:=false; - } // end DiameterComponent - -} // end module LibDiameter_Interface \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn deleted file mode 100644 index 5c88724..0000000 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Steps.ttcn +++ /dev/null @@ -1,2017 +0,0 @@ -/** - * @author STF 434 - * @version $Id$ - * @desc This module provides functions used in DIAMETER - */ - -module LibDiameter_Steps -{ - //LibCommon - import from LibCommon_Sync all; - import from LibCommon_VerdictControl {type FncRetCode; - function f_setVerdict;}; - import from LibCommon_BasicTypesAndValues all; - //LibDiameter - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_TypesAndValues all; - import from LibDiameter_Templates all; - import from LibDiameter_Interface all; - import from LibDiameter_PIXITS all; - -group CommonFunctions{ - - /** - * - * @desc f_gtZero, return true if value of p_int greater than 0 - * @param p_int - integer value - */ - function f_gtZero(integer p_int) - return boolean - { - if (p_int > 0){ - return true; - } - else{ - return false; - } - } - - /** - * - * @desc f_Inc, return incremented value of p_int 0 - * @param p_int - integer value - */ - function f_inc( inout UInt32 p_int) - return UInt32 - { - p_int:=p_int+1; - return p_int; - } - -}//end group CommonFunctions - -group AwaitingMessage { - - /** - * - * @desc receive DIAMETER message - * @param p_diameterMSG template of the message to be received - */ - function f_awaitingDiameterMsg(in template DIAMETER_MSG p_diameterMSG) runs on DiameterComponent - { - //var Lower_Layer_Primitive v_MSG; - var DIAMETER_MSG v_MSG; - - if (PX_DIAM_LLP_ENABLED and f_gtZero(vc_ETS_conn)) - { - tc_wait.start; - alt - { - []DIAMP.receive(p_diameterMSG) -> value v_MSG - { - tc_wait.stop; - vc_recvDiamMsg := v_MSG; - } - [] tc_wait.timeout { - setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); - //Stop the component in case of timeout - all timer.stop; - f_componentStop(); - } - } - } - else - { - tc_wait.start; - alt - { - []DIAMP.receive(p_diameterMSG) -> value v_MSG - { - tc_wait.stop; - vc_recvDiamMsg := v_MSG; - } - [] tc_wait.timeout { - setverdict(fail,"*** " & __SCOPE__ & ": INCONC: Message was not received in due time. ***"); - //Stop the component in case of timeout - all timer.stop; - f_componentStop(); - } - } - } - } // end f_awaitingDiameterMsg - - /** - * - * @desc receive DIAMETER message - * @param p_diameterMSG1 template of the message 1 to be received - * @param p_diameterMSG2 template of the message 2 to be received - */ - function f_awaiting2DiameterMsgs ( in template DIAMETER_MSG p_diameterMSG1, in template DIAMETER_MSG p_diameterMSG2 ) runs on DiameterComponent - { - //var Lower_Layer_Primitive v_MSG; - var DIAMETER_MSG v_MSG; - - tc_wait.start; - alt { - []DIAMP.receive(p_diameterMSG1) -> value v_MSG { - tc_wait.stop; - vc_recvDiamMsg := v_MSG; } - []DIAMP.receive(p_diameterMSG2) -> value v_MSG { - tc_wait.stop; - vc_recvDiamMsg := v_MSG; } - [] tc_wait.timeout { - setverdict(fail,"*** " & __SCOPE__ & ": FAIL: Message was not received in due time. ***") } - } - } // end f_awaiting2DiameterMsgs - - function f_awaiting_CER(template (present)CER_MSG p_CER) runs on DiameterComponent - { - f_awaitingDiameterMsg({cER_MSG:=p_CER}); - //store specific parameter for CER if needed - if (ischosen (vc_recvDiamMsg.cER_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.cER_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.cER_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_CEA(template (present)CEA_MSG p_CEA) runs on DiameterComponent - { - f_awaitingDiameterMsg({cEA_MSG:=p_CEA}); - //store specific parameter for CER if needed - } - - function f_awaiting_DWR(template (present)DWR_MSG p_DWR) runs on DiameterComponent - { - f_awaitingDiameterMsg({dWR_MSG:=p_DWR}); - //store specific parameter for DWR if needed - if (ischosen (vc_recvDiamMsg.dWR_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.dWR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.dWR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_DWA(template (present)DWA_MSG p_DWA) runs on DiameterComponent - { - f_awaitingDiameterMsg({dWA_MSG:=p_DWA}); - //store specific parameter for DWA if needed - } - - function f_awaiting_DPR(template (present)DPR_MSG p_DPR) runs on DiameterComponent - { - f_awaitingDiameterMsg({dPR_MSG:=p_DPR}); - //store specific parameter for DPR if needed - if (ischosen (vc_recvDiamMsg.dPR_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.dPR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.dPR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_DPA(template (present)DPA_MSG p_DPA) runs on DiameterComponent - { - f_awaitingDiameterMsg({dPA_MSG:=p_DPA}); - //store specific parameter for DPA if needed - } - - function f_awaiting_AAR(template (present)AAR_MSG p_AAR) runs on DiameterComponent - { - f_awaitingDiameterMsg({aAR_MSG:=p_AAR}); - //store specific parameter for AAR if needed - if (ischosen (vc_recvDiamMsg.aAR_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.aAR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.aAR_MSG.header.endid; - vc_sessionId := vc_recvDiamMsg.aAR_MSG.session_Id; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_AAA(template (present)AAA_MSG p_AAA) runs on DiameterComponent - { - f_awaitingDiameterMsg({aAA_MSG:=p_AAA}); - //store specific parameter for AAA if needed - } - - function f_awaiting_STR(template (present)STR_MSG p_STR) runs on DiameterComponent - { - f_awaitingDiameterMsg({sTR_MSG:=p_STR}); - //store specific parameter for STR if needed - if (ischosen (vc_recvDiamMsg.sTR_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.sTR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.sTR_MSG.header.endid; - vc_sessionId := vc_recvDiamMsg.sTR_MSG.session_Id; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_STA(template (present)STA_MSG p_STA) runs on DiameterComponent - { - f_awaitingDiameterMsg({sTA_MSG:=p_STA}); - //store specific parameter for STA if needed - } - - function f_awaiting_ASR(template (present)ASR_MSG p_ASR) runs on DiameterComponent - { - f_awaitingDiameterMsg({aSR_MSG:=p_ASR}); - //store specific parameter for ASR if needed - if (ischosen (vc_recvDiamMsg.aSR_MSG)){ - vc_recv_hopid:= vc_recvDiamMsg.aSR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.aSR_MSG.header.endid; - vc_sessionId := vc_recvDiamMsg.aSR_MSG.session_Id; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_ASA(template (present)ASA_MSG p_ASA) runs on DiameterComponent - { - f_awaitingDiameterMsg({aSA_MSG:=p_ASA}); - //store specific parameter for ASA if needed - } - - - function f_awaiting_RAR(template (present)RAR_MSG p_RAR) runs on DiameterComponent - { - f_awaitingDiameterMsg({rAR_MSG:=p_RAR}); - //store specific parameter for RAR if needed - if (ischosen (vc_recvDiamMsg.rAR_MSG)){ - vc_sessionId := vc_recvDiamMsg.rAR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.rAR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.rAR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - - function f_awaiting_RAA(template (present)RAA_MSG p_RAA) runs on DiameterComponent - { - f_awaitingDiameterMsg({rAA_MSG:=p_RAA}); - //store specific parameter for RAA if needed - } - - function f_awaiting_2RAA(template (present)RAA_MSG p_RAA1, template (present)RAA_MSG p_RAA2) runs on DiameterComponent - { - f_awaiting2DiameterMsgs({rAA_MSG:=p_RAA1}, {rAA_MSG:=p_RAA2}); - } - - function f_awaiting_CCR(template (present)CCR_MSG p_CCR) runs on DiameterComponent - { - f_awaitingDiameterMsg({cCR_MSG:=p_CCR}); - //store specific parameter for CCR if needed - if (ischosen (vc_recvDiamMsg.cCR_MSG)){ - vc_sessionId := vc_recvDiamMsg.cCR_MSG.session_Id; - vc_recv_hopid := vc_recvDiamMsg.cCR_MSG.header.hopid; - vc_recv_endid := vc_recvDiamMsg.cCR_MSG.header.endid; - vc_recv_cC_Request_Number := vc_recvDiamMsg.cCR_MSG.cCR_Body.cC_Request_Number.aVP_Data; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_CCA(template (present)CCA_MSG p_CCA) runs on DiameterComponent - { - f_awaitingDiameterMsg({cCA_MSG:=p_CCA}); - //store specific parameter for CCA if needed - } - - function f_awaiting_ACR(template (present)ACR_MSG p_ACR) runs on DiameterComponent - { - f_awaitingDiameterMsg({aCR_MSG:=p_ACR}); - //store specific parameter for ACR if needed - if (ischosen (vc_recvDiamMsg.aCR_MSG)){ - vc_sessionId := vc_recvDiamMsg.aCR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.aCR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.aCR_MSG.header.endid; - vc_accountingRecordNumber := vc_recvDiamMsg.aCR_MSG.aCR_Body.accounting_Record_Number; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_ACA(template (present)ACA_MSG p_ACA) runs on DiameterComponent - { - f_awaitingDiameterMsg({aCA_MSG:=p_ACA}); - //store specific parameter for ACA if needed - } - - function f_awaiting_UAR(template (present)UAR_MSG p_UAR) runs on DiameterComponent - { - f_awaitingDiameterMsg({uAR_MSG:=p_UAR}); - //store specific parameter for UAR if needed - if (ischosen (vc_recvDiamMsg.uAR_MSG)){ - vc_sessionId := vc_recvDiamMsg.uAR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.uAR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.uAR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_UAA(template (present)UAA_MSG p_UAA) runs on DiameterComponent - { - f_awaitingDiameterMsg({uAA_MSG:=p_UAA}); - //store specific parameter for UAA if needed - } - - function f_awaiting_UDR(template (present)UDR_MSG p_UDR) runs on DiameterComponent - { - f_awaitingDiameterMsg({uDR_MSG:=p_UDR}); - //store specific parameter for UDR if needed - if (ischosen (vc_recvDiamMsg.uDR_MSG)){ - vc_sessionId := vc_recvDiamMsg.uDR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.uDR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.uDR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_UDA(template (present)UDA_MSG p_UDA) runs on DiameterComponent - { - f_awaitingDiameterMsg({uDA_MSG:=p_UDA}); - //store specific parameter for UDA if needed - } - - function f_awaiting_SAR(template (present)SAR_MSG p_SAR) runs on DiameterComponent - { - f_awaitingDiameterMsg({sAR_MSG:=p_SAR}); - //store specific parameter for SAR if needed - if (ischosen (vc_recvDiamMsg.sAR_MSG)){ - vc_sessionId := vc_recvDiamMsg.sAR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.sAR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.sAR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_SAA(template (present)SAA_MSG p_SAA) runs on DiameterComponent - { - f_awaitingDiameterMsg({sAA_MSG:=p_SAA}); - //store specific parameter for SAA if needed - } - - function f_awaiting_LIR(template (present)LIR_MSG p_LIR) runs on DiameterComponent - { - f_awaitingDiameterMsg({lIR_MSG:=p_LIR}); - //store specific parameter for LIR if needed - if (ischosen (vc_recvDiamMsg.lIR_MSG)){ - vc_sessionId := vc_recvDiamMsg.lIR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.lIR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.lIR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_LIA(template (present)LIA_MSG p_LIA) runs on DiameterComponent - { - f_awaitingDiameterMsg({lIA_MSG:=p_LIA}); - //store specific parameter for LIA if needed - } - - function f_awaiting_MAR(template (present)MAR_MSG p_MAR) runs on DiameterComponent - { - f_awaitingDiameterMsg({mAR_MSG:=p_MAR}); - //store specific parameter for MAR if needed - if (ischosen (vc_recvDiamMsg.mAR_MSG)){ - vc_sessionId := vc_recvDiamMsg.mAR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.mAR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.mAR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_MAA(template (present)MAA_MSG p_MAA) runs on DiameterComponent - { - f_awaitingDiameterMsg({mAA_MSG:=p_MAA}); - //store specific parameter for MAA if needed - } - - function f_awaiting_RTR(template (present)RTR_MSG p_RTR) runs on DiameterComponent - { - f_awaitingDiameterMsg({rTR_MSG:=p_RTR}); - //store specific parameter for RTR if needed - - if (ischosen (vc_recvDiamMsg.rTR_MSG)){ - vc_sessionId := vc_recvDiamMsg.rTR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.rTR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.rTR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - - } - - function f_awaiting_RTA(template (present)RTA_MSG p_RTA) runs on DiameterComponent - { - f_awaitingDiameterMsg({rTA_MSG:=p_RTA}); - //store specific parameter for RTA if needed - } - - function f_awaiting_PNR(template (present)PNR_MSG p_PNR) runs on DiameterComponent - { - f_awaitingDiameterMsg({pNR_MSG:=p_PNR}); - //store specific parameter for PNR if needed - if (ischosen (vc_recvDiamMsg.pNR_MSG)){ - vc_sessionId := vc_recvDiamMsg.pNR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.pNR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.pNR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_PNA(template (present)PNA_MSG p_PNA) runs on DiameterComponent - { - f_awaitingDiameterMsg({pNA_MSG:=p_PNA}); - //store specific parameter for PNA if needed - } - - function f_awaiting_PPR(template (present)PPR_MSG p_PPR) runs on DiameterComponent - { - f_awaitingDiameterMsg({pPR_MSG:=p_PPR}); - //store specific parameter for PPR if needed - if (ischosen (vc_recvDiamMsg.pPR_MSG)){ - vc_sessionId := vc_recvDiamMsg.pPR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.pPR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.pPR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_PPA(template (present)PPA_MSG p_PPA) runs on DiameterComponent - { - f_awaitingDiameterMsg({pPA_MSG:=p_PPA}); - //store specific parameter for PPA if needed - } - - function f_awaiting_PUR(template (present)PUR_MSG p_PUR) runs on DiameterComponent - { - f_awaitingDiameterMsg({pUR_MSG:=p_PUR}); - //store specific parameter for PUR if needed - if (ischosen (vc_recvDiamMsg.pUR_MSG)){ - vc_sessionId := vc_recvDiamMsg.pUR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.pUR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.pUR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_PUA(template (present)PUA_MSG p_PUA) runs on DiameterComponent - { - f_awaitingDiameterMsg({pUA_MSG:=p_PUA}); - //store specific parameter for PUA if needed - } - - function f_awaiting_ULR(template (present)ULR_MSG p_ULR) runs on DiameterComponent - { - f_awaitingDiameterMsg({uLR_MSG:=p_ULR}); - //store specific parameter for ULR if needed - if (ischosen (vc_recvDiamMsg.uLR_MSG)){ - vc_sessionId := vc_recvDiamMsg.uLR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.uLR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.uLR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_ULA(template (present)ULA_MSG p_ULA) runs on DiameterComponent - { - f_awaitingDiameterMsg({uLA_MSG:=p_ULA}); - //store specific parameter for ULA if needed - } - - function f_awaiting_AIR(template (present)AIR_MSG p_AIR) runs on DiameterComponent - { - f_awaitingDiameterMsg({aIR_MSG:=p_AIR}); - //store specific parameter for AIR if needed - if (ischosen (vc_recvDiamMsg.aIR_MSG)){ - vc_sessionId := vc_recvDiamMsg.aIR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.aIR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.aIR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_AIA(template (present)AIA_MSG p_AIA) runs on DiameterComponent - { - f_awaitingDiameterMsg({aIA_MSG:=p_AIA}); - //store specific parameter for AIA if needed - } - - function f_awaiting_CLR(template (present)CLR_MSG p_CLR) runs on DiameterComponent - { - f_awaitingDiameterMsg({cLR_MSG:=p_CLR}); - //store specific parameter for CLR if needed - if (ischosen (vc_recvDiamMsg.cLR_MSG)){ - vc_sessionId := vc_recvDiamMsg.cLR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.cLR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.cLR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_CLA(template (present)CLA_MSG p_CLA) runs on DiameterComponent - { - f_awaitingDiameterMsg({cLA_MSG:=p_CLA}); - //store specific parameter for CLA if needed - } - - function f_awaiting_IDR(template (present)IDR_MSG p_IDR) runs on DiameterComponent - { - f_awaitingDiameterMsg({iDR_MSG:=p_IDR}); - //store specific parameter for IDR if needed - if (ischosen (vc_recvDiamMsg.iDR_MSG)){ - vc_sessionId := vc_recvDiamMsg.iDR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.iDR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.iDR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_IDA(template (present)IDA_MSG p_IDA) runs on DiameterComponent - { - f_awaitingDiameterMsg({iDA_MSG:=p_IDA}); - //store specific parameter for IDA if needed - } - - function f_awaiting_DSR(template (present)DSR_MSG p_DSR) runs on DiameterComponent - { - f_awaitingDiameterMsg({dSR_MSG:=p_DSR}); - //store specific parameter for DSR if needed - if (ischosen (vc_recvDiamMsg.dSR_MSG)){ - vc_sessionId := vc_recvDiamMsg.dSR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.dSR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.dSR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_DSA(template (present)DSA_MSG p_DSA) runs on DiameterComponent - { - f_awaitingDiameterMsg({dSA_MSG:=p_DSA}); - //store specific parameter for DSA if needed - } - - function f_awaiting_PUER(template (present)PUER_MSG p_PUER) runs on DiameterComponent - { - f_awaitingDiameterMsg({pUER_MSG:=p_PUER}); - //store specific parameter for PUER if needed - if (ischosen (vc_recvDiamMsg.pUER_MSG)){ - vc_sessionId := vc_recvDiamMsg.pUER_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.pUER_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.pUER_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_PUEA(template (present)PUEA_MSG p_PUEA) runs on DiameterComponent - { - f_awaitingDiameterMsg({pUEA_MSG:=p_PUEA}); - //store specific parameter for PUEA if needed - } - - function f_awaiting_RSR(template (present)RSR_MSG p_RSR) runs on DiameterComponent - { - f_awaitingDiameterMsg({rSR_MSG:=p_RSR}); - //store specific parameter for RSR if needed - if (ischosen (vc_recvDiamMsg.rSR_MSG)){ - vc_sessionId := vc_recvDiamMsg.rSR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.rSR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.rSR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_RSA(template (present)RSA_MSG p_RSA) runs on DiameterComponent - { - f_awaitingDiameterMsg({rSA_MSG:=p_RSA}); - //store specific parameter for RSA if needed - } - - function f_awaiting_NOR(template (present)NOR_MSG p_NOR) runs on DiameterComponent - { - f_awaitingDiameterMsg({nOR_MSG:=p_NOR}); - //store specific parameter for NOR if needed - if (ischosen (vc_recvDiamMsg.nOR_MSG)){ - vc_sessionId := vc_recvDiamMsg.nOR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.nOR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.nOR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_NOA(template (present)NOA_MSG p_NOA) runs on DiameterComponent - { - f_awaitingDiameterMsg({nOA_MSG:=p_NOA}); - //store specific parameter for NOA if needed - } - - function f_awaiting_SNR(template (present)SNR_MSG p_SNR) runs on DiameterComponent - { - f_awaitingDiameterMsg({sNR_MSG:=p_SNR}); - //store specific parameter for SAR if needed - if (ischosen (vc_recvDiamMsg.sNR_MSG)){ - vc_sessionId := vc_recvDiamMsg.sNR_MSG.session_Id; - vc_recv_hopid:= vc_recvDiamMsg.sNR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsg.sNR_MSG.header.endid; - } else - { - log("WARNING: " & __SCOPE__ & "vc_recvDiamMsg different message as expected:", vc_recvDiamMsg); - } - } - - function f_awaiting_SNA(template (present)SNA_MSG p_SNA) runs on DiameterComponent - { - f_awaitingDiameterMsg({sNA_MSG:=p_SNA}); - //store specific parameter for SAA if needed - } - -} // end AwaitingMessage - -group SendMessage { - - /** - * - * @desc send DIAMETER message - * @param p_diameterMSG template of the message to be sent - */ - function f_sendDiameterMsg(template (value) DIAMETER_MSG p_diameterMSG) runs on DiameterComponent - { - - if (PX_DIAM_LLP_ENABLED) - { - if(f_gtZero(vc_ETS_conn)) - { - f_Diameter_Set_Headers(p_diameterMSG); - DIAMP.send( p_diameterMSG); - } - else - { - log("Please check configuration!!! Send of DIAMETER message unsucessfull!"); - f_setVerdict (e_error); - } - } - else - { - f_Diameter_Set_Headers(p_diameterMSG); - DIAMP.send( p_diameterMSG); - } - }//end f_sendDiameterMsg - - function f_send_CER(template (value) CER_MSG p_CER) runs on DiameterComponent - { - //set specific parameter for CER if needed - - f_sendDiameterMsg({cER_MSG:=p_CER}); - } - - function f_send_CEA(template (value) CEA_MSG p_CEA) runs on DiameterComponent - { - //set specific parameter for CEA if needed - - f_sendDiameterMsg({cEA_MSG:=p_CEA}); - } - - function f_send_DWR(template (value) DWR_MSG p_DWR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for DWR if needed - - f_sendDiameterMsg({dWR_MSG:=p_DWR}); - } - - function f_send_DWA(template (value) DWA_MSG p_DWA) runs on DiameterComponent - { - //set specific parameter for DWA if needed - - f_sendDiameterMsg({dWA_MSG:=p_DWA}); - } - - function f_send_DPR(template (value) DPR_MSG p_DPR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for DPR if needed - - f_sendDiameterMsg({dPR_MSG:=p_DPR}); - } - - function f_send_DPA(template (value) DPA_MSG p_DPA) runs on DiameterComponent - { - //set specific parameter for DPA if needed - - f_sendDiameterMsg({dPA_MSG:=p_DPA}); - } - - function f_send_AAR(template (value) AAR_MSG p_AAR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for AAR if needed - - f_sendDiameterMsg({aAR_MSG:=p_AAR}); - } - - function f_send_AAA(template (value) AAA_MSG p_AAA) runs on DiameterComponent - { - //set specific parameter for AAA if needed - - f_sendDiameterMsg({aAA_MSG:=p_AAA}); - } - - function f_send_STR(template (value) STR_MSG p_STR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for STR if needed - - f_sendDiameterMsg({sTR_MSG:=p_STR}); - } - - function f_send_STA(template (value) STA_MSG p_STA) runs on DiameterComponent - { - //set specific parameter for STA if needed - - f_sendDiameterMsg({sTA_MSG:=p_STA}); - } - - function f_send_ASR(template (value) ASR_MSG p_ASR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for ASR if needed - - f_sendDiameterMsg({aSR_MSG:=p_ASR}); - } - - function f_send_ASA(template (value) ASA_MSG p_ASA) runs on DiameterComponent - { - //set specific parameter for ASA if needed - - f_sendDiameterMsg({aSA_MSG:=p_ASA}); - } - - function f_send_RAR(template (value) RAR_MSG p_RAR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for RAR if needed - - f_sendDiameterMsg({rAR_MSG:=p_RAR}); - } - - function f_send_RAA(template (value) RAA_MSG p_RAA) runs on DiameterComponent - { - //set specific parameter for RAA if needed - - f_sendDiameterMsg({rAA_MSG:=p_RAA}); - } - - function f_send_CCR(template (value) CCR_MSG p_CCR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for CCR if needed - - f_sendDiameterMsg({cCR_MSG:=p_CCR}); - } - - function f_send_CCA(template (value) CCA_MSG p_CCA) runs on DiameterComponent - { - //set specific parameter for CCA if needed - - f_sendDiameterMsg({cCA_MSG:=p_CCA}); - } - - function f_send_ACR(template (value) ACR_MSG p_ACR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for ACR if needed - - f_sendDiameterMsg({aCR_MSG:=p_ACR}); - } - - function f_send_ACA(template (value) ACA_MSG p_ACA) runs on DiameterComponent - { - //set specific parameter for ACA if needed - - f_sendDiameterMsg({aCA_MSG:=p_ACA}); - } - - function f_send_UAR(template (value) UAR_MSG p_UAR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for UAR if needed - - f_sendDiameterMsg({uAR_MSG:=p_UAR}); - } - - function f_send_UAA(template (value) UAA_MSG p_UAA) runs on DiameterComponent - { - //set specific parameter for UAA if needed - - f_sendDiameterMsg({uAA_MSG:=p_UAA}); - } - - function f_send_UDR(template (value) UDR_MSG p_UDR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for UDR if needed - - f_sendDiameterMsg({uDR_MSG:=p_UDR}); - } - - function f_send_UDA(template (value) UDA_MSG p_UDA) runs on DiameterComponent - { - //set specific parameter for UDA if needed - - f_sendDiameterMsg({uDA_MSG:=p_UDA}); - } - - function f_send_SAR(template (value) SAR_MSG p_SAR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for SAR if needed - - f_sendDiameterMsg({sAR_MSG:=p_SAR}); - } - - function f_send_SAA(template (value) SAA_MSG p_SAA) runs on DiameterComponent - { - //set specific parameter for SAA if needed - - f_sendDiameterMsg({sAA_MSG:=p_SAA}); - } - - function f_send_LIR(template (value) LIR_MSG p_LIR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for LIR if needed - - f_sendDiameterMsg({lIR_MSG:=p_LIR}); - } - - function f_send_LIA(template (value) LIA_MSG p_LIA) runs on DiameterComponent - { - //set specific parameter for LIA if needed - - f_sendDiameterMsg({lIA_MSG:=p_LIA}); - } - - function f_send_MAR(template (value) MAR_MSG p_MAR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for MAR if needed - - f_sendDiameterMsg({mAR_MSG:=p_MAR}); - } - - function f_send_MAA(template (value) MAA_MSG p_MAA) runs on DiameterComponent - { - //set specific parameter for MAA if needed - - f_sendDiameterMsg({mAA_MSG:=p_MAA}); - } - - function f_send_RTR(template (value) RTR_MSG p_RTR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for RTR if needed - - f_sendDiameterMsg({rTR_MSG:=p_RTR}); - } - - function f_send_RTA(template (value) RTA_MSG p_RTA) runs on DiameterComponent - { - //set specific parameter for RTA if needed - - f_sendDiameterMsg({rTA_MSG:=p_RTA}); - } - - function f_send_PNR(template (value) PNR_MSG p_PNR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for PNR if needed - - f_sendDiameterMsg({pNR_MSG:=p_PNR}); - } - - function f_send_PNA(template (value) PNA_MSG p_PNA) runs on DiameterComponent - { - //set specific parameter for PNA if needed - - f_sendDiameterMsg({pNA_MSG:=p_PNA}); - } - - function f_send_PPR(template (value) PPR_MSG p_PPR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for PPR if needed - - f_sendDiameterMsg({pPR_MSG:=p_PPR}); - } - - function f_send_PPA(template (value) PPA_MSG p_PPA) runs on DiameterComponent - { - //set specific parameter for PPA if needed - - f_sendDiameterMsg({pPA_MSG:=p_PPA}); - } - - function f_send_PUR(template (value) PUR_MSG p_PUR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for PUR if needed - - f_sendDiameterMsg({pUR_MSG:=p_PUR}); - } - - function f_send_PUA(template (value) PUA_MSG p_PUA) runs on DiameterComponent - { - //set specific parameter for PUA if needed - - f_sendDiameterMsg({pUA_MSG:=p_PUA}); - } - - function f_send_ULR(template (value) ULR_MSG p_ULR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for ULR if needed - - f_sendDiameterMsg({uLR_MSG:=p_ULR}); - } - - function f_send_ULA(template (value) ULA_MSG p_ULA) runs on DiameterComponent - { - //set specific parameter for ULA if needed - - f_sendDiameterMsg({uLA_MSG:=p_ULA}); - } - - function f_send_AIR(template (value) AIR_MSG p_AIR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for AIR if needed - - f_sendDiameterMsg({aIR_MSG:=p_AIR}); - } - - function f_send_AIA(template (value) AIA_MSG p_AIA) runs on DiameterComponent - { - //set specific parameter for AIA if needed - - f_sendDiameterMsg({aIA_MSG:=p_AIA}); - } - - function f_send_CLR(template (value) CLR_MSG p_CLR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for CLR if needed - - f_sendDiameterMsg({cLR_MSG:=p_CLR}); - } - - function f_send_CLA(template (value) CLA_MSG p_CLA) runs on DiameterComponent - { - //set specific parameter for CLA if needed - - f_sendDiameterMsg({cLA_MSG:=p_CLA}); - } - - function f_send_IDR(template (value) IDR_MSG p_IDR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for IDR if needed - - f_sendDiameterMsg({iDR_MSG:=p_IDR}); - } - - function f_send_IDA(template (value) IDA_MSG p_IDA) runs on DiameterComponent - { - //set specific parameter for IDA if needed - - f_sendDiameterMsg({iDA_MSG:=p_IDA}); - } - - function f_send_DSR(template (value) DSR_MSG p_DSR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for DSR if needed - - f_sendDiameterMsg({dSR_MSG:=p_DSR}); - } - - function f_send_DSA(template (value) DSA_MSG p_DSA) runs on DiameterComponent - { - //set specific parameter for DSA if needed - - f_sendDiameterMsg({dSA_MSG:=p_DSA}); - } - - function f_send_PUER(template (value) PUER_MSG p_PUER) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for PUER if needed - - f_sendDiameterMsg({pUER_MSG:=p_PUER}); - } - - function f_send_PUEA(template (value) PUEA_MSG p_PUEA) runs on DiameterComponent - { - //set specific parameter for PUEA if needed - - f_sendDiameterMsg({pUEA_MSG:=p_PUEA}); - } - - function f_send_RSR(template (value) RSR_MSG p_RSR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for RSR if needed - - f_sendDiameterMsg({rSR_MSG:=p_RSR}); - } - - function f_send_RSA(template (value) RSA_MSG p_RSA) runs on DiameterComponent - { - //set specific parameter for RSA if needed - - f_sendDiameterMsg({rSA_MSG:=p_RSA}); - } - - function f_send_NOR(template (value) NOR_MSG p_NOR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for NOR if needed - - f_sendDiameterMsg({nOR_MSG:=p_NOR}); - } - - function f_send_NOA(template (value) NOA_MSG p_NOA) runs on DiameterComponent - { - //set specific parameter for NOA if needed - - f_sendDiameterMsg({nOA_MSG:=p_NOA}); - } - - function f_send_SNR(template (value) SNR_MSG p_SNR) runs on DiameterComponent - { - tc_delay.start; - alt - { []tc_delay.timeout - {} } - - //set specific parameter for SNR if needed - - f_sendDiameterMsg({sNR_MSG:=p_SNR}); - } - - function f_send_SNA(template (value) SNA_MSG p_SNA) runs on DiameterComponent - { - //set specific parameter for SNA if needed - - f_sendDiameterMsg({sNA_MSG:=p_SNA}); - } - - -} // end SendMessage - -group GlobalSteps { - - /* - * @desc This is a test step that init Diameter component - * @param - */ - function f_Diameter_Init_Component() - runs on DiameterComponent { - - } // end function f_Diameter_Init_Component - /* - * @desc This is a test step that assign common Diameter headers - * @param - */ - function f_Diameter_Set_Headers( inout template (value) DIAMETER_MSG p_diameterMSG) - runs on DiameterComponent { - - //insert length of message - if (ischosen(p_diameterMSG.cER_MSG)){ - p_diameterMSG.cER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cER_MSG)); - p_diameterMSG.cER_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.cER_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.cEA_MSG)){ - p_diameterMSG.cEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cEA_MSG)); - p_diameterMSG.cEA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.cEA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rAR_MSG)){ - p_diameterMSG.rAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAR_MSG)); - p_diameterMSG.rAR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.rAR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rAA_MSG)){ - p_diameterMSG.rAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rAA_MSG)); - p_diameterMSG.rAA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.rAA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aCR_MSG)){ - p_diameterMSG.aCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCR_MSG)); - p_diameterMSG.aCR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.aCR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aCA_MSG)){ - p_diameterMSG.aCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aCA_MSG)); - p_diameterMSG.aCA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.aCA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aSR_MSG)){ - p_diameterMSG.aSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSR_MSG)); - p_diameterMSG.aSR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.aSR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aSA_MSG)){ - p_diameterMSG.aSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aSA_MSG)); - p_diameterMSG.aSA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.aSA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sTR_MSG)){ - p_diameterMSG.sTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTR_MSG)); - p_diameterMSG.sTR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.sTR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sTA_MSG)){ - p_diameterMSG.sTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sTA_MSG)); - p_diameterMSG.sTA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.sTA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dWR_MSG)){ - p_diameterMSG.dWR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWR_MSG)); - p_diameterMSG.dWR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.dWR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dWA_MSG)){ - p_diameterMSG.dWA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dWA_MSG)); - p_diameterMSG.dWA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.dWA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dPR_MSG)){ - p_diameterMSG.dPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPR_MSG)); - p_diameterMSG.dPR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.dPR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dPA_MSG)){ - p_diameterMSG.dPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dPA_MSG)); - p_diameterMSG.dPA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.dPA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - //RFC4740 - if (ischosen(p_diameterMSG.uAR_MSG)){ - p_diameterMSG.uAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAR_MSG)); - p_diameterMSG.uAR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.uAR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.uAA_MSG)){ - p_diameterMSG.uAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uAA_MSG)); - p_diameterMSG.uAA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.uAA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sAR_MSG)){ - p_diameterMSG.sAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAR_MSG)); - p_diameterMSG.sAR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.sAR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sAA_MSG)){ - p_diameterMSG.sAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sAA_MSG)); - p_diameterMSG.sAA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.sAA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.lIR_MSG)){ - p_diameterMSG.lIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIR_MSG)); - p_diameterMSG.lIR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.lIR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.lIA_MSG)){ - p_diameterMSG.lIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.lIA_MSG)); - p_diameterMSG.lIA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.lIA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.mAR_MSG)){ - p_diameterMSG.mAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAR_MSG)); - p_diameterMSG.mAR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.mAR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.mAA_MSG)){ - p_diameterMSG.mAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.mAA_MSG)); - p_diameterMSG.mAA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.mAA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rTR_MSG)){ - p_diameterMSG.rTR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTR_MSG)); - p_diameterMSG.rTR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.rTR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rTA_MSG)){ - p_diameterMSG.rTA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rTA_MSG)); - p_diameterMSG.rTA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.rTA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pPR_MSG)){ - p_diameterMSG.pPR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPR_MSG)); - p_diameterMSG.pPR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.pPR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pPA_MSG)){ - p_diameterMSG.pPA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pPA_MSG)); - p_diameterMSG.pPA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.pPA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - //Sh interface - if (ischosen(p_diameterMSG.uDR_MSG)){ - p_diameterMSG.uDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDR_MSG)); - p_diameterMSG.uDR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.uDR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.uDA_MSG)){ - p_diameterMSG.uDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uDA_MSG)); - p_diameterMSG.uDA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.uDA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pUR_MSG)){ - p_diameterMSG.pUR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUR_MSG)); - p_diameterMSG.pUR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.pUR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pUA_MSG)){ - p_diameterMSG.pUA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUA_MSG)); - p_diameterMSG.pUA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.pUA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sNR_MSG)){ - p_diameterMSG.sNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNR_MSG)); - p_diameterMSG.sNR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.sNR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.sNA_MSG)){ - p_diameterMSG.sNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.sNA_MSG)); - p_diameterMSG.sNA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.sNA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pNR_MSG)){ - p_diameterMSG.pNR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNR_MSG)); - p_diameterMSG.pNR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.pNR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pNA_MSG)){ - p_diameterMSG.pNA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pNA_MSG)); - p_diameterMSG.pNA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.pNA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - //RFC4006 - if (ischosen(p_diameterMSG.cCR_MSG)){ - p_diameterMSG.cCR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCR_MSG)); - p_diameterMSG.cCR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.cCR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.cCA_MSG)){ - p_diameterMSG.cCA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cCA_MSG)); - p_diameterMSG.cCA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.cCA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - //Rx interface - if (ischosen(p_diameterMSG.aAR_MSG)){ - p_diameterMSG.aAR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAR_MSG)); - p_diameterMSG.aAR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.aAR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aAA_MSG)){ - p_diameterMSG.aAA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aAA_MSG)); - p_diameterMSG.aAA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.aAA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - //S6a messages - if (ischosen(p_diameterMSG.uLR_MSG)){ - p_diameterMSG.uLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLR_MSG)); - p_diameterMSG.uLR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.uLR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.uLA_MSG)){ - p_diameterMSG.uLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uLA_MSG)); - p_diameterMSG.uLA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.uLA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aIR_MSG)){ - p_diameterMSG.aIR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIR_MSG)); - p_diameterMSG.aIR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.aIR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.aIA_MSG)){ - p_diameterMSG.aIA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.aIA_MSG)); - p_diameterMSG.aIA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.aIA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.cLR_MSG)){ - p_diameterMSG.cLR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLR_MSG)); - p_diameterMSG.cLR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.cLR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.cLA_MSG)){ - p_diameterMSG.cLA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.cLA_MSG)); - p_diameterMSG.cLA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.cLA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.iDR_MSG)){ - p_diameterMSG.iDR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDR_MSG)); - p_diameterMSG.iDR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.iDR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.iDA_MSG)){ - p_diameterMSG.iDA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.iDA_MSG)); - p_diameterMSG.iDA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.iDA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dSR_MSG)){ - p_diameterMSG.dSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSR_MSG)); - p_diameterMSG.dSR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.dSR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.dSA_MSG)){ - p_diameterMSG.dSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.dSA_MSG)); - p_diameterMSG.dSA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.dSA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pUER_MSG)){ - p_diameterMSG.pUER_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUER_MSG)); - p_diameterMSG.pUER_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.pUER_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.pUEA_MSG)){ - p_diameterMSG.pUEA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.pUEA_MSG)); - p_diameterMSG.pUEA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.pUEA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rSR_MSG)){ - p_diameterMSG.rSR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSR_MSG)); - p_diameterMSG.rSR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.rSR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.rSA_MSG)){ - p_diameterMSG.rSA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.rSA_MSG)); - p_diameterMSG.rSA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.rSA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.nOR_MSG)){ - p_diameterMSG.nOR_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOR_MSG)); - p_diameterMSG.nOR_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.nOR_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - if (ischosen(p_diameterMSG.nOA_MSG)){ - p_diameterMSG.nOA_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.nOA_MSG)); - p_diameterMSG.nOA_MSG.header.hopid:=vc_recv_hopid; - p_diameterMSG.nOA_MSG.header.endid:=vc_recv_endid; - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - - if (ischosen(p_diameterMSG.uNKNOWN_MSG)){ - p_diameterMSG.uNKNOWN_MSG.header.msglen := f_getEncvalueLength(encvalue(p_diameterMSG.uNKNOWN_MSG)); - p_diameterMSG.uNKNOWN_MSG.header.hopid:=f_inc(vc_send_hopid); - p_diameterMSG.uNKNOWN_MSG.header.endid:=f_inc(vc_send_endid); - vc_sendDiamMsg:=valueof(p_diameterMSG); - } - - } // end function f_Diameter_Set_Headers - - function f_IPAdress (IPv4Addr p_ipv4,IPv6Addr p_ipv6) - return Address - { - var Address v_ipv4, v_ipv6; - if (PX_IPv6) - { - v_ipv6.addressFamily := c_ipv6AddressFamily; - v_ipv6.ipAddress := {ipv6:= p_ipv6 }; - return(v_ipv6) - } - else - { - v_ipv4.addressFamily := c_ipv4AddressFamily; - v_ipv4.ipAddress := {ipv4:= p_ipv4 }; - return(v_ipv4) - } - } - - function f_IPV4or6_String2Address (charstring p_addr) - return template Address - { - var integer addr_len:=0; - var integer i; - //var integer addr[8]; - var integer addr_i; - var charstring num:=""; - var charstring current:=""; - var template Address v_ip; - addr_len:=lengthof(p_addr); - addr_i:=0; - - if (PX_IPv6){ - v_ip.addressFamily := c_ipv6AddressFamily; - v_ip.ipAddress.ipv6 := {0,0,0,0,0,0,0,0}; - for(i:=0;i7){ - log("IPV6 parse ERROR"); - }else{ - if ((lengthof(num) mod 2)==1){ - num:="0"# - } - //addr[addr_i]:=oct2int(str2oct(num)); - v_ip.ipAddress.ipv6[addr_i]:=oct2int(str2oct(num)); - num:=""; - } - - return(v_ip) - } - else{ - v_ip.addressFamily := c_ipv4AddressFamily; - v_ip.ipAddress.ipv4 := {0,0,0,0}; - for(i:=0;i3){ - log("IPV4 parse ERROR"); - }else{ - //addr[addr_i]:=str2int(num); - v_ip.ipAddress.ipv4[addr_i]:=str2int(num); - num:=""; - } - - return(v_ip) - } - } - - - function f_IPV4_Address2oct (charstring p_addr) - return octetstring - { - var integer addr_len:=0; - var integer i; - - var integer addr_i; - var charstring num:=""; - var charstring current:=""; - var integer v_Addrint; - var hexstring v_Addrhex := ''H; - var octetstring v_Addroct := ''O; - addr_len:=lengthof(p_addr); - addr_i:=0; - - for(i:=0;i3){ - log("IPV4 parse ERROR"); - }else{ - v_Addrint := str2int(num); - v_Addrhex := v_Addrhex&int2hex(v_Addrint, 2); - v_Addroct := hex2oct(v_Addrhex); - num:=""; - } - - return(v_Addroct) - - } - - /** - * - * @desc component termination - */ - function f_terminate_diameter_component() runs on DiameterComponent - { - log("component terminated - forced!"); - deactivate; - stop; - } - - /** - * @desc component termination - */ - function f_componentStop( - ) runs on DiameterComponent { - syncPort.send(m_syncClientStop); - DIAMP.clear; - stop; - } - - /** - - /** - * - * @desc original copied from older LibCommon_VerdictControl - */ - function f_getVerdict() - return FncRetCode { - var FncRetCode v_ret := e_error; - if (getverdict == pass or getverdict == none) { - v_ret := e_success; - } - return v_ret; - } - - /** - * - * @desc function waits for particular time before next expected message - */ - function f_wait(float p_time) runs on DiameterComponent - { - tc_wait.start(p_time); - alt { - [] tc_wait.timeout{} - } - } - -}// end group GlobalSteps - - -group Preambles { - - /** - * - * @desc preamble for Client(AS - IMS) side - * @param - */ - function f_preambleClient() runs on DiameterComponent - { - var Lower_Layer_Primitive v_MSG; - - //vc_ETS_conn:=1; // init connection ID, or even better random for each component - - LLPP.send(m_llp_connect(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)); - tc_wait.start; - alt - { - - [] LLPP.receive (mw_llp_connectConfirm(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port,vc_ETS_conn)) -> value v_MSG - { - tc_wait.stop; - vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); - log("Connection established"); - }; - - [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) - { - tc_wait.stop; - vc_ETS_conn:=0; - log("Connection NOT established"); - f_setVerdict (e_error); - }; - [] tc_wait.timeout - { - vc_ETS_conn:=0; - log("Connection NOT established"); - f_setVerdict (e_error); - } - } - } - - /** - * - * @desc preamble for Server (PCRF) side - * @param - */ - function f_preambleServer() runs on DiameterComponent - { - var Lower_Layer_Primitive v_MSG; - - LLPP.send(m_llp_listen(vc_ETS_address, vc_ETS_port, vc_SUT_address, vc_SUT_port)); - tc_wait.start; - alt - { - [] LLPP.receive (mw_llp_connectIndication(*,*,*,*,*)) -> value v_MSG - { - tc_wait.stop; - vc_ETS_conn:=valueof(v_MSG.ll_header.ETS_conn); - log("Connection established"); - }; - [] tc_wait.timeout - { - log("Connection NOT established"); - f_setVerdict (e_error); - } - } - } - - group preamble_Diameter{ - - - function f_preambleDiameterBaseClient( - in UInt32 p_authApplicationId - ) runs on DiameterComponent { - - f_send_CER(m_CER_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); - f_awaiting_CEA(mw_CEA_dummy); - f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); - f_awaiting_DWA(mw_DWA_dummy); - } - - function f_preambleDiameterBaseClient_acct_Application_Id_AVP( - in UInt32 p_acctApplicationId - ) runs on DiameterComponent { - - f_send_CER(m_CER_AppId_acct_Application_Id(vc_originHost, vc_originRealm, vc_hostIPAddress, p_acctApplicationId)); - f_awaiting_CEA(mw_CEA_dummy); - f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); - f_awaiting_DWA(mw_DWA_dummy); - } - - function f_preambleDiameterBaseServer(UInt32 p_authApplicationId)runs on DiameterComponent - { - - f_awaiting_CER(mw_CER_dummy); - f_send_CEA(m_CEA_AppId(vc_originHost, vc_originRealm, vc_hostIPAddress, p_authApplicationId)); -// f_send_DWR(m_DWR_basic(vc_originHost, vc_originRealm)); -// f_awaiting_DWA(mw_DWA_dummy); - } - - }//end group preamble_Diameter - -}// end group Preambles - -group Postambles { - - /** - * - * @desc prostamble for Client or Server side - * @param - */ - function f_postambleDisconnect() runs on DiameterComponent - { - - LLPP.send(m_llp_disconnect(vc_ETS_conn)); - vc_ETS_conn:=0; - - all timer.stop; - //stop; - - } - group postamble_Diameter{ - - - function f_postamble_AF() runs on DiameterComponent - { - - f_postambleDiameterBase(); - - if(PX_DIAM_LLP_ENABLED) - { - f_postambleDisconnect(); - } - - } - - function f_postamble_PCRF() runs on DiameterComponent - { - - f_postambleDiameterBase(); - - if(PX_DIAM_LLP_ENABLED) - { - f_postambleDisconnect(); - } - - } - - function f_postambleDiameterBase()runs on DiameterComponent - { - f_send_DPR(m_DPR_basic(vc_originHost, vc_originRealm)); - f_awaiting_DPA(mw_DPA_dummy); - } - - }//end group postamble_Diameter - -} // end group Postambles - -group DiameterChecks -{ -}//end group DiameterChecks - -group DefaultsTestStep -{ - - altstep a_llp_default() runs on DiameterComponent - { - [] any timer.timeout - { - f_setVerdict(e_error); - all timer.stop; - //stop - } - - [] LLPP.receive (mw_llp_disconnectIndication(vc_ETS_conn)) - { - tc_wait.stop; - vc_ETS_conn:=0; - f_setVerdict (e_error); - }; - - } - - altstep a_diameter_default_withinllp() runs on DiameterComponent - { - [] any timer.timeout - { - f_setVerdict(e_error); - all timer.stop; - //stop - } - [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*DWR*/)) - { - //f_send(/*DWA*/); - }; - [] LLPP.receive (mw_llp_dataIndication(vc_ETS_conn, */*CER*/)) - { - //f_send(/*CEA*/); - }; - - - } - - altstep a_diameter_default() runs on DiameterComponent - { - [] any timer.timeout - { - all timer.stop; - if (vc_serverStop==false) { - f_selfOrClientSyncAndVerdict("error", e_timeout); - } - else { - stop; - } - } - [] DIAMP.receive (DIAMETER_MSG:{dWR_MSG := mw_DWR_dummy}) -> value vc_recvDiamMsgDefault - { - vc_recv_hopid:= vc_recvDiamMsgDefault.dWR_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsgDefault.dWR_MSG.header.endid; - f_send_DWA(m_DWA_basic(vc_originHost, vc_originRealm)); - repeat; - } - //CER message can be accepted in following cases: - //- if CER message was not accepted 1st time then it is handled in default altstep. - //- if component is unmaped and maped back for TP reason then Diameter Session can be established again in default Altestep - [] DIAMP.receive (DIAMETER_MSG:{cER_MSG := mw_CER_basic(?)}) -> value vc_recvDiamMsgDefault - { - vc_recv_hopid:= vc_recvDiamMsgDefault.cER_MSG.header.hopid; - vc_recv_endid:= vc_recvDiamMsgDefault.cER_MSG.header.endid; - //Set all possible interfaces to avoid multiple CER checking - f_send_CEA(m_CEA_AppId_all(vc_originHost, vc_originRealm, vc_hostIPAddress)); - repeat; - } - [] DIAMP.receive (DIAMETER_MSG:?) -> value vc_recvDiamMsgDefault - { - if (vc_serverStop==false) { - f_selfOrClientSyncAndVerdict("error", e_error); - } - else { - stop; - } - } - [] DIAMP.receive - { - if (vc_serverStop==false) { - f_selfOrClientSyncAndVerdict("error", e_error); - } - else { - stop; - } - } - [] a_shutdown() { - // Process temination on error - log("*** a_diameter_default() : Process temination on error ***"); - // Terminate component execution - f_postambleDiameterBase(); - - stop; - } - }//end altstep a_diameter_default - -} // end of group DefaultsTestStep -} // end module LibDiameter_Steps \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn deleted file mode 100644 index 84c2570..0000000 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn +++ /dev/null @@ -1,3849 +0,0 @@ -/** - * @author STF 434 - * @version $Id$ - * @desc This module defines Diameter Templates for message, header, and - * structured types.
      - * Note that any changes made to the definitions in this module - * may be overwritten by future releases of this library - * End users are encouraged to contact the distributers of this - * module regarding their modifications or additions - * @remark Any additions to the templates shall follow the design rules - * and always modify base templates only; - */ - -module LibDiameter_Templates { - - //LibCommon - import from LibCommon_DataStrings all; - import from LibCommon_BasicTypesAndValues all; - - //LibDiameter - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_TypesAndValues all; - import from LibDiameter_PIXITS all; - import from LibDiameter_TypesAndValues all; - - group LowerLayerPrimitives { - - template Lower_Layer_Primitive m_llp_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { - ll_header := m_llh_listen(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port), - pdu := omit - } - - template Lower_Layer_Primitive m_llp_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - ll_header := m_llh_connect(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), - pdu := omit - } - - template Lower_Layer_Primitive mw_llp_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - ll_header := mw_llh_connectIndication(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), - pdu := * - } - - template Lower_Layer_Primitive mw_llp_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - ll_header := mw_llh_connectConfirm(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), - pdu := * - } - - template Lower_Layer_Primitive m_llp_disconnect(template integer p_ETS_conn) := { - ll_header := m_llh_disconnect(p_ETS_conn), - pdu := omit - } - - template Lower_Layer_Primitive mw_llp_disconnectIndication(template integer p_ETS_conn) := { - ll_header := mw_llh_disconnectIndication(p_ETS_conn), - pdu := * - } - - template Lower_Layer_Primitive m_llp_dataRequest( template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { - ll_header := m_llh_dataRequest(p_ETS_conn), - pdu := p_pdu - } - - template Lower_Layer_Primitive mw_llp_dataIndication(template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { - ll_header := mw_llh_dataIndication(p_ETS_conn), - pdu := p_pdu - } - - template Lower_Layer_Header m_llh_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { - primitive := LISTEN_REQUEST_E, - transport_used := c_defaultTransportProtocol, - ETS_address := p_ETS_address, - ETS_port := p_ETS_port, - SUT_address := p_SUT_address, - SUT_port := p_SUT_port, - ETS_conn := omit - } - - template Lower_Layer_Header m_llh_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - primitive := CONNECT_REQUEST_E, - transport_used := c_defaultTransportProtocol, - ETS_address := p_ETS_address, - ETS_port := p_ETS_port, - SUT_address := p_SUT_address, - SUT_port := p_SUT_port, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header mw_llh_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - primitive := CONNECT_INDICATION_E, - transport_used := c_defaultTransportProtocol, - ETS_address := p_ETS_address, - ETS_port := p_ETS_port, - SUT_address := p_SUT_address, - SUT_port := p_SUT_port, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header mw_llh_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { - primitive := CONNECT_CONFIRM_E, - transport_used := c_defaultTransportProtocol, - ETS_address := p_ETS_address, - ETS_port := p_ETS_port, - SUT_address := p_SUT_address, - SUT_port := p_SUT_port, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header m_llh_disconnect(template integer p_ETS_conn) := { - primitive := DISCONNECT_REQUEST_E, - transport_used := c_defaultTransportProtocol, - ETS_address := omit, - ETS_port := omit, - SUT_address := omit, - SUT_port := omit, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header mw_llh_disconnectIndication(template integer p_ETS_conn) := { - primitive := DISCONNECT_INDICATION_E, - transport_used := c_defaultTransportProtocol, - ETS_address := *, - ETS_port := *, - SUT_address := *, - SUT_port := *, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header m_llh_dataRequest(template integer p_ETS_conn) := { - primitive := DATA_REQUEST_E, - transport_used := c_defaultTransportProtocol, - ETS_address := omit, - ETS_port := omit, - SUT_address := omit, - SUT_port := omit, - ETS_conn := p_ETS_conn - } - - template Lower_Layer_Header mw_llh_dataIndication(template integer p_ETS_conn) := { - primitive := DATA_INDICATION_E, - transport_used := c_defaultTransportProtocol, - ETS_address := *, - ETS_port := *, - SUT_address := *, - SUT_port := *, - ETS_conn := p_ETS_conn - } - - }//end group LowerLayerPrimitives - - //internal PIXITS if some - group ModuleParameters { - } //end group ModuleParameters - - group SubFields{ - - template Result_Code_Type/*integer*/ m_resultCode_diameterSuccess := DIAMETER_SUCCESS_E/*2001*/; - template Result_Code_Type/*integer*/ mw_resultCode_diameterSuccess := (DIAMETER_SUCCESS_E,DIAMETER_LIMITED_SUCCESS_E/*2000..2999*/); - - template AVP_Type mw_avpType(template (present) AVP_Header p_avpHeader) := { - aVP_Header := p_avpHeader, - aVP_Data := * - } - - } //end group SubFields - - group HeaderFieldTemplates{ - group DiameterHeaderGroup{ - template (value) Command_Flags m_cmdFlagsAns := { - r_bit := '0'B, - p_bit := '0'B, - e_bit := '0'B, - t_bit := '0'B, - reserved_bits := '0000'B - } - - template (value) Command_Flags m_cmdFlagsAnsProx modifies m_cmdFlagsAns:= { - p_bit := '1'B - } - - template (value) Command_Flags m_cmdFlagsReq modifies m_cmdFlagsAns:= { - r_bit := '1'B - } - - template (value) Command_Flags m_cmdFlagsReqDuplicated modifies m_cmdFlagsAns:= { - r_bit := '1'B, - t_bit := '1'B - } - - template Command_Flags mw_cmdFlags := { - r_bit := ?, - p_bit := ?, - e_bit := ?, - t_bit := ?, - reserved_bits := ? - } - - template (value) DiameterHeader m_diameterHeaderReq_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { - version := c_versionId, - msglen := 0, //Message lenght with AVPs has to be calculated - cmdflags := m_cmdFlagsReq, //RPETrrrr - cmdcode := p_cmdcode, //Command code - applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 - hopid := 0, - endid := 0 - } - - template (value) DiameterHeader m_diameterHeaderReqDuplicated_dummy(Command_Code p_cmdcode, UInt32 p_applid) modifies m_diameterHeaderReq_dummy := { - cmdflags := m_cmdFlagsReqDuplicated - } - - template DiameterHeader mw_diameterHeaderReq_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { - version := c_versionId, - msglen := ?, //Message lenght with AVPs has to be calculated - cmdflags := mw_cmdFlags, //RPETrrrr - cmdcode := p_cmdcode, //Command code - applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 - hopid := ?, - endid := ? - } - - template (value) DiameterHeader m_diameterHeaderAns_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { - version := c_versionId, - msglen := 0, //Message lenght with AVPs has to be calculated - cmdflags := m_cmdFlagsAns, //RPETrrrr - cmdcode := p_cmdcode, //Command code - applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 - hopid := 0, - endid := 0 - } - - template DiameterHeader mw_diameterHeaderAns_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { - version := c_versionId, - msglen := ?, //Message lenght with AVPs has to be calculated - cmdflags := mw_cmdFlags, //RPETrrrr - cmdcode := p_cmdcode, //Command code - applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 - hopid := ?, - endid := ? - } - - template (value) AVP_Flags m_avpFlags_Mbit1 := { - v_bit := '0'B, - m_bit := '1'B, - p_bit := '0'B, - reserved_bits := '00000'B - } - - template (value) AVP_Flags m_avpFlags_Mbit0 := { - v_bit := '0'B, - m_bit := '0'B, - p_bit := '0'B, - reserved_bits := '00000'B - } - - template (value) AVP_Flags m_avpFlags_VMbit1 := { - v_bit := '1'B, - m_bit := '1'B, - p_bit := '0'B, - reserved_bits := '00000'B - } - - template AVP_Flags mw_avpFlags_any := { - v_bit := ?, - m_bit := ?, - p_bit := ?, - reserved_bits := '00000'B - } - - template AVP_Flags mw_avpFlags_VMbits(template (present) Bit1 p_vbit, template (present) Bit1 p_mbit) := { - v_bit := p_vbit, - m_bit := p_mbit, - p_bit := ?, - reserved_bits := '00000'B - } - - template AVP_Header mw_aVP_Header_any := { - aVP_Code :=?, - aVP_flags := mw_avpFlags_any, - aVP_len := ?, - aVP_vid := * - } - - template AVP_Header mw_aVP_Header_any_Code (template (present) AVP_Code p_avpCode):= { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_any, - aVP_len := ?, - aVP_vid := * - } - - template AVP_Header mw_aVP_Header_Vbit0 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('0'B, ?), - aVP_len := ?, - aVP_vid := * - } - - template AVP_Header mw_aVP_Header_Vbit0Mbit0 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('0'B, '0'B), - aVP_len := ?, - aVP_vid := * - } - - template AVP_Header mw_aVP_Header_Vbit0Mbit1 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('0'B, '1'B), - aVP_len := ?, - aVP_vid := * - } - - template AVP_Header mw_aVP_Header_Vbit1Mbit0 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('1'B, '0'B), - aVP_len := ?, - aVP_vid := ? - } - - //Same template as mw_aVP_Header_VMbit1 but same name style as above templates mw_aVP_Header_VbitXMbitX - template AVP_Header mw_aVP_Header_Vbit1Mbit1 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), - aVP_len := ?, - aVP_vid := ? - } - - template AVP_Header mw_aVP_Header_VMbit1 (AVP_Code p_avpCode) := { - aVP_Code := p_avpCode, - aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), - aVP_len := ?, - aVP_vid := ? - } - - template (value) AVP_Header m_aVP_Header_Mbit1(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { - aVP_Code := p_avpCode, - aVP_flags := m_avpFlags_Mbit1, - aVP_len := f_aVP_len(8, p_dataLen, omit), - aVP_vid := omit - } - - template (value) AVP_Header m_aVP_Header_Mbit0(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { - aVP_Code := p_avpCode, - aVP_flags := m_avpFlags_Mbit0, - aVP_len := f_aVP_len(8, p_dataLen, omit), - aVP_vid := omit - } - - /** - * @desc complete AVP header field template - * @param p_avpCode specific Code of the AVP parameter - * @param p_avpDataLen additional length caused if AVP data field is present - * @param p_avpVid vendor id if needed - */ - template (value) AVP_Header m_aVP_HeaderVid_Mbit0(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { - aVP_Code := p_avpCode, - aVP_flags := {v_bit := f_aVPvBit(p_avpVid), - m_bit := '0'B, - p_bit := '0'B, - reserved_bits := '00000'B}, - aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) - aVP_vid := p_avpVid - } - - /** - * @desc complete AVP header field template - * @param p_avpCode specific Code of the AVP parameter - * @param p_avpDataLen additional length caused if AVP data field is present - * @param p_avpVid vendor id if needed - */ - template (value) AVP_Header m_aVP_HeaderVid_Mbit1(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { - aVP_Code := p_avpCode, - aVP_flags := {v_bit := f_aVPvBit(p_avpVid), - m_bit := '1'B, - p_bit := '0'B, - reserved_bits := '00000'B}, - aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) - aVP_vid := p_avpVid - } - - /** - * @desc complete AVP header field receive template - * @param p_avpCode specific Code of the AVP parameter - * @param p_avpDataLen additional length caused if AVP data field is present - * @param p_avpVid vendor id if needed - */ - template (present) AVP_Header mw_aVP_HeaderVid_Mbit1( - in AVP_Code p_avpCode, - in template (present) AVP_Length p_avpDataLen := ?, - in template (present) AVP_Vendor_ID p_avpVid) := { - aVP_Code := p_avpCode, - aVP_flags := {v_bit := f_aVPvBit(p_avpVid), - m_bit := '1'B, - p_bit := ?, - reserved_bits := '00000'B}, - aVP_len := p_avpDataLen, - aVP_vid := p_avpVid - } - - function f_aVP_len(AVP_Length p_length8, AVP_Length p_avpDataLen, template AVP_Vendor_ID p_avpVid)return AVP_Length { - var AVP_Length v_sum; - v_sum := p_length8 + p_avpDataLen + f_lengthVid(p_avpVid); - return v_sum - } - - function f_lengthof_AVP(AVP_Header p_header) return AVP_Length { - var AVP_Length v_sum; - v_sum := f_aVP_len (8, p_header.aVP_len, p_header.aVP_vid); - return v_sum - } - - function f_getByteAlignedLength(template AVP_Length p_length) return AVP_Length { - return (valueof(p_length) + ((4-valueof(p_length) mod 4) mod 4)); - - } - - function f_lengthVid(template AVP_Vendor_ID p_avpVid) return AVP_Length { - if(isvalue(p_avpVid)){return 4} else{return 0} - } - - function f_aVPvBit(template AVP_Vendor_ID p_avpVid) return Bit1 { - if(isvalue(p_avpVid)){return '1'B} else{return '0'B} - } - - } //end group DiameterHeaderGroup - - group DummyAVPHeaders{ - - template (value) Origin_Host_AVP m_originHost_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, 3), - aVP_Data := "abc" - } - - template (value) Origin_Realm_AVP m_originRealm_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, 3), - aVP_Data := "abc" - } - - template Vendor_Id_AVP m_vendorId_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), - aVP_Data := 0 - } - - template Product_Name_AVP m_productName_dummy := { - aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, 3), - aVP_Data := "abc" - } - - template Disconnect_Cause_AVP m_disconnectCause_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_disconnect_Cause_AVP_Code, 4), - aVP_Data := REBOOTING_E - } - - template Result_Code_AVP m_resultCode_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), - aVP_Data := DIAMETER_DUMMY_E - } - - template (value) Destination_Host_AVP m_destinationHost_dummy := - { - aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, 3), - aVP_Data := "abc" - } - - template (value) Destination_Realm_AVP m_destinationRealm_dummy := - { - aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, 3), - aVP_Data := "abc" - } - - template Termination_Cause_AVP m_terminationCause_dummy := - { - aVP_Header := m_aVP_Header_Mbit1(c_termination_Cause_AVP_Code, 4), - aVP_Data := DIAMETER_LOGOUT_E - } - - template (value) Session_Id_AVP m_sessionId_dummy := - { - aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, 3), - aVP_Data := "abc" - } - - template (value) Auth_Application_Id_AVP m_authApplicationId_dummy := - { - aVP_Header := m_aVP_Header_Mbit1(c_auth_Application_Id_AVP_Code, 4), - aVP_Data := 0 - } - - template Accounting_Record_Type_AVP m_accounting_Record_Type_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Type_AVP_Code,4), - aVP_Data := EVENT_RECORD_E - } - - template Accounting_Record_Number_AVP m_accounting_Record_Number_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Number_AVP_Code,4), - aVP_Data := 0 - } - - template Auth_Session_State_AVP m_auth_Session_State_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), - aVP_Data := STATE_MAINTAINED_E - } - - template Auth_Session_State_AVP m_auth_Session_State_no_maintained := { - aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), - aVP_Data := NO_STATE_MAINTAINED_E - } - - template SIP_AOR_AVP m_sIP_AOR_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_AOR_AVP_Code, 18, omit), - aVP_Data := f_DiameterURI_2_UTF8String(m_diameterURI_dummy) - } - - template (value) DiameterURI m_diameterURI_dummy := - { - scheme := "aaa", - diameterId_FQDN := "www.etsi.org", - portField := omit, - transport := omit, - protocol := omit - } - - template SIP_Visited_Network_Id_AVP m_sIP_Visited_Network_Id_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Visited_Network_Id_AVP_Code, 6, omit), - aVP_Data := "abcabc" - } - - template SIP_Digest_Authenticate_AVP m_sIP_Digest_Authenticate( - in template (value) Digest_Realm_AVP p_digest_Realm - ) := { - aVP_Header := m_aVP_Header_Mbit1(c_sIP_Digest_Authenticate_AVP_Code), - digest_Realm := p_digest_Realm, - digest_Algorithm := omit, - digest_QoP := omit, - digest_HA1 := omit, - aVP_Type := omit - } - - template SIP_User_Authorization_Type_AVP m_sIP_User_Authorization_Type( - in template (value) SIP_User_Auth_Ty_Type p_aVP_Data := REGISTRATION_E - ) := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Authorization_Type_AVP_Code, 4, omit), - aVP_Data := p_aVP_Data - } - - template SIP_User_Data_Already_Available_AVP m_sIP_User_Data_Already_Available_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Already_Available_AVP_Code, 4, omit), - aVP_Data := USER_DATA_NOT_AVAILABLE_E - } - - template SIP_Server_Assignment_Type_AVP m_sIP_Server_Assignment_Type_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Server_Assignment_Type_AVP_Code, 4, omit), - aVP_Data := NO_ASSIGNMENT_E - } - - template SIP_User_Data_AVP m_sIP_User_Data_dummy := - { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_AVP_Code, 0, omit), - sIP_User_Data_Type := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Type_AVP_Code, 3 ,omit), - aVP_Data := "abc" - }, - sIP_User_Data_Contents := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Contents_AVP_Code, 1, omit), - aVP_Data := '00'O - }, - aVP_Type := omit - } - - template SIP_Accounting_Information_AVP m_sIP_Accounting_Information_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Accounting_Information_AVP_Code, 0, omit), - sIP_Accounting_Server_URI := omit, - sIP_Credit_Control_Server_URI := omit, - aVP_Type := omit - } - - template SIP_Method_AVP m_sIP_Method_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Method_AVP_Code, 3, omit), - aVP_Data := "sip" - } - - template SIP_Deregistration_Reason_AVP m_sIP_Deregistration_Reason_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Deregistration_Reason_AVP_Code, 8, omit), - sIP_Reason_Code_AVP := m_sIP_Reason_Code_dummy, - sIP_Reason_Info_AVP := omit, - aVP_Type := omit - } - - template SIP_Reason_Code_AVP m_sIP_Reason_Code_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Reason_Code_AVP_Code, 4, omit), - aVP_Data := PERMANENT_TERMINATION_E - } - - template User_Name_AVP m_user_Name_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, 3), - aVP_Data := "dbo" - } - - template User_Identity_AVP m_user_Identity_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Identity_AVP_Code, 0, c_vendId3gpp), - public_Identity_AVP := omit, - mSISDN_AVP := omit, - aVP_Type := omit - } - - template User_Data_AVP m_user_Data_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_AVP_Code, 1, c_vendId3gpp), - aVP_Data := '00'O - } - - template CC_Request_Type_AVP m_cC_Request_Type_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Type_AVP_Code,4, omit), - aVP_Data := INITIAL_REQUEST_E - } - - template CC_Request_Number_AVP m_cC_Request_Number_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Number_AVP_Code,4, omit), - aVP_Data := 0 - } - - template Data_Reference_AVP m_data_Reference_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_data_Reference_AVP_Code, 4, c_vendId3gpp), - aVP_Data := REPOSITORY_DATA_E - } - - template (value) Server_Name_AVP m_server_name_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_server_Name_AVP_Code, 4, c_vendId3gpp), - aVP_Data := "sip_url" - } - - template Service_Indication_AVP m_service_Indication_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_service_Indication_AVP_Code, 4, c_vendId3gpp), - aVP_Data := '00'O - } - - template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code), - vendor_Id := omit, - auth_Application_Id := omit, - acct_Application_Id := omit - } - - template Re_Auth_Request_Type_AVP m_re_Auth_Request_dummy := { - aVP_Header := m_aVP_Header_Mbit1(c_re_Auth_Request_Type_AVP_Code, 4), - aVP_Data := AUTHORIZE_ONLY_E - } - - template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), - aVP_Data := 1 - } - - template SIP_Auth_Data_Item_RFC_AVP m_sIPAuthDataItem_dummy_RFC := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC, 1, c_vendId3gpp), - sIP_Authentication_Scheme := m_sIPAuthenticationScheme_digest_RFC, - sIP_Item_Number := omit, - sIP_Authenticate := omit, - sIP_Authorization := omit, - sIP_Authentication_Info := omit, - aVP_Type := omit - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := DIGEST_E - } - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_unknown_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := UNKNOWN_E - } - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_aka_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := DIGEST_AKAv1_MD5_E - } - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_nass_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := NASS_BUNDLE_E - } - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_giga_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := GIBA_E - } - } - - template Subs_Req_Type_AVP m_subs_Req_Type_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_subs_Req_Type_AVP_Code, 4, c_vendId3gpp), - aVP_Data := SUBSCRIBE_E - } - - } //end group DummyAVPHeaders - - group SpecificAVPHeaders { - - template Session_Id_AVP m_sessionId(UTF8String p_avpData) := - { - aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, f_getUTF8StringLength(p_avpData)), - aVP_Data := p_avpData - } - - template Auth_Application_Id_AVP m_authApplicationId(UInt32 p_avpData):= - { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_auth_Application_Id_AVP_Code, 4, omit), - aVP_Data := p_avpData - } - - template Acct_Application_Id_AVP m_acctApplicationId(UInt32 p_avpData):= - { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_acct_Application_Id_AVP_Code, 4, omit), - aVP_Data := p_avpData - } - - template Disconnect_Cause_AVP m_disconnectCause(Disconnect_Cause_Type p_aVP_Data) := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_disconnect_Cause_AVP_Code, 4, omit ), - aVP_Data := p_aVP_Data - } - - template Host_IP_Address_AVP m_hostIPAddress(Address p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_host_IP_Address_AVP_Code, f_IPAdressLengthUInt24()), - aVP_Data := p_avpData - } - - template Origin_Host_AVP m_originHost(template(value) charstring p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template Origin_Realm_AVP m_originRealm(template(value) charstring p_avpData) := - { - aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template Destination_Host_AVP m_destinationHost(template(value) charstring p_avpData) := - { - aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template Destination_Realm_AVP m_destinationRealm(template(value) charstring p_avpData) := - { - aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template Product_Name_AVP m_productName(template(value) UTF8String p_avpData) := - { - aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template Result_Code_AVP m_resultCode(template (value) /*integer*/Result_Code_Type p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), - aVP_Data := p_avpData - } - - template Vendor_Id_AVP m_supportedVendorId(template(value) UInt32 p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_supported_Vendor_Id_AVP_Code, 4), - aVP_Data := p_avpData - } - - template Vendor_Id_AVP m_vendorId(template(value) UInt32 p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), - aVP_Data := p_avpData - } - - template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id(UInt32 p_authApplicationId) := { - aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), - vendor_Id := {m_vendorId(c_vendId3gpp)}, - auth_Application_Id := {m_authApplicationId(p_authApplicationId)}, - acct_Application_Id := omit - } - - template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Acct_Id(UInt32 p_acctApplicationId) := { - aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), - vendor_Id := {m_vendorId(c_vendId3gpp)}, - auth_Application_Id := omit, - acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} - } - - template Auth_Application_Id_AVP mw_authApplicationId(UInt32 p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_auth_Application_Id_AVP_Code), - aVP_Data := p_avpData - } - - template Acct_Application_Id_AVP mw_acctApplicationId(UInt32 p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_acct_Application_Id_AVP_Code), - aVP_Data := p_avpData - } - - template QoS_Information_AVP mw_qosInformation_QosInfo_ARP := { - aVP_Header := mw_aVP_Header_VMbit1(c_qoS_Information_AVP_Code), // - qoS_Class_Identifier :=?, - max_Requested_Bandwidth_UL :=*, - max_Requested_Bandwidth_DL :=*, - guaranteed_Bitrate_UL :=*, - guaranteed_Bitrate_DL :=*, - bearer_Identifier :=*, - allocation_Retention_Priority :=?, - aPN_Aggregate_Max_Bitrate_UL :=*, - aPN_Aggregate_Max_Bitrate_DL :=*, - aVP_Type:=* - } - - template Result_Code_AVP mw_resultCode(template (present)/*integer*/Result_Code_Type p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_result_Code_AVP_Code), - aVP_Data := p_avpData - } -// -// template Experimental_Result_AVP mw_experimentalResult(template (present)/*integer*/Experimental_Result_Code_AVP p_experimental_Result_Code) := { -// aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_AVP_Code), -// vendor_Id := ?, -// experimental_Result_Code := p_experimental_Result_Code -// } - - template Experimental_Result_Code_AVP mw_experimentalResultCode(template (present)/*integer*/Experimental_Result_Type p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_Code_AVP_Code), - aVP_Data := p_avpData - } - - template Session_Release_Cause_AVP mw_sessReleaseCause(template (present) Session_Release_Cause p_avpData) := - { - aVP_Header := mw_aVP_Header_VMbit1(c_session_Release_Cause_AVP_Code), - aVP_Data := p_avpData - } - - template Supported_Features_AVP mw_supportedFeatures_dummy := { - aVP_Header := mw_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, ?, c_vendId3gpp), - vendor_Id := ?, - feature_list_Id := *, - feature_list := ?, - aVP_Data := * - } - - template Supported_Features_AVP m_supportedFeatures ( - template Vendor_Id_AVP p_vendorId, - template Feature_List_ID_AVP p_feature_list_Id, - template (value) Feature_List_AVP p_feature_list, - template Supported_Features_AVP.aVP_Data p_aVP_Data - ):= { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, 1, c_vendId3gpp), - vendor_Id := m_vendorId(c_vendId3gpp), - feature_list_Id := p_feature_list_Id, - feature_list := p_feature_list, - aVP_Data := p_aVP_Data - } - - template Feature_List_AVP m_featureList(template (present) UInt32 p_avpData) := - { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_AVP_Code, 1, c_vendId3gpp), - aVP_Data := p_avpData - } - - template Feature_List_ID_AVP m_featureListId(template (present) UInt32 p_avpData) := - { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_ID_AVP_Code, 1, c_vendId3gpp), - aVP_Data := p_avpData - } - - template Failed_AVP mw_failed(template (present) Failed_AVP.aVP p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_failed_AVP_Code), - aVP := p_avpData - } - - template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC (template (value) UInt32 p_avpData) := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), - aVP_Data := p_avpData - } - - template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_RFC(template (value) SIP_Auth_Schm_Type p_SIPAuthSchmType) := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), - aVP_Data := p_SIPAuthSchmType - } - } - - template User_Name_AVP m_userName(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData - } - - template SIP_Item_Number_AVP m_sIPItemNumber_RFC(template (value) UInt32 p_aVP_Data) := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Item_Number_AVP_Code_RFC, 4, omit), - aVP_Data := p_aVP_Data - } - - template SIP_Authorization_RFC_AVP m_sIP_Authorization_RFC( - template (value) Digest_Username_AVP p_digest_Username, - template (value) Digest_Realm_AVP p_digestRealm, - template (value) Digest_Nonce_AVP p_digestNonce, - template (value) Digest_URI_AVP p_digestUri, - template (value) Digest_Response_AVP p_digest_Response - ) := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authorization_AVP_Code_RFC, 4, omit), - digest_Username := p_digest_Username, - digest_Realm := p_digestRealm, - digest_Nonce := p_digestNonce, - digest_URI := p_digestUri, - digest_Response := p_digest_Response, - digest_Algorithm := omit, - digest_CNonce := omit, - digest_Opaque := omit, - digest_QoP := omit, - digest_Nonce_Count := omit, - digest_Method := omit, - digest_Entity_Body_Hash := omit, - digest_Auth_Param := omit, - aVP_Type := omit - } - - template SIP_Authorization_RFC_AVP m_sIP_Authorization_digest_aka_RFC( - template (value) Digest_Username_AVP p_digest_Username, - template (value) Digest_Realm_AVP p_digestRealm, - template (value) Digest_Nonce_AVP p_digestNonce, - template (value) Digest_URI_AVP p_digestUri, - template (value) Digest_Response_AVP p_digest_Response - ) modifies m_sIP_Authorization_RFC := { - // TODO How to pass RAND + AUX - } - - template Digest_Username_AVP m_digestUsername(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_digest_Username_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData -// Type := c_digest_Username_AVP_Code, -// Length := f_getUTF8StringLength(valueof(p_text)), -// Text := p_text - } - - template Digest_Realm_AVP m_digestRealm(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData -// Type := c_digest_Realm_AVP_Code, -// Length := f_getUTF8StringLength(valueof(p_text)), -// Text := p_text - } - - template Digest_Nonce_AVP m_digestNonce(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData -// Type := c_digest_Realm_AVP_Code, -// Length := f_getUTF8StringLength(valueof(p_text)), -// Text := p_text - } - - template Digest_URI_AVP m_digestUri(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_digest_URI_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData -// Type := c_digest_URI_AVP_Code, -// Length := f_getUTF8StringLength(valueof(p_text)), -// Text := p_text - } - - template Digest_Response_AVP m_digestResponse(template (value) UTF8String p_avpData) := { - aVP_Header := m_aVP_Header_Mbit1(c_digest_Response_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), - aVP_Data := p_avpData -// Type := c_digest_Response_AVP_Code, -// Length := f_getUTF8StringLength(valueof(p_text)), -// Text := p_text - } - - template User_Name_AVP mw_userName(template (present) UTF8String p_avpData) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Name_AVP_Code), - aVP_Data := p_avpData - } - - - template User_Data_AVP m_user_Data_shData (octetstring p_ud) modifies m_user_Data_dummy := { - aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_Sh_AVP_Code, lengthof(p_ud), c_vendId3gpp), - aVP_Data := p_ud - } - - } //end group SpecificAVPHeaders - } //end group HeaderFieldTemplates - - /** Message templates for CER,CEA, DWR, DWA, AAA, AAR, .... methods */ - group MessageTemplates { - - group dummy_templates { - - template UNKNOWN_MSG mw_UNKNOWN_dummy := { - header := ?, - aVP_Type := * - } - group dummy_request_templates_send { - - template (value) AAR_MSG m_AAR_dummy := - { - header := m_diameterHeaderReq_dummy(AAR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aAR_Body := m_AAR_Body_dummy - } - - template (value) AAR_Body_AVP m_AAR_Body_dummy := - { - //dRMP := omit, - auth_Application_Id := m_authApplicationId_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - destination_Host := m_destinationHost_dummy, - iP_Domain := omit, - af_Application_Id := omit, - media_Component_Description := omit, - service_Info_Status := omit, - af_Charging_Identifier := omit, - sip_Forking_Indication := omit, - specific_Action := omit, - subscription_Id := omit, - //oC_Supported_Features := omit, - supported_Features := omit, - reservation_Priority := omit, - framed_IP_Address := omit, - framed_IPv6_Address := omit, - called_Station_Id := omit, - service_URN := omit, - sponsored_Connectivity_Data := omit, - mps_Identifier := omit, - gcs_Identifier := omit, - mcptt_Identifier := omit, - mCVideo_Identifier := omit, - iMS_Content_Identifier := omit, - iMS_Content_Type := omit, - rx_Request_Type := omit, - required_Access_Info := omit, - aF_Requested_Data := omit, - //reference_Id := omit, - pre_emption_Control_Info := omit, - user_Name := omit, - origin_State_Id := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) ACR_MSG m_ACR_dummy := { - header := m_diameterHeaderReq_dummy(ACR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aCR_Body := m_ACR_Body_dummy - } - - template (omit) ACR_Body_AVP m_ACR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - accounting_Record_Type := m_accounting_Record_Type_dummy, - accounting_Record_Number := m_accounting_Record_Number_dummy, - acct_Application_Id := omit, - vendor_Specific_Application_Id := omit, - user_Name := omit, - supported_Features := omit, - accounting_Sub_Session_Id := omit, - acct_Session_Id := omit, - acct_Multi_Session_Id := omit, - acct_Interim_Interval := omit, - accounting_Realtime_Required := omit, - origin_State_Id := omit, - event_Timestamp := omit, - proxy_Info := omit, - route_Record := omit, - service_Context_Id := omit, - service_Information := omit, - aVP_Type := omit - } - - template (value) ASR_MSG m_ASR_dummy := { - header := m_diameterHeaderReq_dummy(ASR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aSR_Body := m_ASR_Body_dummy - } - - template (value) ASR_Body_AVP m_ASR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - destination_Host := m_destinationHost_dummy, - auth_Application_Id := m_authApplicationId_dummy, - abort_cause := omit, - user_Name := omit, - origin_State_Id := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) CCR_MSG m_CCR_dummy := { - header := m_diameterHeaderReq_dummy(CCR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - cCR_Body := m_CCR_Body_dummy - } - - template (omit) CCR_Body_AVP m_CCR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - auth_Application_Id := m_authApplicationId_dummy, - service_Context_Id := omit, - cC_Request_Type := m_cC_Request_Type_dummy, - cC_Request_Number := m_cC_Request_Number_dummy, - destination_Host := omit, - user_Name := omit, - cC_Sub_Session_Id := omit, - acct_Multi_Session_Id := omit, - origin_State_Id := omit, - event_Timestamp := omit, - subscription_Id := omit, - service_Identifier := omit, - termination_Cause := omit, - requested_Service_Unit := omit, - requested_Action := omit, - used_Service_Unit := omit, - aoc_Request_Type_AVP := omit, - multiple_Services_Indicator := omit, - multiple_Services_Credit_Control := omit, - service_Parameter_Info := omit, - cC_Correlation_Id := omit, - supported_Features := omit, - network_Request_Support := omit, - packet_Filter_Information := omit, - packet_Filter_Operation := omit, - bearer_Identifier := omit, - bearer_Operation := omit, - framed_IP_Address := omit, - framed_IPv6_Prefix := omit, - iP_CAN_Type := omit, - threeGPP_RAT_Type := omit, - rat_Type := omit, - qoS_Information := omit, - qoS_Negotiation := omit, - qoS_Upgrade := omit, - default_EPS_Bearer_QoS := omit, - aN_GW_Address := omit, - threeGPP_SGSN_MCC_MNC := omit, - threeGPP_SGSN_Address := omit, - threeGPP_SGSN_IPv6_Address := omit, - rAI := omit, - threeGPP_User_Location_Info := omit, - threeGPP_MS_TimeZone := omit, - called_Station_Id := omit, - pDN_Connection_ID := omit, - bearer_Usage := omit, - online := omit, - offline := omit, - tFT_Packet_Filter_Information := omit, - charging_Rule_Report := omit, - event_Trigger := omit, - event_Report_Indication := omit, - access_Network_Charging_Address := omit, - access_Network_Charging_Identifier_Gx := omit, - coA_Information := omit, - usage_Monitoring_Information := omit, - routing_Rule_Install := omit, - routing_Rule_Remove := omit, - maximum_Bandwidth := omit, - logical_Access_ID := omit, - physical_Access_ID := omit, - session_Linking_Indicator := omit, - qoS_Rule_Report := omit, - subsesion_Enforcement_Info := omit, - threeGPP2_BSID := omit, - multiple_BBERF_Action := omit, - user_CSG_Information := omit, - user_Equipment_Info := omit, - proxy_Info := omit, - route_Record := omit, - service_Information := omit, - aVP_Type := omit - } - - template (value) CER_MSG m_CER_dummy := { - header := m_diameterHeaderReq_dummy(CER_E, c_applIdCommonMsg), - cER_Body := m_CER_Body_dummy - } - - template (value) CER_Body_AVP m_CER_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, - vendor_Id := m_vendorId_dummy, - product_Name := m_productName_dummy, - origin_State_Id := omit, - supported_Vendor_Id := omit, - auth_Application_Id := omit, - inband_Security_Id := omit, - acct_Application_Id := omit, - vendor_Specific_Application_Id := omit, - firmware_Revision := omit, - aVP_Type := omit - } - - template (value) DWR_MSG m_DWR_dummy := { - header := m_diameterHeaderReq_dummy(DWR_E, c_applIdCommonMsg), - dWR_Body := m_DWR_Body_dummy - } - - template (value) DWR_Body_AVP m_DWR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - origin_State_Id := omit, - aVP_Type := omit - } - - template (value) DPR_MSG m_DPR_dummy := { - header := m_diameterHeaderReq_dummy(DPR_E, c_applIdCommonMsg), - dPR_Body := m_DPR_Body_dummy - } - - template (value) DPR_Body_AVP m_DPR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - disconnect_Cause := m_disconnectCause_dummy, - aVP_Type := omit - } - - template (value) LIR_MSG m_LIR_dummy := { - header := m_diameterHeaderReq_dummy(LIR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - lIR_Body := m_LIR_Body_dummy - } - - template (value) LIR_Body_AVP m_LIR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - sIP_AOR := m_sIP_AOR_dummy, - destination_Host := omit, - originating_Request := omit, //only TS129 229 - supported_Features := omit, //only TS129 229 - public_Identity := omit, //required only in TS129 229 - user_Authorization_Type := omit, //only TS129 229 - session_Priority := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) MAR_MSG m_MAR_dummy := { - header := m_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - mAR_Body := m_MAR_Body_dummy - } - - template (value) MAR_Body_AVP m_MAR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - sIP_AOR := m_sIP_AOR_dummy, - sIP_Method := m_sIP_Method_dummy, - destination_Host := omit, - user_Name := omit, - supported_Features := omit, //only TS129 229 - public_Identity := omit, //required only in TS129 229 - sIP_Server_URI := omit, - sIP_Number_Auth_Items := omit, - sIP_Auth_Data_Item := omit, - server_Name := omit, //only TS129 229 - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PNR_MSG m_PNR_dummy := { - header := m_diameterHeaderReq_dummy(PNR_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - pNR_Body := m_PNR_Body_dummy - } - - template (value) PNR_Body_AVP m_PNR_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Host := omit, - destination_Realm := m_destinationRealm_dummy, - supported_Features := omit, - user_Identity := m_user_Identity_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - user_Data := m_user_Data_dummy, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PPR_MSG m_PPR_dummy := { - header := m_diameterHeaderReq_dummy(PPR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - pPR_Body := m_PPR_Body_dummy - } - - template (value) PPR_Body_AVP m_PPR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - user_Name := m_user_Name_dummy, - sIP_User_Data := omit, - sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, - destination_Host := m_destinationHost_dummy, - authorization_Lifetime := omit, - auth_Grace_Period := omit, - supported_Features := omit, //only TS129 229 - user_Data := omit, //only TS129 229 - charging_Information := omit, //only TS129 229 - sIP_Auth_Data_Item := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PUR_MSG m_PUR_dummy := { - header := m_diameterHeaderReq_dummy(PUR_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - pUR_Body := m_PUR_Body_dummy - } - - template (value) PUR_Body_AVP m_PUR_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Host := omit, - destination_Realm := m_destinationRealm_dummy, - supported_Features := omit, - user_Identity := m_user_Identity_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - data_Reference := {m_data_Reference_dummy}, - user_Data := m_user_Data_dummy, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) RAR_MSG m_RAR_dummy := { - header := m_diameterHeaderReq_dummy(RAR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - rAR_Body := m_RAR_Body_dummy - } - - template (value) RAR_Body_AVP m_RAR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - destination_Host := m_destinationHost_dummy, - auth_Application_Id := m_authApplicationId_dummy, - specific_Action := omit, - re_Auth_Request_Type := m_re_Auth_Request_dummy, - user_Name := omit, - acc_nc_ident := omit, - acc_nc_addr := omit, - flows := omit, - subscription_Id := omit, - abort_Cause := omit, - ip_Can := omit, - rat_Type := omit, - sponsored_Connectivity_Data := omit, - origin_State_Id := omit, - class := omit, - session_Release_Cause := omit, - event_Trigger := omit, - event_Report_Indication := omit, - charging_Rule_Remove := omit, - charging_Rule_Install := omit, - default_EPS_Bearer_QoS := omit, - qoS_Information := omit, - revalidation_Time := omit, - usage_Monitoring_Information := omit, - qoS_Rule_Install := omit, - qoS_Rule_Remove := omit, - subsession_Decision_Info := omit, - aN_GW_Address := omit, - multiple_BBERF_Action := omit, - proxy_Info := omit, - route_Record := omit, - g_s_u_Pool_Identifier := omit, - service_Identifier := omit, - rating_Group := omit, - aVP_Type := omit - } - - template (value) RTR_MSG m_RTR_dummy := { - header := m_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - rTR_Body := m_RTR_Body_dummy - } - - template (value) RTR_Body_AVP m_RTR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Host := m_destinationHost_dummy, - sIP_Deregistration_Reason := m_sIP_Deregistration_Reason_dummy, - destination_Realm := m_destinationRealm_dummy, - user_Name := omit, - sIP_AOR := omit, - associated_Identities := omit, //only TS129 229 - supported_Features := omit, //only TS129 229 - public_Identity := omit, //only TS129 229 - deregistration_Reason := omit, //required only in TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) SAR_MSG m_SAR_dummy := { - header := m_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - sAR_Body := m_SAR_Body_dummy - } - - template (value) SAR_Body_AVP m_SAR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - sIP_Server_Assignment_Type := m_sIP_Server_Assignment_Type_dummy, - sIP_User_Data_Already_Available := m_sIP_User_Data_Already_Available_dummy, - destination_Host := omit, - user_Name := omit, - sIP_Server_URI := omit, - sIP_Supported_User_Data_Type := omit, - sIP_AOR := omit, - supported_Features := omit, //only in TS129 229 - public_Identity := omit, //only in TS129 229 - wildcarded_Public_Identity := omit, //only in TS129 229 - server_Name := omit, //required only in TS129 229 - server_Assignment_Type := omit, //required only in TS129 229 - user_Data_Already_Available := omit, //required only in TS129 229 - sCSCF_Restoration_Info := omit, //only in TS129 229 - multiple_Registration_Indication := omit,//only in TS129 229 - session_Priority := omit, //only in TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) SNR_MSG m_SNR_dummy := { - header := m_diameterHeaderReq_dummy(SNR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - sNR_Body := m_SNR_Body_dummy - } - - template (value) SNR_Body_AVP m_SNR_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Host := omit, - destination_Realm := m_destinationRealm_dummy, - supported_Features := omit, - user_Identity := m_user_Identity_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - service_Indication := omit, - send_Data_Indication := omit, - server_Name := omit, - subs_Req_Type := m_subs_Req_Type_dummy, - data_Reference := {m_data_Reference_dummy}, - identity_Set := omit, - expiry_Time := omit, - dSAI_Tag := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit, - user_Name := omit - } - - template (value) STR_MSG m_STR_dummy := - { - header := m_diameterHeaderReq_dummy(STR_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - sTR_Body := m_STR_Body_dummy - } - - template (value) STR_Body_AVP m_STR_Body_dummy := - { - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - auth_Application_Id := m_authApplicationId_dummy, - termination_Cause := m_terminationCause_dummy, - user_Name := omit, - destination_Host := omit, - class := omit, - origin_State_Id := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) UAR_MSG m_UAR_dummy := - { - header := m_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - uAR_Body := m_UAR_Body_dummy - } - - template (value) UAR_Body_AVP m_UAR_Body_dummy := - { - vendor_Specific_Application_Id := omit,//required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Realm := m_destinationRealm_dummy, - sIP_AOR := m_sIP_AOR_dummy, - destination_Host := omit, - user_Name := omit, - sIP_Visited_Network_Id := m_sIP_Visited_Network_Id_dummy, - sIP_User_Authorization_Type := m_sIP_User_Authorization_Type, - supported_Features := omit, - public_Identity := omit, - visited_Network_Identifier := omit, - user_Authorization_Type := omit, - uAR_Flags := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) UDR_MSG m_UDR_dummy := { - header := m_diameterHeaderReq_dummy(UDR_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - uDR_Body := m_UDR_Body_dummy - } - - template (value) UDR_Body_AVP m_UDR_Body_dummy := - { - vendor_Specific_Application_Id := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - destination_Host := omit, - destination_Realm := m_destinationRealm_dummy, - supported_Features := omit, - user_Identity := m_user_Identity_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - server_Name := omit, - service_Indication := omit, - data_Reference := {m_data_Reference_dummy}, - identity_Set := omit, - requested_Domain := omit, - current_Location := omit, - dSAI_Tag := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - }//end group dummy_request_templates_send - group dummy_request_templates_receive { - - template AAR_MSG mw_AAR_dummy := - { - header := mw_diameterHeaderReq_dummy(AAR_E, ?), - session_Id := ?, - aAR_Body := mw_AAR_Body_dummy - } - - template AAR_Body_AVP mw_AAR_Body_dummy := - { - //dRMP := *, - auth_Application_Id := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - destination_Host := *, - iP_Domain := *, - af_Application_Id := *, - media_Component_Description := *, - service_Info_Status := *, - af_Charging_Identifier := *, - sip_Forking_Indication := *, - specific_Action := *, - subscription_Id := *, - //oC_Supported_Features := *, - supported_Features := *, - reservation_Priority := *, - framed_IP_Address := *, - framed_IPv6_Address := *, - called_Station_Id := *, - service_URN := *, - sponsored_Connectivity_Data := *, - mps_Identifier := *, - gcs_Identifier := *, - mcptt_Identifier := *, - mCVideo_Identifier := *, - iMS_Content_Identifier := *, - iMS_Content_Type := *, - rx_Request_Type := *, - required_Access_Info := *, - aF_Requested_Data := *, - //reference_Id := omit, - pre_emption_Control_Info := *, - user_Name := *, - origin_State_Id := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template ACR_MSG mw_ACR_dummy := { - header := mw_diameterHeaderReq_dummy(ACR_E, ?), - session_Id := ?, - aCR_Body := mw_ACR_Body_dummy - } - - template ACR_Body_AVP mw_ACR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - accounting_Record_Type := ?, - accounting_Record_Number := ?, - acct_Application_Id := *, - vendor_Specific_Application_Id := *, - user_Name := *, - supported_Features := *, - accounting_Sub_Session_Id := *, - acct_Session_Id := *, - acct_Multi_Session_Id := *, - acct_Interim_Interval := *, - accounting_Realtime_Required := *, - origin_State_Id := *, - event_Timestamp := *, - proxy_Info := *, - route_Record := *, - service_Context_Id := *, - service_Information := *, - aVP_Type := * - } - - template ASR_MSG mw_ASR_dummy := { - header := mw_diameterHeaderReq_dummy(ASR_E, ?), - session_Id := ?, - aSR_Body := mw_ASR_Body_dummy - } - - template ASR_Body_AVP mw_ASR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - destination_Host := ?, - auth_Application_Id := ?, - abort_cause := *, - user_Name := *, - origin_State_Id := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template CCR_MSG mw_CCR_dummy := { - header := mw_diameterHeaderReq_dummy(CCR_E, ?), - session_Id := ?, - cCR_Body := mw_CCR_Body_dummy - } - - template CCR_Body_AVP mw_CCR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - auth_Application_Id := ?, - service_Context_Id := *, - cC_Request_Type := ?, - cC_Request_Number := ?, - destination_Host := *, - user_Name := *, - cC_Sub_Session_Id := *, - acct_Multi_Session_Id := *, - origin_State_Id := *, - event_Timestamp := *, - subscription_Id := *, - service_Identifier := *, - termination_Cause := *, - requested_Service_Unit := *, - requested_Action := *, - used_Service_Unit := *, - aoc_Request_Type_AVP := *, - multiple_Services_Indicator := *, - multiple_Services_Credit_Control := *, - service_Parameter_Info := *, - cC_Correlation_Id := *, - supported_Features := *, - network_Request_Support := *, - packet_Filter_Information := *, - packet_Filter_Operation := *, - bearer_Identifier := *, - bearer_Operation := *, - framed_IP_Address := *, - framed_IPv6_Prefix := *, - iP_CAN_Type := *, - threeGPP_RAT_Type := *, - rat_Type := *, - qoS_Information := *, - qoS_Negotiation := *, - qoS_Upgrade := *, - default_EPS_Bearer_QoS := *, - aN_GW_Address := *, - threeGPP_SGSN_MCC_MNC := *, - threeGPP_SGSN_Address := *, - threeGPP_SGSN_IPv6_Address := *, - rAI := *, - threeGPP_User_Location_Info := *, - threeGPP_MS_TimeZone := *, - called_Station_Id := *, - pDN_Connection_ID := *, - bearer_Usage := *, - online := *, - offline := *, - tFT_Packet_Filter_Information := *, - charging_Rule_Report := *, - event_Trigger := *, - event_Report_Indication := *, - access_Network_Charging_Address := *, - access_Network_Charging_Identifier_Gx := *, - coA_Information := *, - usage_Monitoring_Information := *, - routing_Rule_Install := *, - routing_Rule_Remove := *, - maximum_Bandwidth := *, - logical_Access_ID := *, - physical_Access_ID := *, - session_Linking_Indicator := *, - qoS_Rule_Report := *, - subsesion_Enforcement_Info := *, - threeGPP2_BSID := *, - multiple_BBERF_Action := *, - user_CSG_Information := *, - user_Equipment_Info := *, - proxy_Info := *, - route_Record := *, - service_Information := *, - aVP_Type := * - } - - template CER_MSG mw_CER_dummy := { - header := mw_diameterHeaderReq_dummy(CER_E, ?), - cER_Body := mw_CER_Body_dummy - } - - template CER_Body_AVP mw_CER_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - host_IP_Address := ?, - vendor_Id := ?, - product_Name := ?, - origin_State_Id := *, - supported_Vendor_Id := *, - auth_Application_Id := *, - inband_Security_Id := *, - acct_Application_Id := *, - vendor_Specific_Application_Id := *, - firmware_Revision := *, - aVP_Type := * - } - - template DWR_MSG mw_DWR_dummy := { - header := mw_diameterHeaderReq_dummy(DWR_E, ?), - dWR_Body := mw_DWR_Body_dummy - } - - template DWR_Body_AVP mw_DWR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - origin_State_Id := *, - aVP_Type := * - } - - template DPR_MSG mw_DPR_dummy := { - header := mw_diameterHeaderReq_dummy(DPR_E, ?), - dPR_Body := mw_DPR_Body_dummy - } - - template DPR_Body_AVP mw_DPR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - disconnect_Cause := ?, - aVP_Type := * - } - - template LIR_MSG mw_LIR_dummy := { - header := mw_diameterHeaderReq_dummy(LIR_E, ?), - session_Id := ?, - lIR_Body := mw_LIR_Body_dummy - } - - template LIR_Body_AVP mw_LIR_Body_dummy := - { - vendor_Specific_Application_Id := *, - auth_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - sIP_AOR := ?, - destination_Host := *, - originating_Request := *, //only TS129 229 - supported_Features := *, //only TS129 229 - public_Identity := *, //required only in TS129 229 - user_Authorization_Type := *, //only TS129 229 - session_Priority := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template MAR_MSG mw_MAR_dummy := { - header := mw_diameterHeaderReq_dummy(MAR_E, ?), - session_Id := ?, - mAR_Body := mw_MAR_Body_dummy - } - - template MAR_Body_AVP mw_MAR_Body_dummy := - { - vendor_Specific_Application_Id := *, - auth_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - sIP_AOR := ?, - sIP_Method := ?, - destination_Host := *, - user_Name := *, - supported_Features := *,//only TS129 229 - public_Identity := *, //required only in TS129 229 - sIP_Server_URI := *, - sIP_Number_Auth_Items := *, - sIP_Auth_Data_Item := *, - server_Name := *, //only TS129 229 - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template PNR_MSG mw_PNR_dummy := { - header := mw_diameterHeaderReq_dummy(PNR_E, ?), - session_Id := ?, - pNR_Body := mw_PNR_Body_dummy - } - - template PNR_Body_AVP mw_PNR_Body_dummy := - { - vendor_Specific_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := *, - destination_Realm := ?, - supported_Features := *, - user_Identity := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - user_Data := ?, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template PPR_MSG mw_PPR_dummy := { - header := mw_diameterHeaderReq_dummy(PPR_E, ?), - session_Id := ?, - pPR_Body := mw_PPR_Body_dummy - } - - template PPR_Body_AVP mw_PPR_Body_dummy := - { - vendor_Specific_Application_Id := *, - auth_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := ?, - destination_Realm := ?, - user_Name := ?, - sIP_User_Data := *, - sIP_Accounting_Information := ?, - authorization_Lifetime := *, - auth_Grace_Period := *, - supported_Features := *, //only TS129 229 - user_Data := *, //only TS129 229 - charging_Information := *, //only TS129 229 - sIP_Auth_Data_Item := *, //only TS129 229 - proxy_Info := ?, - route_Record := ?, - aVP_Type := ? - } - - template PUR_MSG mw_PUR_dummy := { - header := mw_diameterHeaderReq_dummy(PUR_E, ?), - session_Id := ?, - pUR_Body := mw_PUR_Body_dummy - } - - template PUR_Body_AVP mw_PUR_Body_dummy := - { - vendor_Specific_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := *, - destination_Realm := ?, - supported_Features := *, - user_Identity := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - data_Reference := ?, - user_Data := ?, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template RAR_MSG mw_RAR_dummy := { - header := mw_diameterHeaderReq_dummy(RAR_E, ?), - session_Id := ?, - rAR_Body := mw_RAR_Body_dummy - } - - template RAR_Body_AVP mw_RAR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - destination_Host := ?, - auth_Application_Id := ?, - specific_Action := *, - re_Auth_Request_Type := ?, - user_Name := *, - acc_nc_ident := *, - acc_nc_addr := *, - flows := *, - subscription_Id := *, - abort_Cause := *, - ip_Can := *, - rat_Type := *, - sponsored_Connectivity_Data := *, - origin_State_Id := *, - class := *, - session_Release_Cause := *, - event_Trigger := *, - event_Report_Indication := *, - charging_Rule_Remove := *, - charging_Rule_Install := *, - default_EPS_Bearer_QoS := *, - qoS_Information := *, - revalidation_Time := *, - usage_Monitoring_Information := *, - qoS_Rule_Install := *, - qoS_Rule_Remove := *, - subsession_Decision_Info := *, - aN_GW_Address := *, - multiple_BBERF_Action := *, - proxy_Info := *, - route_Record := *, - g_s_u_Pool_Identifier := *, - service_Identifier := *, - rating_Group := *, - aVP_Type := * - } - - template RTR_MSG mw_RTR_dummy := { - header := mw_diameterHeaderReq_dummy(RTR_E, ?), - session_Id := ?, - rTR_Body := mw_RTR_Body_dummy - } - - template RTR_Body_AVP mw_RTR_Body_dummy := - { - vendor_Specific_Application_Id := *,//required only in TS129 229 - auth_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := ?, - destination_Realm := ?, - sIP_Deregistration_Reason := ?, - user_Name := *, - sIP_AOR := *, - associated_Identities := *, //only TS129 229 - supported_Features := *, //only TS129 229 - public_Identity := *, //only TS129 229 - deregistration_Reason := *, //required only in TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template SAR_MSG mw_SAR_dummy := { - header := mw_diameterHeaderReq_dummy(SAR_E, ?), - session_Id := ?, - sAR_Body := mw_SAR_Body_dummy - } - - template SAR_Body_AVP mw_SAR_Body_dummy := - { - vendor_Specific_Application_Id :=*, //required only in TS129 229 - auth_Application_Id := ?, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - sIP_Server_Assignment_Type := ?, - sIP_User_Data_Already_Available := ?, - destination_Host := *, - user_Name := *, - sIP_Server_URI := *, - sIP_Supported_User_Data_Type := *, - sIP_AOR := *, - supported_Features := *, //only in TS129 229 - public_Identity := *, //only in TS129 229 - wildcarded_Public_Identity := *, //only in TS129 229 - server_Name := *, //required only in TS129 229 - server_Assignment_Type := *, //required only in TS129 229 - user_Data_Already_Available := *, //required only in TS129 229 - sCSCF_Restoration_Info := *, //only in TS129 229 - multiple_Registration_Indication := *,//only in TS129 229 - session_Priority := *, //only in TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template SNR_MSG mw_SNR_dummy := { - header := mw_diameterHeaderReq_dummy(SNR_E, ?), - session_Id := ?, - sNR_Body := mw_SNR_Body_dummy - } - - template SNR_Body_AVP mw_SNR_Body_dummy := - { - vendor_Specific_Application_Id := ?,//required only in TS129 229 - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := *, - destination_Realm := ?, - supported_Features := *, - user_Identity := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - service_Indication := *, - send_Data_Indication := *, - server_Name := *, - subs_Req_Type := ?, - data_Reference := ?, - identity_Set := *, - expiry_Time := *, - dSAI_Tag := *, - proxy_Info := *, - route_Record := *, - aVP_Type := *, - user_Name := * - } - - template STR_MSG mw_STR_dummy := - { - header := mw_diameterHeaderReq_dummy(STR_E, ?), - session_Id := ?, - sTR_Body := mw_STR_Body_dummy - } - - template STR_Body_AVP mw_STR_Body_dummy := - { - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - auth_Application_Id := ?, - termination_Cause := ?, - user_Name := *, - destination_Host := *, - class := *, - origin_State_Id := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template UAR_MSG mw_UAR_dummy := { - header := mw_diameterHeaderReq_dummy(UAR_E, ?), - session_Id := ?, - uAR_Body := mw_UAR_Body_dummy - } - - template UAR_Body_AVP mw_UAR_Body_dummy := - { - vendor_Specific_Application_Id := *, - auth_Application_Id := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Realm := ?, - sIP_AOR := ?, - destination_Host := *, - user_Name := *, - sIP_Visited_Network_Id := ?, - sIP_User_Authorization_Type := ?, - supported_Features := *, - public_Identity := *, - visited_Network_Identifier := *, - user_Authorization_Type := *, - uAR_Flags := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template UDR_MSG mw_UDR_dummy := { - header := mw_diameterHeaderReq_dummy(UDR_E, ?), - session_Id := ?, - uDR_Body := mw_UDR_Body_dummy - } - - template UDR_Body_AVP mw_UDR_Body_dummy := - { - vendor_Specific_Application_Id := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - destination_Host := *, - destination_Realm := ?, - supported_Features := *, - user_Identity := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - server_Name := *, - service_Indication := *, - data_Reference := ?, - identity_Set := *, - requested_Domain := *, - current_Location := *, - dSAI_Tag := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - }//end group dummy_request_templates_receive - group dummy_answer_templates_send { - - template (value) AAA_MSG m_AAA_dummy := - { - header := m_diameterHeaderAns_dummy(AAA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aAA_Body := m_AAA_Body_dummy - } - - template (value) AAA_Body_AVP m_AAA_Body_dummy := - { - //dRMP := omit, - auth_Application_Id := m_authApplicationId_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - result_Code := omit, - experimental_Result := omit, - auth_Session_State := omit, - access_network_charging_Identifier := omit, - access_network_charging_address := omit, - acceptable_service_info := omit, - aN_GW_Address := omit, - //aN_Trusted := omit, - service_Authorization_Info := omit, - ip_Can_Type := omit, - //netLoc_Access_Support := omit, - rat_Type := omit, - flows := omit, - //oC_Supported_Features := *, - //oC_OLR := *, - supported_Features := omit, - subscription_Id_AVP := omit, - user_Equipment_Info := omit, - threeGPP_SGSN_MCC_MNC := omit, - class_ := omit, - user_Name := omit, - error_Message := omit, - error_Reporting_Host := omit, - failed := omit, - retry_Interval := omit, - origin_State_Id := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - proxy_Info := omit, - // load:= omit, - aVP_Type := omit - } - - template (value) ACA_MSG m_ACA_dummy := { - header := m_diameterHeaderAns_dummy(ACA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aCA_Body := m_ACA_Body_dummy - } - - template (omit) ACA_Body_AVP m_ACA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - accounting_Record_Type := m_accounting_Record_Type_dummy, - accounting_Record_Number := m_accounting_Record_Number_dummy, - acct_Application_Id := omit, - vendor_Specific_Application_Id := omit, - user_Name := omit, - accounting_Sub_Session_Id := omit, - acct_Session_Id := omit, - acct_Multi_Session_Id := omit, - error_Reporting_Host := omit, - acct_Interim_Interval := omit, - accounting_Realtime_Required := omit, - origin_State_Id := omit, - event_Timestamp := omit, - proxy_Info := omit, - aVP_Type := omit - } - - template (value) ASA_MSG m_ASA_dummy := { - header := m_diameterHeaderAns_dummy(ASA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - aSA_Body := m_ASA_Body_dummy - } - - template (value) ASA_Body_AVP m_ASA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - user_Name := omit, - origin_State_Id := omit, - error_Message := omit, - error_Reporting_Host := omit, - failed := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - proxy_Info := omit, - aVP_Type := omit - } - - template (value) CCA_MSG m_CCA_dummy := { - header := m_diameterHeaderAns_dummy(CCA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - cCA_Body := m_CCA_Body_dummy - } - - template (omit) CCA_Body_AVP m_CCA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - auth_Application_Id := m_authApplicationId_dummy, - cC_Request_Type := m_cC_Request_Type_dummy, - cC_Request_Number := m_cC_Request_Number_dummy, - user_Name := omit, - cC_Session_Failover := omit, - cC_Sub_Session_Id := omit, - acct_Multi_Session_Id := omit, - origin_State_Id := omit, - event_Timestamp := omit, - granted_Service_Unit := omit, - multiple_Services_Credit_Control := omit, - cost_Information := omit, - final_Unit_Indication := omit, - check_Balance_Result := omit, - low_Balance_Indication := omit, - remaining_Balance := omit, - credit_Control_Failure_Handling := omit, - direct_Debiting_Failure_Handling := omit, - validity_Time := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - experimental_Result := omit, - supported_Features := omit, - bearer_Control_Mode := omit, - event_Trigger := omit, - charging_Rule_Remove := omit, - charging_Rule_Install := omit, - charging_Information := omit, - online := omit, - offline := omit, - qoS_Information := omit, - revalidation_Time := omit, - default_EPS_Bearer_QoS := omit, - bearer_Usage := omit, - threeGPP_User_Location_Info := omit, - usage_Monitoring_Information := omit, - cSG_Information_Reporting := omit, - user_CSG_Information := omit, - error_Message := omit, - error_Reporting_Host := omit, - qoS_Rule_Install := omit, - qoS_Rule_Remove := omit, - subsession_Decision_Info := omit, - aN_GW_Address := omit, - proxy_Info := omit, - route_Record := omit, - failed := omit, - service_Information := omit, - aVP_Type := omit - } - - template (value) CEA_MSG m_CEA_dummy := { - header := m_diameterHeaderAns_dummy(CEA_E, c_applIdCommonMsg), - cEA_Body := m_CEA_Body_dummy - } - - template (value) CEA_Body_AVP m_CEA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, - vendor_Id := m_vendorId_dummy, - product_Name := m_productName_dummy, - origin_State_Id := omit, - error_Message := omit, - failed := omit, - supported_Vendor_Id := omit, - auth_Application_Id := omit, - inband_Security_Id := omit, - acct_Application_Id := omit, - vendor_Specific_Application_Id := omit, - firmware_Revision := omit, - aVP_Type := omit - } - - template (value) DWA_MSG m_DWA_dummy := { - header := m_diameterHeaderAns_dummy(DWA_E, c_applIdCommonMsg), - dWA_Body := m_DWA_Body_dummy - } - - template (value) DWA_Body_AVP m_DWA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - error_Message := omit, - failed := omit, - origin_State_Id := omit, - aVP_Type := omit - } - - template (value) DPA_MSG m_DPA_dummy := { - header := m_diameterHeaderAns_dummy(DPA_E, c_applIdCommonMsg), - dPA_Body := m_DPA_Body_dummy - } - - template (value) DPA_Body_AVP m_DPA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - error_Message := omit, - failed := omit, - aVP_Type := omit - } - - template (value) LIA_MSG m_LIA_dummy := { - header := m_diameterHeaderAns_dummy(LIA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - lIA_Body := m_LIA_Body_dummy - } - - template (value) LIA_Body_AVP m_LIA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - sIP_Server_URI := omit, - sIP_Server_Capabilities := omit, - auth_Grace_Period := omit, - authorization_Lifetime := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - supported_Features := omit, //only TS129 229 - server_Name := omit, //only TS129 229 - server_Capabilities := omit, //only TS129 229 - wildcarded_Public_Identity := omit, //only TS129 229 - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) MAA_MSG m_MAA_dummy := { - header := m_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - mAA_Body := m_MAA_Body_dummy - } - - template (value) MAA_Body_AVP m_MAA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - user_Name := omit, - supported_Features := omit, //required only in TS129 229 - public_Identity := omit, //only in RFC4740 - sIP_AOR := omit, - sIP_Number_Auth_Items := omit, - sIP_Auth_Data_Item := omit, - auth_Grace_Period := omit, - authorization_Lifetime := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PNA_MSG m_PNA_dummy := { - header := m_diameterHeaderAns_dummy(PNA_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - pNA_Body := m_PNA_Body_dummy - } - - template (value) PNA_Body_AVP m_PNA_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - supported_Features := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - failed := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PPA_MSG m_PPA_dummy := { - header := m_diameterHeaderAns_dummy(PPA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - pPA_Body := m_PPA_Body_dummy - } - - template (value) PPA_Body_AVP m_PPA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - supported_Features := omit, //only TS129 229 - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) PUA_MSG m_PUA_dummy := { - header := m_diameterHeaderAns_dummy(PUA_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - pUA_Body := m_PUA_Body_dummy - } - - template (value) PUA_Body_AVP m_PUA_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, - result_Code := omit, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - repository_Data_Id := omit, - data_Reference := omit, - supported_Features := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - failed := omit, - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) RAA_MSG m_RAA_dummy := { - header := m_diameterHeaderAns_dummy(RAA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - rAA_Body := m_RAA_Body_dummy - } - - template (value) RAA_Body_AVP m_RAA_Body_dummy := - { - result_Code := omit, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - experimental_Result := omit, - user_Name := omit, - media_Component_Description := omit, - service_URN := omit, - origin_State_Id := omit, - class := omit, - iP_CAN_Type := omit, - rat_Type := omit, - aN_GW_Address := omit, - threeGPP_SGSN_MCC_MNC := omit, - threeGPP_SGSN_Address := omit, - threeGPP_SGSN_IPv6_Address := omit, - rAI := omit, - threeGPP_User_Location_Info := omit, - threeGPP_MS_TimeZone := omit, - charging_Rule_Report := omit, - error_Message := omit, - error_Reporting_Host := omit, - failed := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - framed_IP_Address := omit, - framed_IPv6_Prefix := omit, - threeGPP2_BSID := omit, - qoS_Information := omit, - qoS_Rule_Report := omit, - subsesion_Enforcement_Info := omit, - user_CSG_Information := omit, - proxy_Info := omit, - aVP_Type := omit - } - - template (value) RTA_MSG m_RTA_dummy := { - header := m_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - rTA_Body := m_RTA_Body_dummy - } - - template (value) RTA_Body_AVP m_RTA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - authorization_Lifetime := omit, - auth_Grace_Period := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - associated_Identities := omit, //only TS129 229 - supported_Features := omit, //only TS129 229 - identity_with_Emergency_Registration := omit, //only TS129 229 - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) SAA_MSG m_SAA_dummy := - { - header := m_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - sAA_Body := m_SAA_Body_dummy - } - - template (value) SAA_Body_AVP m_SAA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - sIP_User_Data := {m_sIP_User_Data_dummy}, - sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, - sIP_Supported_User_Data_Type := omit, - user_Name := omit, - auth_Grace_Period := omit, - authorization_Lifetime := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - supported_Features := omit, //only TS129 229 - user_Data := omit, //only TS129 229 - charging_Information := omit, //only TS129 229 - associated_Identities := omit, //only TS129 229 - loose_Route_Indication := omit, //only TS129 229 - sCSCF_Restoration_Info := omit, //only TS129 229 - associated_Registered_Identities := omit, //only TS129 229 - server_Name := omit, //only TS129 229 - wildcarded_Public_Identity := omit, //only TS129 229 - priviledged_Sender_Indication := omit, //only TS129 229 - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) SNA_MSG m_SNA_dummy := - { - header := m_diameterHeaderAns_dummy(SNA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - sNA_Body := m_SNA_Body_dummy - } - - template (value) SNA_Body_AVP m_SNA_Body_dummy := - { - - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 - auth_Session_State := m_auth_Session_State_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - supported_Features := omit, - user_Data := omit, //only TS129 229 - expiry_Time := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - failed := omit, //only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) STA_MSG m_STA_dummy := - { - header := m_diameterHeaderAns_dummy(STA_E, c_applIdCommonMsg), - session_Id := m_sessionId_dummy, - sTA_Body := m_STA_Body_dummy - } - - template (value) STA_Body_AVP m_STA_Body_dummy := - { - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - user_Name := omit, - class := omit, - error_Message := omit, - error_Reporting_Host := omit, - failed := omit, - sponsored_Connectivity_Data := omit, - origin_State_Id := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - proxy_Info := omit, - aVP_Type := omit - } - - template (value) UAA_MSG m_UAA_dummy := { - header := m_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), - session_Id := m_sessionId_dummy, - uAA_Body := m_UAA_Body_dummy - } - - template (value) UAA_Body_AVP m_UAA_Body_dummy := - { - vendor_Specific_Application_Id := omit, //required only in TS129 229 - auth_Application_Id := m_authApplicationId_dummy, - auth_Session_State := m_auth_Session_State_dummy, - result_Code := m_resultCode_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - sIP_Server_URI := omit, - sIP_Server_Capabilities := omit, - authorization_Lifetime := omit, - auth_Grace_Period := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - experimental_Result := omit,//only TS129 229 - supported_Features := omit,//only TS129 229 - server_Name := omit,//only TS129 229 - server_Capabilities := omit,//only TS129 229 - failed := omit,//only TS129 229 - proxy_Info := omit, - route_Record := omit, - aVP_Type := omit - } - - template (value) UDA_MSG m_UDA_dummy := { - header := m_diameterHeaderAns_dummy(UDA_E, c_applId3GPPShDh), - session_Id := m_sessionId_dummy, - uDA_Body := m_UDA_Body_dummy - } - - template (value) UDA_Body_AVP m_UDA_Body_dummy := - { - vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, - result_Code := m_resultCode_dummy, - experimental_Result := omit, - auth_Session_State := m_auth_Session_State_dummy, - origin_Host := m_originHost_dummy, - origin_Realm := m_originRealm_dummy, - supported_Features := omit, - wildcarded_PSI := omit, - wildcarded_IMPU := omit, - user_Data := omit, - redirect_Host := omit, - redirect_Host_Usage := omit, - redirect_Max_Cache_Time := omit, - aVP_Type := omit, - failed := omit, - proxy_Info := omit, - route_Record := omit - } - - }//end group dummy_answer_templates_send - group dummy_answer_templates_receive { - - template AAA_MSG mw_AAA_dummy := - { - header := mw_diameterHeaderAns_dummy(AAA_E, ?), - session_Id := ?, - aAA_Body := mw_AAA_Body_dummy - } - - template AAA_Body_AVP mw_AAA_Body_dummy := - { - //dRMP := *, - auth_Application_Id := ?, - origin_Host := ?, - origin_Realm := ?, - result_Code := *, - experimental_Result := *, - auth_Session_State :=*, - access_network_charging_Identifier := *, - access_network_charging_address := *, - acceptable_service_info := *, - aN_GW_Address := *, - //aN_Trusted := *, - service_Authorization_Info := *, - ip_Can_Type := *, - //netLoc_Access_Support := *, - rat_Type := *, - flows := *, - //oC_Supported_Features := *, - //oC_OLR := *, - supported_Features := *, - subscription_Id_AVP := *, - user_Equipment_Info := *, - threeGPP_SGSN_MCC_MNC := *, - class_ := *, - user_Name := *, - error_Message := *, - error_Reporting_Host := *, - failed := *, - retry_Interval := *, - origin_State_Id := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - proxy_Info := *, - // load:= *, - aVP_Type := * - } - - template ACA_MSG mw_ACA_dummy := { - header := mw_diameterHeaderAns_dummy(ACA_E, ?), - session_Id := ?, - aCA_Body := mw_ACA_Body_dummy - } - - template ACA_Body_AVP mw_ACA_Body_dummy := - { - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - accounting_Record_Type := ?, - accounting_Record_Number := ?, - acct_Application_Id := *, - vendor_Specific_Application_Id := *, - user_Name := *, - accounting_Sub_Session_Id := *, - acct_Session_Id := *, - acct_Multi_Session_Id := *, - error_Reporting_Host := *, - acct_Interim_Interval := *, - accounting_Realtime_Required := *, - origin_State_Id := *, - event_Timestamp := *, - proxy_Info := *, - aVP_Type := * - } - - template ASA_MSG mw_ASA_dummy := { - header := mw_diameterHeaderAns_dummy(ASA_E, ?), - session_Id := ?, - aSA_Body := mw_ASA_Body_dummy - } - - template ASA_Body_AVP mw_ASA_Body_dummy := - { - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - user_Name := *, - origin_State_Id := *, - error_Message := *, - error_Reporting_Host := *, - failed := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - proxy_Info := *, - aVP_Type := * - } - - template CCA_MSG mw_CCA_dummy := { - header := mw_diameterHeaderAns_dummy(CCA_E, ?), - session_Id := ?, - cCA_Body := mw_CCA_Body_dummy - } - - template CCA_Body_AVP mw_CCA_Body_dummy := - { - result_Code := *, - origin_Host := ?, - origin_Realm := ?, - auth_Application_Id := ?, - cC_Request_Type := ?, - cC_Request_Number := ?, - user_Name := *, - cC_Session_Failover := *, - cC_Sub_Session_Id := *, - acct_Multi_Session_Id := *, - origin_State_Id := *, - event_Timestamp := *, - granted_Service_Unit := *, - multiple_Services_Credit_Control := *, - cost_Information := *, - final_Unit_Indication := *, - check_Balance_Result := *, - low_Balance_Indication := *, - remaining_Balance := *, - credit_Control_Failure_Handling := *, - direct_Debiting_Failure_Handling := *, - validity_Time := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - experimental_Result := *, - supported_Features := *, - bearer_Control_Mode := *, - event_Trigger := *, - charging_Rule_Remove := *, - charging_Rule_Install := *, - charging_Information := *, - online := *, - offline := *, - qoS_Information := *, - revalidation_Time := *, - default_EPS_Bearer_QoS := *, - bearer_Usage := *, - threeGPP_User_Location_Info := *, - usage_Monitoring_Information := *, - cSG_Information_Reporting := *, - user_CSG_Information := *, - error_Message := *, - error_Reporting_Host := *, - qoS_Rule_Install := *, - qoS_Rule_Remove := *, - subsession_Decision_Info := *, - aN_GW_Address := *, - proxy_Info := *, - route_Record := *, - failed := *, - service_Information := *, - aVP_Type := * - } - - template CEA_MSG mw_CEA_dummy := { - header := mw_diameterHeaderAns_dummy(CEA_E, ?), - cEA_Body := mw_CEA_Body_dummy - } - - template CEA_Body_AVP mw_CEA_Body_dummy := - { - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - host_IP_Address := ?, - vendor_Id := ?, - product_Name := ?, - origin_State_Id := *, - error_Message := *, - failed := *, - supported_Vendor_Id := *, - auth_Application_Id := *, - inband_Security_Id := *, - acct_Application_Id := *, - vendor_Specific_Application_Id := *, - firmware_Revision := *, - aVP_Type := * - } - - template DWA_MSG mw_DWA_dummy := { - header := mw_diameterHeaderAns_dummy(DWA_E, ?), - dWA_Body := mw_DWA_Body_dummy - } - - template DWA_Body_AVP mw_DWA_Body_dummy := - { - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - error_Message := *, - failed := *, - origin_State_Id := *, - aVP_Type := * - } - - template DPA_MSG mw_DPA_dummy := { - header := mw_diameterHeaderAns_dummy(DPA_E, ?), - dPA_Body := mw_DPA_Body_dummy - } - - template DPA_Body_AVP mw_DPA_Body_dummy := - { - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - error_Message := *, - failed := *, - aVP_Type := * - } - - template LIA_MSG mw_LIA_dummy := { - header := mw_diameterHeaderAns_dummy(LIA_E, ?), - session_Id := ?, - lIA_Body := mw_LIA_Body_dummy - } - - template LIA_Body_AVP mw_LIA_Body_dummy := - { - vendor_Specific_Application_Id := *,//only TS129 229 - auth_Application_Id := ?, - result_Code := ?, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - sIP_Server_URI := *, - sIP_Server_Capabilities := *, - auth_Grace_Period := *, - authorization_Lifetime := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - supported_Features := *, //only TS129 229 - server_Name := *, //only TS129 229 - server_Capabilities := *, //only TS129 229 - wildcarded_Public_Identity := *, //only TS129 229 - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template MAA_MSG mw_MAA_dummy := { - header := mw_diameterHeaderAns_dummy(MAA_E, ?), - session_Id := ?, - mAA_Body := mw_MAA_Body_dummy - } - - template MAA_Body_AVP mw_MAA_Body_dummy := - { - vendor_Specific_Application_Id := *,//only TS129 229 - auth_Application_Id := ?, - result_Code := ?, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - user_Name := *, - supported_Features :=*, //required only in TS129 229 - public_Identity :=*, //only in RFC4740 - sIP_AOR := *, - sIP_Number_Auth_Items := *, - sIP_Auth_Data_Item := *, - auth_Grace_Period := *, - authorization_Lifetime := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template PNA_MSG mw_PNA_dummy := { - header := mw_diameterHeaderAns_dummy(PNA_E, ?), - session_Id := ?, - pNA_Body := mw_PNA_Body_dummy - } - - template PNA_Body_AVP mw_PNA_Body_dummy := - { - vendor_Specific_Application_Id := ?, - result_Code := ?, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - supported_Features := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template PPA_MSG mw_PPA_dummy := { - header := mw_diameterHeaderAns_dummy(PPA_E, ?), - session_Id := ?, - pPA_Body := mw_PPA_Body_dummy - } - - template PPA_Body_AVP mw_PPA_Body_dummy := - { - vendor_Specific_Application_Id := *,//only TS129 229 - auth_Application_Id := ?, - result_Code := ?, - experimental_Result :=*, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - supported_Features := *, //only TS129 229 - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template PUA_MSG mw_PUA_dummy := { - header := mw_diameterHeaderAns_dummy(PUA_E, ?), - session_Id := ?, - pUA_Body := mw_PUA_Body_dummy - } - - template PUA_Body_AVP mw_PUA_Body_dummy := - { - vendor_Specific_Application_Id := ?, - result_Code := *, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - repository_Data_Id := *, - data_Reference := *, - supported_Features := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template RAA_MSG mw_RAA_dummy := { - header := mw_diameterHeaderAns_dummy(RAA_E, ?), - session_Id := ?, - rAA_Body := mw_RAA_Body_dummy - } - - template RAA_Body_AVP mw_RAA_Body_dummy := - { - result_Code := *, - origin_Host := ?, - origin_Realm := ?, - experimental_Result := *, - user_Name := *, - media_Component_Description := *, - service_URN := *, - origin_State_Id := *, - class := *, - iP_CAN_Type := *, - rat_Type := *, - aN_GW_Address := *, - threeGPP_SGSN_MCC_MNC := *, - threeGPP_SGSN_Address := *, - threeGPP_SGSN_IPv6_Address := *, - rAI := *, - threeGPP_User_Location_Info := *, - threeGPP_MS_TimeZone := *, - charging_Rule_Report := *, - error_Message := *, - error_Reporting_Host := *, - failed := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - framed_IP_Address := *, - framed_IPv6_Prefix := *, - threeGPP2_BSID := *, - qoS_Information := *, - qoS_Rule_Report := *, - subsesion_Enforcement_Info := *, - user_CSG_Information := *, - proxy_Info := *, - aVP_Type := * - } - - template RTA_MSG mw_RTA_dummy := { - header := mw_diameterHeaderAns_dummy(RTA_E, ?), - session_Id := ?, - rTA_Body := mw_RTA_Body_dummy - } - - template RTA_Body_AVP mw_RTA_Body_dummy := - { - vendor_Specific_Application_Id := *,//only TS129 229 - auth_Application_Id := ?, - result_Code := ?, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - authorization_Lifetime := *, - auth_Grace_Period := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - associated_Identities := *, //only TS129 229 - supported_Features := *, //only TS129 229 - identity_with_Emergency_Registration := *, //only TS129 229 - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template SAA_MSG mw_SAA_dummy := - { - header := mw_diameterHeaderAns_dummy(SAA_E, ?), - session_Id := ?, - sAA_Body := mw_SAA_Body_dummy - } - - template SAA_Body_AVP mw_SAA_Body_dummy := - { - vendor_Specific_Application_Id := omit,//only TS129 229 - auth_Application_Id := ?, - result_Code := ?, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - sIP_User_Data := ?, - sIP_Accounting_Information := ?, - sIP_Supported_User_Data_Type := *, - user_Name := *, - auth_Grace_Period := *, - authorization_Lifetime := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - supported_Features := *, //only TS129 229 - user_Data := *, //only TS129 229 - charging_Information := *, //only TS129 229 - associated_Identities := *, //only TS129 229 - loose_Route_Indication := *, //only TS129 229 - sCSCF_Restoration_Info := *, //only TS129 229 - associated_Registered_Identities := *, //only TS129 229 - server_Name := *, //only TS129 229 - wildcarded_Public_Identity := *, //only TS129 229 - priviledged_Sender_Indication := *, //only TS129 229 - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template SNA_MSG mw_SNA_dummy := - { - header := mw_diameterHeaderAns_dummy(SNA_E, ?), - session_Id := ?, - sNA_Body := mw_SNA_Body_dummy - } - - template SNA_Body_AVP mw_SNA_Body_dummy := - { - - vendor_Specific_Application_Id := ?,//required only in TS129 229 - auth_Session_State := ?, - result_Code := ?, - experimental_Result := *, - origin_Host := ?, - origin_Realm := ?, - wildcarded_PSI := *, - wildcarded_IMPU := *, - supported_Features := *, - user_Data := *, //only TS129 229 - expiry_Time := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, //only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template STA_MSG mw_STA_dummy := - { - header := mw_diameterHeaderAns_dummy(STA_E, ?), - session_Id := ?, - sTA_Body := mw_STA_Body_dummy - } - - template STA_Body_AVP mw_STA_Body_dummy := - { - result_Code := *, - origin_Host := ?, - origin_Realm := ?, - user_Name := *, - class := *, - error_Message := *, - error_Reporting_Host := *, - failed := *, - sponsored_Connectivity_Data := *, - origin_State_Id := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - proxy_Info := *, - aVP_Type := * - } - - template UAA_MSG mw_UAA_dummy := { - header := mw_diameterHeaderAns_dummy(UAA_E, c_applIdCommonMsg), - session_Id := ?, - uAA_Body := mw_UAA_Body_dummy - } - - template UAA_Body_AVP mw_UAA_Body_dummy := - { - vendor_Specific_Application_Id := omit,//only TS129 229 - auth_Application_Id := ?, - auth_Session_State := ?, - result_Code := ?, - origin_Host := ?, - origin_Realm := ?, - sIP_Server_URI := *, - sIP_Server_Capabilities := *, - authorization_Lifetime := *, - auth_Grace_Period := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - experimental_Result := omit,//only TS129 229 - supported_Features := omit,//only TS129 229 - server_Name := omit,//only TS129 229 - server_Capabilities := omit,//only TS129 229 - failed := omit,//only TS129 229 - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - template UDA_MSG mw_UDA_dummy := { - header := mw_diameterHeaderAns_dummy(UDA_E, ?), - session_Id := ?, - uDA_Body := mw_UDA_Body_dummy - } - - template UDA_Body_AVP mw_UDA_Body_dummy := - { - vendor_Specific_Application_Id := ?, - result_Code := *, - experimental_Result := *, - auth_Session_State := ?, - origin_Host := ?, - origin_Realm := ?, - supported_Features := *, - wildcarded_PSI := *, - wildcarded_IMPU := *, - user_Data := *, - redirect_Host := *, - redirect_Host_Usage := *, - redirect_Max_Cache_Time := *, - failed := *, - proxy_Info := *, - route_Record := *, - aVP_Type := * - } - - }//end group dummy_answer_templates_receive - } //end group dummy_templates - group base_templates { - - group basic_request_templates_send { - - template (value) CER_MSG m_CER_basic( - template Origin_Host_AVP p_originHost, - template Origin_Realm_AVP p_originRealm, - Address p_address) - modifies m_CER_dummy := { - cER_Body := { - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI") - } - } - - template (value) DWR_MSG m_DWR_basic( - template (present) Origin_Host_AVP p_originHost, - template (present) Origin_Realm_AVP p_originRealm) - modifies m_DWR_dummy := { - dWR_Body := { - origin_Host := p_originHost, - origin_Realm := p_originRealm - } - } - - template (value) DPR_MSG m_DPR_basic( - template (present) Origin_Host_AVP p_originHost, - template (present) Origin_Realm_AVP p_originRealm) - modifies m_DPR_dummy := { - dPR_Body := { - origin_Host := p_originHost, - origin_Realm := p_originRealm, - disconnect_Cause := m_disconnectCause(REBOOTING_E) - } - } - - } // end group basic_request_templates_send - - group basic_request_templates_receive { - - template CER_MSG mw_CER_basic( - template Auth_Application_Id_AVP p_authApplicationId) - modifies mw_CER_dummy := { - cER_Body := { - auth_Application_Id := {p_authApplicationId} - } - } - - }//end group basic_request_templates_receive - - group basic_answer_templates_send { - template (value) CEA_MSG m_CEA_basic( - template Origin_Host_AVP p_originHost, - template Origin_Realm_AVP p_originRealm, - Address p_address) - modifies m_CEA_dummy := { - cEA_Body := { - result_Code := m_resultCode(m_resultCode_diameterSuccess), - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI") - } - } - - template (value) DWA_MSG m_DWA_basic( - template Origin_Host_AVP p_originHost, - template Origin_Realm_AVP p_originRealm) - modifies m_DWA_dummy := { - dWA_Body := { - result_Code := m_resultCode(m_resultCode_diameterSuccess), - origin_Host := p_originHost, - origin_Realm := p_originRealm - } - } - - template (value) RAA_MSG m_RAA_basic( - template (value)Session_Id_AVP p_sessionId, - template (value)Origin_Host_AVP p_originHost, - template (value)Origin_Realm_AVP p_originRealm) - modifies m_RAA_dummy := { - session_Id := p_sessionId, - rAA_Body := { - result_Code := m_resultCode(m_resultCode_diameterSuccess), - origin_Host := p_originHost, - origin_Realm := p_originRealm - } - } - - }//end group basic_answer_templates_send - - group basic_answer_templates_receive { - }//end group basic_answer_templates_receive - - } //end group base_templates - group modified_templates { - - group modified_request_templates_send { - template (value) CER_MSG m_CER_AppId( - in template (value) Origin_Host_AVP p_originHost, - in template (value) Origin_Realm_AVP p_originRealm, - in Address p_address, - in UInt32 p_authApplicationId - ) modifies m_CER_basic := { - cER_Body := { - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI"), - supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, - vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, - auth_Application_Id := {m_authApplicationId(p_authApplicationId)} - } - } - - template (value) CER_MSG m_CER_AppId_acct_Application_Id( - in template (value) Origin_Host_AVP p_originHost, - in template (value) Origin_Realm_AVP p_originRealm, - in Address p_address, - in UInt32 p_acctApplicationId - ) modifies m_CER_basic := { - cER_Body := { - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI"), - supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, - vendor_Specific_Application_Id := {m_vendor_Specific_Acct_Id(p_acctApplicationId)}, - acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} - } - } - - } //end group modified_request_templates_send - - group modified_request_templates_receive { - - template User_Data_AVP mw_user_Data_dummy_RFC := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Data_AVP_Code), - aVP_Data := ? - } - - template SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_dummy_RFC := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), - sIP_Authentication_Scheme := mw_sIPAuthenticationScheme_digest_RFC, - sIP_Item_Number := omit, - sIP_Authenticate := omit, - sIP_Authorization := omit, - sIP_Authentication_Info := omit, - aVP_Type := omit - } - - template (present) SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_RFC( - template (present) SIP_Authentication_Scheme_AVP p_sIP_Authentication_Scheme, - template (present) SIP_Item_Number_AVP p_sIP_Item_Number := ?, - template (present) SIP_Authenticate_AVP p_sIP_Authenticate := ?, - template SIP_Authorization_AVP p_sIP_Authorization := omit - ) modifies mw_sIPAuthDataItem_dummy_RFC := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), - sIP_Authentication_Scheme := p_sIP_Authentication_Scheme, - sIP_Item_Number := p_sIP_Item_Number, - sIP_Authenticate := p_sIP_Authenticate, - sIP_Authorization := p_sIP_Authorization - } - - template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), - aVP_Data := ? - } - } - - template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_aka_RFC := { - sIP_Authentication_Scheme_RFC_AVP := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), - aVP_Data := DIGEST_AKAv1_MD5_E - } - } - - template SIP_Number_Auth_Items_AVP mw_sIPNumberAuthItems_RFC (template (present) UInt32 p_avpData := ?) := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC), - aVP_Data := p_avpData - } - - template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_dummy := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authenticate_AVP_Code_RFC), - digest_Realm := ?, - digest_Nonce := ?, - digest_Domain := *, - digest_Opaque := *, - digest_Stale := *, - digest_Algorithm := *, - digest_QoP := *, - digest_HA1 := *, - digest_Auth_Param := *, - aVP_Type := * - } - - template SIP_Authorization_RFC_AVP mw_sIPAuthorization_dummy_RFC := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authorization_AVP_Code_RFC), - digest_Username := ?, - digest_Realm := ?, - digest_Nonce := ?, - digest_URI := ?, - digest_Response := ?, - digest_Algorithm := *, - digest_CNonce := *, - digest_Opaque := *, - digest_QoP := *, - digest_Nonce_Count := *, - digest_Method := *, - digest_Entity_Body_Hash := *, - digest_Auth_Param := *, - aVP_Type := * - } - - template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest ( - template (present) Digest_Realm_AVP p_digest_Realm := ?, - template (present) Digest_QoP_AVP p_digest_QoP := ?, - template (present) Digest_HA1_AVP p_digest_HA1 := ? - ) modifies mw_sIPAuthenticate_dummy := { - digest_Realm := p_digest_Realm, - digest_QoP := p_digest_QoP, - digest_HA1 := p_digest_HA1 - } - - template (present) SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest_aka ( - template (present) Digest_Realm_AVP p_digest_Realm := ?, - template (present) Digest_QoP_AVP p_digest_QoP := ?, - template (present) Digest_HA1_AVP p_digest_HA1 := ? - ) modifies mw_sIPAuthenticate_digest := { - digest_Opaque := ? - } - - template SIP_User_Data_AVP mw_sIP_User_Data_dummy := - { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_AVP_Code), - sIP_User_Data_Type := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Type_AVP_Code), - aVP_Data := ? - }, - sIP_User_Data_Contents := { - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Contents_AVP_Code), - aVP_Data := ? - }, - aVP_Type := * - } - - template Framed_IP_Address_AVP mw_framed_IP_Address_dummy := { - // Ref: RFC4005 6.11.1 Framed_IP_Address AVP - aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_framed_IP_Address_AVP_Code), - aVP_Data := ? - } - - } //end group modified_request_templates_receive - - group modified_answer_templates_send { - template (value) CEA_MSG m_CEA_AppId( - template Origin_Host_AVP p_originHost, - template Origin_Realm_AVP p_originRealm, - Address p_address, - UInt32 p_authApplicationId) - modifies m_CEA_basic := { - cEA_Body := { - result_Code := m_resultCode(m_resultCode_diameterSuccess), - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI "), - supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, - vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, - auth_Application_Id := {m_authApplicationId(p_authApplicationId)} - } - } - - template (value) CEA_MSG m_CEA_AppId_all( - template Origin_Host_AVP p_originHost, - template Origin_Realm_AVP p_originRealm, - Address p_address) - modifies m_CEA_basic := { - cEA_Body := { - result_Code := m_resultCode(m_resultCode_diameterSuccess), - origin_Host := p_originHost, - origin_Realm := p_originRealm, - host_IP_Address := {m_hostIPAddress(p_address)}, - vendor_Id := m_vendorId(c_vendId3gpp), - product_Name := m_productName("ETSI "), - supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, - vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(c_applIdRx), - m_vendor_Specific_Appl_Id(c_applIdGx), - m_vendor_Specific_Appl_Id(c_applId3GPPCxDx), - m_vendor_Specific_Appl_Id(c_applIdRf), - m_vendor_Specific_Appl_Id(c_applIdRo) - //add new if needed - }, - auth_Application_Id := {m_authApplicationId(c_applIdRx), - m_authApplicationId(c_applIdGx), - m_authApplicationId(c_applId3GPPCxDx), - m_authApplicationId(c_applIdRf), - m_authApplicationId(c_applIdRo) - //add new if needed - } - } - } - - } //end group modified_answer_templates_send - - group modified_answer_templates_receive { - } //end group modified_answer_templates_receive - - } //end group modified_templates - } //end group MessageTemplates - - /** Type convertion functions to reduce warnings due to type mismaches */ - group FunctionsForTemplates { - - /** @desc Calculates the IP address length in bytes - */ - function f_IPAdressLengthUInt24 () - return UInt24 - {if (PX_IPv6) - {return(16+2) } //+2 address family - else {return(4+2) } - } - - /** @desc Calculates the Diameter-Identity length in bytes - */ - function f_getDiameterIdentityAvpLength(in Diameter_Identity p_avpData) return AVP_Length { - return lengthof(p_avpData); - } // End of function f_getDiameterIdentityAvpLength - - /** @desc Calculates the UTF8String AVP data length - */ - function f_getUTF8StringLength(in UTF8String p_avpData) return AVP_Length { - return lengthof(p_avpData); - } // End of function f_getUTF8StringLength - - /** @desc Calculates the charstring AVP data length - */ - function f_getCharStringLength(in charstring p_avpData) return AVP_Length { - return lengthof(p_avpData); - } // End of function f_getCharStringLength - - /** @desc Calculates the octetstring AVP data length - */ - function f_getOctetStringLength(in octetstring p_octetstring) return AVP_Length { - return lengthof(p_octetstring); - } // End of function f_getOctetStringLength - - /** @desc Returns the enumerated AVP data length - */ - function f_getEnumLength() return AVP_Length { - return 4; - } // End of function f_getEnumLength - - /** @desc Calculates the encoded playload length - */ - function f_getEncvalueLength(in bitstring p_bitstring) return AVP_Length { - return lengthof(p_bitstring) / 8; - } // End of function f_getEncvalueLength - - - /** @desc Calculates leghth of AVP with padded bytes (padded bytes are added in TA) - */ - function f_addPaddedBytes2Length(integer p_currLength) return integer { - var integer v_currLength; - - select(p_currLength mod 4){ - case (0) {v_currLength := p_currLength} - case (1) {v_currLength := p_currLength+3} - case (2) {v_currLength := p_currLength+2} - case (3) {v_currLength := p_currLength+1} - } - return v_currLength; - - } // End of f_addPaddedBytes2Length - - - /** @desc Converts DiameterURI to UTF8String - */ - function f_DiameterURI_2_UTF8String(in template DiameterURI p_diameterURI) return UTF8String { - var UTF8String v_utf8String; - var template charstring v_scheme, v_diameterId_FQDN, v_port, v_transport, v_protocol; - var integer v_portField; - var template charstring v_tailString := ""; - - - v_scheme := p_diameterURI.scheme; - v_diameterId_FQDN := p_diameterURI.diameterId_FQDN; - if (ispresent(p_diameterURI.portField)) - { - v_portField := valueof (p_diameterURI.portField); - v_port := int2char( v_portField ); - v_tailString := ":" & v_port; - } - if (ispresent(p_diameterURI.transport)) - { - v_transport := p_diameterURI.transport; - v_tailString := ";transport=" & v_transport; - } - - if (ispresent(p_diameterURI.protocol)) - { - v_protocol := p_diameterURI.protocol; - v_tailString := ";protocol=" & v_protocol; - } - v_utf8String := valueof(v_scheme) & "://" & valueof(v_diameterId_FQDN) & valueof(v_tailString); - - return v_utf8String; - - } // End of f_addPaddedBytes2Length - - /* Function f_char_to_BCD - * @desc: Returns BCD code in a hexstring converted from - * address digits (p_char) in charstring format - * Filler character '0'H is added where necessary - * End-of-Pulsing charater is added, if p_eop is TRUE - * Works for address lengths starting from 0 (i.e. empty string) - */ - function f_char_to_BCD(in charstring p_char, in boolean p_eop := false) return octetstring { - var integer v_string_length := lengthof(p_char); - var charstring v_address_char := p_char; - var octetstring v_address_oct; - var hexstring v_address_hex_ASCII; - - var integer i; - var hexstring v_address_hex_NUM := ''H; - - if (p_eop) // End of Pulsing required - { - - if (v_string_length mod 2 == 1) // odd number of digits - { - v_address_char := v_address_char & "O"; // instead of "?" - // add End of Pulsing, ASCII code of "O" = '4F'H - v_string_length := v_string_length + 1; - } - else // even number of digits - { - v_address_char := v_address_char & "O0"; // instead of "0?" - // add filler and End of Pulsing, ASCII code of "O" = '4F'H - v_string_length := v_string_length + 2; - } - } - else // End of Pulsing NOT required - { - if (v_string_length mod 2 == 1) // odd number of digits - { - v_address_char := v_address_char & "0"; - // add filler - v_string_length := v_string_length + 1; - } - } - - v_address_oct := (char2oct(v_address_char)); - v_address_hex_ASCII := oct2hex(v_address_oct); - /* Examples - "1234" -> '31323334'H - "12345O" -> '31323334353F' */ - - // fill hexstring with adequate number of hex digits - for (i := 0; i < v_string_length; i := i + 1) - { - v_address_hex_NUM := v_address_hex_NUM & '0'H; - } - // fill hexstring with address in BCD format - for (i := 0; i < v_string_length; i := i + 2) - { - v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; - v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; - } - - v_address_oct := hex2oct(v_address_hex_NUM); - return v_address_oct; - } // End function f_char_to_BCD - } // End group FunctionsForTemplates - -}//end module LibDiameter_Templates \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn index 4b8f1bb..b610fc2 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn @@ -694,9 +694,9 @@ group BasicTypesAndConstants{ Bit1 e_bit, //Error Bit1 t_bit, //Potentialy re-transmited message Bit4 reserved_bits - } - with { - variant (r_bit) "intTag='r_bit'" +// } +// with { +// variant (r_bit) "intTag='r_bit'" } /* Ref: RFC3588 p.3.1 */ @@ -768,9 +768,9 @@ group BasicTypesAndConstants{ RSA_E, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 NOR_E, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 NOA_E // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 - } - with { - variant "length=24;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCommandCode();decode=CodecHelper.decodeCommandCode()" +// } +// with { +// variant "length=24;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCommandCode();decode=CodecHelper.decodeCommandCode()" } //RFC3588, chapter 3. Diameter Header: The Command-Code field is three octets @@ -847,23 +847,23 @@ group BasicTypesAndConstants{ type record UNKNOWN_MSG { DiameterHeader header, set of AVP_Type aVP_Type optional //changed - } - with { - variant "present=!bytes(4, 257, 258)" - variant "present=!bytes(4, 271, 275)" - variant "present=!bytes(4, 280)" - variant "present=!bytes(4, 282, 288)" - variant "present=!bytes(4, 306, 309)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant "present=!bytes(4, 257, 258)" +// variant "present=!bytes(4, 271, 275)" +// variant "present=!bytes(4, 280)" +// variant "present=!bytes(4, 282, 288)" +// variant "present=!bytes(4, 306, 309)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record CER_MSG{ //Ref: RFC3588 5.3.1. Capabilities-Exchange-Request DiameterHeader header,// ::= < Diameter Header: 257, REQ > CER_Body_AVP cER_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CER), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit set +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CER), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit set } type set CER_Body_AVP { @@ -880,24 +880,24 @@ group BasicTypesAndConstants{ set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, Firmware_Revision_AVP firmware_Revision optional, set of AVP_Type aVP_Type optional - } - with { - variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists - variant (origin_State_Id) "fieldPresent=bytes(4, 278)" //presence check for inline defined optional lists - variant (supported_Vendor_Id) "fieldPresent=bytes(4, 265)" //presence check for inline defined optional lists - variant (auth_Application_Id) "fieldPresent=bytes(4, 258)" //presence check for inline defined optional lists - variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" //presence check for inline defined optional lists - variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" //presence check for inline defined optional lists - variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" //presence check for inline defined optional lists - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists +// variant (origin_State_Id) "fieldPresent=bytes(4, 278)" //presence check for inline defined optional lists +// variant (supported_Vendor_Id) "fieldPresent=bytes(4, 265)" //presence check for inline defined optional lists +// variant (auth_Application_Id) "fieldPresent=bytes(4, 258)" //presence check for inline defined optional lists +// variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" //presence check for inline defined optional lists +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" //presence check for inline defined optional lists +// variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" //presence check for inline defined optional lists +// variant (aVP_Type) "fieldPresent=!isEOF" } type record CEA_MSG{ //Ref: RFC3588 5.3.2. Capabilities-Exchange-Answer DiameterHeader header,// ::= < Diameter Header: 257 > CEA_Body_AVP cEA_Body - } with { - variant "present=bits(32,1,0) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CEA), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit clear +// } with { +// variant "present=bits(32,1,0) && bytes(5,3, 257)" //The Capabilities-Exchange-Request (CEA), indicated by the Command-Code set to 257 and the Command Flags' 'R' bit clear } type set CEA_Body_AVP { @@ -917,16 +917,16 @@ group BasicTypesAndConstants{ set of Vendor_Specific_Appl_Id_AVP vendor_Specific_Application_Id optional, Firmware_Revision_AVP firmware_Revision optional, set of AVP_Type aVP_Type optional - } - with { - variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists - variant (failed) "fieldPresent=bytes(4, 278)" - variant (supported_Vendor_Id) "fieldPresent=bytes(4, 279)" - variant (auth_Application_Id) "fieldPresent=bytes(4, 265)" - variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" - variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" - variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (host_IP_Address) "fieldPresent=bytes(4, 257)" //presence check for inline defined lists +// variant (failed) "fieldPresent=bytes(4, 278)" +// variant (supported_Vendor_Id) "fieldPresent=bytes(4, 279)" +// variant (auth_Application_Id) "fieldPresent=bytes(4, 265)" +// variant (inband_Security_Id) "fieldPresent=bytes(4, 299)" +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)" +// variant (vendor_Specific_Application_Id) "fieldPresent=bytes(4, 260)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record RAR_MSG{ @@ -934,8 +934,8 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 258, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 RAR_Body_AVP rAR_Body - } with { - variant "present=bits(32,1,1) && bytes(5,3, 258)" //The RAR, indicated by the Command-Code set to 258 and the Command Flags' 'R' bit set +// } with { +// variant "present=bits(32,1,1) && bytes(5,3, 258)" //The RAR, indicated by the Command-Code set to 258 and the Command Flags' 'R' bit set } type set RAR_Body_AVP { @@ -977,20 +977,20 @@ group BasicTypesAndConstants{ Service_Identifier_AVP service_Identifier optional, //TS132 299 only Rating_Group_AVP rating_Group optional, //TS132 299 only set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 - } - with { - variant (acc_nc_ident) "fieldPresent=bytes(4, 502)" - variant (flows) "fieldPresent=bytes(4, 510)" - variant (subscription_Id) "fieldPresent=bytes(4, 443)" - variant (class) "fieldPresent=bytes(4, 25)" - variant (event_Trigger) "fieldPresent=bytes(4, 1006)" - variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" - variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" - variant (qoS_Information) "fieldPresent=bytes(4, 1016)" - variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (acc_nc_ident) "fieldPresent=bytes(4, 502)" +// variant (flows) "fieldPresent=bytes(4, 510)" +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" +// variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" +// variant (qoS_Information) "fieldPresent=bytes(4, 1016)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record RAA_MSG{ @@ -998,9 +998,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 258, PXY > Session_Id_AVP session_Id,//fixed pos. //RFC3588 & TS 129 214 & TS 129 212 RAA_Body_AVP rAA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 258)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 258)" } type set RAA_Body_AVP { @@ -1038,16 +1038,16 @@ group BasicTypesAndConstants{ User_CSG_Information_AVP user_CSG_Information optional, //S9 (TS129 215) only set of Proxy_Info_AVP proxy_Info optional, //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 set of AVP_Type aVP_Type optional //RFC3588 & TS 129 214 & TS 129 212 & TS129 215 - } - with { - variant (media_Component_Description) "fieldPresent=bytes(4, 517)" - variant (class) "fieldPresent=bytes(4, 25)" - variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" - variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (redirect_Host) "fieldPresent=bytes(4, 292)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (media_Component_Description) "fieldPresent=bytes(4, 517)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" +// variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record ACR_MSG{ @@ -1055,9 +1055,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 271, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. ACR_Body_AVP aCR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 271)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 271)" } type set ACR_Body_AVP { @@ -1082,12 +1082,12 @@ group BasicTypesAndConstants{ Service_Context_Id_AVP service_Context_Id optional, //TS132 299 only Service_Information_AVP service_Information optional, //TS132 299 only set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record ACA_MSG{ @@ -1095,9 +1095,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 271, PXY > Session_Id_AVP session_Id,//fixed pos. ACA_Body_AVP aCA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 271)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 271)" } type set ACA_Body_AVP { @@ -1119,10 +1119,10 @@ group BasicTypesAndConstants{ Event_Timestamp_AVP event_Timestamp optional, set of Proxy_Info_AVP proxy_Info optional, set of AVP_Type aVP_Type optional - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record ASR_MSG{ @@ -1130,9 +1130,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 274, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. ASR_Body_AVP aSR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 274)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 274)" } type set ASR_Body_AVP { @@ -1147,11 +1147,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record ASA_MSG{ @@ -1159,9 +1159,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 274, PXY > Session_Id_AVP session_Id,//fixed pos. ASA_Body_AVP aSA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 274)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 274)" } type set ASA_Body_AVP { @@ -1178,12 +1178,12 @@ group BasicTypesAndConstants{ Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, set of Proxy_Info_AVP proxy_Info optional, set of AVP_Type aVP_Type optional - } - with { - variant (failed) "fieldPresent=bytes(4, 279)" - variant (redirect_Host) "fieldPresent=bytes(4, 292)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record STR_MSG{ @@ -1191,9 +1191,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 275, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. STR_Body_AVP sTR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 275)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 275)" } type set STR_Body_AVP { @@ -1209,12 +1209,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (class) "fieldPresent=bytes(4, 25)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record STA_MSG{ @@ -1222,9 +1222,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 275, PXY > Session_Id_AVP session_Id,//fixed pos. STA_Body_AVP sTA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 275)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 275)" } type set STA_Body_AVP { @@ -1243,13 +1243,13 @@ group BasicTypesAndConstants{ Redirect_Max_Cache_Time_AVP redirect_Max_Cache_Time optional, set of Proxy_Info_AVP proxy_Info optional, set of AVP_Type aVP_Type optional - } - with { - variant (class) "fieldPresent=bytes(4, 25)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (redirect_Host) "fieldPresent=bytes(4, 292)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" } /**/ @@ -1257,9 +1257,9 @@ group BasicTypesAndConstants{ //Ref: RFC3588 5.5.1. Device-Watchdog-Request DiameterHeader header,// ::= < Diameter Header: 280, REQ > DWR_Body_AVP dWR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 280)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 280)" } type set DWR_Body_AVP { @@ -1267,18 +1267,18 @@ group BasicTypesAndConstants{ Origin_Realm_AVP origin_Realm, Origin_State_Id_AVP origin_State_Id optional, set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs - } - with { - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (aVP_Type) "fieldPresent=!isEOF" } type record DWA_MSG{ //Ref: RFC3588 5.5.2. Device-Watchdog-Answer DiameterHeader header,// ::= < Diameter Header: 280 > DWA_Body_AVP dWA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 280)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 280)" } type set DWA_Body_AVP { @@ -1289,19 +1289,19 @@ group BasicTypesAndConstants{ set of Failed_AVP failed optional, Origin_State_Id_AVP origin_State_Id optional, set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs - } - with { - variant (failed) "fieldPresent=bytes(4, 279)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record DPR_MSG{ // Ref: RFC3588 5.4.1. Disconnect-Peer-Request DiameterHeader header,// ::= < Diameter Header: 282, REQ > DPR_Body_AVP dPR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 282)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 282)" } type set DPR_Body_AVP { @@ -1309,18 +1309,18 @@ group BasicTypesAndConstants{ Origin_Realm_AVP origin_Realm, Disconnect_Cause_AVP disconnect_Cause,//requ. set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs - } - with { - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (aVP_Type) "fieldPresent=!isEOF" } type record DPA_MSG{ //Ref: RFC3588 5.4.2. Disconnect-Peer-Answer DiameterHeader header,// ::= < Diameter Header: 282 > DPA_Body_AVP dPA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 282)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 282)" } type set DPA_Body_AVP { @@ -1330,10 +1330,10 @@ group BasicTypesAndConstants{ Error_Message_AVP error_Message optional, set of Failed_AVP failed optional, set of AVP_Type aVP_Type optional //to await or send some unexpected AVPs - } - with { - variant (failed) "fieldPresent=bytes(4, 279)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" } } // End of group RFC3588 @@ -1346,9 +1346,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > Session_Id_AVP session_Id,//fixed pos. UAR_Body_AVP uAR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 283)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 283)" } type set UAR_Body_AVP { @@ -1371,11 +1371,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 set of Route_Record_AVP route_Record optional, //RFC4740 set of AVP_Type aVP_Type optional //RFC4740 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record UAA_MSG{ @@ -1384,9 +1384,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 283 or 300, PXY > Session_Id_AVP session_Id,//fixed pos. UAA_Body_AVP uAA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 283)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 283)" } type set UAA_Body_AVP { @@ -1411,11 +1411,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record SAR_MSG{ @@ -1424,9 +1424,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 284 or 301, PXY > Session_Id_AVP session_Id,//fixed pos. SAR_Body_AVP sAR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 284)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 284)" } type set SAR_Body_AVP { @@ -1455,13 +1455,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 set of Route_Record_AVP route_Record optional, //RFC4740 set of AVP_Type aVP_Type optional //RFC4740 - } - with { - variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 375)" - variant (sIP_AOR) "fieldPresent=bytes(4, 122)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 375)" +// variant (sIP_AOR) "fieldPresent=bytes(4, 122)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record SAA_MSG{ @@ -1470,9 +1470,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 284 or 301, PXY > Session_Id_AVP session_Id,//fixed pos. SAA_Body_AVP sAA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 284)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 284)" } type set SAA_Body_AVP { @@ -1506,13 +1506,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (sIP_User_Data) "fieldPresent=bytes(4, 389)" //presence check for inline defined lists - variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 388)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (sIP_User_Data) "fieldPresent=bytes(4, 389)" //presence check for inline defined lists +// variant (sIP_Supported_User_Data_Type) "fieldPresent=bytes(4, 388)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record LIR_MSG{ @@ -1521,9 +1521,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > Session_Id_AVP session_Id,//fixed pos. LIR_Body_AVP lIR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 285)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 285)" } type set LIR_Body_AVP { @@ -1543,11 +1543,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record LIA_MSG{ @@ -1556,9 +1556,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 285 or 302, PXY > Session_Id_AVP session_Id,//fixed pos. LIA_Body_AVP lIA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 285)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 285)" } type set LIA_Body_AVP { @@ -1584,11 +1584,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record MAR_MSG{ @@ -1597,9 +1597,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 286 or 303, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. MAR_Body_AVP mAR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 286)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 286)" } type set MAR_Body_AVP { @@ -1623,11 +1623,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } @@ -1637,9 +1637,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 286 or 303, PXY > Session_Id_AVP session_Id,//fixed pos. MAA_Body_AVP mAA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 286)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 286)" } type set MAA_Body_AVP { @@ -1665,12 +1665,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (sIP_Auth_Data_Item) "fieldPresent=bytes(4, 376)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (sIP_Auth_Data_Item) "fieldPresent=bytes(4, 376)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record RTR_MSG{ @@ -1679,9 +1679,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 287 or 304, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. RTR_Body_AVP rTR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 287)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 287)" } type set RTR_Body_AVP { @@ -1702,12 +1702,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (sIP_AOR) "fieldPresent=bytes(4, 122)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (sIP_AOR) "fieldPresent=bytes(4, 122)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record RTA_MSG{ @@ -1716,9 +1716,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 287 or 304, PXY > Session_Id_AVP session_Id,//fixed pos. RTA_Body_AVP rTA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 287)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 287)" } type set RTA_Body_AVP { @@ -1741,11 +1741,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PPR_MSG{ @@ -1754,9 +1754,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 288 or 305, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. PPR_Body_AVP pPR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 288)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 288)" } type set PPR_Body_AVP { @@ -1779,12 +1779,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (sIP_User_Data) "fieldPresent=bytes(4, 289)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (sIP_User_Data) "fieldPresent=bytes(4, 289)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PPA_MSG{ @@ -1793,9 +1793,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 288 or 305, PXY > Session_Id_AVP session_Id,//fixed pos. PPA_Body_AVP pPA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 288)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 288)" } type set PPA_Body_AVP { @@ -1814,11 +1814,11 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //RFC4740 & TS129 229 set of Route_Record_AVP route_Record optional, //RFC4740 & TS129 229 set of AVP_Type aVP_Type optional //RFC4740 & TS129 229 - } - with { - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } }// End of group RFC4740 @@ -1830,9 +1830,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< User-Data-Request> ::= < Diameter Header: 306, REQ, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. UDR_Body_AVP uDR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 306)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 306)" } type set UDR_Body_AVP { @@ -1856,16 +1856,16 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (service_Indication) "fieldPresent=bytes(4, 704)" - variant (data_Reference) "fieldPresent=bytes(4, 703)" - variant (identity_Set) "fieldPresent=bytes(4, 708)" - variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (service_Indication) "fieldPresent=bytes(4, 704)" +// variant (data_Reference) "fieldPresent=bytes(4, 703)" +// variant (identity_Set) "fieldPresent=bytes(4, 708)" +// variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record UDA_MSG{ @@ -1873,9 +1873,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 306, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. UDA_Body_AVP uDA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 306)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 306)" } type set UDA_Body_AVP { @@ -1896,13 +1896,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PUR_MSG{ @@ -1910,9 +1910,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 307, REQ, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. PUR_Body_AVP pUR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 307)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 307)" } type set PUR_Body_AVP { @@ -1931,12 +1931,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PUA_MSG{ @@ -1944,9 +1944,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 307, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. PUA_Body_AVP pUA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 307)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 307)" } type set PUA_Body_AVP { @@ -1968,13 +1968,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record SNR_MSG{ @@ -1982,9 +1982,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 308, REQ, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. SNR_Body_AVP sNR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 308)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 308)" } type set SNR_Body_AVP { @@ -2010,16 +2010,16 @@ group BasicTypesAndConstants{ set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional, User_Name_AVP user_Name optional //RFC4740 & required in TS129 229 - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (service_Indication) "fieldPresent=bytes(4, 704)" - variant (data_Reference) "fieldPresent=bytes(4, 703)" - variant (identity_Set) "fieldPresent=bytes(4, 708)" - variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (service_Indication) "fieldPresent=bytes(4, 704)" +// variant (data_Reference) "fieldPresent=bytes(4, 703)" +// variant (identity_Set) "fieldPresent=bytes(4, 708)" +// variant (dSAI_Tag) "fieldPresent=bytes(4, 711)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record SNA_MSG{ @@ -2027,9 +2027,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 308, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. SNA_Body_AVP sNA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 308)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 308)" } type set SNA_Body_AVP { @@ -2051,13 +2051,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PNR_MSG{ @@ -2065,9 +2065,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 309, REQ, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. PNR_Body_AVP pNR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 309)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 309)" } type set PNR_Body_AVP { @@ -2085,12 +2085,12 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record PNA_MSG{ @@ -2098,9 +2098,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 309, PXY, 16777217 > Session_Id_AVP session_Id,//fixed pos. PNA_Body_AVP pNA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 309)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 309)" } type set PNA_Body_AVP { @@ -2118,13 +2118,13 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } } // End of group Sh_Intf @@ -2139,9 +2139,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 272, REQ, PXY> Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 CCR_Body_AVP cCR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 272)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 272)" } type set CCR_Body_AVP { @@ -2220,24 +2220,24 @@ group BasicTypesAndConstants{ set of Route_Record_AVP route_Record optional, //RFC4006 & TS129 212 & TS129 215 Service_Information_AVP service_Information optional, //TS132 299 only set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 - } - with { - variant (subscription_Id) "fieldPresent=bytes(4, 443)" - variant (used_Service_Unit) "fieldPresent=bytes(4, 446)" - variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" - variant (service_Parameter_Info) "fieldPresent=bytes(4, 440)" - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (packet_Filter_Information) "fieldPresent=bytes(4, 1061)" - variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" - variant (tFT_Packet_Filter_Information) "fieldPresent=bytes(4, 1013)" - variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" - variant (event_Trigger) "fieldPresent=bytes(4, 1006)" - variant (access_Network_Charging_Identifier_Gx) "fieldPresent=bytes(4, 1022)" - variant (coA_Information) "fieldPresent=bytes(4, 1039)" - variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (used_Service_Unit) "fieldPresent=bytes(4, 446)" +// variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" +// variant (service_Parameter_Info) "fieldPresent=bytes(4, 440)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (packet_Filter_Information) "fieldPresent=bytes(4, 1061)" +// variant (aN_GW_Address) "fieldPresent=bytes(4, 1050)" +// variant (tFT_Packet_Filter_Information) "fieldPresent=bytes(4, 1013)" +// variant (charging_Rule_Report) "fieldPresent=bytes(4, 1018)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (access_Network_Charging_Identifier_Gx) "fieldPresent=bytes(4, 1022)" +// variant (coA_Information) "fieldPresent=bytes(4, 1039)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record CCA_MSG{ @@ -2245,9 +2245,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,//< Diameter Header: 272, PXY> Session_Id_AVP session_Id,//fixed pos. //RFC4006 & TS129 212 CCA_Body_AVP cCA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 272)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 272)" } type set CCA_Body_AVP { @@ -2304,21 +2304,21 @@ group BasicTypesAndConstants{ set of Failed_AVP failed optional, //RFC4006 & TS129 212 & TS129 215 Service_Information_AVP service_Information optional, //TS132 299 only set of AVP_Type aVP_Type optional //RFC4006 & TS129 212 & TS129 215 - } - with { - variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" - variant (redirect_Host) "fieldPresent=bytes(4, 292)" - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (event_Trigger) "fieldPresent=bytes(4, 1006)" - variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" - variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" - variant (qoS_Information) "fieldPresent=bytes(4, 1016)" - variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" - variant (cSG_Information_Reporting) "fieldPresent=bytes(4, 1071)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (multiple_Services_Credit_Control) "fieldPresent=bytes(4, 456)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)" +// variant (charging_Rule_Remove) "fieldPresent=bytes(4, 1002)" +// variant (charging_Rule_Install) "fieldPresent=bytes(4, 1001)" +// variant (qoS_Information) "fieldPresent=bytes(4, 1016)" +// variant (usage_Monitoring_Information) "fieldPresent=bytes(4, 1067)" +// variant (cSG_Information_Reporting) "fieldPresent=bytes(4, 1071)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (aVP_Type) "fieldPresent=!isEOF" } } // End of group RFC4006 @@ -2330,9 +2330,9 @@ group BasicTypesAndConstants{ DiameterHeader header ,// ::= < Diameter Header: 265, REQ, PXY > Session_Id_AVP session_Id,//fixed pos. AAR_Body_AVP aAR_Body - } - with { - variant "present=bits(32,1,1) && bytes(5,3, 265)" +// } +// with { +// variant "present=bits(32,1,1) && bytes(5,3, 265)" } type set AAR_Body_AVP { @@ -2374,15 +2374,15 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, set of Route_Record_AVP route_Record optional, set of AVP_Type aVP_Type optional - } - with { - variant (media_Component_Description) "fieldPresent=bytes(4, 517)" - variant (specific_Action) "fieldPresent=bytes(4, 513)" - variant (subscription_Id) "fieldPresent=bytes(4, 443)" - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (route_Record) "fieldPresent=bytes(4, 282)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (media_Component_Description) "fieldPresent=bytes(4, 517)" +// variant (specific_Action) "fieldPresent=bytes(4, 513)" +// variant (subscription_Id) "fieldPresent=bytes(4, 443)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (route_Record) "fieldPresent=bytes(4, 282)" +// variant (aVP_Type) "fieldPresent=!isEOF" } type record AAA_MSG{ @@ -2390,9 +2390,9 @@ group BasicTypesAndConstants{ DiameterHeader header,// ::= < Diameter Header: 265, PXY > Session_Id_AVP session_Id,//fixed pos. AAA_Body_AVP aAA_Body - } - with { - variant "present=bits(32,1,0) && bytes(5,3, 265)" +// } +// with { +// variant "present=bits(32,1,0) && bytes(5,3, 265)" } type set AAA_Body_AVP { @@ -2432,15 +2432,15 @@ group BasicTypesAndConstants{ set of Proxy_Info_AVP proxy_Info optional, //set of Load_AVP load optional, //ETSI TS 129 214 V15.5 set of AVP_Type aVP_Type optional - } - with { - variant (access_network_charging_Identifier) "fieldPresent=bytes(4, 502)" - variant (supported_Features) "fieldPresent=bytes(4, 628)" - variant (class) "fieldPresent=bytes(4, 25)" - variant (failed) "fieldPresent=bytes(4, 279)" - variant (redirect_Host) "fieldPresent=bytes(4, 292)" - variant (proxy_Info) "fieldPresent=bytes(4, 284)" - variant (aVP_Type) "fieldPresent=!isEOF" +// } +// with { +// variant (access_network_charging_Identifier) "fieldPresent=bytes(4, 502)" +// variant (supported_Features) "fieldPresent=bytes(4, 628)" +// variant (class) "fieldPresent=bytes(4, 25)" +// variant (failed) "fieldPresent=bytes(4, 279)" +// variant (redirect_Host) "fieldPresent=bytes(4, 292)" +// variant (proxy_Info) "fieldPresent=bytes(4, 284)" +// variant (aVP_Type) "fieldPresent=!isEOF" } } // End of group Rx @@ -2908,6 +2908,6 @@ group BasicTypesAndConstants{ }//End group HeaderAndBodyTypes } with { - variant "" +// variant "" encode "DIAMETERCodec" } // End module LibDiameter_TypesAndValues diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn index ccb8fb4..bad0f43 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn @@ -47,19 +47,10 @@ module LibDiameter_Types_Base_AVPs { Oct2 addressFamily, IpAddress ipAddress } - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (addressFamily) "intTag='addressFamily'" - variant (ipAddress) "encode=CodecHelper.encodeIpAddressWithPadding();decode=CodecHelper.decodeIpAddressWithPadding()" - } type union IpAddress { IPv4Addr ipv4, IPv6Addr ipv6 } - with { - variant (ipv4) "fieldPresent=getIntTag('addressFamily')==1" - variant (ipv6) "fieldPresent=getIntTag('addressFamily')==2" - } //RFC3588 chapter 4.3: // The Address format is derived from the OctetString AVP Base // Format. It is a discriminated union, representing, for example a @@ -84,11 +75,11 @@ module LibDiameter_Types_Base_AVPs { * www.somtehing1.something2.com * host */ - type charstring Diameter_Identity - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCharstringWithPadding();decode=CodecHelper.decodeCharstringWithPadding()" + type charstring Diameter_Identity; +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeCharstringWithPadding();decode=CodecHelper.decodeCharstringWithPadding()" // variant "length=getIntTag('aVP_len')" - } +// } type record GenericParam{ /* pid : ";transport=" or ";protocol=" * paramValue : @@ -138,9 +129,6 @@ module LibDiameter_Types_Base_AVPs { UTF8String mask optional, UTF8String ports optional } - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIP_AddressMask();decode=CodecHelper.decodeIP_AddressMask()" - } type record IPFilterRule_Type{ //RFC3588 @@ -163,9 +151,9 @@ module LibDiameter_Types_Base_AVPs { UTF8String options optional } //TODO Parser and Codec needed here (first version do not include this) - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIPFilterRule_Type();decode=CodecHelper.decodeIPFilterRule_Type()" - } +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeIPFilterRule_Type();decode=CodecHelper.decodeIPFilterRule_Type()" +// } type UInt32 AVP_Code (1..c_uInt32Max); @@ -176,15 +164,9 @@ module LibDiameter_Types_Base_AVPs { Bit1 p_bit, Bit5 reserved_bits } - with { - variant (v_bit) "intTag='v_bit'" - } type UInt24 AVP_Length; - type integer AVP_Vendor_ID - with { - variant "length=32;unsigned" - } + type UInt32 AVP_Vendor_ID; type record AVP_Header{ AVP_Code aVP_Code, @@ -192,28 +174,11 @@ module LibDiameter_Types_Base_AVPs { AVP_Length aVP_len, AVP_Vendor_ID aVP_vid optional } - with { - //The AVP Length field is three octets, and indicates the number of - // octets in this AVP including the AVP Code, AVP Length, AVP Flags, - // Vendor-ID field (if present) and the AVP data. - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_len) "intTag='aVP_len',value-4-1-3;intTag='aVP_len_tot';condition=CodecHelper.storeLen(dec)" //wert - 4=AVP Code - 1=AVP Flags - 3=AVP Length - variant (aVP_vid) "fieldPresent=getIntTag('v_bit')==1;intTag='aVP_len',getIntTag('aVP_len')-4" - //oder variant (aVP_vid) "fieldPresent=bits(32, 1, 1);intTag='aVP_len',getIntTag('aVP_len')-4" - //und hier ueberpruefen wir, ob der wert 1 ist, wenn ja, dann ist das optional feld aVP_vid da, dann subtrahieren wir 4 byte von der laenge - //so hat aVP_len den wert der laenge von aVP_Data, 0 oder mehr - } type record AVP_Type { AVP_Header aVP_Header, AVP_Data aVP_Data optional } - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper" - //as no differentiation can be done on the received AVP data type, always decode as octetstring -// variant (aVP_Data) "fieldPresent=getIntTag('aVP_len')>0;decode=CodecHelper.decodeAVP_Data();condition=CodecHelper.leaveScope()" - variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();decode=CodecHelper.decodeAVP_Data();condition=CodecHelper.leaveScope()" - } }//end group AVP_Base_Types group RFC_AVP3588_Types{ @@ -262,18 +227,18 @@ module LibDiameter_Types_Base_AVPs { DIAMETER_NO_COMMON_SECURITY_E (5017), DIAMETER_ERROR_SUBSESSION_E (5470) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Re_Auth_Req_Type{ //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP AUTHORIZE_ONLY_E (0), AUTHORIZE_AUTHENTICATE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Redirect_Host_Usage_Type{ DONT_CACHE_E (0), ALL_SESSION_E (1), @@ -283,26 +248,26 @@ module LibDiameter_Types_Base_AVPs { ALL_HOST_E (5), ALL_USER_E (6) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Acc_Record_Type{ EVENT_RECORD_E (1), START_RECORD_E (2), INTERIM_RECORD_E (3), STOP_RECORD_E (4) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Acc_Realtime_Req_Type{ DELIVER_AND_GRANT_E (1), GRANT_AND_STORE_E (2), GRANT_AND_LOSE_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Termination_Cause_Type{ DIAMETER_LOGOUT_E (1), @@ -314,24 +279,24 @@ module LibDiameter_Types_Base_AVPs { DIAMETER_USER_MOVED_E (7), DIAMETER_SESSION_TIMEOUT_E (8) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Disconnect_Cause_Type{ REBOOTING_E (0), BUSY_E (1), DO_NOT_WANT_TO_TALK_TO_YOU_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Auth_Session_State_Type{ STATE_MAINTAINED_E (0), NO_STATE_MAINTAINED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } //type DiameterURI SIP_AOR_Type;// RFC 4740 sec. 9.8 type enumerated SIP_User_Auth_Ty_Type{ //Ref: RFC4740, section 9.10 @@ -339,9 +304,9 @@ module LibDiameter_Types_Base_AVPs { DEREGISTRATION_E (1), REGISTRATION_AND_CAPABILITIES_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated SIP_Srv_Assgmt_Type{ NO_ASSIGNMENT_E (0), REGISTRATION_E (1), @@ -356,17 +321,17 @@ module LibDiameter_Types_Base_AVPs { AUTHENTICATION_TIMEOUT_E (10), DEREGISTRATION_TOO_MUCH_DATA_E (11) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated SIP_Usr_Dat_Al_Av_Type{ USER_DATA_NOT_AVAILABLE_E (0), USER_DATA_ALREADY_AVAILABLE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated SIP_Auth_Schm_Type{ DIGEST_E (0), // RFC4740 Clause 9.5.1. SIP-Authentication-Scheme AVP DIGEST_AKAv1_MD5_E (1), // TODO CHeck the value are correct @@ -374,18 +339,18 @@ module LibDiameter_Types_Base_AVPs { GIBA_E (3), // TODO CHeck the value are correct UNKNOWN_E } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated SIP_Reason_Code_Type{ PERMANENT_TERMINATION_E (0), NEW_SIP_SERVER_ASSIGNED_E (1), SIP_SERVER_CHANGE_E (2), REMOVE_SIP_SERVER_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } /* Types on Sh interface */ type enumerated Data_Reference_Type{ REPOSITORY_DATA_E (0), @@ -413,46 +378,46 @@ module LibDiameter_Types_Base_AVPs { IMSI (32), IMS_PRIVATE_USER_IDENTITY_E (33) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Subs_Req_Ty_Type{ SUBSCRIBE_E (0), UNSUBSCRIBE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Request_Domain_Type{ CS_DOMAIN_E (0), PS_DOMAIN_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Current_Location_Type{ DO_NOT_NEED_INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (0), INITIATE_ACTIVATE_LOCATION_RETRIEVAL_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Identity_Set_Type{ ALL_IDENTITIES_E (0), REGISTERED_IDENTITIES_E (1), IMPLICIT_IDENTITIES_E (2), ALIAS_IDENTITIES_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Send_Data_Indication_Type{ USER_DATA_NOT_REQUESTED_E (0), USER_DATA_REQUESTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Experimental_Result_Type{ // See http://diameter-protocol.blogspot.fr/2012/10/list-of-experimental-result-codes.html DIAMETER_FIRST_REGISTRATION_E (2001), DIAMETER_SUBSEQUENT_REGISTRATION_E (2002), @@ -508,9 +473,9 @@ module LibDiameter_Types_Base_AVPs { DIAMETER_ERROR_UNKOWN_SERVING_NODE_E (5423),//See ETSI TS 129 272 Clause 7.4.3 unknown } - with { - variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;length=32;decode=CodecHelper.decodeExperimental_Result_Type()" - } +// with { +// variant "use=com.testingtech.ttcn.tci.codec.CodecHelper;length=32;decode=CodecHelper.decodeExperimental_Result_Type()" +// } type enumerated CC_Request_Ty_Type{ // Ref: RFC4006 8.3. CC-Request-Type AVP @@ -519,9 +484,9 @@ module LibDiameter_Types_Base_AVPs { TERMINATION_REQUEST_E (3), EVENT_REQUEST_E (4) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Subscription_Id_Ty_Type{ // Ref: RFC4006 8.47. Subscription-Id-Type AVP @@ -531,9 +496,9 @@ module LibDiameter_Types_Base_AVPs { END_USER_NAI_E (3), END_USER_PRIVATE_E (4) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Requested_Action_Type{ // Ref: RFC4006 8.41. Requested-Action AVP DIRECT_DEBITING_E (0), @@ -541,26 +506,26 @@ module LibDiameter_Types_Base_AVPs { CHECK_BALANCE_E (2), PRICE_ENQUIRY_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Tariff_Change_Usage_Type{ // Ref: RFC4006 8.27. Tariff-Change-Usage AVP UNIT_BEFORE_TARIFF_CHANGE_E (0), UNIT_AFTER_TARIFF_CHANGE_E (1), UNIT_INDETERMINATE_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Multiple_Serv_Indi_Type{ // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP MULTIPLE_SERVICES_NOT_SUPPORTED_E (0), MULTIPLE_SERVICES_SUPPORTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated CC_Unit_Ty_Type { // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP TIME_E (0), @@ -570,9 +535,9 @@ module LibDiameter_Types_Base_AVPs { OUTPUT_OCTETS_E (4), SERVICE_SPECIFIC_UNITS_E (5) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Final_Unit_Action_Type{ // Ref: RFC4006 8.35. Final-Unit-Action AVP @@ -580,9 +545,9 @@ module LibDiameter_Types_Base_AVPs { REDIRECT_E (1), RESTRICT_ACCESS_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Redirect_Address_Ty_Type{ // Ref: RFC4006 8.38. Redirect-Address-Type AVP IPV4_ADDRESS_E (0), @@ -590,9 +555,9 @@ module LibDiameter_Types_Base_AVPs { URL_E (2), SIP_URI_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated User_Equipment_Info_Ty_Type { // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP IMEISV_E (0), @@ -600,42 +565,42 @@ module LibDiameter_Types_Base_AVPs { EUI64_E (2), MODIFIED_EUI64_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated CC_Session_Failover_Type{ // Ref: RFC4006 8.4. CC-Session-Failover AVP FAILOVER_NOT_SUPPORTED_E (0), FAILOVER_SUPPORTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Check_Balance_Result_Type{ // Ref: RFC4006 8.6. Check-Balance-Result AVP ENOUGH_CREDIT_E (0), NO_CREDIT_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Credit_Cont_Fail_Hand_Type{ // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP TERMINATE_E (0), CONTINUE_E (1), RETRY_AND_TERMINATE_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Direct_Debi_Fail_Hand_Type{ // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP TERMINATE_OR_BUFFER_E (0), CONTINUE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } }//end group RFC3588 types group AVP_GxFrom132_299_Types{ @@ -645,18 +610,18 @@ module LibDiameter_Types_Base_AVPs { CLOSED_MODE_E (0), HYBRID_MODE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated CSG_Membership_Indication{ // Ref: ETSI TS 132 299 7.2.46B NOT_CSG_MEMBER_E (0), CSG_MEMBER_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } }//end group AVP_GxFrom132_299_Types @@ -669,9 +634,9 @@ module LibDiameter_Types_Base_AVPs { TRACE_ONLY_E (2), IMMEDIATE_MDT_AND_TRACE_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Report_Interval{ // Ref: ETSI TS 132 422 5.10.5 @@ -704,9 +669,9 @@ module LibDiameter_Types_Base_AVPs { REPORT_INTERVAL_1800000MS_E (26), REPORT_INTERVAL_3600000MS_E (27) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Report_Amount{ // Ref: ETSI TS 132 422 5.10.6 @@ -719,9 +684,9 @@ module LibDiameter_Types_Base_AVPs { AMOUNT_64_E (6), AMOUNT_INFINITY_E (7) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Logging_Interval{ // Ref: ETSI TS 132 422 5.10.8 @@ -734,9 +699,9 @@ module LibDiameter_Types_Base_AVPs { LOGGING_INTERVAL_40_96_E (6), LOGGING_INTERVAL_61_44_E (7) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Logging_Duration{ // Ref: ETSI TS 132 422 5.10.9 @@ -747,9 +712,9 @@ module LibDiameter_Types_Base_AVPs { LOGGING_DURATION_5400SEC_E (4), LOGGING_DURATION_7200SEC_E (5) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Trace_Depth{ // Ref: ETSI TS 132 422 5.3 @@ -760,9 +725,9 @@ module LibDiameter_Types_Base_AVPs { MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } }//end group AVP_GxFrom132_422_Types @@ -775,97 +740,97 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 264);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 264);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Origin_Realm_AVP{ //Ref: RFC3588 6.4. Origin-Realm AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 296);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 296);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Host_IP_Address_AVP{ //Ref: RFC3588 5.3.5. Host-IP-Address AVP AVP_Header aVP_Header,// Address aVP_Data } - with { - variant "present=bytes(4, 257);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 257);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Vendor_Id_AVP{ //Ref: RFC3588 5.3.3. Vendor-Id AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 266)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 266)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Product_Name_AVP{ //Ref: RFC3588 5.3.7. Product-Name AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 269);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 269);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Origin_State_Id_AVP{ //Ref: RFC3588 8.16. Origin-State-Id AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 278);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 278);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Supported_Vendor_Id_AVP{ //Ref; 5.3.6. Supported-Vendor-Id AVP AVP_Header aVP_Header,// Int32 aVP_Data } - with { - variant "present=bytes(4, 265);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 265);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Auth_Application_Id_AVP{ //Ref: RFC3588 6.8. Auth-Application-Id AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 258)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 258)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Inband_Security_Id_AVP{ //Ref: RFC3588 6.10. Inband-Security-Id AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 299);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 299);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Acct_Application_Id_AVP{ //Ref: RFC3588 6.9. Acct-Application-Id AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 259)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 259)&&CodecHelper.isAvailable();use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Vendor_Specific_Appl_Id_AVP{ //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP @@ -874,22 +839,22 @@ module LibDiameter_Types_Base_AVPs { set of Auth_Application_Id_AVP auth_Application_Id optional, set of Acct_Application_Id_AVP acct_Application_Id optional } - with { - variant "present=bytes(4, 260);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (vendor_Id) "fieldPresent=bytes(4, 266)&&CodecHelper.isAvailable()" - variant (auth_Application_Id) "fieldPresent=bytes(4, 258)&&CodecHelper.isAvailable()" - variant (acct_Application_Id) "fieldPresent=bytes(4, 259)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 260);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (vendor_Id) "fieldPresent=bytes(4, 266)&&CodecHelper.isAvailable()" +// variant (auth_Application_Id) "fieldPresent=bytes(4, 258)&&CodecHelper.isAvailable()" +// variant (acct_Application_Id) "fieldPresent=bytes(4, 259)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Firmware_Revision_AVP{ //Ref: RFC3588 5.3.4. Firmware-Revision AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 267);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 267);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Result_Code_AVP{ //Ref: RFC3588 7.1. Result-Code AVP @@ -897,95 +862,95 @@ module LibDiameter_Types_Base_AVPs { //UInt32 Result_Code_Type aVP_Data } - with { - variant "present=bytes(4, 268);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 268);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Error_Message_AVP{ //Ref: RFC3588 7.3. Error-Message AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 281);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 281);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Failed_AVP{ //Ref: RFC3588 7.5. Failed-AVP AVP AVP_Header aVP_Header,// set of AVP_Type aVP } - with { - variant "present=bytes(4, 279);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 279);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP) "condition=CodecHelper.leaveScope()" +// } type record Session_Id_AVP{ //Ref: RFC3588 8.8. Session-Id AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 263);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 263);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Destination_Realm_AVP{ //Ref: RFC3588 6.6. Destination-Realm AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Destination_Host_AVP{ //Ref: RFC3588 6.5. Destination-Host AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 293);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 293);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Re_Auth_Request_Type_AVP{ //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP AVP_Header aVP_Header,// Re_Auth_Req_Type aVP_Data } - with { - variant "present=bytes(4, 285);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 285);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record User_Name_AVP{ //Ref: RFC3588 8.14. User-Name AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 1);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Proxy_Host_AVP{ //Ref: RFC3588 6.7.3. Proxy-Host AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 280);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 280);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Proxy_State_AVP{ //Ref: RFC3588 6.7.4. Proxy-State AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 33);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 33);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Proxy_Info_AVP{ //Ref: RFC3588 6.7.2. Proxy-Info AVP AVP_Header aVP_Header,// @@ -993,50 +958,50 @@ module LibDiameter_Types_Base_AVPs { Proxy_State_AVP proxy_State,//requi. set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 284);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 284);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Route_Record_AVP{ //Ref: RFC3588 6.7.1. Route-Record AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 282);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 282);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Error_Reporting_Host_AVP{ //Ref: RFC3588 7.4. Error-Reporting-Host AVP AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 294);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 294);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Host_AVP{ /* Ref: RFC3588 6.12. Redirect-Host AVP NOTE: In Ref aVP_Data type is not defined, I presume it should be Diameter_Identity as the other xxx_Host_AVPs */ AVP_Header aVP_Header,// Diameter_Identity aVP_Data } - with { - variant "present=bytes(4, 292);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 292);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Host_Usage_AVP{ //Ref: RFC3588 6.13. Redirect-Host-Usage AVP AVP_Header aVP_Header,// Redirect_Host_Usage_Type aVP_Data } - with { - variant "present=bytes(4, 261);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 261);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } // type record Redirect_Host_Cache_Time_AVP{ // // NOTE Ref: RFC3588 Redirect_Host_Cache_Time_AVP is NOT defined. @@ -1049,104 +1014,104 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// Acc_Record_Type aVP_Data } - with { - variant "present=bytes(4, 480);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 480);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Accounting_Record_Number_AVP{ //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 485);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 485);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Accounting_Sub_Session_Id_AVP{ //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP AVP_Header aVP_Header,// UInt64 aVP_Data } - with { - variant "present=bytes(4, 287);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 287);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Acct_Session_Id_AVP{ //Ref: RFC3588 9.8.4. Acct-Session-Id AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 44);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 44);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Acct_Multi_Session_Id_AVP{ //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 50);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 50);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Acct_Interim_Interval_AVP{ //Ref: RFC3588 9.8.2. Acct-Interim-Interval AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 85);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 85);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Accounting_Realtime_Required_AVP{ //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP AVP_Header aVP_Header,// Acc_Realtime_Req_Type aVP_Data } - with { - variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 283);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Event_Timestamp_AVP{ //Ref: RFC3588 8.21. Event-Timestamp AVP AVP_Header aVP_Header,// Time aVP_Data } - with { - variant "present=bytes(4, 55);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 55);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Termination_Cause_AVP{ //Ref: RFC3588 8.15. Termination-Cause AVP AVP_Header aVP_Header,// Termination_Cause_Type aVP_Data } - with { - variant "present=bytes(4, 295);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 295);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Class_AVP{ //Ref: RFC3588 8.20. Class AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 25);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 25);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Disconnect_Cause_AVP{ //Ref: RFC3588 5.4.3. Disconnect-Cause AVP AVP_Header aVP_Header,// Disconnect_Cause_Type aVP_Data } - with { - variant "present=bytes(4, 273);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 273);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//enf of group RFC3855_AVPs group RFC4740_AVPs{ @@ -1156,67 +1121,67 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// Auth_Session_State_Type aVP_Data } - with { - variant "present=bytes(4, 277);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 277);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_AOR_AVP{ // Ref: RFC4740 9.8. SIP-AOR AVP AVP_Header aVP_Header,// UTF8String aVP_Data //DiameterURI/SIP_AOR_Type replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps } - with { - variant "present=bytes(4, 122);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// with { +// variant "present=bytes(4, 122);use=com.testingtech.ttcn.tci.codec.CodecHelper;" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" - variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" - } +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } type record SIP_Visited_Network_Id_AVP{ // Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 386);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 386);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_User_Authorization_Type_AVP{ // Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP AVP_Header aVP_Header,// SIP_User_Auth_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 387);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 387);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Server_URI_AVP{ // Ref: RFC4740 9.2 SIP-Server-URI AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 371);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 371);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_MandatoryCapability_AVP{ //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 373);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 373);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_OptionalCapability_AVP{ //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 374);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 374);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Server_Capabilities_AVP{ //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP AVP_Header aVP_Header,// @@ -1225,89 +1190,89 @@ module LibDiameter_Types_Base_AVPs { set of SIP_Server_URI_AVP sIPServerURI optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 372);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (sIP_MandatoryCapability) "fieldPresent=bytes(4, 373)&&CodecHelper.isAvailable()" - variant (sIP_OptionalCapability) "fieldPresent=bytes(4, 374)&&CodecHelper.isAvailable()" - variant (sIPServerURI) "fieldPresent=bytes(4, 371)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 372);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (sIP_MandatoryCapability) "fieldPresent=bytes(4, 373)&&CodecHelper.isAvailable()" +// variant (sIP_OptionalCapability) "fieldPresent=bytes(4, 374)&&CodecHelper.isAvailable()" +// variant (sIPServerURI) "fieldPresent=bytes(4, 371)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Authorization_Lifetime_AVP{ //Ref: RFC35888.9. Authorization-Lifetime AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 291);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 291);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Auth_Grace_Period_AVP{ //Ref: RFC35888.10. Auth-Grace-Period AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 276);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 276);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Max_Cache_Time_AVP { //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 262);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 262);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Server_Assignment_Type_AVP{ //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP AVP_Header aVP_Header,// SIP_Srv_Assgmt_Type aVP_Data } - with { - variant "present=bytes(4, 375);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 375);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_User_Data_Already_Available_AVP{ //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP AVP_Header aVP_Header,// SIP_Usr_Dat_Al_Av_Type aVP_Data } - with { - variant "present=bytes(4, 392);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 392);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Supported_User_Data_Type_AVP{ //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 388);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 388);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_User_Data_Type_AVP{ // Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 390);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 390);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_User_Data_Contents_AVP{ // Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 391);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 391);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record SIP_User_Data_AVP{ //Ref: RFC4740 9.12. SIP-User-Data AVP AVP_Header aVP_Header,// < AVP Header: 389 > @@ -1315,10 +1280,10 @@ module LibDiameter_Types_Base_AVPs { SIP_User_Data_Contents_AVP sIP_User_Data_Contents,//req. set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 389);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 389);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record SIP_Accounting_Information_AVP{ //Ref: RFC4740 9.1. SIP-Accounting-Information AVP @@ -1328,54 +1293,54 @@ module LibDiameter_Types_Base_AVPs { set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 368);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (sIP_Accounting_Server_URI) "fieldPresent=bytes(4, 369)&&CodecHelper.isAvailable()" - variant (sIP_Credit_Control_Server_URI) "fieldPresent=bytes(4, 370)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 368);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (sIP_Accounting_Server_URI) "fieldPresent=bytes(4, 369)&&CodecHelper.isAvailable()" +// variant (sIP_Credit_Control_Server_URI) "fieldPresent=bytes(4, 370)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record SIP_Accounting_Server_URI_AVP{ //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP AVP_Header aVP_Header,// UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps } - with { - variant "present=bytes(4, 369);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// with { +// variant "present=bytes(4, 369);use=com.testingtech.ttcn.tci.codec.CodecHelper" // encode (aVP_Data) "SipNist" // variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" - variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" - } +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } type record SIP_Credit_Control_Server_URI_AVP{ //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP AVP_Header aVP_Header,// UTF8String aVP_Data //DiameterURI replaced with UTF8String - UTF8String to DiameterURI function done in LibDiameterSteps } - with { - variant "present=bytes(4, 370);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// with { +// variant "present=bytes(4, 370);use=com.testingtech.ttcn.tci.codec.CodecHelper" // encode (aVP_Data) "SipNist" // variant (aVP_Data) "externalEncode;externalDecode;condition=CodecHelper.leaveScope()" - variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" - } +// variant (aVP_Data) "encode=CodecHelper.encodeDiameterURI();decode=CodecHelper.decodeDiameterURI()" +// } type record SIP_Method_AVP{ //Ref: RFC4740 9.14. SIP-Method AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 393);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 393);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Number_Auth_Items_AVP{ //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 382);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 382);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type union SIP_Auth_Data_Item_AVP { SIP_Auth_Data_Item_RFC_AVP sIP_Auth_Data_Item_RFC_AVP, //RFC type definition @@ -1391,10 +1356,10 @@ module LibDiameter_Types_Base_AVPs { SIP_Authentication_Info_AVP sIP_Authentication_Info optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 376);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 376);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type union SIP_Authentication_Scheme_AVP{ SIP_Authentication_Scheme_RFC_AVP sIP_Authentication_Scheme_RFC_AVP, @@ -1406,20 +1371,20 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// SIP_Auth_Schm_Type aVP_Data } - with { - variant "present=bytes(4, 377);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 377);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Item_Number_AVP{ //Ref: RFC4740 9.5.2 SIP-Item-Number AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 378);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 378);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type union SIP_Authenticate_AVP { SIP_Authenticate_RFC_AVP sIP_Authenticate_RFC_AVP, //RFC type definition @@ -1440,11 +1405,11 @@ module LibDiameter_Types_Base_AVPs { set of Digest_Auth_Param_AVP digest_Auth_Param optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 379);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 379);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type union SIP_Authorization_AVP { SIP_Authorization_RFC_AVP sIP_Authorization_RFC_AVP, //RFC type definition @@ -1469,11 +1434,11 @@ module LibDiameter_Types_Base_AVPs { set of Digest_Auth_Param_AVP digest_Auth_Param optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 380);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 380);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (digest_Auth_Param) "fieldPresent=bytes(1, 117)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record SIP_Authentication_Info_AVP{ // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP @@ -1485,10 +1450,10 @@ module LibDiameter_Types_Base_AVPs { Digest_Nonce_Count_AVP digest_Nonce_Count optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 381);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 381);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record SIP_Reason_Info_AVP{ @@ -1496,10 +1461,10 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 385);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 385);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Deregistration_Reason_AVP{ // Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP @@ -1508,20 +1473,20 @@ module LibDiameter_Types_Base_AVPs { SIP_Reason_Info_AVP sIP_Reason_Info_AVP optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 383);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 383);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record SIP_Reason_Code_AVP{ // Ref: RFC4740 .7.1. SIP-Reason-Code AVP AVP_Header aVP_Header,// SIP_Reason_Code_Type aVP_Data } - with { - variant "present=bytes(4, 384);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 384);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end of group RFC4740_AVPs /* ******** Digest AVPs ********* */ @@ -1794,10 +1759,10 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 601);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 601);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set of Public_Identity_AVP Public_Identity_AVPs; @@ -1808,39 +1773,39 @@ module LibDiameter_Types_Base_AVPs { MSISDN_AVP mSISDN_AVP optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record MSISDN_AVP{ // Ref: 3GPP TS 29.329 6.3.2 MSISDN AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 700);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Data_Reference_AVP{ // Ref: 3GPP TS 29.3296.3.4 Data-Reference AVP AVP_Header aVP_Header,// Data_Reference_Type aVP_Data } - with { - variant "present=bytes(4, 703);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 703);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Service_Indication_AVP{ // Ref: 3GPP TS 29.329 6.3.5 Service-Indication AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 704);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 704);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Subs_Req_Type_AVP{ @@ -1848,55 +1813,55 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// Subs_Req_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 705);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 705);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Requested_Domain_AVP{ // Ref: 3GPP TS 29.329 6.3.7 Requested-Domain AVP AVP_Header aVP_Header,// Request_Domain_Type aVP_Data } - with { - variant "present=bytes(4, 706);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 706);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Current_Location_AVP{ // Ref: 3GPP TS 29.329 6.3.8 Current-Location AVP AVP_Header aVP_Header,// Current_Location_Type aVP_Data } - with { - variant "present=bytes(4, 707);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 707);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Identity_Set_AVP{ // Ref: 3GPP TS 29.329 6.3.10 Identity-Set AVP AVP_Header aVP_Header,// Identity_Set_Type aVP_Data } - with { - variant "present=bytes(4, 708);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 708);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Expiry_Time_AVP{ // Ref: 3GPP TS 29.329 6.3.16 Expiry-Time AVP_Header aVP_Header,// Time aVP_Data } - with { - variant "present=bytes(4, 709);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 709);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Send_Data_Indication_AVP{ // Ref: 3GPP TS 29.329 6.3.17 Send-Data-Indication AVP AVP_Header aVP_Header,// Send_Data_Indication_Type aVP_Data } - with { - variant "present=bytes(4, 710);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 710);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Repository_Data_ID_AVP { //ref: TS129 328 6.3.24 @@ -1917,10 +1882,10 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 602);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 602);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Supported_Features_AVP{ // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) AVP_Header aVP_Header,// @@ -1929,64 +1894,64 @@ module LibDiameter_Types_Base_AVPs { Feature_List_AVP feature_list, set of AVP_Type aVP_Data optional //other parameters. } - with { - variant "present=bytes(4, 628);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 628);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Feature_List_ID_AVP{ // Ref: 3GPP TS 29.229, clause 6.3.30 AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 629);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 629);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Feature_List_AVP{ // Ref: 3GPP TS 29.229, clause 6.3.31 AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 630);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 630);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Wildcarded_PSI_AVP{ // Ref: 3GPP TS 29.329 6.3.19 Wildcarded-PSI AVP , 3GPP TS 29.229 AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Wildcarded_IMPU_AVP{ // Ref: 3GPP TS 29.329 6.3.20 Wildcarded-IMPU AVP , 3GPP TS 29.229 AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 636);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 636);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record DSAI_Tag_AVP{ // Ref: 3GPP TS 29.329 6.3.18 DSAI-Tag AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 711);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 711);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Experimental_Result_Code_AVP{ // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values AVP_Header aVP_Header,// Experimental_Result_Type aVP_Data } - with { - variant "present=bytes(4, 298);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 298);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Experimental_Result_AVP{ // Ref: 3GPP TS 29.229 6.2 Result-Code AVP values // FUN 766300-PCL-030 : Experimental-Result AVP shall be used for Sh/Dh errors. @@ -1996,20 +1961,20 @@ module LibDiameter_Types_Base_AVPs { Vendor_Id_AVP vendor_Id, Experimental_Result_Code_AVP experimental_Result_Code } - with { - variant "present=bytes(4, 297);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (experimental_Result_Code) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 297);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (experimental_Result_Code) "condition=CodecHelper.leaveScope()" +// } type record User_Data_AVP{ // Ref: 3GPP TS 29.229 6.3.7 User-Data AVP // Ref: AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 606);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 606);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } } group RFC4005_AVPs{ @@ -2020,10 +1985,10 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 30);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 30);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end group NAS_Session_AVPs group IP_Access_Authorization_AVPs { @@ -2033,30 +1998,30 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 8);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 8);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Framed_IPv6_Prefix_AVP{ // Ref: RFC4005 6.11.1 Framed_IPv6_Prefix AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Framed_Interface_Id_AVP{ // Ref: RFC4005 6.11.5. Framed-Interface-Id AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 97);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } }//end group IP_Access_Authorization_AVPs @@ -2069,168 +2034,168 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 461);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 461);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Request_Type_AVP{ // Ref: RFC4006 8.3. CC-Request-Type AVP AVP_Header aVP_Header,// CC_Request_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 416);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 416);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Request_Number_AVP{ // Ref: RFC4006 8.2. CC-Request-Number AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 415);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 415);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Sub_Session_Id_AVP{ // Ref: RFC4006 8.5. CC-Sub-Session-Id AVP AVP_Header aVP_Header,// UInt64 aVP_Data } - with { - variant "present=bytes(4, 419);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 419);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Subscription_Id_Type_AVP{ // Ref: RFC4006 8.47. Subscription-Id-Type AVP AVP_Header aVP_Header,// Subscription_Id_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 450);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 450);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Subscription_Id_Data_AVP{ // Ref: RFC4006 AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 444);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 444);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Subscription_Id_AVP{ // Ref: RFC4006 8.46. Subscription-Id AVP AVP_Header aVP_Header,//< AVP Header: 443 > Subscription_Id_Type_AVP subscription_Id_Type, Subscription_Id_Data_AVP subscription_Id_Data } - with { - variant "present=bytes(4, 443);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (subscription_Id_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 443);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (subscription_Id_Data) "condition=CodecHelper.leaveScope()" +// } type record Service_Identifier_AVP{ // Ref: RFC4006 8.28. Service-Identifier AVP AVP_Header aVP_Header,//< AVP Header: 439 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 439);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 439);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Time_AVP{ // Ref: RFC4006 8.21. CC-Time AVP AVP_Header aVP_Header,//< AVP Header: 420 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 420);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 420);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Value_Digits_AVP{ // Ref: RFC4006 8.10. Value-Digits AVP AVP_Header aVP_Header,//< AVP Header: 447 > Int64 aVP_Data } - with { - variant "present=bytes(4, 447);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 447);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Exponent_AVP{ // Ref: RFC4006 8.9. Exponent AVP AVP_Header aVP_Header,//< AVP Header: 429 > Int32 aVP_Data } - with { - variant "present=bytes(4, 429);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 429);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Unit_Value_AVP{ // Ref: RFC4006 8.8. Unit-Value AVP AVP_Header aVP_Header,//< AVP Header: 445 > Value_Digits_AVP value_Digits, Exponent_AVP exponent optional } - with { - variant "present=bytes(4, 445);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (exponent) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 445);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (exponent) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Currency_Code_AVP{ // Ref: RFC4006 8.11. Currency-Code AVP AVP_Header aVP_Header,//< AVP Header: 425 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 425);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 425);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set CC_Money_AVP{ // Ref: RFC4006 8.22. CC-Money AVP AVP_Header aVP_Header,//< AVP Header: 413 > Unit_Value_AVP unit_Value, Currency_Code_AVP currency_Code optional } - with { - variant "present=bytes(4, 413);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (currency_Code) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 413);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (currency_Code) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record CC_Total_Octets_AVP{ // Ref: RFC4006 8.23. CC-Total-Octets AVP AVP_Header aVP_Header,//< AVP Header: 421 > UInt64 aVP_Data } - with { - variant "present=bytes(4, 421);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 421);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Input_Octets_AVP{ // Ref: RFC4006 8.24. CC-Input-Octets AVP AVP_Header aVP_Header,//< AVP Header: 412 > UInt64 aVP_Data } - with { - variant "present=bytes(4, 412);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 412);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Output_Octets_AVP{ // Ref: RFC4006 8.25. CC-Output-Octets AVP AVP_Header aVP_Header,//< AVP Header: 414 > UInt64 aVP_Data } - with { - variant "present=bytes(4, 414);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 414);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Service_Specific_Units_AVP{ // Ref: RFC4006 8.26. CC-Service-Specific-Units AVP AVP_Header aVP_Header,//< AVP Header: 417 > UInt64 aVP_Data } - with { - variant "present=bytes(4, 417);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 417);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set Requested_Service_Unit_AVP{ // Ref: RFC4006 8.18. Requested-Service-Unit AVP AVP_Header aVP_Header,//< AVP Header: 437 > @@ -2242,29 +2207,29 @@ module LibDiameter_Types_Base_AVPs { CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 437);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 437);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Requested_Action_AVP{ // Ref: RFC4006 8.41. Requested-Action AVP AVP_Header aVP_Header,//< AVP Header: 436 > Requested_Action_Type aVP_Data } - with { - variant "present=bytes(4, 436);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 436);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Tariff_Change_Usage_AVP{ // Ref: RFC4006 8.27. Tariff-Change-Usage AVP AVP_Header aVP_Header,//< AVP Header: 452 > Tariff_Change_Usage_Type aVP_Data } - with { - variant "present=bytes(4, 452);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 452);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set Used_Service_Unit_AVP{ // Ref: RFC4006 8.19. Used-Service-Unit AVP AVP_Header aVP_Header,//< AVP Header: 446 > @@ -2279,29 +2244,29 @@ module LibDiameter_Types_Base_AVPs { Event_Charging_TimeStamp_AVP event_Charging_TimeStamp optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 446);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 446);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Multiple_Services_Indicator_AVP{ // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP AVP_Header aVP_Header,//< AVP Header: 455 > Multiple_Serv_Indi_Type aVP_Data } - with { - variant "present=bytes(4, 455);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 455);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Tariff_Time_Change_AVP{ // Ref: RFC4006 8.20. Tariff-Time-Change AVP AVP_Header aVP_Header,//< AVP Header: 451 > Time aVP_Data } - with { - variant "present=bytes(4, 451);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 451);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set Granted_Service_Unit_AVP{ // Ref: RFC4006 8.17. Granted-Service-Unit AVP @@ -2315,40 +2280,40 @@ module LibDiameter_Types_Base_AVPs { CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 431);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 431);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Rating_Group_AVP{ // Ref: RFC4006 8.29. Rating-Group AVP AVP_Header aVP_Header,//< AVP Header: 433 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record G_S_U_Pool_Identifier_AVP{ // Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP AVP_Header aVP_Header,//< AVP Header: 453 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 453);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 453);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CC_Unit_Type_AVP{ // Ref: RFC4006 8.32. CC-Unit-Type AVP AVP_Header aVP_Header,//< AVP Header: 454 > CC_Unit_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 454);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 454);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set G_S_U_Pool_Reference_AVP{ // Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP AVP_Header aVP_Header,//< AVP Header: 457 > @@ -2356,75 +2321,75 @@ module LibDiameter_Types_Base_AVPs { CC_Unit_Type_AVP cC_Unit_Type, Unit_Value_AVP unit_Value } - with { - variant "present=bytes(4, 457);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (unit_Value) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 457);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (unit_Value) "condition=CodecHelper.leaveScope()" +// } type record Validity_Time_AVP{ // Ref: RFC4006 8.33. Validity-Time AVP AVP_Header aVP_Header,//< AVP Header: 448 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 448);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 448);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Final_Unit_Action_AVP{ // Ref: RFC4006 8.35. Final-Unit-Action AVP AVP_Header aVP_Header,//< AVP Header: 449 > Final_Unit_Action_Type aVP_Data } - with { - variant "present=bytes(4, 449);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 449);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Restriction_Filter_Rule_AVP{ // Ref: RFC4006 8.36. Restriction-Filter-Rule AVP AVP_Header aVP_Header,//< AVP Header: 438 > IPFilterRule_Type aVP_Data } - with { - variant "present=bytes(4, 438);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 438);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Filter_Id_AVP{ // Ref: RFC4005 6.7. Filter-Id AVP AVP_Header aVP_Header,//< AVP Header: 11 > UTF8String aVP_Data } - with { - variant "present=bytes(4, 11);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 11);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Address_Type_AVP{ // Ref: RFC4006 8.38. Redirect-Address-Type AVP AVP_Header aVP_Header,//< AVP Header: 433 > Redirect_Address_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 433);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Server_Address_AVP{ // Ref: RFC4006 8.39. Redirect-Server-Address AVP AVP_Header aVP_Header,//< AVP Header: 435 > UTF8String aVP_Data } - with { - variant "present=bytes(4, 435);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 435);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Redirect_Server_AVP{ // Ref: RFC4006 8.37. Redirect-Server AVP AVP_Header aVP_Header,//< AVP Header: 434 > Redirect_Address_Type_AVP redirect_Address_Type, Redirect_Server_Address_AVP redirect_Server_Address } - with { - variant "present=bytes(4, 434);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// with { +// variant "present=bytes(4, 434);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// } type set Final_Unit_Indication_AVP{ // Ref: RFC4006 8.34. Final-Unit-Indication AVP AVP_Header aVP_Header,//< AVP Header: 430 > @@ -2433,12 +2398,12 @@ module LibDiameter_Types_Base_AVPs { set of Filter_Id_AVP filter_Id optional, Redirect_Server_AVP redirect_Server optional } - with { - variant "present=bytes(4, 430);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (restriction_Filter_Rule) "fieldPresent=bytes(4, 438)&&CodecHelper.isAvailable()" - variant (filter_Id) "fieldPresent=bytes(4, 11)&&CodecHelper.isAvailable()" - variant (redirect_Server) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 430);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (restriction_Filter_Rule) "fieldPresent=bytes(4, 438)&&CodecHelper.isAvailable()" +// variant (filter_Id) "fieldPresent=bytes(4, 11)&&CodecHelper.isAvailable()" +// variant (redirect_Server) "condition=CodecHelper.leaveScope()" +// } type set Multiple_Services_Credit_Control_AVP{ // Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP @@ -2471,99 +2436,99 @@ module LibDiameter_Types_Base_AVPs { QoS_Information_AVP qoS_Information optional, // TS 132 299 set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 456);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (used_Service_Unit) "fieldPresent=bytes(4, 446)&&CodecHelper.isAvailable()" - variant (service_Identifier) "fieldPresent=bytes(4, 439)&&CodecHelper.isAvailable()" - variant (g_S_U_Pool_Reference) "fieldPresent=bytes(4, 457)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 456);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (used_Service_Unit) "fieldPresent=bytes(4, 446)&&CodecHelper.isAvailable()" +// variant (service_Identifier) "fieldPresent=bytes(4, 439)&&CodecHelper.isAvailable()" +// variant (g_S_U_Pool_Reference) "fieldPresent=bytes(4, 457)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Service_Parameter_Type_AVP{ // Ref: RFC4006 8.44. Service-Parameter-Type AVP AVP_Header aVP_Header,//< AVP Header: 441 > UInt32 aVP_Data } - with { - variant "present=bytes(4, 441);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 441);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Service_Parameter_Value_AVP{ // Ref: RFC4006 8.45. Service-Parameter-Value AVP AVP_Header aVP_Header,//< AVP Header: 442 > octetstring aVP_Data } - with { - variant "present=bytes(4, 442);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 442);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type set Service_Parameter_Info_AVP{ // Ref: RFC4006 8.43. Service-Parameter-Info AVP AVP_Header aVP_Header,//< AVP Header: 440 > Service_Parameter_Type_AVP service_Parameter_Type, Service_Parameter_Value_AVP service_Parameter_Value } - with { - variant "present=bytes(4, 440);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// with { +// variant "present=bytes(4, 440);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// } type record CC_Correlation_Id_AVP{ // Ref: RFC4006 8.1. CC-Correlation-Id AVP AVP_Header aVP_Header,//< AVP Header: 411 > octetstring aVP_Data } - with { - variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record User_Equipment_Info_Type_AVP{ // Ref: RFC4006 8.50. User-Equipment-Info-Type AVP AVP_Header aVP_Header,//< AVP Header: 459 > User_Equipment_Info_Ty_Type aVP_Data } - with { - variant "present=bytes(4, 459);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 459);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record User_Equipment_Info_Value_AVP{ // Ref: RFC4006 8.51. User-Equipment-Info-Value AVP AVP_Header aVP_Header,//< AVP Header: 460 > octetstring aVP_Data } - with { - variant "present=bytes(4, 460);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 460);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type set User_Equipment_Info_AVP{ // Ref: RFC4006 8.49. User-Equipment-Info AVP AVP_Header aVP_Header,//< AVP Header: 458 > User_Equipment_Info_Type_AVP user_Equipment_Info_Type, User_Equipment_Info_Value_AVP user_Equipment_Info_Value } - with { - variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (user_Equipment_Info_Value) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (user_Equipment_Info_Value) "condition=CodecHelper.leaveScope()" +// } type record CC_Session_Failover_AVP{ // Ref: RFC4006 8.4. CC-Session-Failover AVP AVP_Header aVP_Header,//< AVP Header: 418 > CC_Session_Failover_Type aVP_Data } - with { - variant "present=bytes(4, 418);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 418);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Cost_Unit_AVP{ // Ref: RFC4006 8.12. Cost-Unit AVP AVP_Header aVP_Header,//< AVP Header: 424 > UTF8String aVP_Data } - with { - variant "present=bytes(4, 424);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 424);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set Cost_Information_AVP{ // Ref: RFC4006 8.7. Cost-Information AVP AVP_Header aVP_Header,//< AVP Header: 423 > @@ -2571,37 +2536,37 @@ module LibDiameter_Types_Base_AVPs { Currency_Code_AVP currency_Code, Cost_Unit_AVP cost_Unit optional } - with { - variant "present=bytes(4, 423);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (cost_Unit) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 423);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cost_Unit) "condition=CodecHelper.leaveScope()" +// } type record Check_Balance_Result_AVP{ // Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP AVP_Header aVP_Header,//< AVP Header: 422 > Check_Balance_Result_Type aVP_Data } - with { - variant "present=bytes(4, 422);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 422);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Credit_Control_Failure_Handling_AVP{ // Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP AVP_Header aVP_Header,//< AVP Header: 427 > Credit_Cont_Fail_Hand_Type aVP_Data } - with { - variant "present=bytes(4, 427);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 427);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Direct_Debiting_Failure_Handling_AVP{ // Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP AVP_Header aVP_Header,//< AVP Header: 428 > Direct_Debi_Fail_Hand_Type aVP_Data } - with { - variant "present=bytes(4, 428);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 428);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end of group RFC4006_AVPa group RFC5580_AVPS { @@ -2669,70 +2634,70 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header, // UTF8String aVP_Data } - with { - variant "present=bytes(4, 909);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 909);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_SGSN_Address_AVP{ //Ref: ETSI TS 129 061 3GPP_SGSN_Address AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 6);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 6);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_SGSN_IPv6_Address_AVP{ //Ref: ETSI TS 129 061 3GPP_SGSN_Address AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 15);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 15);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_User_Location_Info_AVP{ //Ref: ETSI TS 129 061 ThreeGPP_User_Location_Info_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 22);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 22);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_MS_TimeZone_AVP{ //Ref: ETSI TS 129 061 ThreeGPP_MS_TimeZone_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 23);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 23);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_RAT_Type_AVP{ //Ref: ETSI TS 129 061 ThreeGPP_RAT_Type_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 21);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 21);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ThreeGPP_SGSN_MCC_MNC_AVP{ //Ref: ETSI TS 129 061 ThreeGPP_SGSN_MCC_MNC_AVP AVP_Header aVP_Header, // UTF8String aVP_Data } - with { - variant "present=bytes(4, 18);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 18);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } /** * @desc TODO @@ -2781,9 +2746,10 @@ module LibDiameter_Types_Base_AVPs { IPv4 (2), IPv6 (3), IPv4v6 (4) - } with { - variant "length=32" - } // End of type ThreeGPP_PDP_Type + } +// } with { +// variant "length=32" +// } // End of type ThreeGPP_PDP_Type /** * @desc TODO @@ -2874,30 +2840,30 @@ module LibDiameter_Types_Base_AVPs { MDT_Configuration_AVP mDT_Configuration optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1485);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1485);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Trace_Reference_AVP{ //Ref: ETSI TS129 272 Trace_Reference_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1459);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1459);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Trace_Depth_AVP{ //Ref: ETSI TS129 272 Trace_Depth_AVP AVP_Header aVP_Header, // Trace_Depth aVP_Data } - with { - variant "present=bytes(4, 1462);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1462);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Trace_NE_Type_List_AVP{ @@ -2905,50 +2871,50 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1463);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1463);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Trace_Event_List_AVP{ //Ref: ETSI TS129 272 Trace_Event_List_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1465);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1465);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Trace_Collection_Entity_AVP{ //Ref: ETSI TS129 272 Trace_Collection_Entity_AVP AVP_Header aVP_Header, // Address aVP_Data } - with { - variant "present=bytes(4, 1452);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1452);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Trace_Interface_List_AVP{ //Ref: ETSI TS129 272 Trace_Interface_List_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1464);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1464);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record OMC_Id_AVP{ //Ref: ETSI TS129 272 OMC_Id_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1466);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1466);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record MDT_Configuration_AVP{ //Ref: ETSI TS129 272 MDT_Configuration_AVP @@ -2965,20 +2931,20 @@ module LibDiameter_Types_Base_AVPs { Logging_Duration_AVP logging_Duration optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1622);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1622);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Job_Type_AVP{ //Ref: ETSI TS129 272 Job_Type_AVP AVP_Header aVP_Header, // Job_Type aVP_Data } - with { - variant "present=bytes(4, 1623);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1623);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Area_Scope_AVP{ //Ref: ETSI TS129 272 Area_Scope_AVP @@ -2990,143 +2956,143 @@ module LibDiameter_Types_Base_AVPs { set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1624);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (cell_Global_Identity) "fieldPresent=bytes(4, 1604)&&CodecHelper.isAvailable()" - variant (e_UTRAN_Cell_Global_Identity_AVP) "fieldPresent=bytes(4, 1602)&&CodecHelper.isAvailable()" - variant (routing_Area_Identity) "fieldPresent=bytes(4, 1605)&&CodecHelper.isAvailable()" - variant (location_Area_Identity) "fieldPresent=bytes(4, 1606)&&CodecHelper.isAvailable()" - variant (tracking_Area_Identity) "fieldPresent=bytes(4, 1603)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1624);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (cell_Global_Identity) "fieldPresent=bytes(4, 1604)&&CodecHelper.isAvailable()" +// variant (e_UTRAN_Cell_Global_Identity_AVP) "fieldPresent=bytes(4, 1602)&&CodecHelper.isAvailable()" +// variant (routing_Area_Identity) "fieldPresent=bytes(4, 1605)&&CodecHelper.isAvailable()" +// variant (location_Area_Identity) "fieldPresent=bytes(4, 1606)&&CodecHelper.isAvailable()" +// variant (tracking_Area_Identity) "fieldPresent=bytes(4, 1603)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record List_Of_Measurements_AVP{ //Ref: ETSI TS129 272 List_Of_Measurements_AVP AVP_Header aVP_Header, // UInt32 aVP_Data } - with { - variant "present=bytes(4, 1625);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1625);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Reporting_Trigger_AVP{ //Ref: ETSI TS129 272 Reporting_Trigger_AVP AVP_Header aVP_Header, // UInt32 aVP_Data } - with { - variant "present=bytes(4, 1626);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1626);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Report_Interval_AVP{ //Ref: ETSI TS129 272 Report_Interval_AVP AVP_Header aVP_Header, // Report_Interval aVP_Data } - with { - variant "present=bytes(4, 1627);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1627);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Report_Amount_AVP{ //Ref: ETSI TS129 272 Report_Amount_AVP AVP_Header aVP_Header, // Report_Amount aVP_Data } - with { - variant "present=bytes(4, 1628);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1628);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Event_Treshold_RSRP_AVP{ //Ref: ETSI TS129 272 Event_Treshold_RSRP_AVP AVP_Header aVP_Header, // UInt32 aVP_Data } - with { - variant "present=bytes(4, 1629);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1629);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Event_Treshold_RSRQ_AVP{ //Ref: ETSI TS129 272 Event_Treshold_RSRQ_AVP AVP_Header aVP_Header, // UInt32 aVP_Data } - with { - variant "present=bytes(4, 1630);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1630);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Logging_Interval_AVP{ //Ref: ETSI TS129 272 Logging_Interval_AVP AVP_Header aVP_Header, // Logging_Interval aVP_Data } - with { - variant "present=bytes(4, 1631);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1631);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Logging_Duration_AVP{ //Ref: ETSI TS129 272 Logging_Duration_AVP AVP_Header aVP_Header, // Logging_Duration aVP_Data } - with { - variant "present=bytes(4, 1632);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1632);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Cell_Global_Identity_AVP{ //Ref: ETSI TS129 272 Cell_Global_Identity_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1604);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1604);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record E_UTRAN_Cell_Global_Identity_AVP{ //Ref: ETSI TS129 272 E_UTRAN_Cell_Global_Identity_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1602);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1602);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Routing_Area_Identity_AVP{ //Ref: ETSI TS129 272 Routing_Area_Identity_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1605);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1605);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Location_Area_Identity_AVP{ //Ref: ETSI TS129 272 Location_Area_Identity_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1606);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1606);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Tracking_Area_Identity_AVP{ //Ref: ETSI TS129 272 Tracking_Area_Identity_AVP AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 1603);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1603);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } }//end of group TS129_272_AVPs @@ -3178,10 +3144,10 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header, // UTF8String aVP_Data } - with { - variant "present=bytes(4, 621);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 621);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end of group X_S0057_1_AVPs group TS283_034_AVPs{ @@ -3190,20 +3156,20 @@ module LibDiameter_Types_Base_AVPs { AVP_Header aVP_Header, // octetstring aVP_Data } - with { - variant "present=bytes(4, 302);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 302);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Physical_Access_ID_AVP{ //Ref: Draft TS283_034 Physical_Access_ID_AVP AVP_Header aVP_Header, // UTF8String aVP_Data } - with { - variant "present=bytes(4, 313);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 313);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end of group TS283_034_AVPs }//end group AVPs @@ -3212,10 +3178,8 @@ module LibDiameter_Types_Base_AVPs { group NumberTypes { - type float FLOAT32 - with { - variant "length=32" - } + type float FLOAT32; + //not supported so far but not used as well type float FLOAT64; @@ -3223,10 +3187,7 @@ module LibDiameter_Types_Base_AVPs { type record length (8) of UInt16 IPv6Addr; - type universal charstring UTF8String - with { - variant "charset=UTF-8;use=com.testingtech.ttcn.tci.codec.CodecHelper;encode=CodecHelper.encodeUtf8stringWithPadding();decode=CodecHelper.decodeUtf8stringWithPadding()" - } + type universal charstring UTF8String; }// end group NumberTypes diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn index a9407be..f6f222c 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn @@ -32,9 +32,9 @@ module LibDiameter_Types_CxDx_AVPs { REGISTRATION (0), DE_REGISTRATION (1), REGISTRATION_AND_CAPABILITIES (2) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Srv_Assgmt_Type_Code{ @@ -52,25 +52,25 @@ module LibDiameter_Types_CxDx_AVPs { DEREGISTRATION_TOO_MUCH_DATA_E (11), AAA_USER_DATA_REQUEST (12), PGW_UPDATE (13) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Usr_Dat_Al_Av_Code{ USER_DATA_NOT_AVAILABLE_E (0), USER_DATA_ALREADY_AVAILABLE_E (1) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Multiple_Reg_Id_Code{ NOT_MULTIPLE_REGISTRATION (0), MULTIPLE_REGISTRATION (1) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Session_Prio_Code{ @@ -79,32 +79,32 @@ module LibDiameter_Types_CxDx_AVPs { PRIORITY_2 (2), PRIORITY_3 (3), PRIORITY_4 (4) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Loose_Route_Ind_Code{ LOOSE_ROUTE_NOT_REQUIRED (0), LOOSE_ROUTE_REQUIRED (1) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Priviledged_Sender_Ind_Code{ NOT_PRIVILEDGED_SENDER (0), PRIVILEDGED_SENDER (1) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Originating_Request_Code{ ORIGINATING (0) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } type enumerated Reason_Code_Type{ @@ -112,9 +112,9 @@ module LibDiameter_Types_CxDx_AVPs { NEW_SERVER_ASSIGNED_E (1), SERVER_CHANGE_E (2), REMOVE_S_CSCF_E (3) - } - with { - variant "length=32" +// } +// with { +// variant "length=32" } }//end group Enum_AVP_Cx_Dx_Types @@ -129,43 +129,43 @@ module LibDiameter_Types_CxDx_AVPs { set of OptionalCapability_AVP optionalCapability optional, set of Server_Name_AVP server_Name optional, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" - variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" - variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" +// variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" +// variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record MandatoryCapability_AVP{ //Ref: ETSI TS 129 229 6.3.5. Mandatory-Capability AVP AVP_Header aVP_Header,// UInt32 aVP_Data - } - with { - variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record OptionalCapability_AVP{ //Ref: ETSI TS 129 229 6.3.6. Optional-Capability AVP AVP_Header aVP_Header,// UInt32 aVP_Data - } - with { - variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Visited_Network_Identifier_AVP{ // Ref: ETSI TS 129 229 6.3.1 Visited-Network-Id AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 600);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 600);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record SIP_Authentication_Context_AVP{ @@ -178,50 +178,50 @@ module LibDiameter_Types_CxDx_AVPs { //Ref: ETSI TS 129 229 6.3.44 UAR_Flags_AVP AVP_Header aVP_Header,// UInt32 aVP_Data - } - with { - variant "present=bytes(4, 637);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 637);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record User_Authorization_Type_AVP{ //Ref: ETSI TS 129 229 6.3.24 User_Authorization_Type AVP AVP_Header aVP_Header,// User_Authorization_Type_Code aVP_Data - } - with { - variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Wildcarded_Public_Identity_AVP{ //Ref: ETSI TS 129 229 6.3.35 Wildcarded_Public_Identity AVP AVP_Header aVP_Header,// UTF8String aVP_Data - } - with { - variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 634);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Server_Assignment_Type_AVP{ //Ref: ETSI TS 129 229 6.3.15 Server-Assignment-Type AVP AVP_Header aVP_Header,// Srv_Assgmt_Type_Code aVP_Data - } - with { - variant "present=bytes(4, 614);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 614);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record User_Data_Already_Available_AVP{ //Ref: ETSI TS 129 229 6.3.26 User_Data_Already_Available AVP AVP_Header aVP_Header,// Usr_Dat_Al_Av_Code aVP_Data - } - with { - variant "present=bytes(4,624);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,624);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record SIP_Digest_Authenticate_AVP{ @@ -240,10 +240,10 @@ module LibDiameter_Types_CxDx_AVPs { set length (1..infinity) of Restoration_Info_AVP restoration_Info, SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 639);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 639);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Restoration_Info_AVP{ @@ -253,20 +253,20 @@ module LibDiameter_Types_CxDx_AVPs { Contact_AVP contact, Subscription_Info_AVP subscription_Info optional, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 649);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 649);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Path_AVP{ // Ref: ETSI TS 129 229 6.3.47 Path AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 640);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 640);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Subscription_Info_AVP{ @@ -278,80 +278,80 @@ module LibDiameter_Types_CxDx_AVPs { Record_Route_AVP record_Route, Contact_AVP contact, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 642);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 642);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Contact_AVP{ // Ref: ETSI TS 129 229 6.3.48 Contact AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 641);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 641);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Call_ID_SIP_Header_AVP{ // Ref: ETSI TS 129 229 6.3.49.1 Call_ID_SIP_Header AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 643);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 643);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record From_SIP_Header_AVP{ // Ref: ETSI TS 129 229 6.3.49.2 From_SIP_Header AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 644);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 644);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record To_SIP_Header_AVP{ // Ref: ETSI TS 129 229 6.3.49.3 To_SIP_Header AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 645);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 645);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Record_Route_AVP{ // Ref: ETSI TS 129 229 6.3.49.4 Record_Route AVP AVP_Header aVP_Header,// octetstring aVP_Data - } - with { - variant "present=bytes(4, 646);use=com.testingtech.ttcn.tci.codec.CodecHelper;" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 646);use=com.testingtech.ttcn.tci.codec.CodecHelper;" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Multiple_Registration_Indication_AVP{ //Ref: ETSI TS 129 229 6.3.51 Multiple_Registration_Indication AVP AVP_Header aVP_Header,// Multiple_Reg_Id_Code aVP_Data - } - with { - variant "present=bytes(4,648);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,648);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Session_Priority_AVP{ //Ref: ETSI TS 129 229 6.3.56 Multiple_Registration_Indication AVP AVP_Header aVP_Header,// Session_Prio_Code aVP_Data - } - with { - variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Associated_Identities_AVP{ @@ -359,10 +359,10 @@ module LibDiameter_Types_CxDx_AVPs { AVP_Header aVP_Header,// < AVP Header: 632 > User_Name_AVP user_Name optional, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 632);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 632);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Associated_Registered_Identities_AVP{ @@ -370,40 +370,40 @@ module LibDiameter_Types_CxDx_AVPs { AVP_Header aVP_Header,// < AVP Header: 647 > User_Name_AVP user_Name optional, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 647);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 647);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Loose_Route_Indication_AVP{ //Ref: ETSI TS 129 229 6.3.45 Multiple_Registration_Indication AVP AVP_Header aVP_Header,// Loose_Route_Ind_Code aVP_Data - } - with { - variant "present=bytes(4,638);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,638);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Priviledged_Sender_Indication_AVP{ //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP AVP_Header aVP_Header,// Priviledged_Sender_Ind_Code aVP_Data - } - with { - variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Originating_Request_AVP{ //Ref: ETSI TS 129 229 6.3.58 Multiple_Registration_Indication AVP AVP_Header aVP_Header,// Originating_Request_Code aVP_Data - } - with { - variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4,652);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Deregistration_Reason_AVP{ @@ -412,30 +412,30 @@ module LibDiameter_Types_CxDx_AVPs { Reason_Code_AVP reason_Code,//requi. Reason_Info_AVP reason_Info optional, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 615);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 615);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Reason_Code_AVP{ //Ref: ETSI TS 129 229 6.3.17 Reason_Code AVP AVP_Header aVP_Header,// Reason_Code_Type aVP_Data - } - with { - variant "present=bytes(4, 616);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 616);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } type record Reason_Info_AVP{ //Ref: ETSI TS 129 229 6.3.18 Reason_Info AVP AVP_Header aVP_Header,// UTF8String aVP_Data - } - with { - variant "present=bytes(4, 617);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 617);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" } /** @@ -484,10 +484,10 @@ module LibDiameter_Types_CxDx_AVPs { User_Name_AVP user_Name, Public_Identity_AVP public_Identity, set of AVP_Type aVP_Type optional - } - with { - variant "present=bytes(4, 651);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } +// with { +// variant "present=bytes(4, 651);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } type record Confidentiality_Key_AVP { //ref: 7.3.57 diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn index fd3f78f..57a9137 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn @@ -28,9 +28,9 @@ module LibDiameter_Types_Gx_AVPs { ThreeGPP_EPS_E (5), NON_3GPP_EPS_E (6) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated RAT_Type{ // Ref: ETSI TS 129 212 5.3.31 @@ -46,51 +46,51 @@ module LibDiameter_Types_Gx_AVPs { UMB_E(2002), EHRPD_E(2003) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Bearer_Control_Mode{ // Ref: ETSI TS 129 212 5.3.23 UE_ONLY_E (0), RESERVED_E (1), UE_NW_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Bearer_Operation{ // Ref: ETSI TS 129 212 5.3.21 TERMINATION_E (0), ESTABLISHMENT_E (1), MODIFICATION_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Bearer_Usage{ // Ref: ETSI TS 129 212 5.3.1 GENERAL_E (0), IMS_SIGNALLING_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Charging_Correlation_Indicator{ // Ref: ETSI TS 129 212 5.3.67 CHARGING_IDENTIFIER_REQUIRED_E (0) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated CSG_Information_Reporting{ // Ref: ETSI TS 129 212 5.3.64 CHANGE_CSG_CELL_E (0), CHANGE_CSG_SUBSCRIBED_HYBRID_CELL_E (1), CHANGE_CSG_UNSUBSCRIBED_HYBRID_CELL_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Event_Trigger{ // Ref: ETSI TS 129 212 5.3.7 @@ -129,9 +129,9 @@ module LibDiameter_Types_Gx_AVPs { ROUTING_RULE_CHANGE_E (37), MAX_MBR_APN_AMBR_CHANGE_E (38) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Flow_Direction{ // Ref: ETSI TS 129 212 5.3.65 UNSPECIFIED_E (0), @@ -139,42 +139,42 @@ module LibDiameter_Types_Gx_AVPs { UPLINK_E (2), BIDIRECTIONAL_E (3) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Metering_Method{ // Ref: ETSI TS 129 212 5.3.8 DURATION_E (0), VOLUME_E (1), DURATION_VOLUME_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Network_Request_Support{ // Ref: ETSI TS 129 212 5.3.24 NETWORK_REQUEST_NOT_SUPPORTED_E (0), NETWORK_REQUEST_SUPPORTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Offline{ // Ref: ETSI TS 129 212 5.3.9 DISABLE_OFFLINE_E (0), ENABLE_OFFLINE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Online{ // Ref: ETSI TS 129 212 5.3.10 DISABLE_ONLINE_E (0), ENABLE_ONLINE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Packet_Filter_Operation{ // Ref: ETSI TS 129 212 5.3.57 @@ -182,35 +182,35 @@ module LibDiameter_Types_Gx_AVPs { ADDITION_E (1), MODIFICATION_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Packet_Filter_Usage{ // Ref: ETSI TS 129 212 5.3.66 SEND_TO_UE_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Pre_emption_Capability{ // Ref: ETSI TS 129 212 5.3.46 PRE_EMPTION_CAPABILITY_ENABLED_E (0), PRE_EMPTION_CAPABILITY_DISABLED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Pre_emption_Vulnerability{ // Ref: ETSI TS 129 212 5.3.47 PRE_EMPTION_VULNERABILITY_ENABLED_E (0), PRE_EMPTION_VULNERABILITY_DISABLED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Reporting_Level{ // Ref: ETSI TS 129 212 5.3.12 @@ -218,9 +218,9 @@ module LibDiameter_Types_Gx_AVPs { RATING_GROUP_LEVEL_E (1), SPONSORED_CONNECTIVITY_LEVEL_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated PCC_Rule_Status{ // Ref: ETSI TS 129 212 5.3.19 @@ -228,9 +228,6 @@ module LibDiameter_Types_Gx_AVPs { INACTIVE_E (1), TEMPORARILY_INACTIVE_E (2) } - with { - variant "length=32" - } type enumerated Session_Release_Cause{ // Ref: ETSI TS 129 212 5.3.44 @@ -238,9 +235,9 @@ module LibDiameter_Types_Gx_AVPs { UE_SUBSCRIPTION_REASON_E (1), INSUFFICIENT_SERVER_RESOURCES_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated QoS_Class_Identifier{ // Ref: ETSI TS 129 212 5.3.17 @@ -258,35 +255,35 @@ module LibDiameter_Types_Gx_AVPs { OperatorSpecific_E (128), // .. 254 Reserved3_E (255) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated QoS_Negotiation{ // Ref: ETSI TS 129 212 5.3.28 NO_QoS_NEGOTIATION_E (0), QoS_NEGOTIATION_SUPPORTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated QoS_Upgrade{ // Ref: ETSI TS 129 212 5.3.29 QoS_UPGRADE_NOT_SUPPORTED_E (0), QoS_UPGRADE_SUPPORTED_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Resource_Allocation_Notification{ // Ref: ETSI TS 129 212 5.3.50 ENABLE_NOTIFICATION_E (0) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Rule_Failure_Code{ // Ref: ETSI TS 129 212 5.3.38 @@ -305,34 +302,31 @@ module LibDiameter_Types_Gx_AVPs { PS_TO_CS_HANDOVER_E (13), NO_BEARER_BOUND_E (15) } - with { - variant "length=32" - } type enumerated Usage_Monitoring_Level{ // Ref: ETSI TS 129 212 5.3.61 SESSION_LEVEL_E (0), PCC_RULE_LEVEL_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Usage_Monitoring_Report{ // Ref: ETSI TS 129 212 5.3.62 USAGE_MONITORING_REPORT_REQUIRED_E (0) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Usage_Monitoring_Support{ // Ref: ETSI TS 129 212 5.3.63 USAGE_MONITORING_DISABLED_E (0) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } }//end group AVP_Gx_Types @@ -345,559 +339,551 @@ module LibDiameter_Types_Gx_AVPs { AVP_Header aVP_Header,// IP_CAN_Type aVP_Data } - with { - variant "present=bytes(4, 1027);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1027);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record RAT_Type_AVP{ //Ref: ETSI TS 129 212 RAT Type AVP AVP_Header aVP_Header,// RAT_Type aVP_Data } - with { - variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Bearer_Control_Mode_AVP{ //Ref: ETSI TS 129 212 Bearer_Control_Mode_AVP AVP_Header aVP_Header,// Bearer_Control_Mode aVP_Data } - with { - variant "present=bytes(4, 1023);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1023);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Bearer_Operation_AVP{ //Ref: ETSI TS 129 212 Bearer_Operation_AVP AVP_Header aVP_Header,// Bearer_Operation aVP_Data } - with { - variant "present=bytes(4, 1021);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1021);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Bearer_Usage_AVP{ //Ref: ETSI TS 129 212 Bearer_Usage_AVP AVP_Header aVP_Header,// Bearer_Usage aVP_Data } - with { - variant "present=bytes(4, 1000);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1000);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Charging_Correlation_Indicator_AVP{ //Ref: ETSI TS 129 212 Charging_Correlation_Indicator_AVP AVP_Header aVP_Header,// Charging_Correlation_Indicator aVP_Data } - with { - variant "present=bytes(4, 1073);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1073);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CSG_Information_Reporting_AVP{ //Ref: ETSI TS 129 212 CSG_Information_Reporting_AVP AVP_Header aVP_Header,// CSG_Information_Reporting aVP_Data } - with { - variant "present=bytes(4, 1071);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1071);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Event_Trigger_AVP{ //Ref: ETSI TS 129 212 Event_Trigger_AVP AVP_Header aVP_Header,// Event_Trigger aVP_Data } - with { - variant "present=bytes(4, 1006);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1006);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Flow_Direction_AVP{ //Ref: ETSI TS 129 212 Flow_Direction_AVP AVP_Header aVP_Header,// Flow_Direction aVP_Data } - with { - variant "present=bytes(4, 1080);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1080);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Metering_Method_AVP{ //Ref: ETSI TS 129 212 Metering_Method_AVP AVP_Header aVP_Header,// Metering_Method aVP_Data } - with { - variant "present=bytes(4, 1007);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1007);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Network_Request_Support_AVP{ //Ref: ETSI TS 129 212 Network_Request_Support_AVP AVP_Header aVP_Header,// Network_Request_Support aVP_Data } - with { - variant "present=bytes(4, 1024);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1024);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } type record Offline_AVP{ //Ref: ETSI TS 129 212 Offlinet_AVP AVP_Header aVP_Header,// Offline aVP_Data } - with { - variant "present=bytes(4, 1008);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1008);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Online_AVP{ //Ref: ETSI TS 129 212 Online_AVP AVP_Header aVP_Header,// Online aVP_Data } - with { - variant "present=bytes(4, 1009);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1009);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Packet_Filter_Operation_AVP{ //Ref: ETSI TS 129 212 Packet_Filter_Operation_AVP AVP_Header aVP_Header,// Packet_Filter_Operation aVP_Data } - with { - variant "present=bytes(4, 1062);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1062);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Packet_Filter_Usage_AVP{ //Ref: ETSI TS 129 212 Packet_Filter_Usage_AVP AVP_Header aVP_Header,// Packet_Filter_Usage aVP_Data } - with { - variant "present=bytes(4, 1072);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1072);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Pre_emption_Capability_AVP{ //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP AVP_Header aVP_Header,// Pre_emption_Capability aVP_Data } - with { - variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Pre_emption_Vulnerability_AVP{ //Ref: ETSI TS 129 212 Pre_emption_Vulnerabilitye_AVP AVP_Header aVP_Header,// Pre_emption_Vulnerability aVP_Data } - with { - variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Reporting_Level_AVP{ //Ref: ETSI TS 129 212 Reporting_Levele_AVP AVP_Header aVP_Header,// Reporting_Level aVP_Data } - with { - variant "present=bytes(4, 1011);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1011);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record PCC_Rule_Status_AVP{ //Ref: ETSI TS 129 212 PCC_Rule_Status_AVP AVP_Header aVP_Header,// PCC_Rule_Status aVP_Data } - with { - variant "present=bytes(4, 1019);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } type record Session_Release_Cause_AVP{ //Ref: ETSI TS 129 212 Session_Release_Cause_AVP AVP_Header aVP_Header,// Session_Release_Cause aVP_Data } - with { - variant "present=bytes(4, 1045);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1045);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record QoS_Class_Identifier_AVP{ //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP AVP_Header aVP_Header,// QoS_Class_Identifier aVP_Data } - with { - variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record QoS_Negotiation_AVP{ //Ref: ETSI TS 129 212 QoS_Negotiation_AVP AVP_Header aVP_Header,// QoS_Negotiation aVP_Data } - with { - variant "present=bytes(4, 1029);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1029);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record QoS_Upgrade_AVP{ //Ref: ETSI TS 129 212 QoS_Upgrade_AVP AVP_Header aVP_Header,// QoS_Upgrade aVP_Data } - with { - variant "present=bytes(4, 1030);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1030);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Resource_Allocation_Notification_AVP{ //Ref: ETSI TS 129 212 Resource_Allocation_Notification_AVP AVP_Header aVP_Header,// Resource_Allocation_Notification aVP_Data } - with { - variant "present=bytes(4, 1063);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1063);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Rule_Failure_Code_AVP{ //Ref: ETSI TS 129 212 Rule_Failure_Code_AVP AVP_Header aVP_Header,// Rule_Failure_Code aVP_Data } - with { - variant "present=bytes(4, 1031);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } type record Usage_Monitoring_Level_AVP{ //Ref: ETSI TS 129 212 Usage_Monitoring_Level_AVP AVP_Header aVP_Header,// Usage_Monitoring_Level aVP_Data } - with { - variant "present=bytes(4, 1068);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1068);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Usage_Monitoring_Report_AVP{ //Ref: ETSI TS 129 212 Usage_Monitoring_Report_AVP AVP_Header aVP_Header,// Usage_Monitoring_Report aVP_Data } - with { - variant "present=bytes(4, 1069);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1069);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Usage_Monitoring_Support_AVP{ //Ref: ETSI TS 129 212 Usage_Monitoring_Support_AVP AVP_Header aVP_Header,// Usage_Monitoring_Support aVP_Data } - with { - variant "present=bytes(4, 1070);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1070);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Bearer_Identifier_AVP{ //Ref: ETSI TS 129 212 Bearer_Identifier_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Name_AVP{ //Ref: ETSI TS 129 212 Charging_Rule_Name_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1005);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1005);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Flow_Label_AVP{ //Ref: ETSI TS 129 212 Flow_Label_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1057);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1057);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Monitoring_Key_AVP{ //Ref: ETSI TS 129 212 Monitoring_Key_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1066);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1066);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Packet_Filter_Identifier_AVP{ //Ref: ETSI TS 129 212 Packet_Filter_Identifier_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1060);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1060);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record PDN_Connection_ID_AVP{ //Ref: ETSI TS 129 212 PDN_Connection_ID_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1065);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1065);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Routing_Rule_Identifier_AVP{ //Ref: ETSI TS 129 212 Routing_Rule_Identifier_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1077);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1077);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Security_Parameter_Index_AVP{ //Ref: ETSI TS 129 212 Security_Parameter_Index_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1056);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1056);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record ToS_Traffic_Class_AVP{ //Ref: ETSI TS 129 212 ToS_Traffic_Class_AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 1014);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1014);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record APN_Aggregate_Max_Bitrate_DL_AVP{ //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record APN_Aggregate_Max_Bitrate_UL_AVP{ //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_UL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Guaranteed_Bitrate_DL_AVP{ //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Guaranteed_Bitrate_UL_AVP{ //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Max_Supported_Bandwidth_DL_AVP{ //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_DL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1083);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1083);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Max_Supported_Bandwidth_UL_AVP{ //Ref: ETSI TS 129 212 Max_Supported_Bandwidth_UL_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1084);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1084);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Precedence_AVP{ //Ref: ETSI TS 129 212 Precedence_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1010);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1010);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Priority_Level_AVP{ //Ref: ETSI TS 129 212 Priority_Level_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Tunnel_Header_Length_AVP{ //Ref: ETSI TS 129 212 Tunnel_Header_Length_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 1037);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1037);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Base_Name_AVP { //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record AN_GW_Address_AVP{ //Ref: ETSI TS 129 212 AN_GW_Address_AVP AVP_Header aVP_Header,// Address aVP_Data } - with { - variant "present=bytes(4, 1050);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1050);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record CoA_IP_Address_AVP{ //Ref: ETSI TS 129 212 CoA_IP_Address_AVP AVP_Header aVP_Header,// Address aVP_Data } - with { - variant "present=bytes(4, 1035);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1035);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Routing_IP_Address_AVP{ //Ref: ETSI TS 129 212 Routing_IP_Address_AVP AVP_Header aVP_Header,// Address aVP_Data } - with { - variant "present=bytes(4, 1079);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1079);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Packet_Filter_Content_AVP{ //Ref: ETSI TS 129 212 Packet_Filter_Content_AVP AVP_Header aVP_Header,// IPFilterRule_Type aVP_Data } - with { - variant "present=bytes(4, 1059);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1059);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record TFT_Filter_AVP{ //Ref: ETSI TS 129 212 TFT_Filter_AVP AVP_Header aVP_Header,// IPFilterRule_Type aVP_Data } - with { - variant "present=bytes(4, 1012);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1012);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Tunnel_Header_Filter_AVP{ //Ref: ETSI TS 129 212 Tunnel_Header_Filter_AVP AVP_Header aVP_Header,// IPFilterRule_Type aVP_Data } - with { - variant "present=bytes(4, 1036);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1036);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Revalidation_Time_AVP{ //Ref: ETSI TS 129 212 Revalidation_Time_AVP AVP_Header aVP_Header,// Time aVP_Data } - with { - variant "present=bytes(4, 1042);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1042);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Rule_Activation_Time_AVP{ //Ref: ETSI TS 129 212 Rule_Activation_Time_AVP AVP_Header aVP_Header,// Time aVP_Data } - with { - variant "present=bytes(4, 1043);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1043);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Rule_DeActivation_Time_AVP{ //Ref: ETSI TS 129 212 Rule_DeActivation_Time_AVP AVP_Header aVP_Header,// Time aVP_Data } - with { - variant "present=bytes(4, 1044);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1044);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Access_Network_Charging_Identifier_Gx_AVP{ //Ref: ETSI TS 129 212 Access_Network_Charging_Identifier_Gx_AVP @@ -906,11 +892,11 @@ module LibDiameter_Types_Gx_AVPs { set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, set of Charging_Rule_Name_AVP charging_Rule_Name optional } - with { - variant "present=bytes(4, 1022);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" - variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1022);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Allocation_Retention_Priority_AVP{ //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP @@ -919,10 +905,10 @@ module LibDiameter_Types_Gx_AVPs { Pre_emption_Capability_AVP pre_emption_Capability optional, Pre_emption_Vulnerability_AVP pre_emption_Vulnerability optional } - with { - variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Install_AVP{ //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP @@ -937,13 +923,13 @@ module LibDiameter_Types_Gx_AVPs { Charging_Correlation_Indicator_AVP charging_Correlation_Indicator optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1001);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (charging_Rule_Definition) "fieldPresent=bytes(4, 1003)&&CodecHelper.isAvailable()" - variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" - variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1001);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Definition) "fieldPresent=bytes(4, 1003)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Remove_AVP{ //Ref: ETSI TS 129 212 Charging_Rule_Install_AVP @@ -952,12 +938,12 @@ module LibDiameter_Types_Gx_AVPs { set of Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1002);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" - variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1002);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Definition_AVP{ //Ref: ETSI TS 129 212 Charging_Rule_Definition_AVP @@ -981,12 +967,12 @@ module LibDiameter_Types_Gx_AVPs { Application_Service_Provider_Identity_AVP application_Service_Provider_Identity optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1003);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (flow_Information) "fieldPresent=bytes(4, 1058)&&CodecHelper.isAvailable()" - variant (flows) "fieldPresent=bytes(4, 510)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1003);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Information) "fieldPresent=bytes(4, 1058)&&CodecHelper.isAvailable()" +// variant (flows) "fieldPresent=bytes(4, 510)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Charging_Rule_Report_AVP{ //Ref: ETSI TS 129 212 Charging_Rule_Report_AVP @@ -999,12 +985,12 @@ module LibDiameter_Types_Gx_AVPs { Final_Unit_Indication_AVP final_Unit_Indication optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1018);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" - variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1018);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable()" +// variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Flow_Information_AVP{ //Ref: ETSI TS 129 212 Flow_Information_AVP @@ -1018,10 +1004,6 @@ module LibDiameter_Types_Gx_AVPs { Flow_Direction_AVP flow_Direction optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1058);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } type record QoS_Information_AVP{ //Ref: ETSI TS 129 212 QoS_Information_AVP @@ -1037,10 +1019,10 @@ module LibDiameter_Types_Gx_AVPs { APN_Aggregate_Max_Bitrate_DL_AVP aPN_Aggregate_Max_Bitrate_DL optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record CoA_Information_AVP{ //Ref: ETSI TS 129 212 CoA_Information_AVP @@ -1049,10 +1031,10 @@ module LibDiameter_Types_Gx_AVPs { CoA_IP_Address_AVP coA_IP_Address, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1039);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1039);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Default_EPS_Bearer_QoS_AVP{ //Ref: ETSI TS 129 212 Default_EPS_Bearer_QoS_AVP @@ -1061,10 +1043,10 @@ module LibDiameter_Types_Gx_AVPs { Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1049);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1049);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Event_Report_Indication_AVP{ //Ref: ETSI TS 129 212 Event_Report_Indication_AVP @@ -1084,11 +1066,11 @@ module LibDiameter_Types_Gx_AVPs { Routing_IP_Address_AVP routing_IP_Address optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1033);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (event_Trigger) "fieldPresent=bytes(4, 1006)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1033);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (event_Trigger) "fieldPresent=bytes(4, 1006)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Maximum_Bandwidth_AVP{ //Ref: ETSI TS 129 212 Maximum_Bandwidth_AVP @@ -1097,10 +1079,10 @@ module LibDiameter_Types_Gx_AVPs { Max_Supported_Bandwidth_DL_AVP max_Supported_Bandwidth_DL optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1082);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1082);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Packet_Filter_Information_AVP{ //Ref: ETSI TS 129 212 Packet_Filter_Information_AVP @@ -1114,10 +1096,10 @@ module LibDiameter_Types_Gx_AVPs { Flow_Direction_AVP flow_Direction optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1061);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1061);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Routing_Filter_AVP{ //Ref: ETSI TS 129 212 Routing_Filter_AVP @@ -1129,10 +1111,10 @@ module LibDiameter_Types_Gx_AVPs { Flow_Label_AVP flow_Label optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1078);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1078);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Routing_Rule_Definition_AVP{ //Ref: ETSI TS 129 212 Routing_Rule_Definition_AVP @@ -1143,11 +1125,11 @@ module LibDiameter_Types_Gx_AVPs { Routing_IP_Address_AVP routing_IP_Address optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1076);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (routing_Filter) "fieldPresent=bytes(4, 1078)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1076);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Filter) "fieldPresent=bytes(4, 1078)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Routing_Rule_Install_AVP{ //Ref: ETSI TS 129 212 Routing_Rule_Install_AVP @@ -1155,11 +1137,11 @@ module LibDiameter_Types_Gx_AVPs { set of Routing_Rule_Definition_AVP routing_Rule_Definition optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1081);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (routing_Rule_Definition) "fieldPresent=bytes(4, 1076)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1081);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Rule_Definition) "fieldPresent=bytes(4, 1076)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Routing_Rule_Remove_AVP{ //Ref: ETSI TS 129 212 Routing_Rule_Remove_AVP @@ -1167,11 +1149,11 @@ module LibDiameter_Types_Gx_AVPs { set of Routing_Rule_Identifier_AVP routing_Rule_Identifier optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1075);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (routing_Rule_Identifier) "fieldPresent=bytes(4, 1077)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1075);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (routing_Rule_Identifier) "fieldPresent=bytes(4, 1077)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record TFT_Packet_Filter_Information_AVP{ //Ref: ETSI TS 129 212 TFT_Packet_Filter_Information_AVP @@ -1184,10 +1166,10 @@ module LibDiameter_Types_Gx_AVPs { Flow_Direction_AVP flow_Direction optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1013);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1013);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Tunnel_Information_AVP{ //Ref: ETSI TS 129 212 Tunnel_Information_AVP @@ -1196,11 +1178,11 @@ module LibDiameter_Types_Gx_AVPs { record length (0..2) of Tunnel_Header_Filter_AVP tunnel_Header_Filter optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1038);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (tunnel_Header_Filter) "fieldPresent=bytes(4, 1036)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1038);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (tunnel_Header_Filter) "fieldPresent=bytes(4, 1036)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Usage_Monitoring_Information_AVP{ //Ref: ETSI TS 129 212 Usage_Monitoring_Information_AVP @@ -1213,10 +1195,10 @@ module LibDiameter_Types_Gx_AVPs { Usage_Monitoring_Support_AVP usage_Monitoring_Support optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 1067);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 1067);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } }//end of group TS129_212Gx_AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 new file mode 100644 index 0000000..8e1225f --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 @@ -0,0 +1,4260 @@ +/** + * @author STF 490 + * @version $Id: LibDiameter_Types_RfRo_AVPs.ttcn 180 2015-02-26 07:15:21Z garciay $ + * @desc This module defines Diameter Rf and Ro AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + */ +module LibDiameter_Types_RfRo_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + + group AVPTypes { + + group Enum_AVP_Rf_Ro_Types { + + /** + * @desc PDP-Context-Type enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.138 PDP-Context-Type AVP + */ + type enumerated PDP_Context_Type { + PRIMARY_E (0), + SECONDARY_E (1) +// } with { +// variant "length=32" + } // End of type Charge_Reason_Code + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.38A Charge-Reason-Code AVP + */ + type enumerated Charge_Reason_Code { + UNKNOWN_CRC_E (0), // To prevent recursive declaration with other enumerated containing UNKNOWN_E + USAGE_E (1), + COMMUNICATION_ATTEMPT_CHARGE_E (2), + SETUP_CHARGE_E (3), + ADD_ON_CHARGE_E (4) +// } with { +// variant "length=32" + } // End of type Charge_Reason_Code + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.57 Dynamic-Address-Flag AVP + */ + type enumerated Dynamic_Address_Flag { + STATIC_E (0), + DYNAMIC_E (1) +// } with { +// variant "length=32" + } // End of type Dynamic_Address_Flag + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.57A Dynamic-Address-Flag-Extension AVP + */ + type enumerated Dynamic_Address_Flag_Extension { + STATIC_E (0), + DYNAMIC_E (1) +// } with { +// variant "length=32" + } // End of type Dynamic_Address_Flag_Extension + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.198 Serving-Node-Type AVP + */ + type enumerated Serving_Node_Type { + SGSN_E (0), + PMIPSGW_E (1), + GTPSGW_E (2), + EPDG_E (3), + HSGW_E (4), + MME_E (5) +// } with { +// variant "length=32" + } // End of type Serving_Node_Type + + /** + * @desc Charge-Reason-Code enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.200 SGW-Change AVP + */ + type enumerated SGW_Change { + UNAUTHENTICATEDE_ACR_START_NOT_DUE_TO_SGW_CHANGE_E (0), + ACR_START_DUE_TO_SGW_CHANGE_E (1) +// } with { +// variant "length=32" + } // End of type SGW_Change + + /** + * @desc IMSI-Unauthenticated-Flag enumerated values + * @see ETSI TS 132 299 V10.15.0 (2015-04) Clause 7.2.78 IMSI-Unauthenticated-Flag AVP + */ + type enumerated IMSI_Unauthenticated_Flag { + AUTHENTICATED_E (0), + UNAUTHENTICATED_E (1) +// } with { +// variant "length=32" + } // End of type IMSI_Unauthenticated_Flag + + /** + * @desc The Charging-Characteristics-Selection-Mode enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39A Charging-Characteristics-Selection-Mode AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Charging_Characteristics_Selection_Mode { + SERVING_NODE_SUPPLIED_E (0), + SUBSCRIPTION_SPECIFIC_E (1), + APN_SPECIFIC_E (2), + HOME_DEFAULT_E (3), + ROAMING_DEFAULT_E (4), + VISITING_DEFAULT_E (5) +// } with { +// variant "length=32" + } // End of type Charging_Characteristics_Selection_Mode + + /** + * @desc The Charging-Characteristics-Selection-Mode enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.37 Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Change_Condition { + NORMALRELEASE_E (0), + ABNORMALRELEASE_E (1), + QOSCHANGE_E (2), + VOLUMELIMIT_E (3), + TIMELIMIT_E (4), + SERVINGNODECHANGE_E (5), + SERVINGNODEPLMNCHANGE_E (6), + USERLOCATIONCHANGE_E (7), + RATCHANGE_E (8), + UETIMEZONECHANGE_E (9), + TARIFFTIMECHANGE_E (10), + SERVICEIDLEDOUT_E (11), + SERVICESPECIFICUNITLIMIT_E (12), + MAXNUMBERCHANGESCHARGINGCONDITIONS_E (13), + CGI_SAICHANGE_E (14), + RAICHANGE_E (15), + ECGICHANGE_E (16), + TAICHANGE_E (17), + SERVICEDATAVOLUMELIMIT_E (18), + SERVICEDATATIMELIMIT_E (19), + MANAGEMENTINTERVENTION_E (20), + SERVICESTOP_E (21), + USERCSGINFORMATIONCHANGE_E (22), + S_GWCHANGE_E (23) +// } with { +// variant "length=32" + } // End of type Change_Condition + + /** + * @desc The Low-Priority-Indicator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause .2.97A Low-Priority-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Low_Priority_Indicator { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Low_Priority_Indicator + + /** + * @desc The PS-Append-Free-Format-Data enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PS_Append_Free_Format_Data { + APPEND_E (0), + OVERWRITE_E (1) +// } with { +// variant "length=32" + } // End of type PS_Append_Free_Format_Data + + /** + * @desc The Envelope-Reporting enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Envelope_Reporting { + DO_NOT_REPORT_ENVELOPES_E (0), + REPORT_ENVELOPES_E (1), + REPORT_ENVELOPES_WITH_VOLUME_E (2), + REPORT_ENVELOPES_WITH_EVENTS_E (3), + REPORT_ENVELOPES_WITH_VOLUME_AND_EVENTS_E (4) +// } with { +// variant "length=32" + } // End of type Envelope_Reporting + + /** + * @desc The Time-Quota-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Time_Quota_Type { + DISCRETE_TIME_PERIOD_E (0), + CONTINUOUS_TIME_PERIOD_E (1) +// } with { +// variant "length=32" + } // End of type Time_Quota_Type + + /** + * @desc The AoC-Service-Obligatory-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.18 AoC-Service-Obligatory-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Service_Obligatory_Type { + NON_BINDING_E (0), + BINDING_E (1) +// } with { +// variant "length=32" + } // End of type AoC_Service_Obligatory_Type + + /** + * @desc The AoC-Service-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.19 AoC-Service-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Service_Type { + NONE_E (0), + AOC_S_E (1), + AOC_D_E (2), + AOC_E_E (3) +// } with { +// variant "length=32" + } // End of type AoC_Service_Type + + /** + * @desc The AoC-Format enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.14 AoC-Format AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Format { + MONETARY_E (0), + NON_MONETARY_E (1), + CAI_E (2) +// } with { +// variant "length=32" + } // End of type AoC_Format + + /** + * @desc The AoC-Request-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.16 AoC-Request-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated AoC_Request_Type { + AOC_NOT_REQUESTED_E (0), + AOC_FULL_E (1), + AOC_COST_ONLY_E (2), + AOC_TARIFF_ONLY_E (3) +// } with { +// variant "length=32" + } // End of type AoC_Request_Type + + /** + * @desc The Low-Balance-Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97 Low-Balance-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Low_Balance_Indication { + NOT_APPLICABLE_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Low_Balance_Indication + + /** + * @desc The Role-Of-Node enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.177 Role-Of-Node AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Role_Of_Node { + ORIGINATING_ROLE_E (0), + TERMINATING_ROLE_E (1) +// } with { +// variant "length=32" + } // End of type Role_Of_Node + + /** + * @desc The Node_Functionality enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.113 Node-Functionality AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Node_Functionality { + S_CSCF_E (0), + P_CSCF_E (1), + I_CSCF_E (2), + MRFC_E (3), + MGCF_E (4), + BGCF_E (5), + AS_E (6), + IBCF_E (7), + S_GW_E (8), + P_GW_E (9), + HSGW_E (10), + E_CSCF_E (11) +// } with { +// variant "length=32" + } // End of type Node_Functionality + + /** + * @desc The Online_Charging_Flag enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.122 Online-Charging-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Online_Charging_Flag { + ADDRESSNOTPROVIDED_E (0), + ADDRESSPROVIDED_E (1) +// } with { +// variant "length=32" + } // End of type Online_Charging_Flag + + /** + * @desc The IMS_Emergency_Indicator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76A IMS-Emergency-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated IMS_Emergency_Indicator { + NON_EMERGENCY_E (0), + EMERGENCY_E (1) +// } with { +// variant "length=32" + } // End of type IMS_Emergency_Indicator + + /** + * @desc The Originator enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.124 Originator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Originator { + CALLING_PARTY_E (0), + CALLED_PARTY_E (1) +// } with { +// variant "length=32" + } // End of type Originator + + /** + * @desc The SDP_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.186 SDP-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated SDP_Type { + SDP_OFFER_E (0), + SDP_ANSWER_E (1) +// } with { +// variant "length=32" + } // End of type SDP_Type + + /** + * @desc The Local_GW_Inserted_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92A Local-GW-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Local_GW_Inserted_Indication { + LOCAL_GW_NOT_INSERTED_E (0), + LOCAL_GW_INSERTED_E (1) +// } with { +// variant "length=32" + } // End of type Local_GW_Inserted_Indication + + /** + * @desc The IP_Realm_Default_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80A IP-Realm-Default-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated IP_Realm_Default_Indication { + DEFAULT_IP_REALM_NOT_USED_E (0), + DEFAULT_IP_REALM_USED_E (1) +// } with { +// variant "length=32" + } // End of type IP_Realm_Default_Indication + + /** + * @desc The Transcoder_Inserted_Indication enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233A Transcoder-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Transcoder_Inserted_Indication { + TRANSCODER_NOT_INSERTED_E (0), + TRANSCODER_INSERTED_E (1) +// } with { +// variant "length=32" + } // End of type Transcoder_Inserted_Indication + + /** + * @desc The Media_Initiator_Flag enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.101 Media-Initiator-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Media_Initiator_Flag { + CALLED_PARTY_E (0), + CALLING_PARTY_E (1), + UNKNOWN_MIF_E (3) // To prevent recursive declaration with other enumerated containing UNKNOWN_E +// } with { +// variant "length=32" + } // End of type Media_Initiator_Flag + + /** + * @desc The Application_Service_Type enumerated values + * @see OMA-DDS-Charging_Data-V1_0-20110201-A / Table 5 + */ + type enumerated Application_Service_Type { + SENDING_E (100), + RECEIVING_E (101), + RETRIEVAL_E (102), + INVITING_E (103), + LEAVING_E (104), + JOINING_E (105) +// INVITING_E (0), +// JOINING_E (1), +// LEAVING_E (2), +// RECEIVING_E (3), +// RETRIEVAL_E (4), +// SENDING_E (5) +// } with { +// variant "length=32" + } // End of type Application_Service_Type + + /** + * @desc The Reporting_Reason enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Reporting_Reason { + THRESHOLD_E (0), + QHT_E (1), + FINAL_E (2), + QUOTA_EXHAUSTED_E (3), + VALIDITY_TIME_E (4), + OTHER_QUOTA_TYPE_E (5), + RATING_CONDITION_CHANGE_E (6), + FORCED_REAUTHORISATION_E (7), + POOL_EXHAUSTED_E (8) +// } with { +// variant "length=32" + } // End of type Reporting_Reason + + /** + * @desc The Trigger_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Trigger_Type { + CHANGE_IN_SGSN_IP_ADDRESS_E (1), + CHANGE_IN_QOS_E (2), + CHANGE_IN_LOCATION_E (3), + CHANGE_IN_RAT_E (4), + CHANGE_IN_UE_TIMEZONE_E (5), + CHANGEINQOS_TRAFFIC_CLASS_E (10), + CHANGEINQOS_RELIABILITY_CLASS_E (11), + CHANGEINQOS_DELAY_CLASS_E (12), + CHANGEINQOS_PEAK_THROUGHPUT_E (13), + CHANGEINQOS_PRECEDENCE_CLASS_E (14), + CHANGEINQOS_MEAN_THROUGHPUT_E (15), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_UPLINK_E (16), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_DOWNLINK_E (17), + CHANGEINQOS_RESIDUAL_BER_E (18), + CHANGEINQOS_SDU_ERROR_RATIO_E (19), + CHANGEINQOS_TRANSFER_DELAY_E (20), + CHANGEINQOS_TRAFFIC_HANDLING_PRIORITY_E (21), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_UPLINK_E (22), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_DOWNLINK_E (23), + CHANGEINLOCATION_MCC_E (30), + CHANGEINLOCATION_MNC_E (31), + CHANGEINLOCATION_RAC_E (32), + CHANGEINLOCATION_LAC_E (33), + CHANGEINLOCATION_CellId_E (34), + CHANGEINLOCATION_TAC_E (35), + CHANGEINLOCATION_ECGI_E (36), + CHANGE_IN_MEDIA_COMPOSITION_E (40), + CHANGE_IN_PARTICIPANTS_NMB_E (50), + CHANGE_IN_THRSHLD_OF_PARTICIPANTS_NMB_E (51), + CHANGE_IN_USER_PARTICIPATING_TYPE_E (52), + CHANGE_IN_SERVICE_CONDITION_E (60), + CHANGE_IN_SERVING_NODE_E (61), + CHANGE_IN_USER_CSG_INFORMATION_E (70), + CHANGE_IN_HYBRID_SUBSCRIBED_USER_CSG_INFORMATION_E (71), + CHANGE_IN_HYBRID_UNSUBSCRIBED_USER_CSG_INFORMATION_E (72) +// } with { +// variant "length=32" + } // End of type Trigger_Type + + /** + * @desc The Address_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.9 Address-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Address_Type { + EMAIL_ADDRESS_E (0), + MSISDN_E (1), + IPV4_ADDRESS_E (2), + IPV6_ADDRESS_E (3), + NUMERIC_SHORTCODE_E (4), + ALPHANUMERIC_SHORTCODE_E (5), + OTHER_E (6), + IMSI_E (7) +// } with { +// variant "length=32" + } // End of type Address_Type + + /** + * @desc The DRM_Content enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.56 DRM-Content AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated DRM_Content { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type DRM_Content + + /** + * @desc The Addressee_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.10 Addressee-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Addressee_Type { + TO_E (0), + CC_E (1), + BCC_E (2) +// } with { +// variant "length=32" + } // End of type Addressee_Type + + /** + * @desc The Adaptation enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.4 Adaptations AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Adaptation { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Adaptation + + /** + * @desc The Priority enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.154 Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Priority { + LOW_E (0), + NORMAL_E (1), + HIGH_E (2) +// } with { +// variant "length=32" + } // End of type Priority + + /** + * @desc The Message_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.107 Message-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Message_Type { + M_SEND_REQ_E (1), + M_SEND_CONF_E (2), + M_NOTIFICATION_IND_E (3), + M_NOTIFYRESP_IND_E (4), + M_RETRIEVE_CONF_E (5), + M_ACKNOWLEDGE_IND_E (6), + M_DELIVERY_IND_E (7), + M_READ_REC_IND_E (8), + M_READ_ORIG_IND_E (9), + M_FORWARD_REQ_E (10), + M_FORWARD_CONF_E (11), + M_MBOX_STORE_CONF_E (12), + M_MBOX_VIEW_CONF_E (13), + M_MBOX_UPLOAD_CONF_E (14), + M_MBOX_DELETE_CONF_E (15) +// } with { +// variant "length=32" + } // End of type Message_Type + + /** + * @desc The Class_Identifier enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.40 Class-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Class_Identifier { + PERSONAL_E (0), + ADVERTISEMENT_E (1), + INFORMATIONAL_E (2), + AUTO_E (3) +// } with { +// variant "length=32" + } // End of type Class_Identifier + + /** + * @desc The Read_Reply_Report_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.162 Read-Reply-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Read_Reply_Report_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Read_Reply_Report_Requested + + /** + * @desc The Delivery_Report_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.52 Delivery-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Delivery_Report_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type Delivery_Report_Requested + + /** + * @desc The MMBox_Storage_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.109 MMBox-Storage-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated MMBox_Storage_Requested { + NO_E (0), + YES_E (1) +// } with { +// variant "length=32" + } // End of type MMBox_Storage_Requested + + /** + * @desc The MMBox_Storage_Requested enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.42 Content-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Content_Class { + IMAGE_BASIC_E (0), + IMAGE_RICH_E (1), + VIDEO_BASIC_E (2), + VIDEO_RICH_E (3), + MEGAPIXEL_E (4), + CONTENT_BASIC_E (5), + CONTENT_RICH_E (6) +// } with { +// variant "length=32" + } // End of type Content_Class + + /** + * @desc The LCS_Client_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.86 LCS-Client-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated LCS_Client_Type { + EMERGENCY_SERVICES_E (0), + VALUE_ADDED_SERVICES_E (1), + PLMN_OPERATOR_SERVICESC_E (2), + LAWFUL_INTERCEPT_SERVICES_E (3) +// } with { +// variant "length=32" + } // End of type LCS_Client_Type + + /** + * @desc The LCS_Client_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.88 LCS-Format-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated LCS_Format_Indicator { + LOGICAL_NAME_E (0), + EMAIL_ADDRESS_E (1), + MSISDN_E (2), + URL_E (3), + SIP_URL_E (4) +// } with { +// variant "length=32" + } // End of type LCS_Format_Indicator + + /** + * @desc The Location_Estimate_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.95 Location-Estimate-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Location_Estimate_Type { + CURRENT_LOCATION_E (0), + CURRENT_LAST_KNOWN_LOCATION_E (1), + INITIAL_LOCATION_E (2), + ACTIVATE_DEFERRED_LOCATION_E (3), + CANCEL_DEFERRED_LOCATION_E (4) +// } with { +// variant "length=32" + } // End of type Location_Estimate_Type + + /** + * @desc The PoC_Server_Role enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.145 PoC-Server-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Server_Role { + PARTICIPATING_POC_SERVER_E (0), + CONTROLLING_POC_SERVER_E (1) +// } with { +// variant "length=32" + } // End of type PoC_Server_Role + + /** + * @desc The PoC_Session_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.148 PoC-Session-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Session_Type { + ONE_TOONE_POC_SESSION_E (0), + CHAT_POC_GROUP_SESSION_E (1), + PRE_ARRANGED_POC_GROUP_SESSION_E (2), + AD_HOC_POC_GROUP_SESSION_E (3) +// } with { +// variant "length=32" + } // End of type PoC_Session_Type + + /** + * @desc The PoC_User_Role_info_Units enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.151 PoC-User-Role-info-Units AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_User_Role_info_Units { + MODERATOR_E (0), + DISPATCHER_E (1), + SESSION_OWNER_E (2), + SESSION_PARTICIPANT_E (3) +// } with { +// variant "length=32" + } // End of type PoC_User_Role_info_Units + + /** + * @desc The PoC_Session_Initiation_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.147 PoC-Session-Initiation-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Session_Initiation_Type { + PRE_ESTABLISH_E (0), + ON_DEMAND_E (1) +// } with { +// variant "length=32" + } // End of type PoC_Session_Initiation_Type + + /** + * @desc The PoC_Event_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Event_Type { + NORMAL_E (0), + INSTANT_PPERSONAL_AALERT_EVENT_E (1), + POC_GROUP_ADVERTISEMENT_EVENT_E (2), + EARLY_SSESSION_SETTING_UP_EVENT_E (3), + POC_TALK_BURST_E (4) +// } with { +// variant "length=32" + } // End of type PoC_Event_Type + + /** + * @desc The Participant_Access_Priority enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Participant_Access_Priority { + PRE_EMPTIVE_PRIORITY_E (0), + HIGH_PRIORITY_E (1), + NORMAL_PRIORITY_E (2), + LOW_PRIORITY_E (3) +// } with { +// variant "length=32" + } // End of type Participant_Access_Priority + + /** + * @desc The User_Participating_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated User_Participating_Type { + NORMAL_E (0), + NW_POC_BOX_E (1), + UE_POC_BOX_E (2) +// } with { +// variant "length=32" + } // End of type User_Participating_Type + + /** + * @desc The PoC_Change_Condition enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.139 PoC-Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PoC_Change_Condition { + SERVICE_CHANGE_E (0), + VOLUME_LIMIT_E (1), + TIME_LIMIT_E (2), + NUMBER_OF_TALK_BURST_LIMIT_E (3), + NUMBER_OF_ACTIVE_PARTICIPANTS_E (4), + TARIFF_TIME_E (5) +// } with { +// variant "length=32" + } // End of type PoC_Change_Condition + + } // End of group Enum_AVP_Rf_Ro_Types + + group Avp_Rf_Ro_Types { + + group TS132_299Rf_Ro_AVPS { + + /** + * @desc The Accounting-Input-Octets AVP (AVP code 363) + * @member aVP_Header Header AVP + * @member aVP_Data Number of octets transmitted during the data container recording interval, reflecting the volume counts for uplink traffic for a data flow + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.1.1 Accounting-Input-Octets + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Accounting_Input_Octets_AVP { + AVP_Header aVP_Header,// + UInt64 aVP_Data + } // End of type Accounting_Input_Octets_AVP + + /** + * @desc The Accounting-Output-Octets AVP (AVP code 364) + * @member aVP_Header Header AVP + * @member aVP_Data Number of octets transmitted during the data container recording interval, reflecting the volume counts for downlink traffic for a data flow + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.1.3 Accounting-Output-Octets + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Accounting_Output_Octets_AVP { + AVP_Header aVP_Header,// + UInt64 aVP_Data + } // End of type Accounting_Output_Octets_AVP + + /** + * @desc The Event-Type AVP (AVP code 823) + * @member aVP_Header Header AVP + * @member sip_Method TODO + * @member event TODO + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.65 Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Event_Type_AVP { + AVP_Header aVP_Header,// + SIP_Method_AVP sip_Method optional, + Event_AVP event optional, + Expires_AVP aVP_Data optional + } // End of type Event_Type_AVP + + /** + * @desc The Event AVP (AVP code 825) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the "Event" header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.63 Event AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Event_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Event_AVP + + /** + * @desc The Content-Type AVP (AVP code 826) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the media type (e.g. application/sdp, text/html) of the message-body, as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.46 Content-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Type_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Content_Type_AVP + + /** + * @desc The Content-Length AVP (AVP code 827) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the size of the message-body, as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.44 Content-Length AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Length_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Content_Length_AVP + + /** + * @desc The Content-Disposition AVP (AVP code 828) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates how the message body or a message body part is to be interpreted (e.g. session, render), as described in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.43 Content-Disposition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Disposition_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Content_Disposition_AVP + + /** + * @desc The Event AVP (AVP code 829) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies whether the IMS node (except the MRFC) is serving the calling or the called party + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.177 Role-Of-Node AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Role_Of_Node_AVP { + AVP_Header aVP_Header,// + Role_Of_Node aVP_Data + } // End of type Role_Of_Node_AVP + + /** + * @desc The User-Session-Id AVP (AVP code 830) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.242 User-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record User_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type User_Session_Id_AVP + + /** + * @desc The Calling-Party-Address AVP (AVP code 831) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.33 Calling-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Calling_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Calling_Party_Address_AVP + + /** + * @desc The Called-Party-Address AVP (AVP code 832) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.32 Called-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Called_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Called_Party_Address_AVP + + /** + * @desc The Time-Stamps AVP (AVP code 833) + * @member aVP_Header Header AVP + * @member sip_Request_Timestamp TODO + * @member sip_Response_Timestamp TODO + * @member sip_Request_Timestamp_Fraction TODO + * @member sip_Response_Timestamp_Fraction TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.231 Time-Stamps AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Stamps_AVP { + AVP_Header aVP_Header,// + SIP_Request_Timestamp_AVP sip_Request_Timestamp optional, + SIP_Response_Timestamp_AVP sip_Response_Timestamp optional, + SIP_Request_Timestamp_Fraction_AVP sip_Request_Timestamp_Fraction optional, + SIP_Response_Timestamp_Fraction_AVP sip_Response_Timestamp_Fraction optional + } // End of type Time_Stamps_AVP + + /** + * @desc The SIP-Request-Timestamp AVP (AVP code 834) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SIP request + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.202 SIP-Request-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SIP_Request_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SIP_Request_Timestamp_AVP + + /** + * @desc The SIP-Response-Timestamp AVP (AVP code 835) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SIP response + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.204 SIP-Response-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SIP_Response_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SIP_Response_Timestamp_AVP + + /** + * @desc The Application-Server AVP (AVP code 836) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the SIP URL(s) of the AS(s) addressed during the session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.23 Application-Server AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_Server_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_Server_AVP + + /** + * @desc The Application-provided-Called-Party-Address AVP (AVP code 837) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the called party number (SIP URI, E.164), if it is determined by an application server + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.22 Application-provided-Called-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_provided_Called_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_provided_Called_Party_Address_AVP + + /** + * @desc The Inter-Operator-Identifier AVP (AVP code 838) + * @member aVP_Header Header AVP + * @member originating_IOI TODO + * @member terminating_IOI TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80 Inter-Operator-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Inter_Operator_Identifier_AVP { + AVP_Header aVP_Header,// + Originating_IOI_AVP originating_IOI optional, + Terminating_IOI_AVP terminating_IOI optional + } // End of type Inter_Operator_Identifier_AVP + + /** + * @desc The Originating-IOI AVP (AVP code 839) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Inter Operator Identifier (IOI) for the originating network as generated by the IMS network element which takes responsibility for populating this parameter [404] in a SIP request as described in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.123 Originating-IOI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originating_IOI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Originating_IOI_AVP + + /** + * @desc The Terminating-IOI AVP (AVP code 840) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Inter Operator Identifier (IOI) for the terminating network as generated by the IMS network element which takes responsibility for populating this parameter [404] in a SIP response as described in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.225 TTerminatingerminating-IOI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Terminating_IOI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Originating_IOI_AVP + + /** + * @desc The IMS-Charging-Identifier AVP (AVP code 841) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IMS Charging Identifier (ICID) as generated by a IMS node for a SIP session and described in TS 24.229 [204] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.75 IMS-Charging-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Charging_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type IMS_Charging_Identifier_AVP + + /** + * @desc The SDP-Session-Description AVP (AVP code 842) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the SDP line (i=, c=, b=, k=, a=, etc.) in the session description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.184 SDP-Session-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Session_Description_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Session_Description_AVP + + /** + * @desc The SDP-Media-Component AVP (AVP code 843) + * @member aVP_Header Header AVP + * @member SDP_Media_Name_AVP TODO + * @member set of SDP_Media_Description_AVP TODO + * @member Local_GW_Inserted_Indication_AVP TODO + * @member IP_Realm_Default_Indication_AVP TODO + * @member Transcoder_Inserted_Indication_AVP TODO + * @member Media_Initiator_Flag_AVP TODO + * @member Media_Initiator_Party_AVP TODO + * @member ThreeGPP_Charging_Id_AVP TODO + * @member Access_Network_Charging_Identifier_Value_AVP TODO + * @member SDP_Type_AVP TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.180 SDP-Media-Component AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Component_AVP { + AVP_Header aVP_Header,// + SDP_Media_Name_AVP sdp_Media_Name optional, + set of SDP_Media_Description_AVP sdp_Media_Description optional, + Local_GW_Inserted_Indication_AVP local_GW_Inserted_Indication optional, + IP_Realm_Default_Indication_AVP ip_Realm_Default_Indication optional, + Transcoder_Inserted_Indication_AVP transcoder_Inserted_Indication optional, + Media_Initiator_Flag_AVP media_Initiator_Flag optional, + Media_Initiator_Party_AVP media_Initiator_Party optional, + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id optional, + Access_Network_Charging_Identifier_Value_AVP access_Network_Charging_Identifier_Value optional, + SDP_Type_AVP sdp_Type optional + } // End of type SDP_Media_Component_AVP + + /** + * @desc The SDP-Media-Name AVP (AVP code 844) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of SDP lines (i=, c=, b=, k=, a=, etc.) related to a media description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.182 SDP-Media-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Media_Name_AVP + + /** + * @desc The SDP-Media-Description AVP (AVP code 845) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of SDP lines (i=, c=, b=, k=, a=, etc.) related to a media description, as described in RFC 4566 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.181 SDP-Media-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Media_Description_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type SDP_Media_Description_AVP + + /** + * @desc The CG-Address AVP (AVP code 846) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the P-GW that generated the GPRS/EPC Charging ID + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.36 CG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record CG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type CG_Address_AVP + + /** + * @desc The GGSN-Address AVP (AVP code 847) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the P-GW that generated the GPRS/EPC Charging ID + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.68 GGSN-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record GGSN_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type GGSN_Address_AVP + + /** + * @desc The Application-Server-Information AVP (AVP code 850) + * @member aVP_Header Header AVP + * @member application_Server TODO + * @member application_Provided_Called_Party_Address TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24 Application-Server-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Application_Server_Information_AVP { + AVP_Header aVP_Header,// + Application_Server_AVP application_Server optional, + set of Application_provided_Called_Party_Address_AVP application_Provided_Called_Party_Address optional + } // End of type Application_Server_Information_AVP + + /** + * @desc The Trunk-Group-ID AVP (AVP code 851) + * @member aVP_Header Header AVP + * @member incoming_Trunk_Group_ID TODO + * @member outgoing_Trunk_Group_ID TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.24 7.2.237 Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + Incoming_Trunk_Group_ID_AVP incoming_Trunk_Group_ID optional, + Outgoing_Trunk_Group_ID_AVP outgoing_Trunk_Group_ID optional + } // End of type Trunk_Group_ID_AVP + + /** + * @desc The Incoming-Trunk-Group-ID AVP (AVP code 852) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the incoming PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.79 Incoming-Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Incoming_Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Incoming_Trunk_Group_ID_AVP + + /** + * @desc The Outgoing-Trunk-Group-ID AVP (AVP code 853) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the outgoing PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.129 Outgoing-Trunk-Group-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Outgoing_Trunk_Group_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Outgoing_Trunk_Group_ID_AVP + + /** + * @desc The Bearer-Service AVP (AVP code 854) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the used bearer service for the PSTN leg + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.30 Bearer-Service AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Bearer_Service_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Bearer_Service_AVP + + /** + * @desc The Service-ID AVP (AVP code 855) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the service the MRFC is hosting or AoC service + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.190 Service-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Service_Id_AVP + + /** + * @desc The Associated-URI AVP (AVP code 856) + * @member aVP_Header Header AVP + * @member aVP_Data Holds a non-barred public user identity (SIP URI or TEL URI) associated to the public user identity under registration + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.26 Associated-URI AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Associated_URI_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Associated_URI_AVP + + /** + * @desc The Charged-Party AVP (AVP code 857) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (Public User ID: SIP URI, TEL URI, etc.) of the party to be charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39 Charged-Party AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Charged_Party_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Charged_Party_AVP + + /** + * @desc The PoC-Controlling-Address AVP (AVP code 858) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the PoC server performing the controlling function for the associated PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.141 PoC-Controlling-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Controlling_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Controlling_Address_AVP + + /** + * @desc The PoC-Group-Name AVP (AVP code 859) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies a group + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.143 PoC-Group-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Group_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Group_Name_AVP + + /** + * @desc The Cause-Code AVP (AVP code 861) + * @member aVP_Header Header AVP + * @member aVP_Data Includes the cause code value from IMS node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.35 Cause-Code AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Cause_Code_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Cause_Code_AVP + + /** + * @desc The Node-Functionality AVP (AVP code 862) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the functionality identifier of the node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.113 Node-Functionality AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Node_Functionality_AVP { + AVP_Header aVP_Header,// + Node_Functionality aVP_Data + } // End of type Node_Functionality_AVP + + /** + * @desc The Service-Specific-Data AVP (AVP code 863) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the value of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.194 Service-Specific-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Service_Specific_Data_AVP + + /** + * @desc The Originator AVP (AVP code 863) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the originating party of the message body + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.124 Originator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originator_AVP { + AVP_Header aVP_Header,// + Originator aVP_Data + } // End of type Originator_AVP + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 865) + * @member aVP_Header Header AVP + * @member threeGPP_Charging_Id TODO + * @member ps_Free_Format_Data TODO + * @member ps_Append_Free_Format_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.157 PS-Furnish-Charging-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Furnish_Charging_Information_AVP { + AVP_Header aVP_Header,// + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id, + PS_Free_Format_Data_AVP ps_Free_Format_Data, + PS_Append_Free_Format_Data_AVP ps_Append_Free_Format_Data optional + } // End of type PS_Furnish_Charging_Information_AVP + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 866) + * @member aVP_Header Header AVP + * @member aVP_Data Holds online charging session specific data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.156 PS-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type PS_Free_Format_Data_AVP + + /** + * @desc The PS-Append-Free-Format-Data AVP (AVP code 867) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the information sent in the PS-Free-Format-Data AVP must be appended to the PS-free-format-data stored for the online-session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Append_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + PS_Append_Free_Format_Data aVP_Data + } // End of type PS_Append_Free_Format_Data_AVP + + /** + * @desc The Time-Quota-Threshold AVP (AVP code 868) + * @member aVP_Header Header AVP + * @member aVP_Data Contains a threshold value in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.229 Time-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Quota_Threshold_AVP + + /** + * @desc The Volume-Quota-Threshold AVP (AVP code 869) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.243 Volume-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Volume_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Volume_Quota_Threshold_AVP + + /** + * @desc The Trigger-Type AVP (AVP code 870) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates a single re-authorisation event type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.236 Trigger-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Trigger_Type_AVP { + AVP_Header aVP_Header,// + Trigger_Type aVP_Data + } // End of type Trigger_Type_AVP + + /** + * @desc The Quota-Holding-Time AVP (AVP code 871) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the quota holding time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.160 Quota-Holding-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Holding_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Holding_Time_AVP + + /** + * @desc The Quota-Holding-Time AVP (AVP code 872) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the reason for usage reporting for one or more types of quota for a particular category + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Reporting_Reason_AVP { + AVP_Header aVP_Header,// + Reporting_Reason aVP_Data + } // End of type Reporting_Reason_AVP + + /** + * @desc The Service-Information AVP (AVP code 873) + * @member aVP_Header Header AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.192 Service-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Service_Information_AVP { + AVP_Header aVP_Header,// + set of Subscription_Id_AVP subscription_Id optional, + AoC_Information_AVP aoc_Information optional, + PS_Information_AVP ps_Information optional, + WLAN_Information_AVP wlan_Information optional, + IMS_Information_AVP ims_Information optional, + MMS_Information_AVP mms_Information optional, + LCS_Information_AVP lcs_Information optional, + PoC_Information_AVP poc_Information optional, + MBMS_Information_AVP mbms_Information optional, + SMS_Information_AVP sms_Information optional, + MMTel_Information_AVP mmtel_Information optional, + Service_Generic_Information_AVP service_Generic_Information optional, + IM_Information_AVP im_Information optional, + DCD_Information_AVP dcd_Information optional + } // End of type Service_Information_AVP + + /** + * @desc The PS-Information AVP (AVP code 874) + * @member aVP_Header Header AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.158 PS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PS_Information_AVP { + AVP_Header aVP_Header,// + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id optional, + PDN_Connection_Charging_ID_AVP pdn_Connection_Charging_ID optional, + Node_Id_AVP node_Id optional, + ThreeGPP_PDP_Type_AVP threeGPP_PDP_Type optional, + set of PDP_Address_AVP pdp_Address optional, + PDP_Address_Prefix_Length_AVP pdp_Address_Prefix_Length optional, + Dynamic_Address_Flag_AVP dynamic_Address_Flag optional, + Dynamic_Address_Flag_Extension_AVP dynamic_Address_Flag_Extension optional, + QoS_Information_AVP qos_Information optional, + set of SGSN_Address_AVP sgsn_Address optional, + set of GGSN_Address_AVP ggsn_Address optional, + set of SGW_Address_AVP sgw_Address optional, + CG_Address_AVP cg_Address optional, + Serving_Node_Type_AVP serving_Node_Type optional, + SGW_Change_AVP sgw_Change optional, + ThreeGPP_IMSI_MCC_MNC_AVP threeGPP_IMSI_MCC_MNC optional, + IMSI_Unauthenticated_Flag_AVP imsi_Unauthenticated_Flag optional, + ThreeGPP_GGSN_MCC_MNC_AVP threeGPP_GGSN_MCC_MNC optional, + ThreeGPP_NSAPI_AVP threeGPP_NSAPI optional, + Called_Station_Id_AVP called_Station_Id optional, + ThreeGPP_Session_Stop_Indicator_AVP threeGPP_Session_Stop_Indicator optional, + ThreeGPP_Selection_Mode_AVP threeGPP_Selection_Mode optional, + ThreeGPP_Charging_Characteristics_AVP threeGPP_Charging_Characteristics optional, + Charging_Characteristics_Selection_Mode_AVP charging_Characteristics_Selection_Mode optional, + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, + ThreeGPP_MS_TimeZone_AVP threeGPP_MS_TimeZone optional, + Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + User_CSG_Information_AVP user_CSG_Information optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + ThreeGPP_RAT_Type_AVP threeGPP_RAT_Type optional, + PS_Furnish_Charging_Information_AVP ps_Furnish_Charging_Information optional, + PDP_Context_Type_AVP pdp_Context_Type optional, + Offline_Charging_AVP offline_Charging optional, + set of Traffic_Data_Volumes_AVP traffic_Data_Volumes optional, + set of Service_Data_Container_AVP service_Data_Container optional, + User_Equipment_Info_AVP user_Equipment_Info optional, + Terminal_Information_AVP terminal_Information optional, + Start_Time_AVP start_Time optional, + Stop_Time_AVP stop_Time optional, + Change_Condition_AVP change_Condition optional, + Diagnostics_AVP diagnostics optional, + Low_Priority_Indicator_AVP low_Priority_Indicator optional + } // End of type PS_Information_AVP + + /** + * @desc The WLAN-Information AVP (AVP code 875) + * @member aVP_Header Header AVP + * @member wlan_Session_Id TODO + * @member wlan_Session_Id TODO + * @member pdg_Address TODO + * @member pdg_Charging_Id TODO + * @member wag_Address TODO + * @member wag_PLMN_Id TODO + * @member wlan_Radio_Container TODO + * @member wlan_UE_Local_IPAddress TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.246 WLAN-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Information_AVP { + AVP_Header aVP_Header,// + WLAN_Session_Id_AVP wlan_Session_Id optional, + PDG_Address_AVP pdg_Address optional, + PDG_Charging_Id_AVP pdg_Charging_Id optional, + WAG_Address_AVP wag_Address optional, + WAG_PLMN_Id_AVP wag_PLMN_Id optional, + WLAN_Radio_Container_AVP wlan_Radio_Container optional, + WLAN_UE_Local_IPAddress_AVP wlan_UE_Local_IPAddress optional + } // End of type WLAN_Information_AVP + + /** + * @desc The IMS-Information AVP (AVP code 876) + * @member aVP_Header Header AVP + * @member event_Type TODO + * @member role_Of_Node TODO + * @member node_Functionality TODO + * @member user_Session_Id TODO + * @member outgoing_Session_Id TODO + * @member session_Priority TODO + * @member calling_Party_Address TODO + * @member called_Party_Address TODO + * @member called_Asserted_Identity TODO + * @member number_Portability_Routing_Information TODO + * @member carrier_Select_Routing_Information TODO + * @member alternate_Charged_Party_Address TODO + * @member requested_Party_Address TODO + * @member associated_URI TODO + * @member time_Stamps TODO + * @member application_Server_Information TODO + * @member inter_Operator_Identifie TODO + * @member ims_Charging_Identifier TODO + * @member sdp_Session_Description TODO + * @member sdp_Media_Component TODO + * @member served_Party_IP_Address TODO + * @member server_Capabilities TODO + * @member bearer_Service TODO + * @member service_Id TODO + * @member service_Specific_Info TODO + * @member message_Body TODO + * @member cause_Code TODO + * @member access_Network_Information TODO + * @member early_Media_Description TODO + * @member ims_Communication_Service_Identifier TODO + * @member online_Charging_Flag TODO + * @member real_Time_Tariff_Information TODO + * @member account_Expiration TODO + * @member initial_IMS_Charging_Identifier TODO + * @member ims_Emergency_Indicator TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.77 IMS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Information_AVP { + AVP_Header aVP_Header,// + Event_Type_AVP event_Type optional, + Role_Of_Node_AVP role_Of_Node optional, + Node_Functionality_AVP node_Functionality, + User_Session_Id_AVP user_Session_Id optional, + Outgoing_Session_Id_AVP outgoing_Session_Id optional, + Session_Priority_AVP session_Priority optional, + set of Calling_Party_Address_AVP calling_Party_Address optional, + Called_Party_Address_AVP called_Party_Address optional, + set of Called_Asserted_Identity_AVP called_Asserted_Identity optional, + Number_Portability_Routing_Information_AVP number_Portability_Routing_Information optional, + Carrier_Select_Routing_Information_AVP carrier_Select_Routing_Information optional, + Alternate_Charged_Party_Address_AVP alternate_Charged_Party_Address optional, + Requested_Party_Address_AVP requested_Party_Address optional, + set of Associated_URI_AVP associated_URI optional, + Time_Stamps_AVP time_Stamps optional, + set of Application_Server_Information_AVP application_Server_Information optional, + set of Inter_Operator_Identifier_AVP inter_Operator_Identifier optional, + IMS_Charging_Identifier_AVP ims_Charging_Identifier optional, + set of SDP_Session_Description_AVP sdp_Session_Description optional, + set of SDP_Media_Component_AVP sdp_Media_Component optional, + Served_Party_IP_Address_AVP served_Party_IP_Address optional, + Server_Capabilities_AVP server_Capabilities optional, + Trunk_Group_ID_AVP trunk_Group_ID optional, + Bearer_Service_AVP bearer_Service optional, + Service_Id_AVP service_Id optional, + set of Service_Specific_Info_AVP service_Specific_Info optional, + set of Message_Body_AVP message_Body optional, + Cause_Code_AVP cause_Code optional, + Access_Network_Information_AVP access_Network_Information optional, + set of Early_Media_Description_AVP early_Media_Description optional, + IMS_Communication_Service_Identifier_AVP ims_Communication_Service_Identifier optional, + Online_Charging_Flag_AVP online_Charging_Flag optional, + Real_Time_Tariff_Information_AVP real_Time_Tariff_Information optional, + Account_Expiration_AVP account_Expiration optional, + Initial_IMS_Charging_Identifier_AVP initial_IMS_Charging_Identifier optional, + IMS_Emergency_Indicator_AVP ims_Emergency_Indicator optional + } // End of type IMS_Information_AVP + + /** + * @desc The MMS-Information AVP (AVP code 876) + * @member aVP_Header Header AVP + * @member originator_Address TODO + * @member recipient_Address TODO + * @member submission_Time TODO + * @member mm_Content_Type TODO + * @member priority TODO + * @member message_ID TODO + * @member message_Type TODO + * @member message_Size TODO + * @member message_Class TODO + * @member delivery_Report_Requested TODO + * @member read_Reply_Report_Requested TODO + * @member mmbox_Storage_Requested TODO + * @member applic_ID TODO + * @member reply_Applic_ID TODO + * @member aux_Applic_Info TODO + * @member content_Class TODO + * @member drm_Content TODO + * @member adaptations TODO + * @member vasp_Id TODO + * @member vas_Id TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.110 MMS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MMS_Information_AVP { + AVP_Header aVP_Header,// + Originator_Address_AVP originator_Address optional, + set of Recipient_Address_AVP recipient_Address optional, + Submission_Time_AVP submission_Time optional, + MM_Content_Type_AVP mm_Content_Type optional, + Priority_AVP priority optional, + Message_ID_AVP message_ID optional, + Message_Type_AVP message_Type optional, + Message_Size_AVP message_Size optional, + Message_Class_AVP message_Class optional, + Delivery_Report_Requested_AVP delivery_Report_Requested optional, + Read_Reply_Report_Requested_AVP read_Reply_Report_Requested optional, + MMBox_Storage_Requested_AVP mmbox_Storage_Requested optional, + Applic_ID_AVP applic_ID optional, + Reply_Applic_ID_AVP reply_Applic_ID optional, + Aux_Applic_Info_AVP aux_Applic_Info optional, + Content_Class_AVP content_Class optional, + DRM_Content_AVP drm_Content optional, + Adaptations_AVP adaptations optional, + VASP_ID_AVP vasp_Id optional, + VAS_ID_AVP vas_Id optional + } // End of type MMS_Information_AVP + + /** + * @desc The LCS-Information AVP (AVP code 878) + * @member aVP_Header Header AVP + * @member lcs_Client_ID TODO + * @member location_Type TODO + * @member location_Estimate TODO + * @member positioning_Data TODO + * @member priority optional TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.89 LCS-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Information_AVP { + AVP_Header aVP_Header,// + LCS_Client_ID_AVP lcs_Client_ID optional, + Location_Type_AVP location_Type optional, + Location_Estimate_AVP location_Estimate optional, + Positioning_Data_AVP positioning_Data optional, + ThreeGPP_IMSI_AVP threeGPP_IMSI optional, + MSISDN_AVP msisdn optional + } // End of type LCS_Information_AVP + + type record PoC_Information_AVP { + AVP_Header aVP_Header,// + PoC_Server_Role_AVP poc_Server_Role optional, + PoC_Session_Type_AVP poc_Session_Type optional, + PoC_User_Role_AVP poc_User_Role optional, + PoC_Session_Initiation_Type_AVP poc_Session_Initiation_Type optional, + PoC_Event_Type_AVP poc_Event_Type optional, + Number_Of_Participants_AVP number_Of_Participants optional, + set of Participants_Involved_AVP participants_Involved optional, + set of Participant_Group_AVP participant_Group optional, + set of Talk_Burst_Exchange_AVP talk_Burst_Exchange optional, + PoC_Controlling_Address_AVP poc_Controlling_Address optional, + PoC_Group_Name_AVP poc_Group_Name optional, + PoC_Session_Id_AVP poc_Session_Id optional, + Charged_Party_AVP charged_Party optional + } // End of type PoC_Information_AVP + + type record MBMS_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type MBMS_Information_AVP + + /** + * @desc The Quota-Consumption-Time AVP (AVP code 881) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an idle traffic aVP_Data time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.159 Quota-Consumption-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Consumption_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Consumption_Time_AVP + + /** + * @desc The Media-Initiator-Flag AVP (AVP code 882) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates which party has requested the session modification + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.101 Media-Initiator-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Media_Initiator_Flag_AVP { + AVP_Header aVP_Header,// + Media_Initiator_Flag aVP_Data + } // End of type Media_Initiator_Flag_AVP + + /** + * @desc The PoC-Server-Role AVP (AVP code 883) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the role of the PoC server + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.145 PoC-Server-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Server_Role_AVP { + AVP_Header aVP_Header,// + PoC_Server_Role aVP_Data + } // End of type PoC_Server_Role_AVP + + /** + * @desc The PoC-Session-Type AVP (AVP code 884) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the type of the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.148 PoC-Session-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Session_Type_AVP { + AVP_Header aVP_Header,// + PoC_Session_Type aVP_Data + } // End of type PoC_Session_Type_AVP + + /** + * @desc The Number-Of-Participants AVP (AVP code 885) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of invited parties of the multi-party session when included in the initial charging request message + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.117 Number-Of-Participants AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Participants_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Participants_AVP + + /** + * @desc The Originator-Address AVP (AVP code 886) + * @member aVP_Header Header AVP + * @member address_Type TODO + * @member address_Data TODO + * @member address_Domain TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.125 Originator-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Originator_Address_AVP { + AVP_Header aVP_Header,// + Address_Type_AVP address_Type optional, + Address_Data_AVP address_Data optional, + Address_Domain_AVP address_Domain optional + } // End of type Originator_Address_AVP + + /** + * @desc The Participants-Involved AVP (AVP code 887) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the list of address (Public User ID: SIP URI, TEL URI, MSISDN) of the parties who are involved into the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.130 Participants-Involved AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participants_Involved_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Participants_Involved_AVP + + /** + * @desc The Expires AVP (AVP code 888) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the content of the "Expires" header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.66 Expires AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Expires_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Expires_AVP + + /** + * @desc The Message-Body AVP (AVP code 889) + * @member aVP_Header Header AVP + * @member content_Type TODO + * @member content_Length TODO + * @member content_Disposition TODO + * @member originator TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.103 Message-Body AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Body_AVP { + AVP_Header aVP_Header,// + Content_Type_AVP content_Type, + Content_Length_AVP content_Length, + Content_Disposition_AVP content_Disposition optional, + Originator_AVP originator optional + } // End of type Message_Body_AVP + + /** + * @desc The WAG-Address AVP (AVP code 890) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the WAG IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.244 WAG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WAG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type WAG_Address_AVP + + /** + * @desc The WAG-PLMN-Ids AVP (AVP code 891) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the WAG PLMN id (MCC and MNC) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.245 WAG-PLMN-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WAG_PLMN_Id_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type WAG_PLMN_Id_AVP + + /** + * @desc The WLAN-Radio-Container AVP (AVP code 892) + * @member aVP_Header Header AVP + * @member operator_Name TODO + * @member location_Data TODO + * @member location_Information TODO + * @member wlan_Technology TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.247 WLAN-Radio-Container AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Radio_Container_AVP { + AVP_Header aVP_Header,// + Operator_Name_AVP operator_Name optional, + Location_Data_AVP location_Data optional, + Location_Information_AVP location_Information optional, + WLAN_Technology_AVP wlan_Technology optional + } // End of type WLAN_Radio_Container_AVP + + /** + * @desc The Unit-Quota-Threshold AVP (AVP code 893) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.249 WLAN-Technology AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record WLAN_Technology_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type WLAN_Technology_AVP + + /** + * @desc The WLAN-UE-Local-IPAddress AVP (AVP code 894) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the UE"s local IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.250 WLAN-UE-Local-IPAddress AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_UE_Local_IPAddress_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type WLAN_UE_Local_IPAddress_AVP + + /** + * @desc The PDG-Address AVP (AVP code 895) + * @member aVP_Header Header AVP + * @member aVP_Data Address and contains the PDG IP address + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.134 PDG-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDG_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type PDG_Address_AVP + + /** + * @desc The PDG-Charging-Id AVP (AVP code 896) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the charging identifier generated by the PDG for the tunnel + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.135 PDG-Charging-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDG_Charging_Id_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDG_Charging_Id_AVP + + /** + * @desc The Address-Data AVP (AVP code 897) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the address information and formatted according type of address indicated in the Address-Type AVP and according to MMS encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.7 Address-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Address_Data_AVP + + /** + * @desc The Address-Domain AVP (AVP code 898) + * @member aVP_Header Header AVP + * @member domain_Name TODO + * @member threeGPP_IMSI_MCC_MNC TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.7 Address-Domain AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Domain_AVP { + AVP_Header aVP_Header,// + Domain_Name_AVP domain_Name optional, + ThreeGPP_IMSI_MCC_MNC_AVP threeGPP_IMSI_MCC_MNC optional + } // End of type Address_Domain_AVP + + /** + * @desc The Address-Type AVP (AVP code 899) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the address information and formatted according type of address indicated in the Address-Type AVP and according to MMS encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.9 Address-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Address_Type_AVP { + AVP_Header aVP_Header,// + Address_Type aVP_Data + } // End of type Address_Type_AVP + + /** + * @desc The VASP-ID AVP (AVP code 1101) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see 3GPP TS 29.140 Table 7.1: 3GPP specific AVP code + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record VASP_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type VASP_ID_AVP + + /** + * @desc The VAS-ID AVP (AVP code 1102) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see 3GPP TS 29.140 Table 7.1: 3GPP specific AVP code + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record VAS_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type VAS_ID_AVP + + /** + * @desc The Domain-Name AVP (AVP code 1200) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.55 Domain-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Domain_Name_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Domain_Name_AVP + + /** + * @desc The MM-Content-Type AVP (AVP code 1201) + * @member aVP_Header Header AVP + * @member type_Number TODO + * @member additional_Type_Information TODO + * @member content_Size TODO + * @member additional_Content_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.108 MM-Content-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MM_Content_Type_AVP { + AVP_Header aVP_Header,// + Type_Number_AVP type_Number optional, + Additional_Type_Information_AVP additional_Type_Information optional, + Content_Size_AVP content_Size optional, + Additional_Content_Information_AVP additional_Content_Information optional + } // End of type MM_Content_Type_AVP + + /** + * @desc The Submission-Time AVP (AVP code 1202) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.217 Submission-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Submission_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Submission_Time_AVP + + /** + * @desc The Recipient-Address AVP (AVP code 1203) + * @member aVP_Header Header AVP + * @member address_Type TODO + * @member address_Data TODO + * @member address_Domain TODO + * @member addressee_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.167 Recipient-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Recipient_Address_AVP { + AVP_Header aVP_Header,// + Address_Type_AVP address_Type optional, + Address_Data_AVP address_Data optional, + Address_Domain_AVP address_Domain optional, + Addressee_Type_AVP addressee_Type optional + } // End of type Recipient_Address_AVP + + /** + * @desc The Type-Number AVP (AVP code 1204) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the well-known media types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.238 Type-Number AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Type_Number_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Type_Number_AVP + + /** + * @desc The Additional-Type-Information AVP (AVP code 1205) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates any additional information beyond well-known media types or non-well-known media types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.6 Additional-Type-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Additional_Type_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Additional_Type_Information_AVP + + /** + * @desc The Content-Size AVP (AVP code 1206) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the size in bytes of the specified content type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.45 Content-Size AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Size_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Content_Size_AVP + + /** + * @desc The Additional-Content-Information AVP (AVP code 1207) + * @member aVP_Header Header AVP + * @member type_Number TODO + * @member additional_Type_Information TODO + * @member content_Size TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.5 Additional-Content-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Additional_Content_Information_AVP { + AVP_Header aVP_Header,// + Type_Number_AVP type_Number optional, + Additional_Type_Information_AVP additional_Type_Information optional, + Content_Size_AVP content_Size optional + } // End of type Additional_Content_Information_AVP + + /** + * @desc The Addressee-Type AVP (AVP code 1208) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the how the recipient is addressed in the header of an MM + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.10 Addressee-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Addressee_Type_AVP { + AVP_Header aVP_Header,// + Addressee_Type aVP_Data + } // End of type Addressee_Type_AVP + + /** + * @desc The Priority AVP (AVP code 1209) + * @member aVP_Header Header AVP + * @member aVP_Data Priority (importance) of the message if specified + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.154 Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Priority_AVP { + AVP_Header aVP_Header,// + Priority aVP_Data + } // End of type Priority_AVP + + /** + * @desc The Message-ID AVP (AVP code 1210) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the message being charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.105 Message-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Message_ID_AVP + + /** + * @desc The Message-Type AVP (AVP code 1211) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the message being charged + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.107 Message-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Type_AVP { + AVP_Header aVP_Header,// + Message_Type aVP_Data + } // End of type Message_Type_AVP + + /** + * @desc The Message-Size AVP (AVP code 1212) + * @member aVP_Header Header AVP + * @member aVP_Data For MMS, it holds the total size in bytes of the MM calculated according to TS 23.140 + * For SMS, it holds the total size in octets of SM including any user data header + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.105 7.2.106 Message-Size AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Size_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Message_Size_AVP + + /** + * @desc The Message-Class AVP (AVP code 1213) + * @member aVP_Header Header AVP + * @member class_Identifier TODO + * @member token_Text TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.104 Message-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Message_Class_AVP { + AVP_Header aVP_Header,// + Class_Identifier_AVP class_Identifier optional, + Token_Text_AVP token_Text optional + } // End of type Message_Class_AVP + + /** + * @desc The Class-Identifier AVP (AVP code 1214) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.40 Class-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Class_Identifier_AVP { + AVP_Header aVP_Header,// + Class_Identifier aVP_Data + } // End of type Class_Identifier_AVP + + /** + * @desc The Token-Text AVP (AVP code 1215) + * @member aVP_Header Header AVP + * @member aVP_Data Contains extension information for the Message-Class AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.234 Token-Text AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Token_Text_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Token_Text_AVP + + /** + * @desc The Delivery-Report-Requested AVP (AVP code 1216) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether a delivery report has been requested by the originator or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.52 Delivery-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Delivery_Report_Requested_AVP { + AVP_Header aVP_Header,// + Delivery_Report_Requested aVP_Data + } // End of type Delivery_Report_Requested_AVP + + /** + * @desc The Adaptations AVP (AVP code 1217) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies whether the originator allows adaptation of the content (default Yes) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.4 Adaptations AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Adaptations_AVP { + AVP_Header aVP_Header,// + Adaptation aVP_Data + } // End of type Adaptations_AVP + + /** + * @desc The Applic-ID AVP (AVP code 1118) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the destination application that the underlying MMS abstract message was addressed to + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.21 Applic-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Applic_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Applic_ID_AVP + + /** + * @desc The Aux-Applic-Info AVP (AVP code 1119) + * @member aVP_Header Header AVP + * @member aVP_Data Holds additional application/implementation specific control information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.28 Aux-Applic-Info AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Aux_Applic_Info_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Aux_Applic_Info_AVP + + /** + * @desc The Content-Class AVP (AVP code 1120) + * @member aVP_Header Header AVP + * @member aVP_Data Classifies the content of the MM to the highest content class to which the MM belongs, as defined in MMS Encapsulation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.42 Content-Class AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Content_Class_AVP { + AVP_Header aVP_Header,// + Content_Class aVP_Data + } // End of type Content_Class_AVP + + /** + * @desc The DRM-Content AVP (AVP code 1221) + * @member aVP_Header Header AVP + * @member aVP_Data Represents a fully qualified domain name (FQDN) + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.56 DRM-Content AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record DRM_Content_AVP { + AVP_Header aVP_Header,// + DRM_Content aVP_Data + } // End of type DRM_Content_AVP + + /** + * @desc The Read-Reply-Report-Requested AVP (AVP code 1222) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether a read reply report has been requested by the originator MMS User Agent or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.162 Read-Reply-Report-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Read_Reply_Report_Requested_AVP { + AVP_Header aVP_Header,// + Read_Reply_Report_Requested aVP_Data + } // End of type Read_Reply_Report_Requested_AVP + + /** + * @desc The Reply-Applic-ID AVP (AVP code 1223) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identifier of a "reply path", i.e. the identifier of the application to which delivery reports, read-reply reports and reply-MMs are addressed + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.173 Reply-Applic-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Reply_Applic_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Reply_Applic_ID_AVP + + /** + * @desc The Unit-Quota-Threshold AVP (AVP code 1226) + * @member aVP_Header Header AVP + * @member aVP_Data Threshold value in service specific units + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.240 Unit-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Unit_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Unit_Quota_Threshold_AVP + + /** + * @desc The SGSN-Address AVP (AVP code 1228) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the SGSN/Serving Node that was used during a report + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.199 SGSN-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGSN_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type SGSN_Address_AVP + + /** + * @desc The PoC-Session-Id AVP (AVP code 1229) + * @member aVP_Header Header AVP + * @member aVP_Data identifies an end-to-end PoC session and may be used for correlation between charging information generated by participating and controlling PoC functions + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.146 PoC-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_Session_Id_AVP + + /** + * @desc The LCS-Client-ID AVP (AVP code 1232) + * @member aVP_Header Header AVP + * @member lcs_Client_Type TODO + * @member lcs_Client_External_ID TODO + * @member lcs_Client_Dialed_By_MS TODO + * @member lcs_Client_Name TODO + * @member lcs_APN TODO + * @member lcs_Requestor_ID TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.84 LCS-Client-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_ID_AVP { + AVP_Header aVP_Header,// + LCS_Client_Type_AVP lcs_Client_Type optional, + LCS_Client_External_ID_AVP lcs_Client_External_ID optional, + LCS_Client_Dialed_By_MS_AVP lcs_Client_Dialed_By_MS optional, + LCS_Client_Name_AVP lcs_Client_Name optional, + LCS_APN_AVP lcs_APN optional, + LCS_Requestor_ID_AVP lcs_Requestor_ID optional + } // End of type LCS_Client_ID_AVP + + /** + * @desc Deferred-Location-Event-Type AVP (AVP code 1230) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information related to a deferred location request + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.51 Deferred-Location-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Deferred_Location_Event_Type_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Deferred_Location_Event_Type_AVP + + /** + * @desc LCS-APN AVP (AVP code 1231) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the APN of the LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.81 LCS-APN AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_APN_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_APN_AVP + + /** + * @desc LCS-Client-Dialed-By-MS AVP (AVP code 1233) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the LCS Client dialled by the UE + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.82 LCS-Client-Dialed-By-MS AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Dialed_By_MS_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Client_Dialed_By_MS_AVP + + /** + * @desc LCS-Client-External-ID AVP (AVP code 1234) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the external LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.83 LCS-Client-External-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_External_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Client_External_ID_AVP + + /** + * @desc LCS-Client-External-ID AVP (AVP code 1235) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the identification of the external LCS Client + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.85 LCS-Client-Name AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Name_AVP { + AVP_Header aVP_Header,// + LCS_Data_Coding_Scheme_AVP lcs_Data_Coding_Scheme optional, + LCS_Name_String_AVP lcs_Name_String optional, + LCS_Format_Indicator_AVP lcs_Format_Indicator optional + } // End of type LCS_Client_Name_AVP + + /** + * @desc LCS-Data-Coding-Scheme AVP (AVP code 1236) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the information of the alphabet and the language used + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.87 LCS-Data-Coding-Scheme AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Data_Coding_Scheme_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Data_Coding_Scheme_AVP + + /** + * @desc LCS-Format-Indicator AVP (AVP code 1237) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the format of the LCS Client name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.88 LCS-Format-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Format_Indicator_AVP { + AVP_Header aVP_Header,// + LCS_Format_Indicator aVP_Data + } // End of type LCS_Format_Indicator_AVP + + /** + * @desc LCS-Name-String AVP (AVP code 1238) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the LCS Client name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.90 LCS-Name-String AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Name_String_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Name_String_AVP + + /** + * @desc LCS-Requestor-ID AVP (AVP code 1239) + * @member aVP_Header Header AVP + * @member lcs_Data_Coding_Scheme TODO + * @member lcs_Requestor_ID_String TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.91 LCS-Requestor-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Requestor_ID_AVP { + AVP_Header aVP_Header,// + LCS_Data_Coding_Scheme_AVP lcs_Data_Coding_Scheme optional, + LCS_Requestor_ID_String_AVP lcs_Requestor_ID_String optional + } // End of type LCS_Requestor_ID_AVP + + /** + * @desc LCS-Requestor-ID-String AVP (AVP code 1240) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the identification of the Requestor and can be e.g. MSISDN or logical name + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92 LCS-Requestor-ID-String AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Requestor_ID_String_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type LCS_Requestor_ID_String_AVP + + /** + * @desc LCS-Client-Type AVP (AVP code 1241) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.86 LCS-Client-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record LCS_Client_Type_AVP { + AVP_Header aVP_Header,// + LCS_Client_Type aVP_Data + } // End of type LCS_Client_Type_AVP + + /** + * @desc Location-Type AVP (AVP code 1244) + * @member aVP_Header Header AVP + * @member location_Estimate_Type TODO + * @member deferred_Location_Event_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.96 Location-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Type_AVP { + AVP_Header aVP_Header,// + Location_Estimate_Type_AVP location_Estimate_Type optional, + Deferred_Location_Event_Type_AVP deferred_Location_Event_Type optional + } // End of type Location_Type_AVP + + /** + * @desc The 7.2.248 Location-Estimate AVP (AVP code 1242) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.94 Location-Estimate AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Estimate_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Location_Estimate_AVP + + /** + * @desc The 7.2.248 Location-Estimate-Type AVP (AVP code 1243) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an estimate of the location of an MS in universal coordinates and the accuracy of the estimate + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.95 Location-Estimate-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Location_Estimate_Type_AVP { + AVP_Header aVP_Header,// + Location_Estimate_Type aVP_Data + } // End of type Location_Estimate_Type_AVP + + /** + * @desc The 7.2.248 Positioning-Data AVP (AVP code 1245) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the usage of each positioning method that was attempted to determine the location estimate either successfully or unsuccessfully + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.152 Positioning-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Positioning_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Positioning_Data_AVP + + /** + * @desc The 7.2.248 WLAN-Session-Id AVP (AVP code 1246) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the charging id generated by the AAA Server for the session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.248 WLAN-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record WLAN_Session_Id_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type WLAN_Session_Id_AVP + + /** + * @desc The PDP-Context-Type AVP (AVP code 1247) + * @member aVP_Header Header AVP + * @member reason Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.138 PDP-Context-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PDP_Context_Type_AVP { + AVP_Header aVP_Header,// + PDP_Context_Type reason + } // End of type PDP_Context_Type_AVP + + /** + * @desc The MMBox-Storage-Requested AVP (AVP code 1248) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether an MMBoxstorage has been requested by the originator MMS User Agent or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.109 MMBox-Storage-Requested AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record MMBox_Storage_Requested_AVP { + AVP_Header aVP_Header,// + MMBox_Storage_Requested aVP_Data + } // End of type MMBox_Storage_Requested_AVP + + /** + * @desc The Service-Specific-Info AVP (AVP code 1249) + * @member aVP_Header Header AVP + * @member reason Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.195 Service-Specific-Info AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Info_AVP { + AVP_Header aVP_Header,// + Service_Specific_Data_AVP service_Specific_Data, + Service_Specific_Type_AVP service_Specific_Type + } // End of type Service_Specific_Info_AVP + + /** + * @desc The Called-Asserted-Identity AVP (AVP code 1250) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (Public User ID: SIP URI, E.164, etc.) of the finally asserted called party + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.31 Called-Asserted-Identity AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Called_Asserted_Identity_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Called_Asserted_Identity_AVP + + /** + * @desc The Requested-Party-Address AVP (AVP code 1251) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (SIP URI or TEL URI) of the party (Public User ID or Public Service ID) to whom the SIP transaction was originally posted + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.176 Requested-Party-ARequested-Party-AddressRequested-Party-Addressddress AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Requested_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Requested_Party_Address_AVP + + /** + * @desc The PoC-User-Role AVP (AVP code 1252) + * @member aVP_Header Header AVP + * @member poc_User_Role_Id TODO + * @member poc_User_Role_info_Units TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.149 PoC-User-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_AVP { + AVP_Header aVP_Header,// + PoC_User_Role_Ids_AVP poc_User_Role_Id optional, + PoC_User_Role_info_Units_AVP poc_User_Role_info_Units optional + } // End of type PoC_User_Role_AVP + + /** + * @desc The PoC-User-Role AVP (AVP code 1253) + * @member aVP_Header Header AVP + * @member aVP_Data Identifies the PoC user role + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.149 PoC-User-Role AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_Ids_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type PoC_User_Role_Ids_AVP + + /** + * @desc The PoC-User-Role-info-Units AVP (AVP code 1254) + * @member aVP_Header Header AVP + * @member aVP_Data Specify the role type details of PoC users + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.151 PoC-User-Role-info-Units AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PoC_User_Role_info_Units_AVP { + AVP_Header aVP_Header,// + PoC_User_Role_info_Units aVP_Data + } // End of type PoC_User_Role_info_Units_AVP + + /** + * @desc The Talk-Burst-Exchange AVP (AVP code 1255) + * @member aVP_Header Header AVP + * @member aVP_Data Specify the role type details of PoC users + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.220 Talk-Burst-Exchange AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Exchange_AVP { + AVP_Header aVP_Header,// + PoC_Change_Time_AVP poc_Change_Time, + Number_Of_Talk_Bursts_AVP number_Of_Talk_Bursts optional, + Talk_Burst_Volume_AVP talk_Burst_Volume optional, + Talk_Burst_Time_AVP talk_Burst_Time optional, + Number_Of_Received_Talk_Bursts_AVP number_Of_Received_Talk_Bursts optional, + Received_Talk_Burst_Volume_AVP received_Talk_Burst_Volume optional, + Received_Talk_Burst_Time_AVP received_Talk_Burst_Time optional, + Number_Of_Participants_AVP number_Of_Participants optional, + PoC_Change_Condition_AVP poc_Change_Condition optional + } // End of type Talk_Burst_Exchange_AVP + + /** + * @desc Service-Generic-Information AVP (AVP code 1256) + * @member aVP_Header Header AVP + * @member application_Server_ID TODO + * @member application_Service_Type TODO + * @member application_Session_ID TODO + * @member delivery_Status TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.191 Service-Generic-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + * @see OMA-DDS-Charging_Data-V1_0-20110201-A + */ + type record Service_Generic_Information_AVP { + AVP_Header aVP_Header,// + Application_Server_ID_AVP application_Server_ID optional, + Application_Service_Type_AVP application_Service_Type optional, + Application_Session_ID_AVP application_Session_ID optional, + Delivery_Status_AVP delivery_Status optional + } // End of type Service_Generic_Information_AVP + + /** + * @desc Service-Specific-Type AVP (AVP code 1257) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the type of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.196 Service-Specific-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Type_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Service_Specific_Type_AVP + + /** + * @desc Event-Charging-TimeStamp_AVP (AVP code 1258) + * @member aVP_Header Header AVP + * @member Time Holds the type Time - timestamp of the event reported in the CC-Service-Specific-Units AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.64 Event-Charging-TimeStamp_AVP + */ + type record Event_Charging_TimeStamp_AVP{ + AVP_Header aVP_Header,//< AVP Header: 1258 > + Time aVP_Data + } + + /** + * @desc Participant-Access-Priority AVP (AVP code 1259) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the priority level for users when initiating a new PoC session or participating in a PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.132 Participant-Access-Priority AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participant_Access_Priority_AVP { + AVP_Header aVP_Header,// + Participant_Access_Priority aVP_Data + } // End of type Participant_Access_Priority_AVP + + /** + * @desc Service-Specific-Type AVP (AVP code 1260) + * @member aVP_Header Header AVP + * @member called_Party_Address TODO + * @member participant_Access_Priority TODO + * @member user_Participating_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.131 Participant-Group AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Participant_Group_AVP { + AVP_Header aVP_Header,// + Called_Party_Address_AVP called_Party_Address optional, + Participant_Access_Priority_AVP participant_Access_Priority optional, + User_Participating_Type_AVP user_Participating_Type optional + } // End of type Participant_Group_AVP + + /** + * @desc The PoC-Change-Condition AVP (AVP code 1261) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.139 PoC-Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Change_Condition_AVP { + AVP_Header aVP_Header,// + PoC_Change_Condition aVP_Data + } // End of type PoC_Change_Condition_AVP + + /** + * @desc The PoC-Change-Time AVP (AVP code 1262) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the time stamp that defines the moment when a container is closed or the CDR is closed + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.140 PoC-Change-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Change_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type PoC_Change_Time_AVP + + /** + * @desc The Access-Network-Information AVP (AVP code 1263) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the SIP P-header "P-Access-Network-Information" + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.1 Access-Network-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Access_Network_Information_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Access_Network_Information_AVP + + /** + * @desc The Trigger AVP (AVP code 1264) + * @member aVP_Header Header AVP + * @member trigger_Type Holds the trigger types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Trigger_AVP { + AVP_Header aVP_Header,// + set of Trigger_Type_AVP trigger_Type + } // End of type Trigger_AVP + + /** + * @desc Base-Time-Interval AVP (AVP code 1265) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the length of the base time interval, for controlling the consumption of time quota, in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.29 Base-Time-Interval AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Base_Time_Interval_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Base_Time_Interval_AVP + + /** + * @desc Envelope AVP (AVP code 1266) + * @member aVP_Header Header AVP + * @member envelope_Start_Time TODO + * @member envelope_End_Time TODO + * @member cC_Total_Octets TODO + * @member cC_Input_Octets TODO + * @member cC_Output_Octets TODO + * @member cC_Service_Specific_Units TODO + * @member aVP_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.59 Envelope AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Envelope_AVP { + AVP_Header aVP_Header,// + Envelope_Start_Time_AVP envelope_Start_Time, + Envelope_End_Time_AVP envelope_End_Time optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } // End of type Envelope_AVP + + /** + * @desc The Envelope-End-Time AVP (AVP code 1267) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the end of the time envelope + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-End-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_End_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_End_Time_AVP + + /** + * @desc The Envelope-Reporting AVP (AVP code 1268) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate whether the client shall report the start and end of each time envelope, in those cases in which quota is consumed in envelopes + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Reporting_AVP { + AVP_Header aVP_Header,// + Envelope_Reporting aVP_Data + } // End of type Envelope_Reporting_AVP + + /** + * @desc The Envelope-Start-Time AVP (AVP code 1269) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the packet of user data which caused the time envelope to start + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-Start-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Start_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_Start_Time_AVP + + /** + * @desc The Time-Quota-Mechanism AVP (AVP code 1270) + * @member aVP_Header Header AVP + * @member aVP_Data_Quota_Type TODO + * @member base_Time_Interval TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.228 Time-Quota-Mechanism + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Mechanism_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type_AVP time_Quota_Type optional, + Base_Time_Interval_AVP base_Time_Interval optional + } // End of type Time_Quota_Mechanism_AVP + + /** + * @desc The Time-Quota-Type AVP (AVP code 1271) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate which time quota consumption mechanism shall be used for the associated Rating Group + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Type_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type aVP_Data + } // End of type Time_Quota_Type_AVP + + /** + * @desc The Early-Media-Description AVP (AVP code 1272) + * @member aVP_Header Header AVP + * @member sdp_TimeStamps TODO + * @member sdp_Media_Component TODO + * @member sdp_Session_Description TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.58 Early-Media-Description AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Early_Media_Description_AVP { + AVP_Header aVP_Header,// + SDP_TimeStamps_AVP sdp_TimeStamps optional, + set of SDP_Media_Component_AVP sdp_Media_Component optional, + set of SDP_Session_Description_AVP sdp_Session_Description optional + } // End of type Early_Media_Description_AVP + + /** + * @desc The SDP-TimeStamps AVP (AVP code 1273) + * @member aVP_Header Header AVP + * @member sdp_Offer_Timestamp_AVP TODO + * @member sdp_Answer_Timestamp_AVP TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.185 SDP-TimeStamps AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_TimeStamps_AVP { + AVP_Header aVP_Header,// + SDP_Offer_Timestamp_AVP sdp_Offer_Timestamp optional, + SDP_Answer_Timestamp_AVP sdp_Answer_Timestamp optional + } // End of type SDP_TimeStamps_AVP + + /** + * @desc The SDP-Offer-Timestamp AVP (AVP code 1274) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SDP offer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.183 SDP-Offer-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Offer_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SDP_Offer_Timestamp_AVP + + /** + * @desc The SDP-Answer-Timestamp AVP (AVP code 1275) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the time in UTC format of the SDP offer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.179 SDP-Answer-Timestamp AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SDP_Answer_Timestamp_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type SDP_Answer_Timestamp_AVP + + /** + * @desc The AF-Correlation-Information AVP (AVP code 1276) + * @member aVP_Header Header AVP + * @member af_Charging_Identifier TODO + * @member flows Flow identifiers generated by the AF and received by P-GW over Rx/Gx as defined in TS 29.214 [214] and TS 29.212 [215] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.11 AF-Correlation-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AF_Correlation_Information_AVP { + AVP_Header aVP_Header,// + AF_Charging_Identifier_AVP af_Charging_Identifier optional, + set of Flows_AVP flows optional + } // End of type AF_Correlation_Information_AVP + + /** + * @desc The PoC-Session-Initiation-Type AVP (AVP code 1277) + * @member aVP_Data Specifies the type of the PoC session initiation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.147 PoC-Session-Initiation-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Session_Initiation_Type_AVP { + AVP_Header aVP_Header,// + PoC_Session_Initiation_Type aVP_Data + } // End of type PoC_Session_Initiation_Type_AVP + + /** + * @desc The Offline-Charging AVP (AVP code 1278) + * @member aVP_Header Header AVP + * @member quota_Consumption_Time TODO + * @member time_Quota_Mechanism TODO + * @member envelope_Reporting optional TODO + * @member multiple_Services_Credit_Control TODO + * @member aVP_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.121 Offline-Charging AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Offline_Charging_AVP { + AVP_Header aVP_Header,// + Quota_Consumption_Time_AVP quota_Consumption_Time optional, + Time_Quota_Mechanism_AVP time_Quota_Mechanism optional, + Envelope_Reporting_AVP envelope_Reporting optional, + set of Multiple_Services_Credit_Control_AVP multiple_Services_Credit_Control optional, + set of AVP_Type aVP_Type optional + } // End of type Offline_Charging_AVP + + /** + * @desc The User-Participating-Type AVP (AVP code 1279) + * @member aVP_Data Indicate the user participating type when participating in the PoC session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.241 User-Participating-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record User_Participating_Type_AVP { + AVP_Header aVP_Header,// + User_Participating_Type aVP_Data + } // End of type User_Participating_Type_AVP + + /** + * @desc Alternate-Charged-Party-Address AVP (AVP code 1280) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address of the alternate charged party determined by an AS at IMS session initiation + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.12 Alternate-Charged-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Alternate_Charged_Party_Address_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Alternate_Charged_Party_Address_AVP + + /** + * @desc Number-Of-Received-Talk-Bursts AVP (AVP code 1282) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.118 Number-Of-Received-Talk-Bursts AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Received_Talk_Bursts_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Received_Talk_Bursts_AVP + + /** + * @desc Number-Of-Talk-Bursts AVP (AVP code 1283) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the number of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.119 Number-Of-Talk-Bursts AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Number_Of_Talk_Bursts_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Number_Of_Talk_Bursts_AVP + + /** + * @desc Received-Talk-Burst-Time AVP (AVP code 1284) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the duration in seconds of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.165 Received-Talk-Burst-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Received_Talk_Burst_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Received_Talk_Burst_Time_AVP + + /** + * @desc Received-Talk-Burst-Volume AVP (AVP code 1285) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the volume in bytes of the received talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.166 Received-Talk-Burst-Volume AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Received_Talk_Burst_Volume_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Received_Talk_Burst_Volume_AVP + + /** + * @desc Talk-Burst-Time AVP (AVP code 1286) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the duration in seconds of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.221 Talk-Burst-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Talk_Burst_Time_AVP + + /** + * @desc Talk-Burst-Volume AVP (AVP code 1287) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the volume in bytes of the sent talk bursts + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.222 Talk-Burst-Volume AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Talk_Burst_Volume_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Talk_Burst_Volume_AVP + + /** + * @desc Alternate-Charged-Party-Address AVP (AVP code 1288) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the address (SIP URI or TEL URI) of the party (Public User ID or Public Service ID) who initiates the media action, like adding/removing, connecting/disconnecting the media + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.12 Alternate-Charged-Party-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Media_Initiator_Party_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Media_Initiator_Party_AVP + + /** + * @desc IMS-Communication-Service-Identifier AVP (AVP code 1281) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IMS Communication Service Identifier (ICSI) as contained in the P-Asserted-Service header of a SIP request to identify an IMS Communication Service as defined in TS 24.229 [202] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76 IMS-Communication-Service-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record IMS_Communication_Service_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type IMS_Communication_Service_Identifier_AVP + + type record SMS_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type SMS_Information_AVP + + /** + * @desc The Low-Balance-Indication AVP (AVP code 2020) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the subscriber balance went below a designated aVP_Data by its account + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97 Low-Balance-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Low_Balance_Indication_AVP { + AVP_Header aVP_Header,// + Low_Balance_Indication aVP_Data + } // End of type Low_Balance_Indication_AVP + + /** + * @desc The Remaining-Balance AVP (AVP code 2021) + * @member aVP_Header Header AVP + * @member unit_Value TODO + * @member currency_Code TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.172 Remaining-Balance AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Remaining_Balance_AVP { + AVP_Header aVP_Header,// + Unit_Value_AVP unit_Value, + Currency_Code_AVP currency_Code + } // End of type Remaining_Balance_AVP + + /** + * @desc The Refund-Information AVP (AVP code 2022) + * @member aVP_Header Header AVP + * @member aVP_Data Conveys relevant information for the OCS application relative to refund mechanism + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.171 Refund-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Refund_Information_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Refund_Information_AVP + + /** + * @desc The Carrier-Select-Routing-Information AVP (AVP code 2023) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information on carrier selection performed by S-CSCF/AS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.34 Carrier-Select-Routing-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Carrier_Select_Routing_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Carrier_Select_Routing_Information_AVP + + /** + * @desc The Number-Portability-Routing-Information AVP (AVP code 2024) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information on carrier selection performed by S-CSCF/AS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.120 Number-Portability-Routing-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Number_Portability_Routing_Information_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Number_Portability_Routing_Information_AVP + + /** + * @desc The PoC-Event-Type AVP (AVP code 2025) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates PoC session unrelated charging event + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.142 PoC-Event-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PoC_Event_Type_AVP { + AVP_Header aVP_Header,// + PoC_Event_Type aVP_Data + } // End of type PoC_Event_Type_AVP + + type record MMTel_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type MMTel_Information_AVP + + /** + * @desc The Node-Id AVP (AVP code 2034) + * @member aVP_Header Header AVP + * @member aVP_Data Operator configurable identifier string for the node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.114 Node-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Node_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Node_Id_AVP + + /** + * @desc The Change-Condition AVP (AVP code 2036) + * @member aVP_Header Header AVP + * @member aVP_Data Holds information if the SDP media component was of type SDP offer or SDP answer + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.186 SDP-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SDP_Type_AVP { + AVP_Header aVP_Header,// + SDP_Type aVP_Data + } // End of type SDP_Type_AVP + + /** + * @desc The Change-Condition AVP (AVP code 2037) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the change in charging condition + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.37 Change-Condition AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Change_Condition_AVP { + AVP_Header aVP_Header,// + Change_Condition aVP_Data + } // End of type Change_Condition_AVP + + /** + * @desc The Change-Time AVP (AVP code 2038) + * @member aVP_Header Header AVP + * @member aVP_Data EPC Charging: holds the time in UTC format when the volume counts associated to the IP-CAN bearer, or the service data container, is closed and reported due to Charging condition change + * MMTel Charging: holds the time in UTC format and it is a time stamp that defines the moment when the conference participant has an action + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.38 Change-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Change_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Change_Time_AVP + + /** + * @desc The Diagnostics AVP (AVP code 2039) + * @member aVP_Header Header AVP + * @member cause Provides a more detailed cause value from PCN node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.54 Diagnostics AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Diagnostics_AVP { + AVP_Header aVP_Header,// + UInt32 cause + } // End of type Diagnostics_AVP + + /** + * @desc The Service-Data-Container AVP (AVP code 2040) + * @member aVP_Header Header AVP + * @member aF_Correlation_Information TODO + * @member charging_Rule_Base_Name TODO + * @member accounting_Input_Octets TODO + * @member accounting_Output_Octets TODO + * @member local_Sequence_Number TODO + * @member qos_Information TODO + * @member rating_Group TODO + * @member change_Time TODO + * @member service_Identifier TODO + * @member service_Specific_Info TODO + * @member SGSN_Address TODO + * @member aVP_Data_First_Usage TODO + * @member aVP_Data_Last_Usage TODO + * @member aVP_Data_Usage TODO + * @member change_Condition TODO + * @member threeGPP_User_Location_Info TODO + * @member threeGPP2_BSID TODO + * @member user_CSG_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.189 Service-Data-Container AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Service_Data_Container_AVP { + AVP_Header aVP_Header,// + AF_Correlation_Information_AVP aF_Correlation_Information optional, + Charging_Rule_Base_Name_AVP charging_Rule_Base_Name optional, + Accounting_Input_Octets_AVP accounting_Input_Octets optional, + Accounting_Output_Octets_AVP accounting_Output_Octets optional, + Local_Sequence_Number_AVP local_Sequence_Number optional, + QoS_Information_AVP qos_Information optional, + Rating_Group_AVP rating_Group optional, + Change_Time_AVP change_Time optional, + Service_Identifier_AVP service_Identifier optional, + Service_Specific_Info_AVP service_Specific_Info optional, + SGSN_Address_AVP SGSN_Address optional, + Time_First_Usage_AVP time_First_Usage optional, + Time_Last_Usage_AVP time_Last_Usage optional, + Time_Usage_AVP time_Usage optional, + set of Change_Condition_AVP change_Condition optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + User_CSG_Information_AVP user_CSG_Information optional + } // End of type Service_Data_Container_AVP + + /** + * @desc The Start-Time AVP (AVP code 2041) + * @member aVP_Header Header AVP + * @member aVP_Data The time in UTC format which represents the start of a user session at the S-GW/P-GW + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.215 Start-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Start_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Start_Time_AVP + + /** + * @desc The Stop-Time AVP (AVP code 2042) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format which represents the termination of a user session at the S-GW/P-GW + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.216 Stop-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Stop_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Stop_Time_AVP + + /** + * @desc The Time-First-Usage AVP (AVP code 2043) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format for the first IP packet to be transmitted and mapped to the current service data container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.226 Time-First-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_First_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_First_Usage_AVP + + /** + * @desc The Time-Last-Usage AVP (AVP code 2044) + * @member aVP_Header Header AVP + * @member aVP_Data The the time in UTC format for the last IP packet to be transmitted and mapped to the current service data container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.227 Time-Last-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_Last_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Last_Usage_AVP + + /** + * @desc The Time-Last-Usage AVP (AVP code 2045) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the effective used time within the service data container reporting interval. + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.232 Time-Usage AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Time_Usage_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Usage_AVP + + /** + * @desc The Traffic-Data-Volumes AVP (AVP code 2046) + * @member aVP_Header Header AVP + * @member qos_Information TODO + * @member accounting_Input_Octets TODO + * @member accounting_Output_Octets TODO + * @member change_condition TODO + * @member change_Time TODO + * @member threeGPP_User_Location_Info TODO + * @member user_CSG_Information TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233 Traffic-Data-Volumes AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Traffic_Data_Volumes_AVP { + AVP_Header aVP_Header,// + QoS_Information_AVP qos_Information optional, + Accounting_Input_Octets_AVP accounting_Input_Octets optional, + Accounting_Output_Octets_AVP accounting_Output_Octets optional, + Change_Condition_AVP change_condition optional, + Change_Time_AVP change_Time optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + User_CSG_Information_AVP user_CSG_Information optional + } // End of type Traffic_Data_Volumes_AVP + + /** + * @desc The Serving-Node-Type AVP (AVP code 2047) + * @member aVP_Header Header AVP + * @member node_Type The type of Serving Node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.198 Serving-Node-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Serving_Node_Type_AVP { + AVP_Header aVP_Header,// + Serving_Node_Type aVP_Data + } // End of type Serving_Node_Type_AVP + + /** + * @desc The PDN-Connection-Charging-ID AVP (AVP code 2050) + * @member aVP_Header Header AVP + * @member aVP_Data The charging identifier to identify different records belonging to same PDN connection + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.136 PDN-Connection-Charging-ID AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PDN_Connection_Charging_ID_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDN_Connection_Charging_ID_AVP + + /** + * @desc The Dynamic-Address-Flag AVP (AVP code 2051) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether the PDP context/PDN address is statically or dynamically allocated + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.57 Dynamic-Address-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Dynamic_Address_Flag_AVP { + AVP_Header aVP_Header,// + Dynamic_Address_Flag aVP_Data + } // End of type Dynamic_Address_Flag_AVP + + /** + * @desc The Accumulated-Cost AVP (AVP code 2052) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.3 Accumulated-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Accumulated_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Accumulated_Cost_AVP + + /** + * @desc The AoC-Cost-Information AVP (AVP code 2053) + * @member aVP_Header Header AVP + * @member accumulated_Cost Holds the accumulated cost for the ongoing session + * @member incremental_Cost Holds the incremental cost since last AoC interaction for the ongoing session + * @member currency_Code Not used in 3GPP. + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.13 AoC-Cost-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Cost_Information_AVP { + AVP_Header aVP_Header,// + Accumulated_Cost_AVP accumulated_Cost optional, + set of Incremental_Cost_AVP incremental_Cost optional, + Currency_Code_AVP currency_Code optional // Not used in 3GPP + } // End of type AoC_Cost_Information_AVP + + /** + * @desc The AoC-Information AVP (AVP code 2054) + * @member aVP_Header Header AVP + * @member aoc_Cost_Information_AVP Holds accumulated and incremental cost information for the AoC service + * @member tariff_Information_AVP Holds a tariff definition either from the local provider or from 3rd party provider + * @member aoc_Subscription_Information Holds the subscription and formatting parameters received from HSS + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.15 AoC-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Information_AVP { + AVP_Header aVP_Header,// + AoC_Cost_Information_AVP aoc_Cost_Information optional, + Tariff_Information_AVP tariff_Information optional, + AoC_Subscription_Information_AVP aoc_Subscription_Information optional + } // End of type AoC_Information_AVP + + /** + * @desc The AoC-Request-Type AVP (AVP code 2055) + * @member aVP_Header Header AVP + * @member aoc_Request_Type Tags if the client is looking for AoCI in conjunction to the Request-Type and Request-Action AVPs + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.16 AoC-Request-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Request_Type_AVP { + AVP_Header aVP_Header,// + AoC_Request_Type aoc_Request_Type + } // End of type AoC_Request_Type_AVP + + /** + * @desc The Current-Tariff AVP (AVP code 2056) + * @member aVP_Header Header AVP + * @member currency_Code Not used in 3GPP. + * @member scale_Factor Holds simple multiplication factor in the same format as Unit-Value + * @member rate_Element Holds simple rate element of one dimension + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.47 Current-Tariff AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Current_Tariff_AVP { + AVP_Header aVP_Header,// + Currency_Code_AVP currency_Code optional, // Not used in 3GPP + Scale_Factor_AVP scale_Factor optional, + set of Rate_Element_AVP rate_Element optional + } // End of type Current_Tariff_AVP + + /** + * @desc The Next-Tariff AVP (AVP code 2057) + * @member aVP_Header Header AVP + * @member currency_Code Not used in 3GPP. + * @member scale_Factor Holds simple multiplication factor in the same format as Unit-Value + * @member rate_Element Holds simple rate element of one dimension + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.112 Next-Tariff AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Next_Tariff_AVP { + AVP_Header aVP_Header,// + Currency_Code_AVP currency_Code optional, // Not used in 3GPP + Scale_Factor_AVP scale_Factor optional, + set of Rate_Element_AVP rate_Element optional + } // End of type Next_Tariff_AVP + + /** + * @desc The Rate-Element AVP (AVP code 2058) + * @member aVP_Header Header AVP + * @member cc_Unit_Type_AVP TODO + * @member charge_Reason_Code Identifies if the Rate-Element corresponds to a specific charge type + * @member unit_Value Not used in 3GPP. + * @member unit_Cost Holds monetary value + * @member unit_Quota_Threshold TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.161 Rate-Element AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Rate_Element_AVP { + AVP_Header aVP_Header,// + CC_Unit_Type_AVP cc_Unit_Type, + Charge_Reason_Code_AVP charge_Reason_Code optional, + Unit_Value_AVP unit_Value optional, + Unit_Cost_AVP unit_Cost optional, + Unit_Quota_Threshold_AVP unit_Quota_Threshold optional + } // End of type Rate_Element_AVP + + /** + * @desc The Scale-Factor AVP (AVP code 2059) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.178 Scale-Factor AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Scale_Factor_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Scale_Factor_AVP + + /** + * @desc The Tariff-Information AVP (AVP code 2060) + * @member aVP_Header Header AVP + * @member current_Tariff Holds tariff information + * @member tariff_Time_Change Not used in 3GPP. + * @member next_Tariff Holds tariff information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.223 Tariff-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Tariff_Information_AVP { + AVP_Header aVP_Header,// + Current_Tariff_AVP current_Tariff, + Tariff_Time_Change_AVP tariff_Time_Change optional, + Next_Tariff_AVP next_Tariff optional + } // End of type Tariff_Information_AVP + + /** + * @desc The Unit-Cost AVP (AVP code 2061) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.239 Unit-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Unit_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Unit_Cost_AVP + + /** + * @desc The Incremental-Cost AVP (AVP code 2062) + * @member aVP_Header Header AVP + * @member value_Digits TODO + * @member exponent TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.70 Incremental-Cost AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Incremental_Cost_AVP { + AVP_Header aVP_Header,// + Value_Digits_AVP value_Digits, + Exponent_AVP exponent optional + } // End of type Incremental_Cost_AVP + + /** + * @desc The Local-Sequence-Number AVP (AVP code 2063) + * @member aVP_Header Header AVP + * @member seq_number Holds the service data container sequence number + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.93 Local-Sequence-Number AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Local_Sequence_Number_AVP { + AVP_Header aVP_Header,// + UInt32 seq_number + } // End of type Local_Sequence_Number_AVP + + /** + * @desc The SGW-Change AVP (AVP code 2065) + * @member aVP_Header Header AVP + * @member aVP_Data Accounting Request type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.200 SGW-Change AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGW_Change_AVP { + AVP_Header aVP_Header,// + SGW_Change aVP_Data + } // End of type SGW_Change_AVP + + /** + * @desc The Charging-Characteristics-Selection-Mode AVP (AVP code 2066) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates how the applied Charging-Characteristics was selected + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.39A Charging-Characteristics-Selection-Mode AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Charging_Characteristics_Selection_Mode_AVP { + AVP_Header aVP_Header,// + Charging_Characteristics_Selection_Mode aVP_Data + } // End of type Charging_Characteristics_Selection_Mode_AVP + + /** + * @desc The SGW-Address AVP (AVP code 2067) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the IP-address of the S-GW Node + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.199A SGW-Address AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record SGW_Address_AVP { + AVP_Header aVP_Header,// + Address aVP_Data + } // End of type SGW_Address_AVP + + /** + * @desc The Dynamic-Address-Flag-Extension AVP (AVP code 2068) + * @member aVP_Header Header AVP + * @member pdpAddressAllocation indicates that the IPv4 PDN address has been dynamically allocated for that particular IP CAN bearer (PDN connection) of PDN type IPv4v6, and the dynamic IPv6 address is indicated in Dynamic Address Flag + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.57A Dynamic-Address-Flag-Extension AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Dynamic_Address_Flag_Extension_AVP { + AVP_Header aVP_Header,// + Dynamic_Address_Flag_Extension pdpAddressAllocation + } // End of type Dynamic_Address_Flag_Extension_AVP + + /** + * @desc The Application-Server-ID AVP (AVP code 2101) + * @member aVP_Header Header AVP + * @member aVP_Data The Application Server identifier + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Server_ID_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Application_Server_ID_AVP + + /** + * @desc The Application-Service-Type AVP (AVP code 2102) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Service_Type_AVP { + AVP_Header aVP_Header,// + Application_Service_Type aVP_Data + } // End of type Application_Service_Type_AVP + + /** + * @desc The Application-Session-ID AVP (AVP code 2103) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Application_Session_ID_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Application_Session_ID_AVP + + /** + * @desc The Delivery_Status AVP (AVP code 2104) + * @member aVP_Header Header AVP + * @member aVP_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Delivery_Status_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Delivery_Status_AVP + + type record IM_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type IM_Information_AVP + + type record DCD_Information_AVP { + AVP_Header aVP_Header// + // TODO + + } // End of type DCD_Information_AVP + + /** + * @desc The Incremental-Cost AVP (AVP code 2118) + * @member aVP_Header Header AVP + * @member value Enumerated value + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.38A Charge-Reason-Code AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Charge_Reason_Code_AVP { + AVP_Header aVP_Header,// + Charge_Reason_Code aVP_Data + } // End of type Charge_Reason_Code_AVP + + /** + * @desc The SIP-Request-Timestamp-Fraction AVP (AVP code 2301) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the miliseconds fraction in relation to SIP-Request-Timestamp + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.203 SIP-Request-Timestamp-Fraction AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SIP_Request_Timestamp_Fraction_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type SIP_Request_Timestamp_Fraction_AVP + + /** + * @desc The SIP-Response-Timestamp-Fraction AVP (AVP code 2302) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the miliseconds fraction in relation to SIP-Response-Timestamp + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.205 SIP-Response-Timestamp-Fraction AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record SIP_Response_Timestamp_Fraction_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type SIP_Response_Timestamp_Fraction_AVP + + /** + * @desc The Online-Charging-Flag AVP (AVP code 2303) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the Online Charging Request was sent based on the provided ECF address from the SIP P-header "P-Charging-Function-Addresses" + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.122 Online-Charging-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Online_Charging_Flag_AVP { + AVP_Header aVP_Header,// + Online_Charging_Flag aVP_Data + } // End of type Online_Charging_Flag_AVP + + /** + * @desc The Online-Charging-Flag AVP (AVP code 2305) + * @member aVP_Header Header AVP + * @member tariff_Information TODO + * @member tariff_XML TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.164 Real-Time-Tariff-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Real_Time_Tariff_Information_AVP { + AVP_Header aVP_Header,// + Tariff_Information_AVP tariff_Information optional, + Tariff_XML_AVP tariff_XML optional + } // End of type Real_Time_Tariff_Information_AVP + + /** + * @desc The Tariff-XML AVP (AVP code 2306) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the XML body describing the tariff/add-on charge information exchanged during the SIP transaction, as described in the TS 29.658 [222] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.224 Tariff-XML AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Tariff_XML_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Tariff_XML_AVP + + /** + * @desc The IMSI-Unauthenticated-Flag AVP (AVP code 2308) + * @member aVP_Header Header AVP + * @member aVP_Data Enumerated value + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.78 IMSI-Unauthenticated-Flag AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IMSI_Unauthenticated_Flag_AVP { + AVP_Header aVP_Header,// + IMSI_Unauthenticated_Flag aVP_Data + } // End of type IMSI_Unauthenticated_Flag_AVP + + /** + * @desc The Account-Expiration AVP (AVP code 2309) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the subscriber account expiration date and time of day + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.2 Account-Expiration AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Account_Expiration_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Account_Expiration_AVP + + /** + * @desc The AoC-Format AVP (AVP code 2310) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the format on how the AoC information shall be sent to the UE + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.14 AoC-Format AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Format_AVP { + AVP_Header aVP_Header,// + AoC_Format aVP_Data + } // End of type AoC_Format_AVP + + /** + * @desc The AoC-Service AVP (AVP code 2311) + * @member aVP_Header Header AVP + * @member aoc_Service_Obligatory_Type AoC Service type + * @member aoc_Service_Type AoC Service obligatory type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.17 AoC-Service AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_AVP { + AVP_Header aVP_Header,// + AoC_Service_Obligatory_Type_AVP aoc_Service_Obligatory_Type optional, + AoC_Service_Type_AVP aoc_Service_Type optional + } // End of type AoC_Service_AVP + + /** + * @desc The AoC-Service-Obligatory-Type AVP (AVP code 2312) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the information if the AoC information is binding or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.18 AoC-Service-Obligatory-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_Obligatory_Type_AVP { + AVP_Header aVP_Header,// + AoC_Service_Obligatory_Type aVP_Data + } // End of type AoC_Service_Obligatory_Type_AVP + + /** + * @desc The AoC-Service-Type AVP (AVP code 2313) + * @member aVP_Header Header AVP + * @member aVP_Data Defines the type of AoC information to be provided to the subscriber + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.19 AoC-Service-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Service_Type_AVP { + AVP_Header aVP_Header,// + AoC_Service_Type aVP_Data + } // End of type AoC_Service_Type_AVP + + /** + * @desc The AoC-Subscription-Information AVP (AVP code 2314) + * @member aVP_Header Header AVP + * @member aoc_Service TODO + * @member aoc_Format TODO + * @member preferred_AoC_Currency TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.20 AoC-Subscription-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AoC_Subscription_Information_AVP { + AVP_Header aVP_Header,// + set of AoC_Service_AVP aoc_Service optional, + AoC_Format_AVP aoc_Format optional, + Preferred_AoC_Currency_AVP preferred_AoC_Currency optional + } // End of type AoC_Subscription_Information_AVP + + /** + * @desc The Preferred-AoC-Currency AVP (AVP code 2315) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the preferred currency code that the AoC function would like to get the AoC information + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.153 Preferred-AoC-Currency AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Preferred_AoC_Currency_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Preferred_AoC_Currency_AVP + + /** + * @desc The Initial-IMS-Charging-Identifier AVP (AVP code 2321) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the Initial IMS Charging Identifier (ICID) as generated by a IMS node for the initial SIP session created for IMS service continuity + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.79A Initial-IMS-Charging-Identifier AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Initial_IMS_Charging_Identifier_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Initial_IMS_Charging_Identifier_AVP + + /** + * @desc The Initial-IMS-Charging-Identifier AVP (AVP code 2322) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates the IMS session is an IMS emergency session or IMS registration + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.76A IMS-Emergency-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IMS_Emergency_Indicator_AVP { + AVP_Header aVP_Header,// + IMS_Emergency_Indicator aVP_Data + } // End of type IMS_Emergency_Indicator_AVP + + /** + * @desc The Outgoing-Session-Id AVP (AVP code 2330) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the SIP Call ID of the outgoing leg, as defined in RFC 3261 + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.128A Outgoing-Session-Id AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Outgoing_Session_Id_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Outgoing_Session_Id_AVP + + /** + * @desc The Low-Priority-Indicator AVP (AVP code 2602) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the PDN connection has a low aVP_Data, i.e. for Machine Type Communications + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.97A Low-Priority-Indicator AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Low_Priority_Indicator_AVP { + AVP_Header aVP_Header,// + Low_Priority_Indicator aVP_Data + } // End of type Low_Priority_Indicator_AVP + + /** + * @desc The Local-GW-Inserted-Indication AVP (AVP code 2603) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates whether the IP realm used for the SDP media component is the Default IP realm or not + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.80A IP-Realm-Default-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record IP_Realm_Default_Indication_AVP { + AVP_Header aVP_Header,// + IP_Realm_Default_Indication aVP_Data + } // End of type IP_Realm_Default_Indication_AVP + + /** + * @desc The Local-GW-Inserted-Indication AVP (AVP code 2604) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the local GW (TrGW, IMS-AGW) is inserted or not for the SDP media component + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.92A Local-GW-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Local_GW_Inserted_Indication_AVP { + AVP_Header aVP_Header,// + Local_GW_Inserted_Indication aVP_Data + } // End of type Local_GW_Inserted_Indication_AVP + + /** + * @desc The Transcoder-Inserted-Indication AVP (AVP code 2605) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if a transcoder is inserted or not for the SDP media component + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.233A Transcoder-Inserted-Indication AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Transcoder_Inserted_Indication_AVP { + AVP_Header aVP_Header,// + Transcoder_Inserted_Indication aVP_Data + } // End of type Transcoder_Inserted_Indication_AVP + + /** + * @desc The PDP-Address-Prefix-Length AVP (AVP code 2606) + * @member aVP_Header Header AVP + * @member aVP_Data The aVP_Data length of an IPv6 typed PDP-Address AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.137a PDP-Address-Prefix-Length AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record PDP_Address_Prefix_Length_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type PDP_Address_Prefix_Length_AVP + + type record User_CSG_Information_AVP{ + //Ref: ETSI TS 132 299 User_CSG_Information_AVP + AVP_Header aVP_Header, // + CSG_Id_AVP cSG_Id, + CSG_Access_Mode_AVP cSG_Access_Mode, + CSG_Membership_Indication_AVP CSG_Membership_Indication_AVP optional + } + + type record CSG_Id_AVP{ + //Ref: ETSI TS 132 299 & TS129 272 CSG_Id_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + + type record CSG_Access_Mode_AVP{ + //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP + AVP_Header aVP_Header, // + CSG_Access_Mode aVP_Data + } + + type record CSG_Membership_Indication_AVP{ + //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + AVP_Header aVP_Header, // + CSG_Membership_Indication aVP_Data + } + + } // End of group TS132_299Rf_Ro_AVPS + + } // End of group Avp_Rf_Ro_Types + + } // End of group AVPTypes + +} // End of module LibDiameter_Types_RfRo_AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn index 78b965d..464bec1 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn @@ -28,9 +28,9 @@ module LibDiameter_Types_Rx_AVPs { PS_TO_CS_HANDOVER_E (3), SPONSORED_DATA_CONNECTIVITY_DISALLOWED_E (4) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Flow_Status_Type{ // Ref: ETSI TS 129 214 5.3.11 @@ -40,9 +40,9 @@ module LibDiameter_Types_Rx_AVPs { DISABLED_E (3), REMOVED_E (4) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Flow_Usage_Type{ // Ref: ETSI TS 129 214 5.3.12 @@ -50,9 +50,9 @@ module LibDiameter_Types_Rx_AVPs { RTCP_E (1), AF_SIGNALLING_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated IMS_Content_Type{ @@ -60,9 +60,9 @@ module LibDiameter_Types_Rx_AVPs { NO_CONTENT_DETAIL_E (0), CAT_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Specific_Action_Type{ // Ref: ETSI TS 129 214 5.3.13 @@ -80,9 +80,9 @@ module LibDiameter_Types_Rx_AVPs { USAGE_REPORT_E (11), ACCESS_NETWORK_INFO_REPORT_E (12) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Media_Type_Type{ // Ref: ETSI TS 129 214 5.3.19 @@ -95,9 +95,9 @@ module LibDiameter_Types_Rx_AVPs { MESSAGE_E (6), OTHER_E (7) // OTHER is defined as c_uInt32Max = 0xFFFFFFFF } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Rx_Request_Type{ // Ref: ETSI TS 129 214 5.3.31 @@ -105,36 +105,36 @@ module LibDiameter_Types_Rx_AVPs { UPDATE_REQUEST_E (1), PCSCF_RESTORATION_E (2) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Service_Info_Type{ // Ref: ETSI TS 129 214 5.3.25 FINAL_SERVICE_INFORMATION_E (0), PRELIMINARY_SERVICE_INFORMATION_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated SIP_Forking_Indication_Type{ // Ref: ETSI TS 129 214 5.3.22 SINGLE_DIALOGUE_E (0), SEVERAL_DIALOGUES_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated AF_Signalling_Protocol_Type{ // Ref: ETSI TS 129 214 5.3.26 NO_INFORMATION_E (0), SIP_E (1) } - with { - variant "length=32" - } +// with { +// variant "length=32" +// } type enumerated Reservation_Priority_Type{ // Ref: ETSI TS 183 017 7.3.9 @@ -154,9 +154,6 @@ module LibDiameter_Types_Rx_AVPs { PRIORITY_FOURTEEN_E (14), PRIORITY_FIFTEEN_E (15) } - with { - variant "length=32" - } }//end group AVP_Rx_Types @@ -169,20 +166,20 @@ module LibDiameter_Types_Rx_AVPs { AVP_Header aVP_Header,// Abort_Cause_Type aVP_Data } - with { - variant "present=bytes(4, 500);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 500);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Access_Network_Charging_Address_AVP{ //Ref: ETSI TS 129 214 Access_Network_Charging_Address AVP AVP_Header aVP_Header,// Address aVP_Data } - with { - variant "present=bytes(4, 501);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 501);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Access_Network_Charging_Identifier_AVP{ //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier AVP @@ -190,20 +187,20 @@ module LibDiameter_Types_Rx_AVPs { Access_Network_Charging_Identifier_Value_AVP acc_Net_Charging_Id_Val, set of Flows_AVP flows } - with { - variant "present=bytes(4, 502);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (flows) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 502);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flows) "condition=CodecHelper.leaveScope()" +// } type record Access_Network_Charging_Identifier_Value_AVP{ //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Acceptable_Service_Info_AVP{ //Ref: ETSI TS 129 214 Acceptable_Service_Info_AVP @@ -213,81 +210,81 @@ module LibDiameter_Types_Rx_AVPs { Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (media_component_description) "fieldPresent=bytes(4, 511)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } + // with { +// variant "present=bytes(4, 411);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (media_component_description) "fieldPresent=bytes(4, 511)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record AF_Application_Identifier_AVP{ //Ref: ETSI TS 129 214 AF_Application_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 504);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 504);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record AF_Charging_Identifier_AVP{ //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record AF_Requested_Data_AVP{ //Ref: ETSI TS 129 214 AF_Requested_Data AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 551);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 551);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Application_Service_Provider_Identity_AVP{ //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Codec_Data_AVP{ //Ref: ETSI TS 129 214 Codec_data AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 524);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 524);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope();condition=CodecHelper.leaveScope()" +// } type record Flow_Description_AVP{ //Ref: ETSI TS 129 214 Flow_Description AVP AVP_Header aVP_Header,// IPFilterRule_Type aVP_Data } - with { - variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Flow_Number_AVP{ //Ref: ETSI TS 129 214 Flow_Number AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Flows_AVP{ //Ref: ETSI TS 129 214 Flows_AVP @@ -296,136 +293,136 @@ module LibDiameter_Types_Rx_AVPs { set of Flow_Number_AVP flow_Number optional, Final_Unit_Action_AVP final_unit_action optional } - with { - variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" - variant (final_unit_action) "condition=CodecHelper.leaveScope()" - } + // with { +// variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" +// variant (final_unit_action) "condition=CodecHelper.leaveScope()" +// } type record Flow_Status_AVP{ //Ref: ETSI TS 129 214 Flow_Status AVP AVP_Header aVP_Header,// Flow_Status_Type aVP_Data } - with { - variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Flow_Usage_AVP{ //Ref: ETSI TS 129 214 Flow_Usage AVP AVP_Header aVP_Header,// Flow_Usage_Type aVP_Data } - with { - variant "present=bytes(4, 512);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 512);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record GCS_Identifier_AVP{ //Ref: ETSI TS 129 214 GCS_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 538);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 538);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record IMS_Content_Identifier_AVP{ //Ref: ETSI TS 129 214 IMS_Content_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 563);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 563);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record IMS_Content_Type_AVP{ //Ref: ETSI TS 129 214 IMS_Content_Type AVP AVP_Header aVP_Header,// IMS_Content_Type aVP_Data } - with { - variant "present=bytes(4, 564);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 564);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record IP_Domain_AVP{ //Ref: ETSI TS 129 214 IP_Domain AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 525);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 525);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Specific_Action_AVP{ //Ref: ETSI TS 129 214 Specific_Action AVP AVP_Header aVP_Header,// Specific_Action_Type aVP_Data } - with { - variant "present=bytes(4, 513);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 513);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type set of Specific_Action_AVP Setof_Specific_Action_AVP - with { - variant "present=bytes(4, 513)" - } +// with { +// variant "present=bytes(4, 513)" +// } type record Max_Requested_Bandwidth_DL_AVP{ //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record MCPTT_Identifier_AVP{ //Ref: ETSI TS 129 214 MCPTT_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 547);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 547);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record MCVideo_Identifier_AVP{ //Ref: ETSI TS 129 214 MCVideo_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 562);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 562);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Max_Requested_Bandwidth_UL_AVP{ //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Media_Component_Description_AVP{ //Ref: ETSI TS 129 214 Media_Component_Decription_AVP @@ -442,21 +439,21 @@ module LibDiameter_Types_Rx_AVPs { RR_Bandwidth_AVP rr_Bw optional, set of Codec_Data_AVP codec_data optional } - with { - variant "present=bytes(4, 517);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (media_Sub_component) "fieldPresent=bytes(4, 519)&&CodecHelper.isAvailable()" - variant (codec_data) "fieldPresent=bytes(4, 524)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 517);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (media_Sub_component) "fieldPresent=bytes(4, 519)&&CodecHelper.isAvailable()" +// variant (codec_data) "fieldPresent=bytes(4, 524)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Media_Component_Number_AVP{ //Ref: ETSI TS 129 214 Media_Component_Number_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Media_Sub_Component_AVP{ //Ref: ETSI TS 129 214 Media_Sub_Component_AVP AVP_Header aVP_Header,// @@ -469,119 +466,119 @@ module LibDiameter_Types_Rx_AVPs { AF_Signalling_Protocol_AVP af_Signalling_Protocol optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 519);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (flow_Description) "fieldPresent=bytes(4, 507)&&CodecHelper.isAvailable()" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 519);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Description) "fieldPresent=bytes(4, 507)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record Media_Type_AVP{ //Ref: ETSI TS 129 214 Media_Type AVP AVP_Header aVP_Header,// Media_Type_Type aVP_Data } - with { - variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 520);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record MPS_Identifier_AVP{ //Ref: ETSI TS 129 214 MPS_Identifier AVP AVP_Header aVP_Header,// octetstring aVP_Data } - with { - variant "present=bytes(4, 528);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 528);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } type record Pre_emption_Control_Info_AVP{ //Ref: ETSI TS 129 214 Pre_emption_Control_Info AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 553);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 553);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Retry_Interval_AVP{ //Ref: ETSI TS 129 214 Retry_Interval AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 541);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 541);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Rx_Request_Type_AVP{ //Ref: ETSI TS 129 214 Rx_Request_Type AVP AVP_Header aVP_Header,// Rx_Request_Type aVP_Data } - with { - variant "present=bytes(4, 533);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 533);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record RR_Bandwidth_AVP{ //Ref: ETSI TS 129 214 RR Bandwidth_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 521);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 521);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record RS_Bandwidth_AVP{ //Ref: ETSI TS 129 214 RS Bandwidth_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 522);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 522);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Service_Info_Status_AVP{ //Ref: ETSI TS 129 214 Service_Info AVP AVP_Header aVP_Header,// Service_Info_Type aVP_Data } - with { - variant "present=bytes(4, 527);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 527);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Service_Authorization_Info_AVP { //Ref: ETSI TS 129 214 RS Bandwidth_AVP AVP_Header aVP_Header,// UInt32 aVP_Data } - with { - variant "present=bytes(4, 548);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 548);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record SIP_Forking_Indication_AVP{ //Ref: ETSI TS 129 214 SIP_Forking_Indication AVP AVP_Header aVP_Header,// SIP_Forking_Indication_Type aVP_Data } - with { - variant "present=bytes(4, 523);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 523);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Sponsor_Identity_AVP{ //Ref: ETSI TS 129 214 Sponsor_Identity AVP AVP_Header aVP_Header,// UTF8String aVP_Data } - with { - variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Sponsored_Connectivity_Data_AVP{ //Ref: ETSI TS 129 214 Sponsored_Connectivity_Data AVP @@ -592,30 +589,30 @@ module LibDiameter_Types_Rx_AVPs { Used_Service_Unit_AVP used_service_unit optional, set of AVP_Type aVP_Type optional } - with { - variant "present=bytes(4, 530);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 530);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } type record AF_Signalling_Protocol_AVP{ //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP AVP_Header aVP_Header,// AF_Signalling_Protocol_Type aVP_Data } - with { - variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } type record Reservation_Priority_AVP{ //Ref: ETSI TS 183 017 Reservation_Priority AVP AVP_Header aVP_Header,// Reservation_Priority_Type aVP_Data } - with { - variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" - variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } +// with { +// variant "present=bytes(4, 458);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } }//end of group TS129_214Rx_AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 deleted file mode 100644 index f0e3d3d..0000000 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 +++ /dev/null @@ -1,1160 +0,0 @@ -/** - * @author STF 466 - * @version $Id$ - * @desc This module defines Diameter S6a AVP types used by LibDiameter constructs.
      - * Note that any changes made to the definitions in this module - * may be overwritten by future releases of this library - * End users are encouraged to contact the distributers of this - * module regarding their modifications or additions - * @remark Adding of new S6a AVP types is ok; - */ -module LibDiameter_Types_S6a_AVPs { - - // LibCommon - import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibCommon_DataStrings all; - - // LibDiameter - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_TypesAndValues all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; - - group AVPs { - - group TS129_272_AVPs { - type record Terminal_Information_AVP { //ref: 7.3.3 - AVP_Header aVP_Header, //Terminal Information ::= - IMEI_AVP imei optional, - ThreeGPP2_MEID_AVP meid optional, - Sofware_Version_AVP sofware_Version optional, - set of AVP_Type aVP_Type optional - } - - type UTF8String IMEI length (14..15); - type record IMEI_AVP { //ref: 7.3.4 - AVP_Header aVP_Header, //IMEI ::= - IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). - //It may also include a 15th digit - } - - type UTF8String SVN length (2); - type record Sofware_Version_AVP { //ref: 7.3.5 - AVP_Header aVP_Header, //Software-Version ::= - SVN aVP_Data //2-digit Software Version Number (SVN) - } - - type octetstring ThreeGPP2_MEID length (8); - type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 - AVP_Header aVP_Header, //3GPP2-MEID ::= - ThreeGPP2_MEID aVP_Data - } - - type record ULR_Flags_AVP { //ref: 7.3.7 - AVP_Header aVP_Header, //ULR-Flags ::= - UInt32 aVP_Data - } - - type record ULA_Flags_AVP { //ref: 7.3.8 - AVP_Header aVP_Header, //ULA-Flags ::= - UInt32 aVP_Data - } - - type record Visited_PLMN_Id_AVP { //ref: 7.3.9 - AVP_Header aVP_Header, //Visited-PLMN-Id ::= - Oct3 aVP_Data - } - - type enumerated UE_SRVCC_Capability_Type { - UE_SRVCC_NOT_SUPPORTED_E (0), - UE_SRVCC_SUPPORTED_E (1) - } - - type record UE_SRVCC_Capability_AVP { //ref: 7.3.130 - AVP_Header aVP_Header, //UE-SRVCC-Capability ::= - UE_SRVCC_Capability_Type aVP_Data - } - - type record SGSN_Number_AVP { //ref: 7.3.102 - AVP_Header aVP_Header, //SGSN-Number ::= - octetstring aVP_Data - } - - type enumerated Homogeneous_Support_Type { - NOT_SUPPORTED_E (0), - SUPPORTED_E (1) - } - - type record Homogeneous_Support_AVP { //ref: 7.3.107 - AVP_Header aVP_Header, //Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ::= - Homogeneous_Support_Type aVP_Data - } - - type record GMLC_Address_AVP { //ref: 7.3.109 - TS 129 173 6.4.7 - AVP_Header aVP_Header, //GMLC-Address ::= - Address aVP_Data - } - - type record Context_Identifier_AVP { //ref: 7.3.27 - AVP_Header aVP_Header, //Context-Identifier ::= - UInt32 aVP_Data - } - - type record Service_Selection_AVP { //ref: 7.3.36 - IETF RFC 5778 6.2 - AVP_Header aVP_Header, //Service-Selection ::= - UTF8String aVP_Data - } - - type record MIP_Home_Agent_Address_AVP { //ref: 7.3.42 - IETF RFC 4004 7.4 - AVP_Header aVP_Header, //MIP-Home-Agent-Address ::= - Address aVP_Data - } - - type record MIP_Home_Agent_Host_AVP { //ref: 7.3.43 - IETF RFC 4004 7.11 - AVP_Header aVP_Header, //MIP-Home-Agent-Host ::= - Destination_Realm_AVP destination_Realm, - Destination_Host_AVP destination_Host, - set of AVP_Type aVP_Type optional - } - - type record MIP6_Home_Link_Prefix_AVP { //ref:IETF RFC 5447 4.2.4 - AVP_Header aVP_Header, //MIP6-Home-Link-Prefix ::= - octetstring aVP_Data - } - - type record MIP6_Agent_Info_AVP { //ref: 7.3.45 - AVP_Header aVP_Header, //MIP6-Agent-Info ::= < AVP Header: 486 > - MIP_Home_Agent_Address_AVP mip_Home_Agent_Address1 optional, - MIP_Home_Agent_Address_AVP mip_Home_Agent_Address2 optional, - MIP_Home_Agent_Host_AVP mip_Home_Agent_Host optional, - MIP6_Home_Link_Prefix_AVP mip6_Home_Link_Prefix optional, - set of AVP_Type aVP_Type optional - } - - type record Specific_APN_Info_AVP { //ref: 7.3.82 - AVP_Header aVP_Header, //Specific-APN-Info ::= - Service_Selection_AVP service_Selection, - MIP6_Agent_Info_AVP mip6_Agent_Info, - Visited_Network_Identifier_AVP visited_Network_Identifier optional, - set of AVP_Type aVP_Type optional - } - - type record Active_APN_AVP { //ref: 7.3.127 - AVP_Header aVP_Header, //Active-APN ::= - Context_Identifier_AVP context_Identifier, - Service_Selection_AVP service_Selection optional, - MIP6_Agent_Info_AVP mip6_Agent_Info optional, - Visited_Network_Identifier_AVP visited_Network_Identifier optional, - Specific_APN_Info_AVP specific_APN_Info optional, - set of AVP_Type aVP_Type optional - } - - type enumerated Error_Diagnostic_Code_Type { - GPRS_DATA_SUBSCRIBED_E (0), - NO_GPRS_DATA_SUBSCRIBED_E (1), - ODB_ALL_APN_E (2), - ODB_HPLMN_APN_E (3), - ODB_VPLMN_APN_E (4) - } - - type record Error_Diagnostic_AVP { //ref: 7.3.128 - AVP_Header aVP_Header, //Error-Diagnostic ::= - Error_Diagnostic_Code_Type error_Diagnostic_Code - } - - type enumerated Subscriber_Status_Code { - SERVICE_GRANTED_E (0), - OPERATOR_DETERMINED_BARRING_E (1) - } - - type record Subscriber_Status_AVP { //ref: 7.3.29 - AVP_Header aVP_Header, //Subscriber-Status ::= - Subscriber_Status_Code subscriber_Status_Code - } - - type record STN_SR_AVP { //ref: 7.3.39 - AVP_Header aVP_Header, //STN-SR ::= - octetstring sTN_SR - } - - type enumerated ICS_Indicator_Code { - FALSE_E (0), - TRUE_E (1) - } - - type record ICS_Indicator_AVP { //ref: 7.3.104 - AVP_Header aVP_Header, //ICS-Indicator ::= - ICS_Indicator_Code iCS_Indicator_Code - } - - type enumerated Network_Access_Mode_Code { - PACKET_AND_CIRCUIT_E (0), - Reserved_E (1), - ONLY_PACKET_E (2) - } - - type record Network_Access_Mode_AVP { //ref: 7.3.21 - AVP_Header aVP_Header, //Network-Access-Mode ::= - Network_Access_Mode_Code network_Access_Mode - } - - type record Operator_Determined_Barring_AVP { //ref: 7.3.30 - AVP_Header aVP_Header, //Operator-Determined-Barring ::= - UInt32 aVP_Data - } - - type record HPLMN_ODB_AVP { //ref: 7.3.22 - AVP_Header aVP_Header, //HPLMN-ODB ::= - UInt32 aVP_Data - } - - type record Regional_Subscription_Zone_Code_AVP { //ref: 7.3.52 - AVP_Header aVP_Header, //Regional-Subscription-Zone-Code ::= - octetstring aVP_Data - } - - type record Access_Restriction_Data_AVP { //ref: 7.3.31 - AVP_Header aVP_Header, //Access-Restriction-Data ::= - UInt32 aVP_Data - } - - type record APN_OI_Replacement_AVP { //ref: 7.3.32 - AVP_Header aVP_Header, //APN-OI-Replacement ::= - UTF8String aVP_Data - } - - type record GMLC_Number_AVP { //ref: 7.3.85 - AVP_Header aVP_Header, //GMLC-Number ::= - octetstring aVP_Data - } - - type record SS_Code_AVP { //ref: 7.3.87 - AVP_Header aVP_Header, //SS-Code ::= - octetstring aVP_Data - } - - type record SS_Status_AVP { //ref: 7.3.88 - AVP_Header aVP_Header, //SS-Status ::= - octetstring aVP_Data - } - - type enumerated Notification_To_UE_User_Code { - NOTIFY_LOCATION_ALLOWED_E (0), - NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE_E (1), - NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE_E (2), - LOCATION_NOT_ALLOWED_E (3) - } - - type record Notification_To_UE_User_AVP { //ref: 7.3.89 - AVP_Header aVP_Header, //Notification-To-UE-User ::= - Notification_To_UE_User_Code notification_To_UE_User_Code - } - - type record External_Client_AVP { //ref: 7.3.90 - AVP_Header aVP_Header, //External-Client ::= > - Client_Identity_AVP client_Identity, - GMLC_Restriction_AVP gMLC_Restriction optional, - Notification_To_UE_User_AVP notification_To_UE_User optional, - set of AVP_Type aVP_Type optional - } - - type record Client_Identity_AVP { //ref: 7.3.91 - AVP_Header aVP_Header, //Client-Identity ::= - octetstring aVP_Data - } - - type enumerated GMLC_Restriction_Code { - GMLC_LIST_E (0), - HOME_COUNTRY_E (1) - } - - type record GMLC_Restriction_AVP { //ref: 7.3.92 - AVP_Header aVP_Header, //GMLC-Restriction ::= - GMLC_Restriction_Code gMLC_Restriction_Code - } - - type enumerated PLMN_Client_Code { - GMLC_LIST_E (0), - HOME_COUNTRY_E (1) - } - - type record PLMN_Client_AVP { //ref: 7.3.93 - AVP_Header aVP_Header, //PLMN-Client ::= - PLMN_Client_Code pLMN_Client_Code - } - - type record ServiceTypeIdentity_AVP { //ref: 7.3.95 - AVP_Header aVP_Header, //ServiceTypeIdentity ::= - UInt32 aVP_Data - } - - type record Service_Type_AVP { //ref: 7.3.94 - AVP_Header aVP_Header, //Service-Type ::= - ServiceTypeIdentity_AVP serviceTypeIdentity, - GMLC_Restriction_AVP gMLC_Restriction optional, - Notification_To_UE_User_AVP notification_To_UE_User optional, - set of AVP_Type aVP_Type optional - } - - type record LCS_PrivacyException_AVP { //ref: 7.3.86 - AVP_Header aVP_Header, //LCS-PrivacyException ::= - SS_Code_AVP sS_Code optional, - SS_Status_AVP sS_Status optional, - Notification_To_UE_User_AVP notification_To_UE_User optional, - set of External_Client_AVP external_Client optional, - set of PLMN_Client_AVP pLMN_Client optional, - set of Service_Type_AVP service_Type optional, - set of AVP_Type aVP_Type optional - } - - type record MO_LR_AVP { //ref: 7.3.96 - AVP_Header aVP_Header, //MO-LR ::= - SS_Code_AVP sS_Code optional, - SS_Status_AVP sS_Status optional, - set of AVP_Type aVP_Type optional - } - - type record LCS_Info_AVP { //ref: 7.3.32 - AVP_Header aVP_Header, //LCS-Info ::= - set of GMLC_Number_AVP gMLC_Number optional, - set of LCS_PrivacyException_AVP lCS_PrivacyException optional, - set of MO_LR_AVP mO_LR optional, - set of AVP_Type aVP_Type optional - } - - type record TS_Code_AVP { //ref: 7.3.100 - AVP_Header aVP_Header, //TS-Code ::= - octetstring aVP_Data - } - - type record Teleservice_List_AVP { //ref: 7.3.99 - AVP_Header aVP_Header, //Teleservice-List ::= - set length (1..infinity) of TS_Code_AVP tS_Code, - set of AVP_Type aVP_Type optional - } - - type record Call_Barring_Info_AVP { //ref: 7.3.101 - AVP_Header aVP_Header, //Call-Barring-Info ::= - SS_Code_AVP sS_Code, - SS_Status_AVP sS_Status, - set of AVP_Type aVP_Type optional - } - - type record AMBR_AVP { //ref: 7.3.41 - AVP_Header aVP_Header, //AMBR ::= - Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul,//max_Requested_Bandwidth_UL,//max_Requested_Bw_Ul - Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl,//max_Requested_Bandwidth_DL,//max_Requested_Bw_Dl - set of AVP_Type aVP_Type optional - } - - type record ThreeGPP_Charging_Char_AVP { //ref: TS 129 601 - AVP_Header aVP_Header, //3GPP-Charging-Characteristics ::= - octetstring aVP_Data - } - - type enumerated All_APN_Conf_Included_Id_Code { - All_APN_CONFIGURATIONS_INCLUDED_E (0), - MODIFIED_ADDED_APN_CONFIGURATIONS_INCLUDED_E (1) - } - - type record All_APN_Conf_Included_Id_AVP { //ref: 7.3.33 - AVP_Header aVP_Header, //All-APN-Configurations-Included-Indicator ::= - All_APN_Conf_Included_Id_Code all_APN_Conf_Included_Indicator - } - - type record APN_Configuration_Profile_AVP { //ref: 7.3.34 - AVP_Header aVP_Header, //APN-Configuration-Profile ::= - Context_Identifier_AVP context_Identifier, - All_APN_Conf_Included_Id_AVP all_APN_Conf_Included_Id, - set length (1 .. infinity) of APN_Configuration_AVP aPN_Configuration, - set of AVP_Type aVP_Type optional - } - - type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 - AVP_Header aVP_Header, //Served-Party-IP-Address ::= - Address aVP_Data - } - - type enumerated PDN_Type_Code { - IPv4_E (0), - IPv6_E (1), - IPv4v6_E (2), - IPv4_OR_IPv6_E (3) - } - - type record PDN_Type_AVP { //ref: 7.3.62 - AVP_Header aVP_Header, //PDN-Type ::= - PDN_Type_Code pDN_Type_Code - } - - type record EPS_Subscribed_QoS_Profile_AVP { //ref: 7.3.37 - AVP_Header aVP_Header, //EPS-Subscribed-QoS-Profile ::= - QoS_Class_Identifier_AVP qoS_Class_Identifier, - Allocation_Retention_Priority_AVP allocation_Retention_Priority, - set of AVP_Type aVP_Type optional - } - - type enumerated VPLMN_Dynamic_Address_Allowed_Code { - NOTALLOWED_E (0), - ALLOWED_E (1) - } - - type record VPLMN_Dynamic_Address_Allowed_AVP { //ref: 7.3.38 - AVP_Header aVP_Header, //VPLMN-Dynamic-Address-Allowed ::= - VPLMN_Dynamic_Address_Allowed_Code vPLMN_Dynamic_Address_Allowed - } - - type enumerated PDN_GW_Allocation_Type_Code { - STATIC_E (0), - DYNAMIC_E (1) - } - - type record PDN_GW_Allocation_Type_AVP { //ref: 7.3.44 - AVP_Header aVP_Header, //PDN-GW-Allocation-Type ::= - PDN_GW_Allocation_Type_Code pDN_GW_Allocation_Type - } - - type enumerated SIPTO_Permission_Code { - SIPTO_ALLOWED_E (0), - SIPTO_NOTALLOWED_E (1) - } - - type record SIPTO_Permission_AVP { //ref: 7.3.135 - AVP_Header aVP_Header, //SIPTO-Permission ::= - SIPTO_Permission_Code sIPTO_Permission - } - - type enumerated LIPA_Permission_Code { - LIPA_PROHIBITED_E (0), - LIPA_ONLY_E (1), - LIPA_CONDITIONAL_E (2) - } - - type record LIPA_Permission_AVP { //ref: 7.3.133 - AVP_Header aVP_Header, //LIPA-Permission ::= - LIPA_Permission_Code lIPA_Permission - } - - type record APN_Configuration_AVP { //ref: 7.3.35 - AVP_Header aVP_Header, //APN-Configuration ::= - Context_Identifier_AVP context_Identifier, - set length (2) of Served_Party_IP_Address_AVP served_Party optional, - PDN_Type_AVP pDN_Type, - Service_Selection_AVP service_Selection, - EPS_Subscribed_QoS_Profile_AVP ePS_Subscribed_QoS_Profile optional, - VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, - MIP6_Agent_Info_AVP mIP6_Agent_Info optional, - Visited_Network_Identifier_AVP visited_Network_Identifier optional, - PDN_GW_Allocation_Type_AVP pDN_GW_Allocation_Type optional, - ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, - AMBR_AVP aMBR optional, - set of Specific_APN_Info_AVP specific_APN_Info optional, - APN_OI_Replacement_AVP aPN_OI_Replacement optional, - SIPTO_Permission_AVP sIPTO_Permission optional, - LIPA_Permission_AVP lIPA_Permission optional, - set of AVP_Type aVP_Type optional - } - - type record RAT_Freq_Sel_Priority_ID_AVP { //ref: 7.3.46 - AVP_Header aVP_Header, //PRAT-Frequency-Selection-Priority-ID ::= - UInt32 aVP_Data - } - - type enumerated Trace_Depth_Code { - MINIMUM_E (0), - MEDIUM_E (1), - MAXIMUM_E (2), - MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), - MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), - MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) - } - - type record Trace_Depth_AVP { //ref: 7.3.67 - AVP_Header aVP_Header, //Trace-Depth ::= - Trace_Depth_Code trace_Depth - } - - type record Trace_NE_Type_List_AVP { //ref: 7.3.68 - AVP_Header aVP_Header, //Trace-NE-Type-List ::= - octetstring aVP_Data - } - - type record Trace_Interface_List_AVP { //ref: 7.3.69 - AVP_Header aVP_Header, //Trace-Interface-List ::= - octetstring aVP_Data - } - - type record Trace_Event_List_AVP { //ref: 7.3.70 - AVP_Header aVP_Header, //Trace-Event-List ::= - octetstring aVP_Data - } - - type record OMC_Id_AVP { //ref: 7.3.71 - AVP_Header aVP_Header, //OMC-Id ::= - octetstring aVP_Data - } - - type record Trace_Collection_Entity_AVP { //ref: 7.3.98 - AVP_Header aVP_Header, //Trace-Collection-Entitys ::= - Address aVP_Data - } - - type enumerated Job_Type_Code { - IMMEDIATE_MDT_ONLY_E (0), - LOGGED_MDT_ONLY_E (1), - TRACE_ONLY_E (2), - IMMEDIATE_MDT_AND_TRACE_E (3), - RLF_REPORTS_ONLY_E (4), - RCEF_REPORTS_ONLY_E (5) - } - - type record Job_Type_AVP { //ref: 7.3.137 - TS 132 422 5.9a - AVP_Header aVP_Header, //Job-Type ::= - Job_Type_Code job_Type - } - - type record Cell_Global_Identity_AVP { //ref: 7.3.119 - AVP_Header aVP_Header, //Cell-Global-Identity ::= - octetstring aVP_Data - } - - type record E_UTRAN_Cell_Gl_Identity_AVP { //ref: 7.3.117 - AVP_Header aVP_Header, //E-UTRAN-Cell-Global-Identity ::= - octetstring aVP_Data - } - - type record Routing_Area_Identity_AVP { //ref: 7.3.120 - AVP_Header aVP_Header, //Routing-Area-Identity ::= - octetstring aVP_Data - } - - type record Location_Area_Identity_AVP { //ref: 7.3.121 - AVP_Header aVP_Header, //Location-Area-Identity ::= - octetstring aVP_Data - } - - type record Tracking_Area_Identity_AVP { //ref: 7.3.118 - AVP_Header aVP_Header, //Tracking-Area-Identity::= - octetstring aVP_Data - } - - type record Area_Scope_AVP { //ref: 7.3.138 - TS 132 422 5.10.2 - AVP_Header aVP_Header, //Area-Scope ::= - set of Cell_Global_Identity_AVP cell_Global_Identity optional, - set of E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Global_Identity optional, - set of Routing_Area_Identity_AVP routing_Area_Identity optional, - set of Location_Area_Identity_AVP location_Area_Identity optional, - set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, - set of AVP_Type aVP_Type optional - } - - type record List_Of_Measurements_AVP { //ref: 7.3.139 - AVP_Header aVP_Header, //List-Of-Measurements ::= - UInt32 aVP_Data - } - - type record Reporting_Trigger_AVP { //ref: 7.3.140 - AVP_Header aVP_Header, //Reporting-Trigger ::= - UInt32 aVP_Data - } - - type enumerated Report_Interval_Code { - T_250ms_E ( 0), - T_500ms_E ( 1), - T_1000ms_E ( 2), - T_2000ms_E ( 3), - T_3000ms_E ( 4), - T_4000ms_E ( 5), - T_6000ms_E ( 6), - T_8000ms_E ( 7), - T_12000ms_E ( 8), - T_16000ms_E ( 9), - T_20000ms_E (10), - T_24000ms_E (11), - T_28000ms_E (12), - T_32000ms_E (13), - T_64000ms_E (14), - T_120ms_E (15), - T_240ms_E (16), - T_480ms_E (17), - T_640ms_E (18), - T_1024ms_E (19), - T_2048ms_E (20), - T_5120ms_E (21), - T_10240ms_E (22), - T_60000ms_E (23), // 1 min - T_360000ms_E (24), // 6 min - T_720000ms_E (25), // 12 min - T_1800000ms_E (26), // 30 min - T_3600000ms_E (27) // 60 min - } - - type record Report_Interval_AVP { //ref: 7.3.141 - TS 132 422 5.10.5 - AVP_Header aVP_Header, //Report-Interval ::= - Report_Interval_Code report_Interval - } - - type enumerated Report_Amount_Code { - N_1_E (0), - N_2_E (1), - N_4_E (2), - N_8_E (3), - N_16_E (4), - N_32_E (5), - N_64_E (6), - N_INFINITY_E (7) - } - - type record Report_Amount_AVP { //ref: 7.3.142 - TS 132 422 5.10.6 - AVP_Header aVP_Header, //Report-Amount ::= - Report_Amount_Code report_Amount - } - - type record Event_Threshold_RSRP_AVP { //ref: 7.3.143 - TS 132 422 5.10.7 - AVP_Header aVP_Header, //Event-Threshold-RSRP ::= - UInt32 aVP_Data - } - - type record Event_Threshold_RSRQ_AVP { //ref: 7.3.144 - TS 132 422 5.10.7a - AVP_Header aVP_Header, //Event-Threshold-RSRQ ::= - UInt32 aVP_Data - } - - type enumerated Logging_Interval_Code { - T_1dot28_E (0), - T_2dot56_E (1), - T_5dot12_E (2), - T_10dot24_E (3), - T_20dot48_E (4), - T_30dot72_E (5), - T_40dot96_E (6), - T_61dot44_E (7) - } - - type record Logging_Interval_AVP { //ref: 7.3.145 - TS 132 422 5.10.8 - AVP_Header aVP_Header, //Logging-Interval ::= - Logging_Interval_Code logging_Interval - } - - type enumerated Logging_Duration_Code { - T_600sec_E (0), - T_1200sec_E (1), - T_2400sec_E (2), - T_3600sec_E (3), - T_5400sec_E (4), - T_7200sec_E (5) - } - - type record Logging_Duration_AVP { //ref: 7.3.146 - TS 132 422 5.10.9 - AVP_Header aVP_Header, //Logging-Duration ::= - Logging_Duration_Code logging_Duration - } - - type record MDT_Configuration_AVP { //ref: 7.3.136 - AVP_Header aVP_Header, //MDT-Configuration ::= - Job_Type_AVP job_Type, - Area_Scope_AVP area_Scope optional, - List_Of_Measurements_AVP list_Of_Measurements optional, - Reporting_Trigger_AVP reporting_Trigger optional, - Report_Interval_AVP report_Interval optional, - Report_Amount_AVP report_Amount optional, - Event_Threshold_RSRP_AVP event_Threshold_RSRP optional, - Event_Threshold_RSRQ_AVP event_Threshold_RSRQ optional, - Logging_Interval_AVP logging_Interval optional, - Logging_Duration_AVP logging_Duration optional, - set of AVP_Type aVP_Type optional - } - - type record Trace_Data_AVP { //ref: 7.3.63 - AVP_Header aVP_Header, //Trace-Data ::= - Trace_Reference_AVP trace_Reference, - Trace_Depth_AVP trace_Depth, - Trace_NE_Type_List_AVP trace_NE_Type_List, - Trace_Interface_List_AVP trace_Interface_List optional, - Trace_Event_List_AVP trace_Event_List, - OMC_Id_AVP oMC_Id optional, - Trace_Collection_Entity_AVP trace_Collection_Entity, - MDT_Configuration_AVP mDT_Configuration optional, - set of AVP_Type aVP_Type optional - } - - type enumerated Complete_DL_Included_Indicator_Code { - All_PDP_CONTEXTS_INCLUDED_E (0), - MODIFIED_ADDED_PDP_CONTEXTS_INCLUDED_E (1) - } - - type record Complete_DL_Included_Indicator_AVP { //ref: 7.3.73 - AVP_Header aVP_Header, //Complete-Data-List-Included-Indicator ::= - Complete_DL_Included_Indicator_Code complete_DL_Included_Indicator - } - - type record PDP_Type_AVP { //ref: 7.3.75 - AVP_Header aVP_Header, //PDP-Type ::= - octetstring aVP_Data - } - - type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 - AVP_Header aVP_Header, //PDP-Address ::= - Address aVP_Data - } - - type record QoS_Subscribed_AVP { //ref: 7.3.77 - AVP_Header aVP_Header, //QoS-Subscribed ::= - octetstring aVP_Data - } - - type record Ext_PDP_Type_AVP { //ref: 7.3.75A - AVP_Header aVP_Header, //Ext-PDP-Type ::= - octetstring aVP_Data - } - - type record Ext_PDP_Address_AVP { //ref: 7.3.129 - AVP_Header aVP_Header, //Ext-PDP-Address ::= - Address aVP_Data - } - - type record PDP_Context_AVP { //ref: 7.3.74 - AVP_Header aVP_Header, //PDP-Context ::= - Context_Identifier_AVP context_Identifier, - PDP_Type_AVP pDP_Type, - PDP_Address_AVP pDP_Address optional, - QoS_Subscribed_AVP qoS_Subscribed, - VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, - Service_Selection_AVP service_Selection, - ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, - Ext_PDP_Type_AVP ext_PDP_Type optional, - Ext_PDP_Address_AVP ext_PDP_Address optional, - AMBR_AVP aMBR optional, - SIPTO_Permission_AVP sIPTO_Permission optional, - LIPA_Permission_AVP lIPA_Permission optional, - set of AVP_Type aVP_Type optional - } - - type record GPRS_Subscription_Data_AVP { //ref: 7.3.72 - AVP_Header aVP_Header, //GPRS-Subscription-Data ::= - Complete_DL_Included_Indicator_AVP complete_Data_List_Included_Indicator, - set length (1..50) of PDP_Context_AVP pDP_Context, - set of AVP_Type aVP_Type optional - } - -// type record CSG_Id_AVP { //ref: 7.3.79 -// AVP_Header aVP_Header, //CSG-Id ::= -// UInt32 aVP_Data -// } - - type record Expiration_Date_AVP { //ref: 7.3.80 - AVP_Header aVP_Header, //Expiration-Date ::= - Time aVP_Data - } - - type record CSG_Subscription_Data_AVP { //ref: 7.3.78 - AVP_Header aVP_Header, //CSG-Subscription-Data ::= - CSG_Id_AVP cSG_Id, - Expiration_Date_AVP expiration_Date optional, - set of Service_Selection_AVP service_Selection optional, - set of AVP_Type aVP_Type optional - } - - type enumerated Roaming_Rest_Unsupp_Feature_Code { - ROAMING_RESTRICTED_DUE_TO_UNSUPPORTED_FEATURE_E (0) - } - - type record Roaming_Rest_Unsupp_Feature_AVP { //ref: 7.3.81 - AVP_Header aVP_Header, //Roaming-Restricted-Due-To-Unsupported-Feature ::= - Roaming_Rest_Unsupp_Feature_Code roaming_Restricted_Due_To_Unsupported_Feature - } - - type record RAU_TAU_Timer_AVP { //ref: 7.3.134 - AVP_Header aVP_Header, //Subscribed-Periodic-RAU-TAU-Timer ::= - UInt32 aVP_Data - } - - type record MPS_Priority_AVP { //ref: 7.3.131 - AVP_Header aVP_Header, //MPS-Priority ::= - UInt32 aVP_Data - } - - type enumerated VPLMN_LIPA_Allowed_Code { - LIPA_NOTALLOWED_E (0), - LIPA_ALLOWED_E (1) - } - - type record VPLMN_LIPA_Allowed_AVP { //ref: 7.3.132 - AVP_Header aVP_Header, //VPLMN-LIPA-Allowed ::= - VPLMN_LIPA_Allowed_Code vPLMN_LIPA_Allowed - } - - type enumerated Relay_Node_Indicator_Code { - NOT_RELAY_NODE_E (0), - RELAY_NODE_E (1) - } - - type record Relay_Node_Indicator_AVP { //ref: 7.3.147 - AVP_Header aVP_Header, //Relay-Node-Indicator ::= - Relay_Node_Indicator_Code relay_Node_Indicator - } - - type enumerated MDT_User_Consent_Code { - CONSENT_NOT_GIVEN_E (0), - CONSENT_GIVEN_E (1) - } - - type record MDT_User_Consent_AVP { //ref: 7.3.148 - AVP_Header aVP_Header, //MDT-User-Consent ::= - MDT_User_Consent_Code mDT_User_Consent - } - - type record Subscription_Data_AVP { //ref: 7.3.2 - AVP_Header aVP_Header, //Subscription-Data ::= - Subscriber_Status_AVP subscriber_Status optional, - MSISDN_AVP mSISDN optional, - STN_SR_AVP sTN_SR optional, - ICS_Indicator_AVP iCS_Indicator optional, - Network_Access_Mode_AVP network_Access_Mode optional, - Operator_Determined_Barring_AVP operator_Determined_Barring optional, - HPLMN_ODB_AVP hPLMN_ODB optional, - set length (10) of Regional_Subscription_Zone_Code_AVP zone_Code optional, - Access_Restriction_Data_AVP access_Restriction_Data optional, - APN_OI_Replacement_AVP aPN_OI_Replacement optional, - LCS_Info_AVP lCS_Info optional, - Teleservice_List_AVP teleservice_List optional, - set of Call_Barring_Info_AVP call_Barring_Info optional, - ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, - AMBR_AVP aMBR optional, - APN_Configuration_Profile_AVP aPN_Configuration_Profile optional, - RAT_Freq_Sel_Priority_ID_AVP rAT_Freq_Sel_Priority_ID optional, - Trace_Data_AVP trace_Data optional, - GPRS_Subscription_Data_AVP gPRS_Subscription_Data optional, - CSG_Subscription_Data_AVP cSG_Subscription_Data optional, - Roaming_Rest_Unsupp_Feature_AVP roaming_Rest_Unsupp_Feature optional, - RAU_TAU_Timer_AVP subscribed_Perio_RAUTAU_Timer optional, - MPS_Priority_AVP mPS_Priority optional, - VPLMN_LIPA_Allowed_AVP vPLMN_LIPA_Allowed optional, - Relay_Node_Indicator_AVP relay_Node_Indicator optional, - MDT_User_Consent_AVP mDT_User_Consent optional, - set of AVP_Type aVP_Type optional - } - - type record Number_Of_Requested_Vectors_AVP { //ref: 7.3.14 - AVP_Header aVP_Header, //Number-Of-Requested-Vectors ::= - UInt32 aVP_Data - } - - type record Immediate_Response_Preferred_AVP { //ref: 7.3.16 - AVP_Header aVP_Header, //Immediate-Response-Preferred ::= - UInt32 aVP_Data - } - - type record Re_synchronization_Info_AVP { //ref: 7.3.15 - AVP_Header aVP_Header, //Re-synchronization-Info ::= - octetstring aVP_Data - } - - type record Req_EUTRAN_Auth_Info_AVP { //ref: 7.3.11 - AVP_Header aVP_Header, //Requested-EUTRAN-Authentication-Info ::= - Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, - Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, - Re_synchronization_Info_AVP re_synchronization_Info optional, - set of AVP_Type aVP_Type optional - } - - type record Req_UTRAN_GERAN_Auth_Info_AVP { //ref: 7.3.12 - AVP_Header aVP_Header, //Requested-EUTRAN-GERAN-Authentication-Info ::= - Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, - Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, - Re_synchronization_Info_AVP re_synchronization_Info optional, - set of AVP_Type aVP_Type optional - } - - type record Item_Number_AVP { //ref: 7.3.23 - AVP_Header aVP_Header, //Item-Number ::= - UInt32 aVP_Data - } - - type record RAND_AVP { //ref: 7.3.53 - AVP_Header aVP_Header, //RAND ::= - octetstring aVP_Data - } - - type record XRES_AVP { //ref: 7.3.54 - AVP_Header aVP_Header, //XRES ::= - octetstring aVP_Data - } - - type record AUTN_AVP { //ref: 7.3.55 - AVP_Header aVP_Header, //AUTN ::= - octetstring aVP_Data - } - - type record KASME_AVP { //ref: 7.3.56 - AVP_Header aVP_Header, //KASME ::= - octetstring aVP_Data - } - - type record E_UTRAN_Vector_AVP { //ref: 7.3.18 - AVP_Header aVP_Header, //E-UTRAN-Vector ::= - Item_Number_AVP item_Number optional, - RAND_AVP rAND, - XRES_AVP xRES, - AUTN_AVP aUTN, - KASME_AVP kASME, - set of AVP_Type aVP_Type optional - } - - type record Confidentiality_Key_AVP { //ref: 7.3.57 - AVP_Header aVP_Header, //Confidentiality-Key ::= - octetstring aVP_Data - } - - type record Integrity_Key_AVP { //ref: 7.3.58 - AVP_Header aVP_Header, //Integrity-Key ::= - octetstring aVP_Data - } - - type record UTRAN_Vector_AVP { //ref: 7.3.19 - AVP_Header aVP_Header, //UTRAN-Vector ::= - Item_Number_AVP item_Number optional, - RAND_AVP rAND, - XRES_AVP xRES, - AUTN_AVP aUTN, - Confidentiality_Key_AVP confidentiality_Key, - Integrity_Key_AVP integrity_Key, - set of AVP_Type aVP_Type optional - } - - type record SRES_AVP { //ref: 7.3.60 - AVP_Header aVP_Header, //SRES ::= - octetstring aVP_Data - } - - type record Kc_AVP { //ref: 7.3.59 - AVP_Header aVP_Header, //Kc ::= - octetstring aVP_Data - } - - type record GERAN_Vector_AVP { //ref: 7.3.20 - AVP_Header aVP_Header, //GERAN-Vector ::= - Item_Number_AVP item_Number optional, - RAND_AVP rAND, - SRES_AVP sRES, - Kc_AVP kc, - set of AVP_Type aVP_Type optional - } - - type record Authentication_Info_AVP { //ref: 7.3.17 - AVP_Header aVP_Header, //Authentication-Info ::= - set of E_UTRAN_Vector_AVP e_UTRAN_Vector optional, - set of UTRAN_Vector_AVP uTRAN_Vector optional, - set of GERAN_Vector_AVP gERAN_Vector optional, - set of AVP_Type aVP_Type optional - } - - type enumerated Cancellation_Type_Code { - MME_UPDATE_PROCEDURE_E (0), - SGSN_UPDATE_PROCEDURE_E (1), - SUBSCRIPTION_WITHDRAWAL_E (2), - UPDATE_PROCEDURE_IWF_E (3), - INITIAL_ATTACH_PROCEDURE_E (4) - } - - type record Cancellation_Type_AVP { //ref: 7.3.24 - AVP_Header aVP_Header, //Cancellation-Type ::= - Cancellation_Type_Code cancellation_Type - } - - type record CLR_Flags_AVP { //ref: 7.3.152 - AVP_Header aVP_Header, //CLR-Flags ::= - UInt32 aVP_Data - } - - type record IDR_Flags_AVP { //ref: 7.3.103 - AVP_Header aVP_Header, //IDR-Flags ::= - UInt32 aVP_Data - } - - type record DSR_Flags_AVP { //ref: 7.3.25 - AVP_Header aVP_Header, //DSR-Flags ::= - UInt32 aVP_Data - } - - type record DSA_Flags_AVP { //ref: 7.3.26 - AVP_Header aVP_Header, //DSA-Flags ::= - UInt32 aVP_Data - } - - type record PUER_Flags_AVP { //ref: 7.3.149 - AVP_Header aVP_Header, //PUR-Flags ::= - UInt32 aVP_Data - } - - type record PUEA_Flags_AVP { //ref: 7.3.48 - AVP_Header aVP_Header, //PUA-Flags ::= - UInt32 aVP_Data - } - - type record IDA_Flags_AVP { //ref: 7.3.47 - AVP_Header aVP_Header, //IDA-Flags ::= - UInt32 aVP_Data - } - - type record NOR_Flags_AVP { //ref: 7.3.49 - AVP_Header aVP_Header, //NOR-Flags ::= - UInt32 aVP_Data - } - - type enumerated IMS_Voice_PS_Sessions_Support_Code { - NOT_SUPPORTED_E (0), - SUPPORTED_E (1) - } - - type record IMS_Voice_PS_Sessions_Support_AVP { //ref: 7.3.106 - AVP_Header aVP_Header, //IMS-Voice-Over-PS-Sessions-Supported ::= - IMS_Voice_PS_Sessions_Support_Code iMS_Voice_Over_PS_Sessions_Supported - } - - type record Last_UE_Activity_Time_AVP { //ref: 7.3.108 - AVP_Header aVP_Header, //Last-UE-Activity-Time ::= - Time aVP_Data - } - - type record EPS_User_State_AVP { //ref: 7.3.110 - AVP_Header aVP_Header, //EPS-User-State ::= - MME_User_State_AVP mME_User_State optional, - SGSN_User_State_AVP sGSN_User_State optional, - set of AVP_Type aVP_Type optional - } - - type record EPS_Location_Information_AVP { //ref: 7.3.111 - AVP_Header aVP_Header, //EPS-Location-Information ::= - MME_Location_Information_AVP mME_Location_Information optional, - SGSN_Location_Information_AVP sGSN_Location_Information optional, - set of AVP_Type aVP_Type optional - } - - type record Service_Area_Identity_AVP { //ref: 7.3.122 - AVP_Header aVP_Header, //Service-Area-Identity ::= - octetstring aVP_Data - } - - type record Geographical_Information_AVP { //ref: 7.3.123 - AVP_Header aVP_Header, //Geographical-Information ::= - octetstring aVP_Data - } - - type record Geodetic_Information_AVP { //ref: 7.3.124 - AVP_Header aVP_Header, //Geodetic-Information ::= - octetstring aVP_Data - } - - type enumerated Current_Location_Retrieved_Code { - ACTIVE_LOCATION_RETRIEVAL_E (0) - } - - type record Current_Location_Retrieved_AVP { //ref: 7.3.125 - AVP_Header aVP_Header, //Current-Location-Retrieved ::= - Current_Location_Retrieved_Code current_Location_Retrieved - } - - type record Age_Of_Location_Informations_AVP { //ref: 7.3.126 - AVP_Header aVP_Header, //Age-Of-Location-Information ::= - UInt32 aVP_Data - } - - type enumerated CSG_Access_Mode_Code { - CLOSED_MODE_E (0), - HYBRID_MODE_E (1) - } - - type record CSG_Access_Mode_AVP { //ref: TS 132 299 7.2.46A - AVP_Header aVP_Header, //CSG-Access-Mode ::= - CSG_Access_Mode_Code cSG_Access_Mode - } - - type enumerated CSG_Membership_Indication_Code { - NOT_CSG_MEMBER_E (0), - CSG_MEMBER_E (1) - } - - type record CSG_Membership_Indication_AVP { //ref: TS 132 299 7.2.46B - AVP_Header aVP_Header, //CSG-Membership-Indication ::= - CSG_Membership_Indication_Code cSG_Membership_Indication - } - - type record MME_Location_Information_AVP { //ref: 7.3.115 - AVP_Header aVP_Header, //MME-Location-Information ::= - E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Gl_Identity optional, - Tracking_Area_Identity_AVP tracking_Area_Identity optional, - Geographical_Information_AVP geographical_Information optional, - Geodetic_Information_AVP geodetic_Information optional, - Current_Location_Retrieved_AVP current_Location_Retrieved optional, - Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, - User_CSG_Information_AVP user_CSG_Information optional, - set of AVP_Type aVP_Type optional - } - - type record SGSN_Location_Information_AVP { //ref: 7.3.116 - AVP_Header aVP_Header, //SGSN-Location-Information ::= - Cell_Global_Identity_AVP cell_Global_Identity optional, - Location_Area_Identity_AVP location_Area_Identity optional, - Service_Area_Identity_AVP service_Area_Identity optional, - Routing_Area_Identity_AVP routing_Area_Identity optional, - Geographical_Information_AVP geographical_Information optional, - Geodetic_Information_AVP geodetic_Information optional, - Current_Location_Retrieved_AVP current_Location_Retrieved optional, - Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, - User_CSG_Information_AVP user_CSG_Information optional, - set of AVP_Type aVP_Type optional - } - - type record MME_User_State_AVP { //ref: 7.3.112 - AVP_Header aVP_Header, //MME-User-State ::= - User_State_AVP user_State optional, - set of AVP_Type aVP_Type optional - } - - type record SGSN_User_State_AVP { //ref: 7.3.113 - AVP_Header aVP_Header, //SGSN-User-State ::= - User_State_AVP user_State optional, - set of AVP_Type aVP_Type optional - } - - type enumerated User_State_Code { - DETACHED_E (0), - ATTACHED_NOT_REACHABLE_FOR_PAGING_E (1), - ATTACHED_REACHABLE_FOR_PAGING_E (2), - CONNECTED_NOT_REACHABLE_FOR_PAGING_E (3), - CONNECTED_REACHABLE_FOR_PAGING_E (4), - NETWORK_DETERMINED_NOT_REACHABLE_E (5) - } - - type record User_State_AVP { //ref: 7.3.114 - AVP_Header aVP_Header, //User-State ::= - User_State_Code user_State - } - - type record User_Id_AVP { //ref: 7.3.50 - AVP_Header aVP_Header, //User-Id ::= - UTF8String aVP_Data - } - - type enumerated Alert_Reason_Code { - MME_UPDATE_PROCEDURE_E (0), - SGSN_UPDATE_PROCEDURE_E (1), - SUBSCRIPTION_WITHDRAWAL_E (2), - UPDATE_PROCEDURE_IWF_E (3), - INITIAL_ATTACH_PROCEDURE_E (4) - } - - type record Alert_Reason_AVP { //ref: 7.3.83 - AVP_Header aVP_Header, //Alert-Reason ::= - Alert_Reason_Code alert_Reason - } - - } // End of group TS129_272_AVPs - - } // End of group AVPs - -} // End of LibDiameter_Types_S6a_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn deleted file mode 100644 index bbe8502..0000000 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn +++ /dev/null @@ -1,289 +0,0 @@ -/** - * @author STF 466 - * @version $Id$ - * @desc This module defines Diameter S9 AVP types used by LibDiameter constructs.
      - * Note that any changes made to the definitions in this module - * may be overwritten by future releases of this library - * End users are encouraged to contact the distributers of this - * module regarding their modifications or additions - * @remark Adding of new S9 AVP types is ok; - */ -module LibDiameter_Types_S9_AVPs { - - import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; - - group AVPs{ - group TS129_215_AVPs { - type octetstring DiameterIdentity; // Alias - - type record TDF_Information_AVP { //ref: TS129 212 5.3.78 - AVP_Header aVP_Header, //TDF-Information ::= - TDF_Destination_Realm_AVP tDF_Destination_Realm optional, - TDF_Destination_Host_AVP tDF_Destination_Host optional, - TDF_IP_Address_AVP tDF_IP_Address optional - } - - type record TDF_Destination_Realm_AVP { //ref: TS129 212 5.3.79 - AVP_Header aVP_Header, //TDF-Destination-Realm ::= - DiameterIdentity aVP_Data - } - - type record TDF_Destination_Host_AVP { //ref: TS129 212 5.3.80 - AVP_Header aVP_Header, //TDF-Destination-Host ::= - DiameterIdentity aVP_Data - } - - type record TDF_IP_Address_AVP { //ref: TS129 212 5.3.81 - AVP_Header aVP_Header, //TDF-IP-Address ::= - Address aVP_Data - } - - type enumerated AN_GW_Status_Code { - AN_GW_FAILED_E (0) - } - - type record AN_GW_Status_AVP { //ref: TS129 212 5.3.100 - AVP_Header aVP_Header, //AN-GW-Statush ::= - AN_GW_Status_Code aN_GW_Status - } - - type record ThreeGPP_GGSN_Address_AVP { //ref: TS129 061 table 9a - AVP_Header aVP_Header, //3GPP-GGSN-Address ::= - octetstring aVP_Data - } - - type record ThreeGPP_GGSN_IPv6_Address_AVP { //ref: TS129 061 table 9a - AVP_Header aVP_Header, //3GPP-GGSN-IPv6-Address ::= - octetstring aVP_Data - } - - type record TWAN_Identifier_AVP { //ref: TS129 061 table 9a - AVP_Header aVP_Header, //TWAN-Identifier ::= - octetstring aVP_Data - } - - type record QoS_Rule_Report_AVP { //ref: TS129 212 5a.3.5 - AVP_Header aVP_Header, //QoS-Rule-Report ::= - set of QoS_Rule_Name_AVP qoS_Rule_Name optional, - set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, - PCC_Rule_Status_AVP pCC_Rule_Status optional, - Rule_Failure_Code_AVP rule_Failure_Code optional, - set of AVP_Type aVP_Type optional - } - - type record QoS_Rule_Name_AVP { //ref: TS129 212 5a.3.4 - AVP_Header aVP_Header, //QoS-Rule-Name ::= - octetstring aVP_Data - } - - type record QoS_Rule_Base_Name_AVP { //ref: TS129 212 5a.3.7 - AVP_Header aVP_Header, //QoS-Rule-Base-Name ::= - UTF8String aVP_Data - } - - type record Appl_Detection_Info_AVP { //ref: TS129 212 5.3.91 - AVP_Header aVP_Header, //Application-Detection-Information ::= - TDF_Application_Identifier_AVP tDF_Application_Identifier, - TDF_Application_Instance_Id_AVP tDF_Application_Instance_Id optional, - set of Flow_Information_AVP flow_Information optional, - set of AVP_Type aVP_Type optional - } - - type record TDF_Application_Identifier_AVP { //ref: TS129 212 5.3.77 - AVP_Header aVP_Header, //TDF-Application-Identifier ::= - octetstring aVP_Data - } - - type record TDF_Application_Instance_Id_AVP { //ref: TS129 212 5.3.92 - AVP_Header aVP_Header, //TDF-Application-Instance-Identifier ::= - octetstring aVP_Data - } - - type record HeNB_Local_IP_Address_AVP { //ref: TS129 212 5.3.95 - AVP_Header aVP_Header, //HeNB-Local-IP-Address ::= - Address aVP_Data - } - - type record UE_Local_IP_Address_AVP { //ref: TS129 212 5.3.96 - AVP_Header aVP_Header, //UE-Local-IP-Address ::= - Address aVP_Data - } - - type record UDP_Source_Port_AVP { //ref: TS129 212 5.3.97 - AVP_Header aVP_Header, //UDP-Source-Port ::= - UInt32 aVP_Data - } - - type enumerated Session_Linking_Indicator_Code { - SESSION_LINKING_IMMEDIATE_E (0), - SESSION_LINKING_DEFERRED_E (1) - } - - type record Session_Linking_Indicator_AVP { //ref: TS129 212 5a.3.6 - AVP_Header aVP_Header, //Session-Linking-Indicator ::= - Session_Linking_Indicator_Code session_Linking_Indicator - } - - type record Subses_Decision_Info_AVP { //ref: TS129 215 5.3.1 - AVP_Header aVP_Header, //Subsession-Decision-Info ::= - Subsession_Id_AVP subsession_Id, - set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, - Result_Code_AVP result_Code optional, - Experimental_Result_AVP experimental_Result optional, - set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, - set of Charging_Rule_Install_AVP charging_Rule_Install optional, - set of QoS_Rule_Install_AVP qoS_Rule_Install optional, - set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, - Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, - set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, - Session_Release_Cause_AVP session_Release_Cause optional, - Bearer_Control_Mode_AVP bearer_Control_Mode optional, - set of Event_Trigger_AVP event_Trigger optional, - Revalidation_Time_AVP revalidation_Time optional, - Online_AVP online optional, - Offline_AVP offline optional, - QoS_Information_AVP qoS_Information optional, - set of AVP_Type aVP_Type optional - } - - type record Subses_Enforcement_Info_AVP { //ref: TS129 215 5.3.2 - AVP_Header aVP_Header, //Subsession-Enforcement-Info ::= - Subsession_Id_AVP subsession_Id, - Subsession_Operation_AVP subsession_Operation optional, - set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, - Bearer_Identifier_AVP bearer_Identifier optional, - Bearer_Operation_AVP bearer_Operation optional, - set of Packet_Filter_Info_AVP packet_Filter_Information optional, - Packet_Filter_Operation_AVP packet_Filter_Operation optional, - QoS_Information_AVP qoS_Information optional, - Framed_IP_Address_AVP framed_IP_Address optional, - Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, - set of CoA_Information_AVP coA_Information optional, - Called_Station_Id_AVP called_Station_Id optional, - PDN_Connection_ID_AVP pDN_Connection_ID optional, - Bearer_Usage_AVP bearer_Usage optional, - set of TFT_Packet_Filter_Info_AVP tFT_Packet_Filter_Information optional, - Online_AVP online optional, - Offline_AVP offline optional, - Result_Code_AVP result_Code optional, - Experimental_Result_AVP experimental_Result optional, - set of Charging_Rule_Report_AVP charging_Rule_Report optional, - set of QoS_Rule_Report_AVP qoS_Rule_Report optional, - IP_CAN_Type_AVP iP_CAN_Type optional, - RAT_Type_AVP rat_Type optional, - ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, - ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, - ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, - RAI_AVP rAI optional, - ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, - ThreeGPP2_BSID_AVP threeGPP2_BSID optional, - User_CSG_Information_AVP user_CSG_Information optional, - Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, - Network_Request_Support_AVP network_Request_Support optional, - Routing_Rule_Install_AVP routing_Rule_Install optional, - Routing_Rule_Remove_AVP routing_Rule_Remove optional, - Logical_Access_ID_AVP logical_Access_ID optional, - Physical_Access_ID_AVP physical_Access_ID optional, - set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, - Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, - set of Event_Trigger_AVP event_Trigger optional, - Access_Netw_Charging_Addr_AVP access_Network_Charging_Address optional, - set of Access_Netw_Charg_Id_Gx_AVP access_Network_Charging_Id_Gx optional, - Session_Linking_Indicator_AVP session_Linking_Indicator optional, - set of AVP_Type aVP_Type optional - } - - type record Subsession_Id_AVP { //ref: TS129 215 5.3.3 - AVP_Header aVP_Header, //Subsession-Id ::= - UInt32 aVP_Data - } - - type enumerated Subsession_Operation_Code { - TERMINATION_E (0), - ESTABLISHMENT_E (1), - MODIFICATION_E (2) - } - - type record Subsession_Operation_AVP { //ref: TS129 215 5.3.4 - AVP_Header aVP_Header, //Subsession-Operation ::= - Subsession_Operation_Code subsession_Operation - } - - type enumerated Multiple_BBERF_Action_Code { - ESTABLISHMENT_E (0), - TERMINATION_E (1) - } - - type record Multiple_BBERF_Action_AVP { //ref: TS129 215 5.3.6 - AVP_Header aVP_Header, //Multiple-BBERF-Action ::= - Multiple_BBERF_Action_Code multiple_BBERF_Action - } - - type Resource_Allocation_Notification_AVP - Resource_Alloc_Notification_AVP; // Shortened Name - Alias - type Access_Network_Charging_Identifier_Value_AVP - ANw_Charging_Id_Value_AVP; // Shortened Name - Alias - type record QoS_Rule_Install_AVP { //ref: TS129 212 5a.3.1 - AVP_Header aVP_Header, //QoS-Rule-Install ::= - set of QoS_Rule_Definition_AVP qoS_Rule_Definition optional, - set of QoS_Rule_Name_AVP qoS_Rule_Name optional, - set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, - Tunnel_Information_AVP tunnel_Information optional, - ANw_Charging_Id_Value_AVP acc_Net_Charging_Id_Val optional, - Resource_Alloc_Notification_AVP resource_Alloc_Notification optional, - Rule_Activation_Time_AVP rule_Activation_Time optional, - Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, - ThreeGPP_GGSN_Address_AVP threeGPP_GGSN_Address optional, - ThreeGPP_GGSN_IPv6_Address_AVP threeGPP_GGSN_IPv6_Address optional, - set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, - UDP_Source_Port_AVP uDP_Source_Port optional, - set of AVP_Type aVP_Type optional - } - - type record QoS_Rule_Remove_AVP { //ref: TS129 212 5a.3.2 - AVP_Header aVP_Header, //QoS-Rule-Remove ::= - set of QoS_Rule_Name_AVP qoS_Rule_Name optional, - set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, - set of AVP_Type aVP_Type optional - } - - type record QoS_Rule_Definition_AVP { //ref: TS129 212 5a.3.3 - AVP_Header aVP_Header, //QoS-Rule-Definition ::= - QoS_Rule_Name_AVP qoS_Rule_Name, - set of Flow_Information_AVP flow_Information optional, - QoS_Information_AVP qoS_Information optional, - Precedence_AVP precedence optional, - set of Required_Access_Info_AVP required_Access_Info optional, - set of AVP_Type aVP_Type optional - } - - type enumerated Required_Access_Info_Code { - USER_LOCATION_E (0), - MS_TIME_ZONE_E (1) } - - type record Required_Access_Info_AVP { //ref: TS129 214 5.3.34 - AVP_Header aVP_Header, //Required-Access-Info ::= - Required_Access_Info_Code required_Access_Info - } - }//end of group TS129_215_AVPs - }//end group AVPs - - group ShorterNames { - type Packet_Filter_Information_AVP Packet_Filter_Info_AVP; // Shortened Name - Alias - type AN_GW_Address_AVP AN_GW_Addr_AVP; // Shortened Name - Alias - type TFT_Packet_Filter_Information_AVP TFT_Packet_Filter_Info_AVP; // Shortened Name - Alias - type Access_Network_Charging_Address_AVP - Access_Netw_Charging_Addr_AVP; // Shortened Name - Alias - type Access_Network_Charging_Identifier_Gx_AVP - Access_Netw_Charg_Id_Gx_AVP; // Shortened Name - Alias - type Multiple_Services_Credit_Control_AVP - Multiple_Services_CC_AVP; // Shortened Name - Alias - type Usage_Monitoring_Information_AVP Usage_Monitoring_Info_AVP; // Shortened Name - Alias - type CSG_Information_Reporting_AVP CSG_Info_Reporting_AVP; // Shortened Name - Alias - } - -} //end module LibDiameter_Types_S9_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn new file mode 100644 index 0000000..d6dae2c --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn @@ -0,0 +1,26 @@ +/** + * @author STF 544 + * @version $Id$ + * @desc This module defines Diameter Cx and Dx AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new ShDh AVP types is ok; + */ +module LibDiameter_Types_ShDh_AVPs { + + // LibCommmon + import from LibCommon_BasicTypesAndValues {type UInt8,UInt24,UInt32;}; + import from LibCommon_DataStrings {type Bit1,Bit4,Oct2;}; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S9_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + +} // End of LibDiameter_Types_ShDh_AVPs \ No newline at end of file -- GitLab From e2a9a0bc4a560cbe7271e05fd94988f6542bf421 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 13 Jun 2023 09:11:45 +0200 Subject: [PATCH 48/84] Add Diameter encoding functions and Msrp encoding functions --- ttcn/LibMsrp/LibMsrp_Functions.ttcn | 2 +- ttcn/LibMsrp/module.mk | 1 + ttcn/patch_lib_diameter_titan/module.mk | 3 +- .../ttcn/LibDiameter_EncdecDeclarations.ttcn | 273 +++++++++++++++++- .../ttcn/LibDiameter_TypesAndValues.ttcn | 5 +- ...ttcn3 => LibDiameter_Types_RfRo_AVPs.ttcn} | 0 ttcn/patch_lib_msrp_titan/module.mk | 1 + .../ttcn/LibMsrp_EncDecDeclarations.ttcn | 16 + 8 files changed, 294 insertions(+), 7 deletions(-) rename ttcn/patch_lib_diameter_titan/ttcn/{LibDiameter_Types_RfRo_AVPs.ttcn3 => LibDiameter_Types_RfRo_AVPs.ttcn} (100%) create mode 100644 ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn diff --git a/ttcn/LibMsrp/LibMsrp_Functions.ttcn b/ttcn/LibMsrp/LibMsrp_Functions.ttcn index d79d2f6..a70266a 100644 --- a/ttcn/LibMsrp/LibMsrp_Functions.ttcn +++ b/ttcn/LibMsrp/LibMsrp_Functions.ttcn @@ -8,7 +8,7 @@ module LibMsrp_Functions { // LibMsrp import from LibMsrp_TypesAndValues all; - function f_str2msrpUri(in charstring p_uri, out template MsrpURI p_msrpUri) + function f_str2msrpUri(in charstring p_uri, out MsrpURI p_msrpUri) return boolean { var integer v_res := 0; var bitstring v_oct2bit := oct2bit(char2oct(p_uri)); diff --git a/ttcn/LibMsrp/module.mk b/ttcn/LibMsrp/module.mk index d7693ac..d0428b3 100644 --- a/ttcn/LibMsrp/module.mk +++ b/ttcn/LibMsrp/module.mk @@ -3,4 +3,5 @@ sources := \ LibMsrp_PIXITS.ttcn \ LibMsrp_Templates.ttcn \ LibMsrp_TypesAndValues.ttcn \ + ../patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn \ diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index b2519be..0479d12 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -5,7 +5,8 @@ sources := \ ttcn/LibDiameter_Templates.ttcn \ ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ ttcn/LibDiameter_Types_S9_AVPs.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn index f20d9f9..d0e7b6a 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn @@ -10,10 +10,279 @@ module LibDiameter_EncdecDeclarations { import from LibDiameter_Types_CxDx_AVPs all; import from LibDiameter_Types_RfRo_AVPs all; - fx_enc_CER_MSG(in CER_MSG p_CER_MSG) return bitstring + external function fx_enc_CER_MSG(in CER_MSG p_CER_MSG) return bitstring with {extension "prototype(convert) encode(DIAMETERCodec)"} - fx_dec_CER_MSG(inout bitstring pdu, out CER_MSG p_CER_MSG) return integer + external function fx_dec_CER_MSG(inout bitstring pdu, out CER_MSG p_CER_MSG) return integer with {extension "prototype(sliding) decode(DIAMETERCodec)"} + external function fx_enc_CEA_MSG(in CEA_MSG p_CEA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CEA_MSG(inout bitstring pdu, out CEA_MSG p_CEA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RAR_MSG(in RAR_MSG p_RAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RAR_MSG(inout bitstring pdu, out RAR_MSG p_RAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RAA_MSG(in RAA_MSG p_RAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RAA_MSG(inout bitstring pdu, out RAA_MSG p_RAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ACR_MSG(in ACR_MSG p_ACR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ACR_MSG(inout bitstring pdu, out ACR_MSG p_ACR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ACA_MSG(in ACA_MSG p_ACA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ACA_MSG(inout bitstring pdu, out ACA_MSG p_ACA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ASR_MSG(in ASR_MSG p_ASR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ASR_MSG(inout bitstring pdu, out ASR_MSG p_ASR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ASA_MSG(in ASA_MSG p_ASA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ASA_MSG(inout bitstring pdu, out ASA_MSG p_ASA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_STR_MSG(in STR_MSG p_STR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_STR_MSG(inout bitstring pdu, out STR_MSG p_STR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_STA_MSG(in STA_MSG p_STA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_STA_MSG(inout bitstring pdu, out STA_MSG p_STA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DWR_MSG(in DWR_MSG p_DWR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DWR_MSG(inout bitstring pdu, out DWR_MSG p_DWR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DWA_MSG(in DWA_MSG p_DWA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DWA_MSG(inout bitstring pdu, out DWA_MSG p_DWA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DPR_MSG(in DPR_MSG p_DPR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DPR_MSG(inout bitstring pdu, out DPR_MSG p_DPR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DPA_MSG(in DPA_MSG p_DPA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DPA_MSG(inout bitstring pdu, out DPA_MSG p_DPA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UAR_MSG(in UAR_MSG p_UAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UAR_MSG(inout bitstring pdu, out UAR_MSG p_UAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UAA_MSG(in UAA_MSG p_UAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UAA_MSG(inout bitstring pdu, out UAA_MSG p_UAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SAR_MSG(in SAR_MSG p_SAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SAR_MSG(inout bitstring pdu, out SAR_MSG p_SAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SAA_MSG(in SAA_MSG p_SAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SAA_MSG(inout bitstring pdu, out SAA_MSG p_SAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_LIR_MSG(in LIR_MSG p_LIR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_LIR_MSG(inout bitstring pdu, out LIR_MSG p_LIR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_LIA_MSG(in LIA_MSG p_LIA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_LIA_MSG(inout bitstring pdu, out LIA_MSG p_LIA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_MAR_MSG(in MAR_MSG p_MAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_MAR_MSG(inout bitstring pdu, out MAR_MSG p_MAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_MAA_MSG(in MAA_MSG p_MAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_MAA_MSG(inout bitstring pdu, out MAA_MSG p_MAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RTR_MSG(in RTR_MSG p_RTR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RTR_MSG(inout bitstring pdu, out RTR_MSG p_RTR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RTA_MSG(in RTA_MSG p_RTA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RTA_MSG(inout bitstring pdu, out RTA_MSG p_RTA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PPR_MSG(in PPR_MSG p_PPR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PPR_MSG(inout bitstring pdu, out PPR_MSG p_PPR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PPA_MSG(in PPA_MSG p_PPA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PPA_MSG(inout bitstring pdu, out PPA_MSG p_PPA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UDR_MSG(in UDR_MSG p_UDR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UDR_MSG(inout bitstring pdu, out UDR_MSG p_UDR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UDA_MSG(in UDA_MSG p_UDA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UDA_MSG(inout bitstring pdu, out UDA_MSG p_UDA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUR_MSG(in PUR_MSG p_PUR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUR_MSG(inout bitstring pdu, out PUR_MSG p_PUR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUA_MSG(in PUA_MSG p_PUA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUA_MSG(inout bitstring pdu, out PUA_MSG p_PUA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SNR_MSG(in SNR_MSG p_SNR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SNR_MSG(inout bitstring pdu, out SNR_MSG p_SNR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_SNA_MSG(in SNA_MSG p_SNA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_SNA_MSG(inout bitstring pdu, out SNA_MSG p_SNA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PNR_MSG(in PNR_MSG p_PNR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PNR_MSG(inout bitstring pdu, out PNR_MSG p_PNR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PNA_MSG(in PNA_MSG p_PNA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PNA_MSG(inout bitstring pdu, out PNA_MSG p_PNA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CCR_MSG(in CCR_MSG p_CCR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CCR_MSG(inout bitstring pdu, out CCR_MSG p_CCR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CCA_MSG(in CCA_MSG p_CCA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CCA_MSG(inout bitstring pdu, out CCA_MSG p_CCA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AAR_MSG(in AAR_MSG p_AAR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AAR_MSG(inout bitstring pdu, out AAR_MSG p_AAR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AAA_MSG(in AAA_MSG p_AAA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AAA_MSG(inout bitstring pdu, out AAA_MSG p_AAA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ULR_MSG(in ULR_MSG p_ULR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ULR_MSG(inout bitstring pdu, out ULR_MSG p_ULR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_ULA_MSG(in ULA_MSG p_ULA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_ULA_MSG(inout bitstring pdu, out ULA_MSG p_ULA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AIR_MSG(in AIR_MSG p_AIR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AIR_MSG(inout bitstring pdu, out AIR_MSG p_AIR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_AIA_MSG(in AIA_MSG p_AIA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_AIA_MSG(inout bitstring pdu, out AIA_MSG p_AIA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CLR_MSG(in CLR_MSG p_CLR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CLR_MSG(inout bitstring pdu, out CLR_MSG p_CLR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_CLA_MSG(in CLA_MSG p_CLA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_CLA_MSG(inout bitstring pdu, out CLA_MSG p_CLA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_IDR_MSG(in IDR_MSG p_IDR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_IDR_MSG(inout bitstring pdu, out IDR_MSG p_IDR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_IDA_MSG(in IDA_MSG p_IDA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_IDA_MSG(inout bitstring pdu, out IDA_MSG p_IDA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DSR_MSG(in DSR_MSG p_DSR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DSR_MSG(inout bitstring pdu, out DSR_MSG p_DSR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_DSA_MSG(in DSA_MSG p_DSA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_DSA_MSG(inout bitstring pdu, out DSA_MSG p_DSA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RSR_MSG(in RSR_MSG p_RSR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RSR_MSG(inout bitstring pdu, out RSR_MSG p_RSR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_RSA_MSG(in RSA_MSG p_RSA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_RSA_MSG(inout bitstring pdu, out RSA_MSG p_RSA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_NOR_MSG(in NOR_MSG p_NOR_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_NOR_MSG(inout bitstring pdu, out NOR_MSG p_NOR_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_NOA_MSG(in NOA_MSG p_NOA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_NOA_MSG(inout bitstring pdu, out NOA_MSG p_NOA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUER_MSG(in PUER_MSG p_PUER_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUER_MSG(inout bitstring pdu, out PUER_MSG p_PUER_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_PUEA_MSG(in PUEA_MSG p_PUEA_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_PUEA_MSG(inout bitstring pdu, out PUEA_MSG p_PUEA_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} + + external function fx_enc_UNKNOWN_MSG(in UNKNOWN_MSG p_UNKNOWN_MSG) return bitstring + with {extension "prototype(convert) encode(DIAMETERCodec)"} + external function fx_dec_UNKNOWN_MSG(inout bitstring pdu, out UNKNOWN_MSG p_UNKNOWN_MSG) return integer + with {extension "prototype(sliding) decode(DIAMETERCodec)"} } // End of module LibDiameter_EncdecDeclarations \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn index b610fc2..b5d8d55 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn @@ -2907,7 +2907,6 @@ group BasicTypesAndConstants{ }//End group HeaderAndBodyTypes -} with { -// variant "" - encode "DIAMETERCodec" +} with { + encode "DIAMETERCodec"; variant "" } // End module LibDiameter_TypesAndValues diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn similarity index 100% rename from ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn3 rename to ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn diff --git a/ttcn/patch_lib_msrp_titan/module.mk b/ttcn/patch_lib_msrp_titan/module.mk index d7693ac..d0428b3 100644 --- a/ttcn/patch_lib_msrp_titan/module.mk +++ b/ttcn/patch_lib_msrp_titan/module.mk @@ -3,4 +3,5 @@ sources := \ LibMsrp_PIXITS.ttcn \ LibMsrp_Templates.ttcn \ LibMsrp_TypesAndValues.ttcn \ + ../patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn \ diff --git a/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn b/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn new file mode 100644 index 0000000..15f416d --- /dev/null +++ b/ttcn/patch_lib_msrp_titan/ttcn/LibMsrp_EncDecDeclarations.ttcn @@ -0,0 +1,16 @@ +/* + * @author TTF T010 + * @version $Id:$ + * @desc This module provides the functions used by the test component + */ +module LibMsrp_EncDecDeclarations { + + // LibMsrp + import from LibMsrp_TypesAndValues all; + + external function fx_enc_MsrpURI(in MsrpURI p_MsrpURI) return bitstring + with {extension "prototype(convert) encode(MSRPCodec)"} + external function fx_dec_MsrpURI(inout bitstring pdu, out MsrpURI p_MsrpURI) return integer + with {extension "prototype(sliding) decode(MSRPCodec)"} + +} // End of module LibMsrp_EncDecDeclarations \ No newline at end of file -- GitLab From 7eddd7d2fd9bac5e6e0420f0882c9dc0c0d169fe Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 13 Jun 2023 09:17:32 +0200 Subject: [PATCH 49/84] Bug fixed in install.sh --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 439e766..0b7979c 100755 --- a/install.sh +++ b/install.sh @@ -20,7 +20,7 @@ cd ./ttcn/LibHttp ln -sf module_emtel.mk module.mk cd $BASE_PATH -ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/\ +ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/ ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter -- GitLab From 664e68c571b997e751fbd375bf9a1568980f86b1 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 16 Jun 2023 10:30:51 +0200 Subject: [PATCH 50/84] Correct configuration added --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 28 ++++++------ test_purposes/Gm/TP_GM.tplan2 | 18 ++++---- test_purposes/Ic/TP_IC.tplan2 | 30 +++++++++++++ test_purposes/Mw/TP_MW_IS.tplan2 | 6 +-- test_purposes/Mw/TP_MW_PS.tplan2 | 18 ++++---- test_purposes/Rtp/TP_Rtp.tplan2 | 65 ++++++++++++++++++++++++++- test_purposes/Sip_Common.tplan2 | 2 + 7 files changed, 131 insertions(+), 36 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 189d637..d994dce 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -35,7 +35,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2 1)" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -89,7 +89,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -139,7 +139,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -189,7 +189,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2 and 5.11.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -234,7 +234,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -287,7 +287,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -335,7 +335,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -388,7 +388,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -436,7 +436,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -480,7 +480,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -524,7 +524,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -568,7 +568,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -612,7 +612,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -656,7 +656,7 @@ Package TP_E_CSCF { Reference "ETSI TS 124 229 [1], Clauses 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index fb479a6..7727cc1 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -27,7 +27,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -85,7 +85,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2, 5.2.10.1, 5.1.1.1, 6.1.1 and 6.1.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -144,7 +144,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -274,7 +274,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -311,7 +311,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -349,7 +349,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -390,7 +390,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.11" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -431,7 +431,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [2] Clauses 5.1.6.9" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -468,7 +468,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 index 6230279..5c051ab 100644 --- a/test_purposes/Ic/TP_IC.tplan2 +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -20,6 +20,36 @@ Package TP_IC { import all from Sip_Common; + Test Purpose { + TP Id TP_IC_IBCF_ECO_480INVITE_01 + Test objective + "Verify that the IBCF successfully processes a 480 INVITE (Temporary unavailable) originating leg. " + Reference + "TS 124 229 [1], clause 5.10.3.2 and RFC 3261 [18], clause 13.3.1.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + UE_A isAttachedTo the EPC_A and + UE_A isRegisteredTo the IMS_A and + PSAP isTemporaryUnavailable + } + + Expected behaviour + ensure that { + when { + the PSAP entity sends a 480_INVITE "addressed to UE_A" to the IMS_A entity + } + then { + the IMS_IBCF_A entity receives the 480_INVITE + from the PSAP entity and + the IMS_IBCF_A entity forwards the 480_INVITE + to the IMS_E_CSCF entity + } + } + } // End of TP_IC_IBCF_ECO_480INVITE_01 } // End of Package TP_IC diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index 75255ef..0962963 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -29,7 +29,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -78,7 +78,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.4.1.1 and 6.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -137,7 +137,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clause 5.2.2.1 and Clause 6.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index aa276bb..7a57117 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -27,7 +27,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -89,7 +89,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.2.1 and 6.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -216,7 +216,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -261,7 +261,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -307,7 +307,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.10.4 and 5.2.6.3.3" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -355,7 +355,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.10.5" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -406,7 +406,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.2.10.5" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -456,7 +456,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.9, 5.4.5.2 and 6.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -500,7 +500,7 @@ Package TP_MW_PS { Reference "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 index f56d54c..4150f24 100644 --- a/test_purposes/Rtp/TP_Rtp.tplan2 +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -20,7 +20,70 @@ Package TP_RTP { //import all from Diameter_Common; import all from Rtp_Common; - + + + Test Purpose { + TP Id TP_RTP_ECO_UE_01 + // TP_RTP_UE_01 from VxLTE TTF T006 + Test objective "Verify that media between UE_A/IVS and PSAP is not delivered in any direction before call establishment." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the PSAP entity and + the PSAP entity sends packets to the UE_A entity + } + then { + the PSAP entity not receive media from the UE_A entity and + the UE_A entity not receive media from the PSAP entity + } + + } + } // End of TP_RTP_ECO_UE_01 + + + Test Purpose { + TP Id TP_RTP_ECO_UE_03 + // TP_RTP_UE_03 from VxLTE TTF T006 + Test objective "Verify that media between UE_A and UE_B is successfully routed." + + Reference + "TS 124 229 [1], clause 6" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity sends packets to the PSAP entity and + the PSAP entity sends packets to the UE_A entity + } + then { + the PSAP entity receives media from the UE_A entity and + the UE_A entity receives media from the PSAP entity + } + + } + } // End of TP_RTP_ECO_UE_03 } // End of Package TP_RTP diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index 6be366c..c593bf4 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -58,6 +58,7 @@ Package Sip_Common { - IMS_HSS_B - IM_CN // IM CN subsystem of own network - BGCF + - PSAP ; events: - receives @@ -97,6 +98,7 @@ Package Sip_Common { - isRequestedToEstablisheCallTypeEmergencyCall - isRequestedToDeregisterUser - isBusy + - isTemporaryUnavailable - isNoLongerAvailable - isTriggeredToDetachUser - isRequestedToDetachfromNetwork -- GitLab From 21e8000b13cd51437c7188e9bb73033c0ad0bef4 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 16 Jun 2023 12:18:01 +0200 Subject: [PATCH 51/84] Tests added and minor changes --- test_purposes/Cx/TP_CX.tplan2 | 6 +- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 264 +++++++++++++++++++++++++- test_purposes/Gm/TP_GM.tplan2 | 2 +- test_purposes/Gx/TP_GX.tplan2 | 2 +- test_purposes/Ic/TP_IC.tplan2 | 4 +- test_purposes/Isc/TP_ISC.tplan2 | 2 +- test_purposes/Mw/TP_MW_IS.tplan2 | 2 +- test_purposes/Mw/TP_MW_PS.tplan2 | 2 +- test_purposes/Mw/TP_MW_SI.tplan2 | 2 +- test_purposes/Rtp/TP_Rtp.tplan2 | 2 +- test_purposes/Rx/TP_RX.tplan2 | 2 +- test_purposes/S6a/TP_S6A.tplan2 | 2 +- test_purposes/S9/TP_S9.tplan2 | 2 +- 13 files changed, 278 insertions(+), 16 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 317cdfe..65d5a37 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -23,7 +23,7 @@ Package TP_CX { Test Purpose { TP Id TP_CX_HSS_ECO_UAA_01 //TP_CX_HSS_UAA_01 from TS 103 653-1 V2.1.1 without emergency registration - Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE emergency registration and sends UA-Answer." + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a UA-Request received due to first UE emergency registration and sends UA-Answer." Reference "TS 129 228 [4], clause 6.1.1 and tables 6.1.1.1 and 6.1.1.2", @@ -76,7 +76,7 @@ Package TP_CX { Test Purpose { TP Id TP_CX_HSS_ECO_UAA_02 //TP_CX_HSS_UAA_02 from TS 103 653-1 V2.1.1 without emergency registration - Test objective "IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE emergency registration and sends UA-Answer." + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a UA-Request received due to protected UE emergency registration and sends UA-Answer." Reference "TS 129 228 [4], clause 6.1.1.1" @@ -114,7 +114,7 @@ Package TP_CX { Test Purpose { TP Id TP_CX_HSS_ECO_SAA_01 - Test objective "IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure when credentials not matches and sends SA-Answer." + Test objective "Verify that the IUT successfully processes all mandatory AVPs in a SA-Request received due to S-CSCF registration notification procedure when credentials not matches and sends SA-Answer." Reference "TS 129 228 [4], clause 6.1.2", diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index d994dce..dc64b90 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file @@ -468,6 +468,49 @@ Package TP_E_CSCF { } } // End of TP_MM_ECSCF_ECO_BYE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_BYE_02 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency + Call and routes the request to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_ECO_BYE_02 Test Purpose { @@ -513,6 +556,50 @@ Package TP_E_CSCF { } // End of TP_MX_ECSCF_ECO_BYE_01 + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_BYE_02 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another + network for an Emergency Call and routes the request to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_BYE_02 + Test Purpose { TP Id TP_MI_ECSCF_ECO_BYE_01 @@ -557,6 +644,50 @@ Package TP_E_CSCF { } // End of TP_MI_ECSCF_ECO_BYE_01 + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_BYE_02 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the + PSTN for an Emergency Call and routes the request to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a BYE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_BYE_02 + Test Purpose { TP Id TP_MM_ECSCF_ECO_CANCEL_01 @@ -688,6 +819,137 @@ Package TP_E_CSCF { } } // End of TP_MI_ECSCF_ECO_CANCEL_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_480INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency + Call and routes the response to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_480INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another + network for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_480INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the + PSTN for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a 480INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_480INVITE_01 } // End of Package TP_E_CSCF diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 7727cc1..ec5b6f4 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index d7db5b0..dc55c7d 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 index 5c051ab..dc99d91 100644 --- a/test_purposes/Ic/TP_IC.tplan2 +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file @@ -14,7 +14,7 @@ file and shall not imply any sub-license right. */ -/* Gm interface at IBCF/IBCF*/ +/* Ic interface at IBCF/IBCF*/ Package TP_IC { import all from Sip_Common; diff --git a/test_purposes/Isc/TP_ISC.tplan2 b/test_purposes/Isc/TP_ISC.tplan2 index 5ea504e..588bc56 100644 --- a/test_purposes/Isc/TP_ISC.tplan2 +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index 0962963..aef07b0 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 7a57117..61e74cf 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Mw/TP_MW_SI.tplan2 b/test_purposes/Mw/TP_MW_SI.tplan2 index cf33fbb..1f698b3 100644 --- a/test_purposes/Mw/TP_MW_SI.tplan2 +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019-2020. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 index 4150f24..deadc45 100644 --- a/test_purposes/Rtp/TP_Rtp.tplan2 +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 index a2a924a..4719db8 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index b33fcf8..ff5f4d2 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/S9/TP_S9.tplan2 b/test_purposes/S9/TP_S9.tplan2 index c35e0b9..fa3ed8f 100644 --- a/test_purposes/S9/TP_S9.tplan2 +++ b/test_purposes/S9/TP_S9.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file -- GitLab From 2c5637e493fd42e56d5fb7f47c5d4903f236e895 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 26 Jul 2023 11:32:48 +0200 Subject: [PATCH 52/84] Adapt code to TITAN --- emergency-iop.code-workspace | 6 + install.sh | 9 + titan-test-system-framework | 2 +- ttcn/LibMsrp/LibMsrp_Templates.ttcn | 18 +- ttcn/LibSip | 2 +- .../ttcn/LibIms_Templates.ttcn | 28 +- ttcn/patch_lib_sip_titan/LibSip_Common.ttcn | 5 +- .../LibSip_MessageBodyTypes.ttcn | 9 +- ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn | 6 - ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn | 6 +- .../LibSip_SIPTypesAndValues.ttcn | 23 +- .../LibSip_SMSTemplates.ttcn | 4 +- .../LibSip_SMSTypesAndValues.ttcn | 2 +- .../LibSip_SimpleMsgSummaryTypes.ttcn | 4 - ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn | 393 ++++++------------ .../patch_lib_sip_titan/LibSip_Templates.ttcn | 253 +++++------ 16 files changed, 286 insertions(+), 484 deletions(-) diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index 82ddd22..b28e8e8 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -5,6 +5,12 @@ }, { "path": "../../tmp/titan.ProtocolModules.DIAMETER_ProtocolModule_Generator" + }, + { + "path": "../../tmp/emergency-iop-ttf010" + }, + { + "path": "../../tmp/vxlte-iop" } ] } \ No newline at end of file diff --git a/install.sh b/install.sh index 0b7979c..deab399 100755 --- a/install.sh +++ b/install.sh @@ -19,6 +19,15 @@ fi cd ./ttcn/LibHttp ln -sf module_emtel.mk module.mk +cd $BASE_PATH/ttcn/LibSip +git checkout TTF016 + +cd $BASE_PATH/ttcn/LibMsrp +git checkout TTF006 + +cd $BASE_PATH/ttcn/LibIms +git checkout TTF006 + cd $BASE_PATH ln -f ./ttcn/patch_lib_common_titan/module.mk ./ttcn/LibCommon/ ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ diff --git a/titan-test-system-framework b/titan-test-system-framework index 554d6b6..25b94ce 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 554d6b6b3ce1e51d88267a3c946cd30caac97a55 +Subproject commit 25b94cec2e9370310eabe936d429f54eae02ffd1 diff --git a/ttcn/LibMsrp/LibMsrp_Templates.ttcn b/ttcn/LibMsrp/LibMsrp_Templates.ttcn index 2974377..be324d4 100644 --- a/ttcn/LibMsrp/LibMsrp_Templates.ttcn +++ b/ttcn/LibMsrp/LibMsrp_Templates.ttcn @@ -422,19 +422,19 @@ module LibMsrp_Templates { toPath := m_msrpToPath_Dummy, fromPath := m_msrpFromPath_Dummy, headers := { - authenticationInfo := omit, - authorization := omit, + messageID := m_msrpMessageID_Dummy, + successReport := omit, + failureReport := omit, byteRange := m_msrpByteRange_Dummy, + status := omit, expires := omit, - extHeaders := omit, - failureReport := omit, - maxExpires := omit, - messageID := m_msrpMessageID_Dummy, minExpires := omit, - status := omit, - successReport := omit, + maxExpires := omit, usePath := omit, - wwwAuthenticate := omit + wwwAuthenticate := omit, + authorization := omit, + authenticationInfo := omit, + extHeaders := omit } }, // End of 'headers' field contentStuff := m_msrpContentStuff_Dummy, diff --git a/ttcn/LibSip b/ttcn/LibSip index a227e9f..44122c6 160000 --- a/ttcn/LibSip +++ b/ttcn/LibSip @@ -1 +1 @@ -Subproject commit a227e9fca956475c5b481fb6042ecfcc9d632502 +Subproject commit 44122c6589a3fa7f42825d2475511d08da499ff0 diff --git a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn index cb866f3..7a60b7d 100644 --- a/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn +++ b/ttcn/patch_lib_ims_titan/ttcn/LibIms_Templates.ttcn @@ -4373,8 +4373,8 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is fixed 200 status code template(present) Response mw_Response_200onINVITE_noPChargingVector_UE( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ? ) modifies mw_Response_2xx_Base := { statusLine := { sipVersion := c_sipNameVersion, @@ -4388,8 +4388,8 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is fixed 200 status code template(present) Response mw_Response_200onINVITE_SDP_UE( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId, + template (present) CSeq p_cSeq ) modifies mw_Response_2xx_Base := { statusLine := { sipVersion := c_sipNameVersion, @@ -4403,8 +4403,8 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is a 200.299 status code template(present) Response mw_Response_2xxonMESSAGE_noPCharging_UE( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId, + template (present) CSeq p_cSeq ) modifies mw_Response_2xx_Base := { msgHeader := { pChargingFunctionAddresses := omit, @@ -4414,15 +4414,15 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is a 200..299 status code template(present) Response mw_Response_2xxonMESSAGE_noPCharging_IMS( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId, + template (present) CSeq p_cSeq ) modifies mw_Response_2xxonMESSAGE_noPCharging_UE := { } // NOTE STF471: removed statusline parameter as it is a 200..299 status code template(present) Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId, + template (present) CSeq p_cSeq ) modifies mw_Response_2xx_Base := { msgHeader := { pAccessNetworkInfo := omit @@ -4431,8 +4431,8 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is a 200..299 status code template(present) Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS( - template CallId p_callId, - template CSeq p_cSeq + template (present) CallId p_callId, + template (present) CSeq p_cSeq ) modifies mw_Response_2xx_Base := { msgHeader := { pMediaAuthorization := omit @@ -4441,8 +4441,8 @@ module LibIms_Templates { // NOTE STF471: removed statusline parameter as it is a fixed 200 status code template(present) Response mw_Response_200onREGISTER_IMS( - template CallId p_callId, - template CSeq p_cSeq, + template (present) CallId p_callId, + template (present) CSeq p_cSeq, template SipUrl p_ue_uri, template LibSip_SIPTypesAndValues.Contact p_contact, template SipUrl p_sut_scscf_uri diff --git a/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn index 88beed8..e89697b 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_Common.ttcn @@ -17,15 +17,12 @@ module LibSip_Common { charstring quotedString } - type record GenericParam + type record GenericParam { charstring id, GenValue paramValue optional } - - type set of GenericParam GenericParam_List; - // [?] type set of GenericParam SemicolonParam_List; diff --git a/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn index 332c989..066a605 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_MessageBodyTypes.ttcn @@ -52,11 +52,8 @@ module LibSip_MessageBodyTypes { charstring textplain, // if content type is text/plain (for testing long messages) SimpleMsgSummary simpleMsgSummary, // RFC 3842 octetstring smsMessage // encoded SMS message 3GPP 23.040, 24.011 - } with { - variant "" } - -} with { - variant "" - encode "SIPCodec" +} +with { + encode "SIPCodec"; variant ""; } diff --git a/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn index 3b9df4c..506cb03 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_PIXITS.ttcn @@ -12,12 +12,6 @@ module LibSip_PIXITS { // ____________________________ PIXIT-S_______________________________ group SIP_PIXITparameters { - - /** - * @desc Does IUT use Base64 for WWW-AUTHENTICATE - */ - modulepar boolean PX_SIP_AUTH_BASE64 := false; // FIXME To be move in PICS - group SDPParameter { /** diff --git a/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn index 1d866f5..a6d121f 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SDPTypes.ttcn @@ -1,6 +1,6 @@ /** * @author STF 346, STF366, STF368, STF369, STF450, STF471 - * @version $Id: LibSip_SDPTypes.ttcn 653 2017-12-14 11:16:59Z rennoch $ + * @version $Id$ * @desc This module defines message, attribute, structured and simple * SDP types as well constants used by LipSip constructs.
      * Note that any changes made to the definitions in this module @@ -399,8 +399,4 @@ module LibSip_SDPTypes { } // group MessageTypes } // group Types -} -with { - variant "" - encode "SIPCodec" } // end module LibSip_SDPTypes diff --git a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn index dc9243c..d4f23c2 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn @@ -1,6 +1,6 @@ /** * @author STF 346, STF366, STF368, STF369, STF450, STF471, STF160 - * @version $Id: LibSip_SIPTypesAndValues.ttcn 658 2018-06-14 06:44:44Z genoudoli $ + * @version $Id$ * @desc This module defines message, header, structured and simple SIP * types as well constants used by LipSip constructs.
      * Note that any changes made to the definitions in this module @@ -89,23 +89,6 @@ module LibSip_SIPTypesAndValues { // IMS ETSI name Simservs application(TIP/TIR, ACR, CDIV, OIP/OIR, CUG) const charstring c_imsEtsiSimservsApplication := "application/vnd.etsi.simservs+xml"; - const charstring c_imsEmergencyApplication := "application/pidf+xml"; - - // emergency-QueueState (ETSI TS 103 479) - const charstring c_emergency_QueueState := "application/vnd.emergency.queuestate+json"; - - // emergency-AbandonedCall (ETSI TS 103 479) - const charstring c_emergency_AbandonedCall := "application/vnd.emergency.abandonedcall+json"; - - // emergency-SecurityPosture (ETSI TS 103 479) - const charstring c_emergency_SecurityPosture := "application/vnd.emergency.securityposture+json"; - - // emergency-ElementState (ETSI TS 103 479) - const charstring c_emergency_ElementState := "application/vnd.emergency.elementstate+json"; - - // emergency-ServiceState (ETSI TS 103 479) - const charstring c_emergency_ServiceState := "application/vnd.emergency.Servicestate+json"; - // OCTET-STREAM name application const charstring c_octetApplication := "application/octet-stream"; @@ -925,7 +908,7 @@ module LibSip_SIPTypesAndValues { type record ContentType { FieldName fieldName (CONTENT_TYPE_E) , charstring mTypeSubtype , - SemicolonParam_List mParams optional + SemicolonParam_List mParams optional } // [20.16 ] @@ -1716,7 +1699,7 @@ module LibSip_SIPTypesAndValues { SubscriptionState subscriptionState optional, // 3265/7.2 Supported supported optional, - Timestamp timestamp_ optional, + Timestamp timestamp optional, To toField, Unsupported unsupported optional, // only in responses diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn index ba48241..720f5aa 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTemplates.ttcn @@ -70,7 +70,7 @@ module LibSip_SMSTemplates { iei := c_IEI_RP_UserData, iel := '0A'O, // the TPDU data length is 10 octets tP_PDU := {SMS_SUBMIT_REPORT := m_SMS_SUBMIT_REPORT} - } + } template(value) RP_UserData m_RP_UserData_STATUS_REPORT( template(value) TP_MessageReference_Type p_MessageRef, template(value) TP_Address_Type p_RecipientAddress, @@ -301,4 +301,4 @@ module LibSip_SMSTemplates { /* End SM-TP PDU Constraints */ } // group SMS_Templates_Group -} // End of module LibSip_SMSTypesAndValues +} // End of module LibSip_SMSTypesAndValues \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn index 71ddf4c..30f2526 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn @@ -480,6 +480,6 @@ module LibSip_SMSTypesAndValues { /* End SM-TP PDU Declarations */ } with { - encode "SMSTypes"; + encode "SMSCodec"; } // group SMS_Declarations } // End of module LibSip_SMSTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn index a4ecf1d..ca4a39f 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn @@ -54,8 +54,4 @@ module LibSip_SimpleMsgSummaryTypes { // type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes } -} -with { - variant "" - encode "SIPCodec" } \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn index 66c2f2e..ae36e95 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn @@ -1,6 +1,6 @@ /** * @author STF 346, STF366, STF368, STF369, STF450, STF471 - * @version $Id: LibSip_Steps.ttcn 645 2016-12-01 13:50:32Z pintar $ + * @version $Id$ * @desc This module provides the functions, altsteps and external functions used * for SIP-IMS tests. * This module is part of LibSipV3. @@ -59,20 +59,6 @@ module LibSip_Steps { charstring p_HEntity ) return charstring; - /** - * @desc External function to encode Base64 - */ - external function fx_encodeBase64( - in charstring p_value - ) return charstring; - - /** - * @desc External function to decode Base64 - */ - external function fx_decodeBase64( - in charstring p_value - ) return charstring; - } group ParameterOperations { @@ -86,11 +72,7 @@ module LibSip_Steps { var charstring v_tag_value; // tag_value is initialized with a random value with at least 32 bits of randomness // 4294967296 is a 32 bits integer - if (PX_SEED == false) { - v_tag_value := fx_rndStr() & fx_rndStr(); - } else { - v_tag_value := "12345"; - } + v_tag_value := fx_rndStr() & fx_rndStr(); return (v_tag_value); } @@ -114,29 +96,29 @@ module LibSip_Steps { var charstring v_uri := c_sipScheme & ":" & p_userprofile.registrarDomain; var CommaParam_List v_digestResponse := {}; // Construct credentials for an Authorization field of a request. - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "username", paramValue := { quotedString := v_username } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "realm", paramValue := { quotedString := v_realm } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "uri", paramValue := { quotedString := v_uri } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nonce", paramValue := { quotedString := "" } }); // already enclosed to " characters - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "response", paramValue := { quotedString := "" } }); // already enclosed to " characters if (p_algorithm) { - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "algorithm", paramValue := { tokenOrHost := PX_AUTH_ALGORITHM } }); // already enclosed to " characters @@ -198,44 +180,44 @@ module LibSip_Steps { v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); // Construct credentials for an Authorization field of a request. - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "username", paramValue := { quotedString := v_username } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "realm", paramValue := { quotedString := v_realm } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nonce", paramValue := { quotedString := v_nonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "uri", paramValue := { quotedString := v_uri } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "response", paramValue := { quotedString := v_response } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "algorithm", paramValue := { tokenOrHost := "md5" } }); // algorithm is not enclosed to " characters - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "cnonce", paramValue := { quotedString := v_cnonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "qop", paramValue := { tokenOrHost := v_qop } }); // qop - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nc", paramValue := { tokenOrHost := cl_nonceCount } }); // nonceCount if (v_opaque != "") { - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "opaque", paramValue := { quotedString := v_opaque } }); // already enclosed to " characters @@ -295,40 +277,40 @@ module LibSip_Steps { // calculate a digest response for the Authorize header v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "username", paramValue := { quotedString := v_username } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "realm", paramValue := { quotedString := v_realm } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nonce", paramValue := { quotedString := v_nonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "uri", paramValue := { quotedString := v_uri } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "algorithm", paramValue := { tokenOrHost := "md5" } }); // algorithm is not enclosed to " characters - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "cnonce", paramValue := { quotedString := v_cnonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "qop", paramValue := { tokenOrHost := v_qop } }); // qop - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nc", paramValue := { tokenOrHost := cl_nonceCount } }); // nonceCount if (v_opaque == "") { - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "opaque", paramValue := { quotedString := v_opaque } }); // already enclosed to " characters @@ -470,44 +452,44 @@ module LibSip_Steps { v_response := fx_calculateDigestResponse(v_nonce, v_cnonce, v_username, v_realm, v_passwd, v_algorithm, cl_nonceCount, p_method, v_qop, v_uri, cl_hEntity); // Construct credentials for an Authorization field of a request. - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "username", paramValue := { quotedString := "DifferentToPrivateUser" } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "realm", paramValue := { quotedString := v_realm } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nonce", paramValue := { quotedString := v_nonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "uri", paramValue := { quotedString := v_uri } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "response", paramValue := { quotedString := v_response } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "algorithm", paramValue := { tokenOrHost := "md5" } }); // algorithm is not enclosed to " characters - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "cnonce", paramValue := { quotedString := v_cnonce } }); - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "qop", paramValue := { tokenOrHost := v_qop } }); // qop - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "nc", paramValue := { tokenOrHost := cl_nonceCount } }); if (v_opaque != "") { - v_digestResponse := f_addCommaParameter(v_digestResponse, { + v_digestResponse := f_addParameter(v_digestResponse, { id := "opaque", paramValue := { quotedString := "" } }); // already enclosed to " characters @@ -606,22 +588,6 @@ module LibSip_Steps { return v_newParamList; } - /** - * @desc Function to add a parameter to CommaParam_List - * @param p_param_l SemicolonParam_List - * @return SemicolonParam_List new parameter list - */ - function f_addCommaParameter( - CommaParam_List p_param_l, - GenericParam p_genparam - ) - return CommaParam_List { - var CommaParam_List v_newParamList := p_param_l; - var integer v_numberOfParams := lengthof(p_param_l); - v_newParamList[v_numberOfParams] := p_genparam; - return v_newParamList; - } - /** * @desc Function to extract paramValue related to id from CommanParam_List containing challenge. * @param p_challenge parameter from 4xx response @@ -742,10 +708,10 @@ module LibSip_Steps { var integer i; if (isvalue(p_recordRoute)) { - v_size_recordRoute := lengthof(valueof(p_recordRoute.routeBody)); + v_size_recordRoute := lengthof(valueof(p_recordRoute).routeBody); } for (i := 1; i < v_size_recordRoute + 1; i := i + 1) { - v_recordRoute.routeBody[i] := valueof(p_recordRoute.routeBody[i - 1]); + v_recordRoute.routeBody[i] := valueof(p_recordRoute).routeBody[i - 1]; } return (v_recordRoute); @@ -1003,12 +969,7 @@ module LibSip_Steps { */ function f_getRndCallId( ) return charstring { - var charstring v_tag_value; - if (PX_SEED == false) { - v_tag_value := fx_rndStr() & fx_rndStr(); - } else { - v_tag_value := "w6TwtB9L64FzfYrTBBuamJX9PE7rBdCWZI7AyTWwrAYw"; - } + var charstring v_tag_value := fx_rndStr() & fx_rndStr(); // v_tag_value is initialized with a random value with at least 32 bits of randomness // 4294967296 is a 32 bits integer // v_tag_value := int2str(float2int(4294967296.0*rnd()) + loc_CSeq_s.seqNumber ); @@ -1312,17 +1273,10 @@ module LibSip_Steps { vc_reqHostPort := vc_requestUri.components.sip.hostPort; - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; vc_callIdReg := vc_callId; // remember callId for de-registration vc_to := valueof(m_To(m_SipUrl_currDomain(vc_userprofile))); vc_cancel_To := vc_to; @@ -1383,6 +1337,7 @@ module LibSip_Steps { // Increment CSeq sequence number p_cSeq_s.seqNumber := p_cSeq_s.seqNumber + 1; vc_cSeq := p_cSeq_s; + vc_requestUri := { scheme := c_sipScheme, components := { @@ -1409,6 +1364,7 @@ module LibSip_Steps { // Extract challenge and calculate credentials for a response. v_challenge := vc_response.msgHeader.wwwAuthenticate.challenge.digestCln; + // Prepair right answer vc_authorization := { fieldName := AUTHORIZATION_E, @@ -1553,17 +1509,11 @@ module LibSip_Steps { inout CSeq p_cSeq_s ) runs on SipComponent { f_setHeadersGeneral(p_cSeq_s, "INVITE"); // cseq, contact, branch, via - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + vc_cancel_To := vc_to; vc_caller_To := vc_to; @@ -1591,17 +1541,11 @@ module LibSip_Steps { inout CSeq p_cSeq_s ) runs on SipComponent { f_setHeadersGeneral(p_cSeq_s, "UPDATE"); // cseq, contact, branch, via - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + vc_cancel_To := vc_to; vc_caller_To := vc_to; @@ -1618,17 +1562,11 @@ module LibSip_Steps { inout CSeq p_cSeq_s ) runs on SipComponent { f_setHeadersGeneral(p_cSeq_s, "MESSAGE"); // cseq, contact, branch, via - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + vc_cancel_To := vc_to; vc_caller_To := vc_to; @@ -1652,21 +1590,6 @@ module LibSip_Steps { vc_reqHostPort := vc_requestUri.components.sip.hostPort; } // end function f_setHeadersNOTIFY - /** - * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) - * @param p_cSeq_s - */ - function f_setHeadersOPTIONS( - inout CSeq p_cSeq_s - ) runs on SipComponent { - f_setHeadersGeneral(p_cSeq_s, "OPTIONS"); // cseq, contact, branch, via - vc_cancel_To := vc_to; - vc_caller_To := vc_to; - vc_caller_From := vc_from; - - vc_reqHostPort := vc_requestUri.components.sip.hostPort; - } // end function f_setHeadersOPTIONS - /** * @desc setting of general and basic Publish header fields in additon to the addresses (To, From, ReqUri) * @param p_cSeq_s @@ -1699,17 +1622,11 @@ module LibSip_Steps { vc_reqHostPort := vc_requestUri.components.sip.hostPort; - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + // store callId from Subscribe message vc_callIdSub := vc_callId; @@ -1737,17 +1654,11 @@ module LibSip_Steps { inout CSeq p_cSeq_s ) runs on SipComponent { f_setHeadersGeneral(p_cSeq_s, "SUBSCRIBE"); // cseq, contact, branch, via - if (PX_SEED) { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() - }; - } else { - vc_callId := { - fieldName := CALL_ID_E, - callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr - }; - } + vc_callId := { + fieldName := CALL_ID_E, + callid := f_getRndCallId() & c_AT & vc_userprofile.currIpaddr + }; + vc_cancel_To := vc_to; vc_caller_To := vc_to; @@ -1808,7 +1719,7 @@ module LibSip_Steps { fromParams := vc_caller_To.toParams }; - if (ispresent(p_Request.msgHeader.authorization)) { + if (isvalue(p_Request.msgHeader.authorization)) { vc_authorization := valueof(p_Request.msgHeader.authorization); } } // end f_setHeadersOnReceiptOfREGISTER @@ -2017,7 +1928,7 @@ module LibSip_Steps { }; vc_caller_To := vc_to; } - if (ispresent(p_Request.msgHeader.recordRoute.fieldName)) {//Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present + if (isvalue(p_Request.msgHeader.recordRoute.fieldName)) {//Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present vc_boo_recordRoute := true; vc_recordRoute := p_Request.msgHeader.recordRoute; } @@ -2153,15 +2064,6 @@ module LibSip_Steps { var integer i, j, v_nbroute; var template(omit) ServiceRoute v_serviceRoute; - // Sanity check - if (ispresent(p_response.msgHeader.serviceRoute) == false) { - log("WARNING f_getServiceRouteMapIntoRouteInRegistration: Service-Route header not present"); - vc_route := omit; - vc_route_REG := omit; - vc_boo_route := false; - return; - } - // Route Management if (isvalue(p_response.msgHeader.serviceRoute.fieldName)) {////Due to ES 201 873-1/C.3.3 Better to check if fieldName of Record Route is present v_serviceRoute := p_response.msgHeader.serviceRoute; @@ -2455,12 +2357,10 @@ module LibSip_Steps { inout SDP_Message p_sdp, in SDP_attribute p_att ) { - var integer v_mn := 0; + var integer v_mn; if (isvalue(p_sdp.media_list)) { - if(ispresent(p_sdp.media_list[0].attributes)) { v_mn := lengthof(p_sdp.media_list[0].attributes); - } - p_sdp.media_list[0].attributes[v_mn] := p_att; + p_sdp.media_list[0].attributes[v_mn] := p_att; } } @@ -2476,16 +2376,6 @@ module LibSip_Steps { p_loc_SDP.media_list[v_mn] := valueof(p_loc_media); } - /** - * @desc append new connection to the existing connection list in SDP - */ - function f_set_connectiom( - inout SDP_Message p_loc_SDP, - template(value) SDP_connection p_connection - ) { - p_loc_SDP.connection := valueof(p_connection); - } - /** * @desc repare media/attribute lines */ @@ -2832,8 +2722,8 @@ module LibSip_Steps { setverdict(pass); log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); } - if (not(isbound(p_direction_out))) - // STF549 if (match(omit, p_direction_out)) + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO { v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); } @@ -2867,8 +2757,8 @@ module LibSip_Steps { setverdict(pass); log("*** " &__SCOPE__& ": INFO: attribute found in message body ***"); } - if (not(isbound(p_direction_out))) - // STF549 if (match(omit, p_direction_out)) + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO { v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); } @@ -2898,8 +2788,8 @@ module LibSip_Steps { setverdict(fail); } } - if (not(isbound(p_direction_out))) - // STF549 if (match(omit, p_direction_out)) + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO { v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in); } @@ -2928,8 +2818,8 @@ module LibSip_Steps { setverdict(fail); } } - if (not(isbound(p_direction_out))) - // STF549 if (match(omit, p_direction_out)) + if (not isbound(p_direction_out)) + // not isvalue(v_direction_out))//MRO { v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in); } @@ -3105,7 +2995,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_register) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_register) -> value v_request sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfREGISTER(v_request); } @@ -3127,11 +3017,11 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_subscribe) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_subscribe) -> value v_request sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfSUBSCRIBE(v_request); } - [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { tc_wait.stop; setverdict(fail); f_setHeadersOnReceiptOfSUBSCRIBE(v_request); @@ -3152,7 +3042,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_register) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_register) -> value v_request sender vc_sent_label { tc_wait.stop; vc_request := v_request; f_setHeadersOnReceiptOfREGISTER(v_request); @@ -3223,7 +3113,6 @@ module LibSip_Steps { // setverdict(pass) } [] SIPP.receive(mw_Response_Base(c_statusLine100, vc_callId, vc_cSeq)) -> value vc_response { - log("f_awaitingResponseIgnore100Trying: Skip 100"); repeat; } } @@ -3285,7 +3174,6 @@ module LibSip_Steps { tc_resp.start; tc_wait.start(PX_SIP_TWAIT); - log(">>> function f_awaitingOkResponseAndNOTIFY_sendReply: ", vc_sent_label); alt { [] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s)) -> value vc_response { tc_resp.stop; @@ -3297,7 +3185,7 @@ module LibSip_Steps { repeat; } } - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_getRouteMapIntoRecordRoute(v_MSG); f_setHeadersOnReceiptOfRequest(v_MSG); @@ -3321,7 +3209,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_info) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_info) -> value v_request sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_request); // Answer to the INFO @@ -3341,14 +3229,14 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_invite := true; vc_first_recv := true; // communication has started f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); SIPP.send(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_from, vc_to, vc_via)) to vc_sent_label; } - [vc_interface_isc] SIPP.receive(mw_INVITE_Request_Base) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [vc_interface_isc] SIPP.receive(mw_INVITE_Request_Base) -> value v_INVITE_Request sender vc_sent_label { tc_wait.stop; setverdict(fail); f_setHeadersOnReceiptOfINVITE(v_INVITE_Request); @@ -3376,7 +3264,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_invite := true; vc_first_recv := true; // communication has started @@ -3397,7 +3285,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_request) -> value v_INVITE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_request) -> value v_INVITE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_invite := true; vc_first_recv := true; // communication has started @@ -3451,7 +3339,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_bye := true; f_setHeadersOnReceiptOfBYE(v_BYE_Request); @@ -3471,7 +3359,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_bye := true; f_setHeadersOnReceiptOfBYE(v_BYE_Request); @@ -3491,7 +3379,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_BYE) -> value v_BYE_Request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_BYE) -> value v_BYE_Request sender vc_sent_label { tc_wait.stop; vc_ignore_bye := true; vc_boo_request := true; @@ -3515,7 +3403,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_CANCEL) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_CANCEL) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); } @@ -3531,11 +3419,11 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); } - [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); log("*** " &__SCOPE__& ": INFO: Received MESSAGE not as expected! ***"); @@ -3553,7 +3441,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_MESSAGE_Request_Base) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the MESSAGE @@ -3572,7 +3460,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the MESSAGE @@ -3598,7 +3486,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_getRouteMapIntoRecordRoute(v_MSG); f_setHeadersOnReceiptOfRequest(v_MSG); @@ -3610,15 +3498,16 @@ module LibSip_Steps { * @desc await NOTIFY request reply with 200 OK */ function f_awaitingNOTIFY_sendReply( - in template(present) NOTIFY_Request p_MSG := ?, - out NOTIFY_Request p_MSG_recv + in template(present) NOTIFY_Request p_MSG := ? ) runs on SipComponent { + var NOTIFY_Request v_MSG; + tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value p_MSG_recv /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; - f_getRouteMapIntoRecordRoute(p_MSG_recv); - f_setHeadersOnReceiptOfRequest(p_MSG_recv); + f_getRouteMapIntoRecordRoute(v_MSG); + f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the NOTIFY f_send200OK(); } @@ -3632,7 +3521,7 @@ module LibSip_Steps { tc_wait.start(5.0); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_getRouteMapIntoRecordRoute(v_MSG); f_setHeadersOnReceiptOfRequest(v_MSG); @@ -3655,7 +3544,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the PRACK @@ -3676,7 +3565,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); } @@ -3693,7 +3582,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the PUBLISH @@ -3712,7 +3601,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); } @@ -3729,7 +3618,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the UPDATE @@ -3754,7 +3643,7 @@ module LibSip_Steps { tc_wait.start(PX_SIP_TWAIT); alt { - [] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { tc_wait.stop; f_setHeadersOnReceiptOfREFER(v_MSG); } @@ -3776,7 +3665,6 @@ module LibSip_Steps { ) runs on SipComponent { // p_request.msgHeader.route := f_route(); // update the route header field depending on vc_boo_route // n/a p_request.msgHeader.recordRoute := f_recordroute(); // update the route header field depending on vc_boo_route - log(">>> f_SendACK: vc_sent_label=", vc_sent_label); SIPP.send(p_request) to vc_sent_label; } @@ -3819,7 +3707,6 @@ module LibSip_Steps { template(value) INVITE_Request p_request ) runs on SipComponent { vc_requestFor407 := valueof(p_request); - log(">>> f_SendINVITE: vc_sent_label=", vc_sent_label); SIPP.send(p_request) to vc_sent_label; vc_request := vc_requestFor407; if (PX_SIP_INVITE_AUTHENTICATION_ENABLED) { @@ -3916,16 +3803,6 @@ module LibSip_Steps { SIPP.send(p_request) to vc_sent_label; } - /** - * @desc function send OPTIONS message - * @param p_request template of the notify to be sent - */ - function f_SendOPTIONS( - template(value) OPTIONS_Request p_request - ) runs on SipComponent { - SIPP.send(p_request) to vc_sent_label; - } - /** * @desc send REFER message * @param p_request template of the message to be sent @@ -3936,21 +3813,11 @@ module LibSip_Steps { SIPP.send(p_request) to vc_sent_label; } - /** - * @desc send 100 TRYING - */ - function f_send100TRYING( - ) runs on SipComponent { - log(">>> f_send100TRYING"); - f_sendResponse(m_Response_Base(c_statusLine100, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); - } - /** * @desc send 200 OK */ function f_send200OK( ) runs on SipComponent { - log(">>> f_send200OK"); f_sendResponse(m_Response_Base(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via)); } @@ -4304,12 +4171,12 @@ module LibSip_Steps { tc_wait.start(2.0); // awaiting of all SUBSCRIBES alt { - [] SIPP.receive(p_subscribe) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_subscribe) -> value v_request sender vc_sent_label { f_setHeadersOnReceiptOfSUBSCRIBE(v_request); f_send200OK(); repeat; } - [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_request sender vc_sent_label { f_setHeadersOnReceiptOfSUBSCRIBE(v_request); f_send200OK(); repeat; @@ -4447,7 +4314,7 @@ module LibSip_Steps { in template(present) CANCEL_Request p_CANCEL := ? ) runs on SipComponent { var CANCEL_Request v_MSG; - [] SIPP.receive(p_CANCEL) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(p_CANCEL) -> value v_MSG sender vc_sent_label { f_setHeadersOnReceiptOfRequest(v_MSG); // Answer to the CANCEL f_send200OK(); @@ -4459,7 +4326,7 @@ module LibSip_Steps { inout boolean p_receivedNotify ) runs on SipComponent { var NOTIFY_Request v_MSG; - [vc_subscribed] SIPP.receive(p_MSG) -> value v_MSG /*TODO Dynami error: sender vc_sent_label*/ { + [vc_subscribed] SIPP.receive(p_MSG) -> value v_MSG sender vc_sent_label { p_receivedNotify := true; f_getRouteMapIntoRecordRoute(v_MSG); f_setHeadersOnReceiptOfRequest(v_MSG); @@ -4875,7 +4742,7 @@ module LibSip_Steps { repeat; } // ignore 181 if flag is set (following TS 183004 4.5.2.1) - [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + [vc_ignore181] SIPP.receive(mw_Response_Base(c_statusLine181, vc_callId, vc_cSeq)) -> value v_response sender vc_sent_label { v_cSeq := valueof(v_response.msgHeader.cSeq); f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory repeat; @@ -4888,7 +4755,7 @@ module LibSip_Steps { [vc_ignore484] SIPP.receive(mw_Response_Base(c_statusLine484, vc_callId, vc_cSeq)) { repeat; } - [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + [vc_ignore4xx] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { v_cSeq := valueof(v_response.msgHeader.cSeq); f_setHeadersOnReceiptOfResponse(v_response); // CSeq is mandatory f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route)); @@ -4897,25 +4764,25 @@ module LibSip_Steps { [vc_ignore200OKinv] SIPP.receive(mw_Response_Base(c_statusLine200, vc_callId, ?)) { repeat; } - [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_INFO_Request_Base(vc_callId)) -> value v_info_request sender vc_sent_label { f_setHeadersOnReceiptOfRequest(v_info_request); f_send200OK(); repeat; } // awaiting of Notify - [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_NOTIFY_Request_Base(vc_callId)) -> value v_notify_request sender vc_sent_label { f_setHeadersOnReceiptOfRequest(v_notify_request); f_send200OK(); repeat; } // awaiting of subscribe from UE - [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*TODO Dynami error: sender vc_sent_label*/ { + [vc_ignore_subscribe] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { f_setHeadersOnReceiptOfSUBSCRIBE(v_subscribe_request); f_send200OK(); repeat; } // awaiting of subscribe on proxy - [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_SUBSCRIBE_Request_Base) -> value v_subscribe_request sender vc_sent_label { f_setHeadersOnReceiptOfRequest(v_subscribe_request); f_sendResponse(m_Response_Contact(c_statusLine200, vc_callId, vc_cSeq, vc_callee_From, vc_callee_To, vc_via, vc_contact)); // f_setHeadersGeneral(vc_cSeq, "NOTIFY"); // cseq, contact, branch, via @@ -4925,14 +4792,14 @@ module LibSip_Steps { repeat; } // unexpected BYE is acknowledged to avoid retransmissions - [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_BYE_Request_Base(?)) -> value v_bye_request sender vc_sent_label { setverdict(fail); f_setHeadersOnReceiptOfRequest(v_bye_request); f_send200OK(); f_RemoveRegistration(vc_cSeq); } // unexpected CANCEL is acknowledged to avoid retransmissions - [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_CANCEL_Request_Base(?)) -> value v_cancel_request sender vc_sent_label { setverdict(fail); f_setHeadersOnReceiptOfRequest(v_cancel_request); // Answer to the CANCEL @@ -4940,7 +4807,7 @@ module LibSip_Steps { f_RemoveRegistration(vc_cSeq); } // catch 4xx response - [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?)) -> value v_response sender vc_sent_label { setverdict(fail); if (v_response.msgHeader.cSeq.method == "INVITE") { v_cSeq := valueof(v_response.msgHeader.cSeq); @@ -4951,7 +4818,7 @@ module LibSip_Steps { f_RemoveRegistration(vc_cSeq); } // catch 5xx response - [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?)) -> value v_response sender vc_sent_label { setverdict(fail); if (v_response.msgHeader.cSeq.method == "INVITE") { v_cSeq := valueof(v_response.msgHeader.cSeq); @@ -4962,7 +4829,7 @@ module LibSip_Steps { f_RemoveRegistration(vc_cSeq); } // catch invalid REGISTER - [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request /*TODO Dynami error: sender vc_sent_label*/ { + [] SIPP.receive(mw_REGISTER_Request_Base) -> value v_register_request sender vc_sent_label { setverdict(fail); f_componentStop(); } diff --git a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn index 938ad29..3e00e24 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn @@ -1,6 +1,6 @@ /** * @author STF 346, STF366, STF368, STF369, STF450, STF471 - * @version $Id: LibSip_Templates.ttcn 656 2018-02-16 08:32:25Z genoudoli $ + * @version $Id$ * @desc This module defines SIP Templates for message, header, and * structured types.
      * Note that any changes made to the definitions in this module @@ -451,7 +451,7 @@ module LibSip_Templates { } template(present) SipUrl mw_SipUrl_Host( - template charstring p_host + template(present) charstring p_host := ? ) modifies mw_SipUrl := { components := { sip := { @@ -463,7 +463,7 @@ module LibSip_Templates { template(present) SipUrl mw_SipUrl_User_Host( template(present) charstring p_user := ?, - template charstring p_host + template(present) charstring p_host := ? ) modifies mw_SipUrl := { components := { sip := { @@ -474,7 +474,7 @@ module LibSip_Templates { } } }, - urlParameters := {m_UserPhone} + urlParameters := * // FSCOM Strange {m_UserPhone} } template(present) SipUrl mw_SipUrl_Anonymous modifies mw_SipUrl := { @@ -560,7 +560,7 @@ module LibSip_Templates { } } }, - urlParameters := {m_UserPhone}, + urlParameters := *, // FSCOM: Strange: {m_UserPhone}, headers := * } } @@ -580,6 +580,12 @@ module LibSip_Templates { addrSpecUnion := mw_SipUrl_User_Host(p_user, p_host) } + template(present) Addr_Union mw_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + addrSpecUnion := mw_TelSipUrl_Number(p_number) + } + } //* end group Subfields @@ -626,6 +632,13 @@ module LibSip_Templates { body := {p_credentials} } + template(present) Authorization mw_Authorization( + template(present) Credentials p_credentials := ? + ) := { + fieldName := AUTHORIZATION_E, + body := {p_credentials} + } + template(value) Authorization m_Authorization_digest( template(value) CommaParam_List p_commaParam_List ) := { @@ -768,8 +781,6 @@ module LibSip_Templates { template(value) Event m_Event_cdiv modifies m_Event_base := {eventType := "comm-div-info"} - template(value) Event m_Event_QueueState modifies m_Event_base := {eventType := "emergency-QueueState"} - template(value) Event m_Event_mcid := m_Event_cdiv; template(value) Expires m_Expires_base := { @@ -1158,7 +1169,7 @@ module LibSip_Templates { template(present) To mw_To_NameAddr_SipUrl( template DisplayName p_dn, template(present) charstring p_user := ?, - template charstring p_host + template charstring p_host := ? ) := { fieldName := TO_E, addressField := (mw_AddrUnion_Nameaddr(p_dn, p_user, p_host), mw_AddrUnion_SipUrl(p_user, p_host)), @@ -1330,24 +1341,7 @@ module LibSip_Templates { ) } - /* template (omit) Geolocation m_geolocation( */ - /* in template (value) SipUrl p_addrSpec, */ - /* in template (omit) SemicolonParam_List p_geolocParam := omit */ - /* ) := { */ - /* fieldName := GEOLOCATION_E, */ - /* addrSpec := p_addrSpec, */ - /* geolocParam := p_geolocParam */ - /* } // End of template m_geolocation */ - - /* template Geolocation mw_geolocation( */ - /* template (present) SipUrl p_addrSpec := ?, */ - /* template SemicolonParam_List p_geolocParam := * */ - /* ) := { */ - /* fieldName := GEOLOCATION_E, */ - /* addrSpec := p_addrSpec, */ - /* geolocParam := p_geolocParam */ - /* } // End of template mw_geolocation */ - + } //* end of group HeaderFieldTemplates @@ -1397,7 +1391,7 @@ module LibSip_Templates { geolocation := omit, geolocationRouting := omit, historyInfo := omit, //* RFC4244 - infoPackage := omit, + infoPackage := omit, inReplyTo := omit, maxForwards := c_maxForwards70, mimeVersion := omit, @@ -1426,7 +1420,7 @@ module LibSip_Templates { rSeq := omit, reason := omit, recordRoute := omit, - recvInfo := omit, + recvInfo := omit, requestDisposition := omit, referredBy := omit, //* RFC3892 - REFER method referTo := omit, //* RFC3515 - REFER method @@ -1448,7 +1442,7 @@ module LibSip_Templates { subject := omit, subscriptionState := omit, //* RFC3265 supported := omit, - timestamp_ := omit, + timestamp := omit, toField := c_empty_To, unsupported := omit, userToUser := omit, @@ -1456,12 +1450,12 @@ module LibSip_Templates { via := c_empty_Via, warning := omit, wwwAuthenticate := omit, - resourcePriority := omit, - answerMode := omit, - privAnswerMode := omit, - targetDialog := omit, - pAnswerState := omit, - undefinedHeader_List := omit + resourcePriority := omit, + answerMode := omit, + privAnswerMode := omit, + targetDialog := omit, + pAnswerState := omit, + undefinedHeader_List := omit } @@ -1505,7 +1499,7 @@ module LibSip_Templates { geolocation := *, geolocationRouting := *, historyInfo := *, //* RFC4244 - infoPackage := *, + infoPackage := *, inReplyTo := *, maxForwards := *, mimeVersion := *, @@ -1534,7 +1528,7 @@ module LibSip_Templates { rSeq := *, reason := *, recordRoute := *, - recvInfo := *, + recvInfo := *, requestDisposition := *, referredBy := *, //* RFC3892 - REFER method referTo := *, //* RFC3515 - REFER method @@ -1556,7 +1550,7 @@ module LibSip_Templates { subject := *, subscriptionState := *, //* RFC3265 supported := *, - timestamp_ := *, + timestamp := *, toField := ?, unsupported := *, userToUser := *, @@ -1564,11 +1558,11 @@ module LibSip_Templates { via := ?, warning := *, wwwAuthenticate := *, - resourcePriority := *, - answerMode := *, - privAnswerMode := *, - targetDialog := *, - pAnswerState := *, + resourcePriority := *, + answerMode := *, + privAnswerMode := *, + targetDialog := *, + pAnswerState := *, undefinedHeader_List := * } @@ -1824,19 +1818,21 @@ module LibSip_Templates { } template(value) ContentType m_contentType( - template(value) charstring p_mTypeSubtype + template(value) charstring p_mTypeSubtype, + template(omit) SemicolonParam_List p_mParams := omit ) := { fieldName := CONTENT_TYPE_E, mTypeSubtype := p_mTypeSubtype, - mParams := omit + mParams := p_mParams } template(present) ContentType mw_contentType( - in template(present) charstring p_mTypeSubtype := ? + in template(present) charstring p_mTypeSubtype := ?, + in template SemicolonParam_List p_mParams := * ) := { fieldName := CONTENT_TYPE_E, mTypeSubtype := p_mTypeSubtype, - mParams := * + mParams := p_mParams } group request_send { @@ -1971,7 +1967,7 @@ module LibSip_Templates { } } - template(omit) NOTIFY_Request m_NOTIFY_Request_Base( + template(value) NOTIFY_Request m_NOTIFY_Request_Base( template(value) SipUrl p_requestUri, template(omit) CallId p_callId := omit, template(omit) CSeq p_cSeq := omit, @@ -2228,25 +2224,25 @@ module LibSip_Templates { group request_receive { template(present) ACK_Request mw_ACK_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_ACK_Dummy := { msgHeader := {callId := p_callId} } template(present) BYE_Request mw_BYE_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_BYE_Dummy := { msgHeader := {callId := p_callId} } template(present) CANCEL_Request mw_CANCEL_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_CANCEL_Dummy := { msgHeader := {callId := p_callId} } template(present) INFO_Request mw_INFO_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_INFO_Dummy := { msgHeader := {callId := p_callId} } @@ -2256,37 +2252,37 @@ module LibSip_Templates { template(present) MESSAGE_Request mw_MESSAGE_Request_Base modifies mw_MESSAGE_Dummy := {msgHeader := {contact := *}} template(present) NOTIFY_Request mw_NOTIFY_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_NOTIFY_Dummy := { msgHeader := {callId := p_callId} } template(present) OPTIONS_Request mw_OPTIONS_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_OPTIONS_Dummy := { msgHeader := {callId := p_callId} } template(present) PRACK_Request mw_PRACK_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_PRACK_Dummy := { msgHeader := {callId := p_callId} } template(present) PUBLISH_Request mw_PUBLISH_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_PUBLISH_Dummy := { msgHeader := {callId := p_callId} } template(present) REFER_Request mw_REFER_Request_Base( - template CallId p_callId + template CallId p_callId := ? ) modifies mw_REFER_Dummy := { msgHeader := {callId := p_callId} } template(present) REFER_Request mw_REFER_Request( - template CallId p_callId, + template CallId p_callId := ?, template(value) SipUrl p_requestUri, template(value) SipUrl p_referredBy ) modifies mw_REFER_Request_Base := { @@ -2365,8 +2361,8 @@ module LibSip_Templates { template(present) Response mw_Response_Base( template(present) StatusLine p_statusLine := ?, - template CallId p_callId, - template CSeq p_cSeq + template CallId p_callId := *, + template CSeq p_cSeq := * ) modifies mw_Response_Dummy := { statusLine := p_statusLine, msgHeader := { @@ -2413,9 +2409,9 @@ module LibSip_Templates { } } - template(present) Response mw_Response_2xx_Base( - template CallId p_callId, - template CSeq p_cSeq + template (present) Response mw_Response_2xx_Base( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ? ) modifies mw_Response_1xx_Base := { statusLine := mw_statusLine2xx } @@ -2625,75 +2621,53 @@ module LibSip_Templates { } } - template(value) NOTIFY_Request m_NOTIFY_QueueState( + template(value) NOTIFY_Request m_NOTIFY_Request_sipfrag( template(value) SipUrl p_requestUri, template(omit) CallId p_callId := omit, template(omit) CSeq p_cSeq := omit, template(value) From p_from, template(value) To p_to, template(value) Via p_via, - template(value) MessageBody p_messageBody, - template(omit) Contact p_contact := omit + template(value) charstring p_state, + template(value) charstring p_sipfrag ) modifies m_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := { + //scheme := ?, FSCOM Not allowed here + components := { + sip := { + userInfo := omit,//*, FSCOM Not allowed here + hostPort := p_requestUri.components.sip.hostPort + } + } + } + }, msgHeader := { - contact := p_contact, - contentLength := m_contentLength(f_MessageBodyLength(p_messageBody)), - contentType := m_contentType(c_emergency_QueueState), - event := m_Event_QueueState, - subscriptionState := m_SubscriptionState_active + contentLength := m_contentLength(lengthof(p_sipfrag)), // STF471 + // {fieldName + // := + // CONTENT_LENGTH_E, + // len:= + // lengthof(p_sipfrag)}, + contentType := m_contentType(c_sipfragMessage), // STF471 + // {fieldName + // := + // CONTENT_TYPE_E, + // mTypeSubtype + // := + // "message/sipfrag"}, + subscriptionState := { + fieldName := SUBSCRIPTION_STATE_E, + subState := p_state, + substateParams := omit + }, + event := m_Event_refer }, - messageBody := p_messageBody - } - -// FIXME STF549: : Titan error: Restriction on template definition does not allow usage of any value - -// template(omit) NOTIFY_Request m_NOTIFY_Request_sipfrag( -// template(value) SipUrl p_requestUri, -// template(omit) CallId p_callId := omit, -// template(omit) CSeq p_cSeq := omit, -// template(value) From p_from, -// template(value) To p_to, -// template(value) Via p_via, -// template(value) charstring p_state, -// template(value) charstring p_sipfrag -// ) modifies m_NOTIFY_Request_Base := { -// requestLine := { -// method := NOTIFY_E, -// requestUri := { -// scheme := ?, -// components := { -// sip := { -// userInfo := omit, -// hostPort := p_requestUri.components.sip.hostPort -// } -// } -// } -// }, -// msgHeader := { -// contentLength := m_contentLength(lengthof(p_sipfrag)), // STF471 -// // {fieldName -// // := -// // CONTENT_LENGTH_E, -// // len:= -// // lengthof(p_sipfrag)}, -// contentType := m_contentType(c_sipfragMessage), // STF471 -// // {fieldName -// // := -// // CONTENT_TYPE_E, -// // mTypeSubtype -// // := -// // "message/sipfrag"}, -// subscriptionState := { -// fieldName := SUBSCRIPTION_STATE_E, -// subState := p_state, -// substateParams := omit -// }, -// event := m_Event_refer -// }, -// messageBody := {sipfrag := p_sipfrag} -// } - - template(omit) UPDATE_Request m_UPDATE_Request_route( + messageBody := {sipfrag := p_sipfrag} + } + + template(value) UPDATE_Request m_UPDATE_Request_route( template(value) SipUrl p_requestUri, template(omit) CallId p_callId := omit, template(omit) CSeq p_cSeq := omit, @@ -3565,7 +3539,7 @@ module LibSip_Templates { template(present) SDP_attribute mw_attribute_inactive := {inactive := {}} // MRO template(present) SDP_attribute mw_attribute_sendonly_inactive := (mw_attribute_sendonly, mw_attribute_inactive); - template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly, *); + template SDP_attribute mw_attribute_sendrecv_recvonly_omit := (mw_attribute_sendrecv, mw_attribute_recvonly, omit); template(value) SDP_attribute m_attribute_base( template(value) SDP_attribute_rtpmap p_attr_value ) := { @@ -3799,33 +3773,12 @@ module LibSip_Templates { { content_type := c_sdpApplication, content_disposition := omit, + content_id := omit, mime_encapsulated_part := {sdpMessageBody := p_sdp} }, { content_type := c_ims3gppCwApplication, content_disposition := omit, - mime_encapsulated_part := {xmlBody := p_xmlBody} - } - } - } - } - - template(value) MessageBody m_MBody_MIMESdpXml_Emergency( - template(value) SDP_Message p_sdp, - template(value) XmlBody p_xmlBody - ) := { - mimeMessageBody := { - boundary := "--" & PX_SIP_MIME_BOUNDARY, - mimeEncapsulatedList := { - { - content_type := c_sdpApplication, - content_disposition := omit, - content_id := omit, - mime_encapsulated_part := {sdpMessageBody := p_sdp} - }, - { - content_type := c_imsEmergencyApplication, - content_disposition := omit, content_id := omit, mime_encapsulated_part := {xmlBody := p_xmlBody} } @@ -3842,6 +3795,7 @@ module LibSip_Templates { { content_type := "application/sdp", content_disposition := "attachment;handling=required;filename=smime.p7", + content_id := omit, mime_encapsulated_part := {sdpMessageBody := p_sdp} } } @@ -3876,11 +3830,13 @@ module LibSip_Templates { { content_type := ?, content_disposition := *, + content_id := *, mime_encapsulated_part := {sdpMessageBody := p_sdp} }, { content_type := ?, content_disposition := *, + content_id := *, mime_encapsulated_part := {xmlBody := p_xmlBody} } } @@ -3898,6 +3854,7 @@ module LibSip_Templates { { content_type := c_ims3gppApplication, content_disposition := p_disposition, + content_id := *, mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} }, * @@ -3916,6 +3873,7 @@ module LibSip_Templates { { content_type := c_ims3gppCwApplication, content_disposition := p_disposition, + content_id := *, mime_encapsulated_part := {xmlBody := {ims3gpp := p_ims3gpp}} }, * @@ -3942,7 +3900,6 @@ module LibSip_Templates { ) return integer { var integer v_result := 0; - log(">>> f_MessageBodyLength:", p_mb_par); if (PX_MB_LENGTH_FROM_ENCVAL) { // by default it is set to true // in case the codec encodes the variant selector, this @@ -4647,7 +4604,7 @@ module LibSip_Templates { ) runs on SipComponent return template(omit) Route { var template(omit) Route v_route := omit; - if ((vc_boo_route) and isbound(vc_route)) { + if (vc_boo_route) { return vc_route; } else { -- GitLab From ad5469ca07053316195054cd704920171e407572 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 31 Jul 2023 15:33:17 +0200 Subject: [PATCH 53/84] Titanization of Diameter TPs --- titan-test-system-framework | 2 +- .../AtsImsIot_Diameter_Templates.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 1339 +++++--- ttcn/AtsImsIot/AtsImsIot_Functions.ttcn | 20 +- ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 158 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 43 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 82 +- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 99 + .../AtsImsIot_TP_behavior_MW_EC.ttcn | 72 + .../AtsImsIot_TP_behavior_MW_SI.ttcn | 2 +- .../AtsImsIot_TP_behavior_Mx_LRF.ttcn | 97 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn | 3 +- ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn | 9 + ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 27 + .../AtsImsIot_TestConfiguration.ttcn | 2826 ++++++++--------- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 300 +- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 328 +- ttcn/AtsImsIot/module.mk | 1 + 28 files changed, 3186 insertions(+), 2312 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn diff --git a/titan-test-system-framework b/titan-test-system-framework index 25b94ce..524df4e 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 25b94cec2e9370310eabe936d429f54eae02ffd1 +Subproject commit 524df4ef9a2fed2c32c1d9166ebebdb51fa666ba diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index b33c7b0..fe9060e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -10,8 +10,8 @@ module AtsImsIot_Diameter_Templates { //LibCommon - import from LibCommon_DataStrings all; - import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; + import from LibCommon_BasicTypesAndValues {type UInt8, UInt32, UInt64;}; //LibDiameter import from LibDiameter_TypesAndValues all; @@ -21,7 +21,7 @@ module AtsImsIot_Diameter_Templates { import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_S6a_AVPs all; + import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code, Subscription_Data_AVP}; import from LibDiameter_Types_S9_AVPs all; group DiameterHeaderFields { diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 7beb1b6..b0e2e32 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -19,16 +19,17 @@ module AtsImsIot_Emergency { // LibImsIot import from AtsImsIot_Functions all; // ImsIot - import from AtsImsIot_TestConfiguration all; - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Functions all; - import from AtsImsIot_Templates all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_Templates all; import from AtsImsIot_TP_behavior_GM all; import from AtsImsIot_TP_behavior_MW_PS all; import from AtsImsIot_TP_behavior_MW_SI all; import from AtsImsIot_TP_behavior_MW_IS all; import from AtsImsIot_TP_behavior_MW_EC all; import from AtsImsIot_TP_behavior_MW_EB all; + import from AtsImsIot_TP_behavior_MX_LRF all; import from AtsImsIot_TP_behavior_MM all; import from AtsImsIot_TP_behavior_ML all; import from AtsImsIot_TP_behavior_IC all; @@ -56,37 +57,37 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_VxLteMonitor_Up(); - + // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // test body // Check that user A starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) - + // postamble f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -104,7 +105,7 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -116,7 +117,7 @@ module AtsImsIot_Emergency { f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -158,10 +159,10 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.2.1 IMS Emergency Registration - Successful */ testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -172,7 +173,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME})) { - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -181,7 +182,7 @@ module AtsImsIot_Emergency { // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 @@ -193,14 +194,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 - + f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble f_PO_user_home_deregistration ( v_ueA ); f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnet component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -216,10 +217,10 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.2.2 IMS Emergency Registration - Unsuccessful */ testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -230,7 +231,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME})) { - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -239,7 +240,7 @@ module AtsImsIot_Emergency { // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 @@ -258,7 +259,7 @@ module AtsImsIot_Emergency { // postamble f_PO_user_home_deregistration ( v_ueA ); f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnet component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -280,7 +281,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. - * PSAP is located in the IM CN subsystem of IMS A. + * PSAP is located in the IM CN subsystem of IMS A * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration */ testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -288,8 +289,8 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -300,29 +301,29 @@ module AtsImsIot_Emergency { })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -332,7 +333,6 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); @@ -343,21 +343,21 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -368,13 +368,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -385,18 +385,18 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_01 - + group f_TD_VoLTE_ECO_INT_INI_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01 - + } // End of group f_TD_VoLTE_ECO_INT_INI_01 - + /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration. * PSAP is located in the IM CN subsystem of IMS A. * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface @@ -406,8 +406,8 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -418,29 +418,29 @@ module AtsImsIot_Emergency { })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -450,9 +450,9 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); @@ -460,21 +460,21 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -485,13 +485,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -502,16 +502,16 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_02 - + group f_TD_VoLTE_ECO_INT_INI_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02 - + } // End of group f_TD_VoLTE_ECO_INT_INI_02 - + /** * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment without any registration. * PSAP is located in the IM CN subsystem of IMS A. @@ -522,8 +522,8 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -534,25 +534,25 @@ module AtsImsIot_Emergency { })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble // No registration for user A - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -562,9 +562,9 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); @@ -572,21 +572,21 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -597,13 +597,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -614,19 +614,19 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_03 - + group f_TD_VoLTE_ECO_INT_INI_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03 - + } // End of group f_TD_VoLTE_ECO_INT_INI_03 /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. - * PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF + * PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF. * @see ETSI TS 103 795-2 Clause 5.3.1.5 UE calling PSAP in same network, LRF derived PSAP URI * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ @@ -635,8 +635,8 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -648,29 +648,29 @@ module AtsImsIot_Emergency { })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -683,31 +683,31 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 11 f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 12 - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 13 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 Session Progress f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 - + f_mtc_userCheckRinging(v_psap); // Event 21 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 21 f_mtc_userAnswerCall(v_psap); // Event 28 - + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 25 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 @@ -718,13 +718,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 31 f_mtc_userCheckCallEstablished(v_psap); // Event 31 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -735,14 +735,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_04 - + group f_TD_VoLTE_ECO_INT_INI_04 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04 - + } // End of group f_TD_VoLTE_ECO_INT_INI_04 /** @@ -751,41 +751,41 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.3.1.6 UE calling PSAP in other network via IBCF */ testcase TD_VoLTE_ECO_INT_INI_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); // PSAP is not known from the IMS A f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_CO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -795,60 +795,60 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - + + // FIXME f_mtc_check_TP_MW_IBCF_xxx -<-> f_mtc_check_TP_ML_EBCF_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 - f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -859,13 +859,13 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_05 - + group f_TD_VoLTE_ECO_INT_INI_05 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05 - + } // End of f_TD_VoLTE_ECO_INT_INI_05 /** @@ -879,47 +879,106 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 + + f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 + + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 36 + f_mtc_userCheckCallEstablished(v_psap); // Event 36 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -930,14 +989,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_06 - + group f_TD_VoLTE_ECO_INT_INI_06 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06 - + } // End of group f_TD_VoLTE_ECO_INT_INI_06 /** @@ -950,40 +1009,92 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); // PSAP is not known from the IMS A f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07(); - + // Test body - // TODO - + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_ECSCF_ECO_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -994,14 +1105,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_07 - + group f_TD_VoLTE_ECO_INT_INI_07 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07 - + } // End of group f_TD_VoLTE_ECO_INT_INI_07 /** @@ -1014,46 +1125,104 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 + + f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 + f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 36 + f_mtc_userCheckCallEstablished(v_psap); // Event 36 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1064,67 +1233,162 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_08 - + group f_TD_VoLTE_ECO_INT_INI_08 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08 - + } // End of group f_TD_VoLTE_ECO_INT_INI_08 /** - * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 1: PSAP is in IMS A netwwork + * @desc + * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration */ - testcase TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_09() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_MM_PSAP_INTERFACENAME })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_09 + + group f_TD_VoLTE_ECO_INT_INI_09 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09 + + } // End of group f_TD_VoLTE_ECO_INT_INI_09 + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP in IMS A + */ + testcase TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01(); + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 10 + + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + + f_mtc_userCheckRinging(v_ueA); // Event 15 + f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 + f_mtc_userAnswerCall(v_ueA); // Event 26 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 21 + + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 37 + f_mtc_userCheckCallEstablished(v_psap); // Event 37 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1134,67 +1398,97 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_01 - - group f_TD_VoLTE_ECO_INT_INI_09_01 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator { + } // End of TC TD_VoLTE_ECO_INT_INI_10_01 + + group f_TD_VoLTE_ECO_INT_INI_10_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_01 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_01 /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 2: PSAP is not in IMS A netwwork + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP NOT in IMS A */ - testcase TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02(); - + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02(); + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, -, v_sip); // Event 21 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 10 + + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + + f_mtc_userCheckRinging(v_ueA); // Event 15 + f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 + f_mtc_userAnswerCall(v_ueA); // Event 26 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 21 + + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 37 + f_mtc_userCheckCallEstablished(v_psap); // Event 37 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1204,66 +1498,66 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_02 - - group f_TD_VoLTE_ECO_INT_INI_09_02 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator { + } // End of TC TD_VoLTE_ECO_INT_INI_10_02 + + group f_TD_VoLTE_ECO_INT_INI_10_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_02 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_02 /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 2: PSAP is in PSTN netwwork + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP in PSTN A */ - testcase TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03(); - + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03(); + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1273,16 +1567,16 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_03 - - group f_TD_VoLTE_ECO_INT_INI_09_03 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator { + } // End of TC TD_VoLTE_ECO_INT_INI_10_03 + + group f_TD_VoLTE_ECO_INT_INI_10_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_03 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_03 } // End of group EmergencySessionEstablishment @@ -1291,38 +1585,37 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1330,33 +1623,31 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 4 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 - - f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_psap); // Event 23 - + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 20 + f_mtc_userCheckCallCancelled(v_psap); // Event 21 + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1368,14 +1659,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_01 - + group f_TD_VoLTE_ECO_INT_REL_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 /** @@ -1384,35 +1675,35 @@ module AtsImsIot_Emergency { * @remark This is option 2: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1420,33 +1711,32 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 + f_mtc_check_TP_MW_ECO_IBCF_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 - + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 f_mtc_userCheckCallCancelled(v_psap); // Event 23 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1458,13 +1748,13 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_02 - + group f_TD_VoLTE_ECO_INT_REL_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 - + } // End of f_TD_VoLTE_ECO_INT_REL_01_02 /** @@ -1477,30 +1767,30 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1508,19 +1798,31 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 f_mtc_userCheckCallCancelled(v_psap); // Event 23 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1532,14 +1834,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_03 - + group f_TD_VoLTE_ECO_INT_REL_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 /** @@ -1552,31 +1854,31 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1584,19 +1886,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1608,14 +1910,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_01 - + group f_TD_VoLTE_ECO_INT_REL_02_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_01 /** @@ -1628,31 +1930,31 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1660,19 +1962,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1684,14 +1986,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_02 - + group f_TD_VoLTE_ECO_INT_REL_02_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_02 /** @@ -1705,30 +2007,30 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1736,19 +2038,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1760,14 +2062,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_03 - + group f_TD_VoLTE_ECO_INT_REL_02_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_03 } // End of group EmergencySessionRelease @@ -1777,38 +2079,38 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1816,19 +2118,36 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 7 + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 28 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1840,51 +2159,51 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_01 - + group f_TD_VoLTE_ECO_INT_ABT_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_01 /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is not in IMA A network + * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1892,19 +2211,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1916,14 +2235,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_02 - + group f_TD_VoLTE_ECO_INT_ABT_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_02 /** @@ -1936,31 +2255,31 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -1968,19 +2287,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1992,51 +2311,51 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_03 - + group f_TD_VoLTE_ECO_INT_ABT_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_03 /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -2044,19 +2363,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -2068,51 +2387,51 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_01 - + group f_TD_VoLTE_ECO_INT_REJ_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_01 /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject - * @remark This is option 1: PSAP is not in IMA A network + * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -2120,19 +2439,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -2144,14 +2463,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_02 - + group f_TD_VoLTE_ECO_INT_REJ_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_02 /** @@ -2164,31 +2483,31 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -2196,19 +2515,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -2220,14 +2539,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_03 - + group f_TD_VoLTE_ECO_INT_REJ_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_03 /** @@ -2239,31 +2558,31 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_userInitiateCall (v_ueA, v_infoPsap); f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); @@ -2271,19 +2590,19 @@ module AtsImsIot_Emergency { f_mtc_userCheckCallEstablished(v_ueA); // Event 1 f_mtc_userCheckCallEstablished(v_psap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 - + // Postamble f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -2295,14 +2614,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_02 - + group f_TD_VoLTE_ECO_INT_REJ_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_02 } // End of group EmergencySessionAbortOrReject @@ -2321,15 +2640,15 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.5.1 UE Emergency Network Detachment (with/without Emergency Registration) */ testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); @@ -2341,9 +2660,9 @@ module AtsImsIot_Emergency { // test body // Check that user A starts initial network attachment f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) - + //postamble - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -2359,15 +2678,15 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session */ testcase TC_VoLTE_ECO_INT_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); @@ -2378,9 +2697,9 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, false, true ); // test body // TODO - + //postamble - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); diff --git a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn index 19f0bd1..9a94e23 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -6,7 +6,7 @@ module AtsImsIot_Functions { //LibDiameter - import from LibDiameter_TypesAndValues all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} //LibSip import from LibSip_SIPTypesAndValues all; @@ -15,22 +15,22 @@ module AtsImsIot_Functions { import from LibIms_UpperTester all; //LibIot - import from LibIot_PIXITS all; + import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } import from LibIot_VxLTE_PIXITS all; - import from LibIot_Functions all; - import from LibIot_TestInterface all; - import from LibIot_Functions all; - import from LibIot_TypesAndValues all; - import from LibIot_VxLTE_Functions all; + import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } + import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } + import from LibIot_Functions { function f_getE2EVerdict; } + import from LibIot_TypesAndValues { type DefaultList, MonitorInterfaceInfo; } + import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;} //LibUpperTester import from LibUpperTester all; //AtsImsIot - import from AtsImsIot_Templates all; + import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } import from AtsImsIot_TestSystem all; - import from AtsImsIot_TestSystem all; - import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter;} group ue { diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn index b81afc1..ca42c58 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn @@ -9,10 +9,10 @@ module AtsImsIot_TD_ATT{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester all; + import from LibIms_UpperTester { type ImsUserInfo }; // LibIot - import from LibIot_TestInterface all; - import from LibIot_TestConfiguration all; + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn index c3d3639..0dd94a7 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DRG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester all; + import from LibIms_UpperTester { type ImsUserInfo }; // LibIot - import from LibIot_TestInterface all; - import from LibIot_TestConfiguration all; - import from LibIot_PIXITS all; + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions all; + import from AtsImsIot_Functions { function f_getImUser }; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn index 066a4d2..a88b3f0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DTC{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester all; + import from LibIms_UpperTester { type ImsUserInfo }; // LibIot - import from LibIot_TestInterface all; - import from LibIot_TestConfiguration all; - import from LibIot_PIXITS all; + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions all; + import from AtsImsIot_Functions { function f_getImUser }; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn index ad9f369..a41eada 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn @@ -11,15 +11,17 @@ module AtsImsIot_TD_INI{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester all; + import from LibIms_UpperTester {type ImsUserInfo;} // LibIot - import from LibIot_TestInterface all; - import from LibIot_TestConfiguration all; - import from LibIot_PIXITS all; + import from LibIot_TestInterface {type IotEquipmentUser;} + import from LibIot_TestConfiguration { + function f_cf_create_IotEquipmentUser; + } + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C;} import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions all; + import from AtsImsIot_Functions {function f_getImUser;} // ImsIot import from AtsImsIot_TypesAndValues all; import from AtsImsIot_TestConfiguration all; @@ -2438,7 +2440,7 @@ module AtsImsIot_TD_INI{ //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) - f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 4) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 4) //Rx/Gx/S9 exchange after INVITE was received at P-CSCF diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn index 51a6fd1..bde4e54 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_REG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester all; + import from LibIms_UpperTester { type ImsUserInfo }; // LibIot - import from LibIot_TestInterface all; - import from LibIot_TestConfiguration all; - import from LibIot_PIXITS all; + import from LibIot_TestInterface { type IotEquipmentUser }; + import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions all; + import from AtsImsIot_Functions { function f_getImUser }; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 93f36b6..a2b7b13 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -1487,6 +1487,70 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1517,7 +1581,7 @@ module AtsImsIot_TP_behavior_GM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04 /** * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). @@ -2305,6 +2369,38 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2654,6 +2750,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). * Initial conditions with { @@ -3143,6 +3269,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). * Initial conditions with { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 018853e..95670b3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -1346,4 +1346,4 @@ group g_PCRF { } // end group g_PCRF -} // end module AtsImsIot_TP_behavior_GX \ No newline at end of file +} // end module AtsImsIot_TP_behavior_GX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index 416625c..adc402c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -7,14 +7,14 @@ module AtsImsIot_TP_behavior_IC { - import from AtsImsIot_TestSystem all; - import from LibIot_PIXITS all; - import from AtsImsIot_Templates all; - import from AtsImsIot_TypesAndValues all; - import from LibIot_TestInterface all; - import from LibIms_UpperTester all; - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; + import from AtsImsIot_TestSystem { type SipInterfaceMonitor , ImsTestCoordinator, SipInterfaceMonitor; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; @@ -25,9 +25,9 @@ module AtsImsIot_TP_behavior_IC } import from AtsImsIot_Functions all; - import from LibIot_PIXITS all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} // LibSip - import from LibSip_SDPTypes all; + import from LibSip_SDPTypes { type SDP_media_desc_list }; import from AtsImsIot_Templates_IC all; @@ -897,7 +897,28 @@ module AtsImsIot_TP_behavior_IC ); p_monitorCompRef.done; } - } //function + } + + function f_mtc_check_TP_IC_IBCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } /** * @desc Starts monitor component behavior diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn index 5b20a2a..0559a25 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -7,24 +7,28 @@ module AtsImsIot_TP_behavior_ISC { - import from AtsImsIot_TestSystem all; - import from LibIot_PIXITS all; - import from AtsImsIot_Templates all; - import from AtsImsIot_TypesAndValues all; - import from LibIot_TestInterface all; - import from LibIms_UpperTester all; - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; + import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, SipInterfaceMonitor; } + import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} + import from AtsImsIot_Templates {template all;} + import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; + import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} + import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common all; + import from LibSip_Common { + type + GenericParam, + SemicolonParam_List + } import from AtsImsIot_Functions all; import from AtsImsIot_Templates_MW all; - import from LibIot_PIXITS all; + import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} // LibSip - import from LibSip_SDPTypes all; + import from LibSip_SDPTypes { type SDP_media_desc_list }; // LibMsrp // import from LibMsrp_TypesAndValues { type MsrpURI }; // import from LibMsrp_Functions { function f_str2msrpUri }; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index ded58e6..798fadb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -99,6 +99,38 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_PSAP_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02 + } // End of group imsInvite group ims100Trying { @@ -322,10 +354,10 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); @@ -566,4 +598,46 @@ module AtsImsIot_TP_behavior_MM { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_PSAP_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MM_PSAP_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01 + + } // End of group imsCancel + } // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 715f085..308bd6d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -102,6 +102,33 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 + function f_mtc_check_TP_MW_IBCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_MW_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_INVITE_02 + } // End of group imsInvite group ims100Trying { @@ -358,6 +385,40 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 + function f_mtc_check_TP_MW_IBCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_200OK_01 + /** * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -565,6 +626,44 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 + function f_mtc_check_TP_MW_IBCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_BYE_01 + } // End of group imsBye group ims200OkBye { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 98c80ff..919aea6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -173,6 +173,44 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03 + } // End of group imsInvite group ims100Trying { @@ -634,4 +672,38 @@ module AtsImsIot_TP_behavior_MW_EC { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01 + + } // End of group imsCancel + } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn index 9ccf70c..0136fc3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn @@ -1249,7 +1249,7 @@ module AtsImsIot_TP_behavior_MW_SI { }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_02 } // End of group ims200Ok - + group imsAck { /** diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn new file mode 100644 index 0000000..b6d0500 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn @@ -0,0 +1,97 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_Mx_LRF { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group ims3xxAny { + + /** + * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_LRF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * from the IMS_EBCF_A entity + * } + * then { + * the IMS_LRF_A entity sends a 3xx Any containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_LRF_3xxAny_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 3xx Any + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_3xxContact( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.accept + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_Mx_LRF_3xxAny_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 + + } // End of group ims3xxAny + +} // End of module AtsImsIot_TP_behavior_Mx_LRF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn index e76815e..5c86273 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn @@ -1828,4 +1828,4 @@ group g_PCSCF_STR { } // end group g_PCSCF -} // end module AtsImsIot_TP_behavior_RX \ No newline at end of file +} // end module AtsImsIot_TP_behavior_RX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn index adfeb78..d21cc0a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -794,4 +794,4 @@ group g_MME { } // end group g_MME -} // end module AtsImsIot_TP_behavior_S6A \ No newline at end of file +} // end module AtsImsIot_TP_behavior_S6A diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 35b6edd..8ab3be6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -114,7 +114,7 @@ module AtsImsIot_Templates_GM { toField := p_to } } // End of template mw_200OK - + template (present) Response mw_401Unauthorized( template (present) CSeq p_cSeq := ?, template (present) WwwAuthenticate p_wwwAuthenticate := ? diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn index c5e9044..556879a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn @@ -15,8 +15,7 @@ module AtsImsIot_Templates_IC import from LibSip_Common all; import from LibMsrp_TypesAndValues all; import from LibIot_PIXITS all; - import from AtsImsIot_PIXITS all; - + import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; group g_IBCF { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn index 073ab4a..47259fc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn @@ -80,4 +80,13 @@ module AtsImsIot_Templates_ML { } } // End of template mw_TP_ML_ECSCF_3XX_Base_01 + template (present) Response mw_3xxContact( + template (present) CSeq p_cSeq := ?, + Accept p_accept) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + accept := p_accept + } + } // End of template mw_3xxContact + } // End of module AtsImsIot_Templates_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index bede675..a92c708 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -1092,6 +1092,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_BYE_01 + template (present) CANCEL_Request mw_TP_MW_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 + } group g_ibcf { diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index ac5ff8f..ec88bbc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -1,548 +1,542 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id $ - * @desc This module contains functions which implement the + * @desc This module contains functions which implement the * configuration of the SUT adapter and mapping of test * components for establishing and tearing down different * test configurations. */ module AtsImsIot_TestConfiguration { - - import from LibCommon_VerdictControl { type FncRetCode; } + + import from LibCommon_VerdictControl all; /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ - import from LibIms_UpperTester { modulepar PX_IMS_USER_DATA; } - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; } - import from LibIot_TypesAndValues { - type StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product, - ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; } + import from LibIms_UpperTester all; + import from LibIot_PIXITS all; + import from LibIot_TypesAndValues all; /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ - import from LibIot_Functions { altstep a_receiveIOTVerdict; function f_setConformanceVerdict, f_setE2EVerdict; } - import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; } - import from LibIot_TestInterface all; - import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;} - import from LibIot_TestInterface {type InterfaceMonitor;} - import from AtsImsIot_Templates { - template m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, - m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout, - m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, - m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; } - import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} - - group constantDefinitions { - //* interface monitor name Gm A - const charstring c_gm_A := "Gm A"; - //* interface monitor name Gm B - const charstring c_gm_B := "Gm B"; - //* interface monitor name Mx A + import from LibIot_Functions all; + import from LibIot_TestConfiguration all; + import from LibIot_TestInterface all; + import from AtsImsIot_TestSystem all; + import from LibIot_TestInterface all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Functions all; + + group constantDefinitions { + //* interface monitor name Gm A + const charstring c_gm_A := "Gm A"; + //* interface monitor name Gm B + const charstring c_gm_B := "Gm B"; + //* interface monitor name Mx A const charstring c_mx_A := "Mx A"; //* interface monitor name Mx B const charstring c_mx_B := "Mx B"; - //* interface monitor name Ic - const charstring c_ic := "Ici"; - //* interface monitor name Isc A - const charstring c_isc_A := "Isc A"; - //* interface monitor name Isc B - const charstring c_isc_B := "Isc B"; - //* interface monitor name NAPTR - const charstring c_naptr := "NAPTR"; - //* eut trigger name User A - const charstring c_trigger_A := "User A"; - //* eut trigger name User B - const charstring c_trigger_B := "User B"; - //* eut trigger name User A - const charstring c_userUE_A := "User A"; - const charstring c_userUE_A_emergency := "User A Emergency"; - const charstring c_userUE_A2 := "User A2"; - //* eut trigger name User B - const charstring c_userUE_B := "User B"; - const charstring c_userUE_B2 := "User B2"; + //* interface monitor name Ic + const charstring c_ic := "Ici"; + //* interface monitor name Isc A + const charstring c_isc_A := "Isc A"; + //* interface monitor name Isc B + const charstring c_isc_B := "Isc B"; + //* interface monitor name NAPTR + const charstring c_naptr := "NAPTR"; + //* eut trigger name User A + const charstring c_trigger_A := "User A"; + //* eut trigger name User B + const charstring c_trigger_B := "User B"; + //* eut trigger name User A + const charstring c_userUE_A := "User A"; + const charstring c_userUE_A_emergency := "User A Emergency"; + const charstring c_userUE_A2 := "User A2"; + //* eut trigger name User B + const charstring c_userUE_B := "User B"; + const charstring c_userUE_B2 := "User B2"; //* eut trigger name User C const charstring c_userUE_C := "User C"; - //* interface monitor name Gm C - const charstring c_gm_C := "Gm C"; + //* interface monitor name Gm C + const charstring c_gm_C := "Gm C"; //* eut trigger name User D const charstring c_userUE_D := "User D"; - //* interface monitor name Gm D - const charstring c_gm_D := "Gm D"; + //* interface monitor name Gm D + const charstring c_gm_D := "Gm D"; //* interface monitor name Rx const charstring c_rx := "Rx"; // See ETSI TS 103 029 V3.1.1 clause 5.4.2 //* interface monitor name Mw const charstring c_mw := "Mw"; //* interface monitor name Mx const charstring c_mx := "Mx"; - //* interface monitor name Sgi - const charstring c_sgi := "Sgi"; - //* interface monitor name Rx - const charstring c_s6a := "S6a"; - //* interface monitor name Rx - const charstring c_gx := "Gx"; - //* interface monitor name Mm/Mx/Mw - const charstring c_psap := "Psap"; - } - - group mappingFunctions { - - /** - * - * @desc initialize the adapter port of MTC - */ - function f_cf_adapter_up() runs on ImsTestCoordinator { - map(self:acPort, system:acPort); - } - - /** - * - * @desc uninitialize the adapter port of MTC - */ - function f_cf_adapter_down() runs on ImsTestCoordinator { - unmap(self:acPort, system:acPort); - } - - /** - * - * @desc initialize trigger component ports - * @param p_driver trigger component - */ - function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { - // connect sync ports - connect(p_driver:syncPort, self:syncPort); - // connect TSI ports - map(p_driver:eaPort, system:eaPort); - // configure oracle - f_cf_oracle_up(p_driver); - } - - /** - * - * @desc uninitialize trigger component ports - * @param p_driver trigger component - */ - function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { - // disconnect sync ports - disconnect(p_driver:syncPort, self:syncPort); - // disconnect TSI ports - unmap(p_driver:eaPort, system:eaPort); - // release oracle ports - f_cf_oracle_down(p_driver); - } - - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:dPort, system:dPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:sipPort, system:sipPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:diameterPort, system:diameterPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:naptrPort, system:naptrPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); - } - /** - * @desc configures monitor component: connects to the synchronnization - * port, maps to the TSI port and connects to the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - connect(p_monitor:syncPort, self:syncPort); - connect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - map(p_monitor:sgiPort, system:sgiPort); - map(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_up(p_monitor); + //* interface monitor name Sgi + const charstring c_sgi := "Sgi"; + //* interface monitor name Rx + const charstring c_s6a := "S6a"; + //* interface monitor name Rx + const charstring c_gx := "Gx"; + //* interface monitor name Mm/Mx/Mw + const charstring c_psap := "Psap"; + } + + group mappingFunctions { + + /** + * + * @desc initialize the adapter port of MTC + */ + function f_cf_adapter_up() runs on ImsTestCoordinator { + map(self:acPort, system:acPort); + } + + /** + * + * @desc uninitialize the adapter port of MTC + */ + function f_cf_adapter_down() runs on ImsTestCoordinator { + unmap(self:acPort, system:acPort); + } + + /** + * + * @desc initialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_up(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // connect sync ports + connect(p_driver:syncPort, self:syncPort); + // connect TSI ports + map(p_driver:eaPort, system:eaPort); + // configure oracle + f_cf_oracle_up(p_driver); + } + + /** + * + * @desc uninitialize trigger component ports + * @param p_driver trigger component + */ + function f_cf_user_down(in IotEquipmentUser p_driver) runs on ImsTestCoordinator { + // disconnect sync ports + disconnect(p_driver:syncPort, self:syncPort); + // disconnect TSI ports + unmap(p_driver:eaPort, system:eaPort); + // release oracle ports + f_cf_oracle_down(p_driver); + } + + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:dPort, system:dPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sipPort, system:sipPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:diameterPort, system:diameterPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:naptrPort, system:naptrPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); + } + /** + * @desc configures monitor component: connects to the synchronnization + * port, maps to the TSI port and connects to the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_up_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + connect(p_monitor:syncPort, self:syncPort); + connect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + map(p_monitor:sgiPort, system:sgiPort); + map(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_up(p_monitor); } - - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:dPort, system:dPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:sipPort, system:sipPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:diameterPort, system:diameterPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:naptrPort, system:naptrPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - /** - * @desc frees monitor component: disconnects the synchronnization - * port, unmaps from the TSI port and disconnects from the oracle - * @param p_monitor monitor component - */ - function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { - // connect sync ports - disconnect(p_monitor:syncPort, self:syncPort); - disconnect(p_monitor:icpPort, self:icpPort); - // mapp TSI port - unmap(p_monitor:sgiPort, system:sgiPort); - unmap(p_monitor:acPort, system:acPort); - // configure oracle - f_cf_oracle_down(p_monitor); - } - } - - group adapterConfiguration { - - function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { - var SetFilterRsp v_rsp; - var template Status v_status := { - code := e_success, - reason := * - } - - tc_wait.start; - acPort.send(p_req); - alt { - [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { - tc_wait.stop; - f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); - f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); - } - [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { - tc_wait.stop; - f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); - f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); - } - [] tc_wait.timeout { - f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); - f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); - } - } - } - - /** - * @desc Initialize traffic cature process - * - * @param - */ - function f_cf_initCapture () runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down(in ImsInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:dPort, system:dPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sip(in SipInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sipPort, system:sipPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_diameter(in DiameterInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:diameterPort, system:diameterPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_naptr(in NaptrInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:naptrPort, system:naptrPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + /** + * @desc frees monitor component: disconnects the synchronnization + * port, unmaps from the TSI port and disconnects from the oracle + * @param p_monitor monitor component + */ + function f_cf_monitor_down_sgi(in SgiInterfaceMonitor p_monitor) runs on ImsTestCoordinator { + // connect sync ports + disconnect(p_monitor:syncPort, self:syncPort); + disconnect(p_monitor:icpPort, self:icpPort); + // mapp TSI port + unmap(p_monitor:sgiPort, system:sgiPort); + unmap(p_monitor:acPort, system:acPort); + // configure oracle + f_cf_oracle_down(p_monitor); + } + } + + group adapterConfiguration { + + function f_cf_setFilter(in SetFilterReq p_req) runs on /*Ims*/InterfaceMonitor { + var SetFilterRsp v_rsp; + var template Status v_status := { + code := e_success, + reason := * + } + + tc_wait.start; + acPort.send(p_req); + alt { + [] acPort.receive (mw_SetFilterRsp(v_status)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + f_setConformanceVerdict(pass, "Adapter Configuration: setting monitor filter successful"); + } + [] acPort.receive (mw_SetFilterRsp(?)) -> value v_rsp { + tc_wait.stop; + f_setE2EVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + f_setConformanceVerdict(inconc, "Adapter Configuration: error while setting monitor filter"); + } + [] tc_wait.timeout { + f_setE2EVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + f_setConformanceVerdict(inconc, "Adapter Configuration: timer expires while waiting for response"); + } + } + } + + /** + * @desc Initialize traffic cature process + * + * @param + */ + function f_cf_initCapture () runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - } - /** - * @desc Start traffic cature process - * - * @param - */ - function f_cf_startCapture () runs on ImsTestCoordinator { - - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); //TODO: Check posibility to enable ONLINE mode + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + } + /** + * @desc Start traffic cature process + * + * @param + */ + function f_cf_startCapture () runs on ImsTestCoordinator { + + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); //Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc Stops traffic cature - * - * @param - */ - function f_cf_stopCapture() runs on ImsTestCoordinator { - //Stop traffic capture processing. - timer tc_configureGuard; //TODO check to import correct modules - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - } - } - - group componentCreation { - - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { - var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; - v_monitor.start(f_setInterfaceNameOnComponent(p_name)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { - var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { - var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { - var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - /** - * @desc creates a monitor component - * @param p_name name of the monitor component - * @return the created monitor component - */ - function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { - var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; - //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); - v_monitor.start(f_setInterfaceInfoComponent(p_mii)); - v_monitor.done; - return v_monitor; - } - } - - - group testConfiguration { //TODO: check to delete at end of STF574 ATS devel - - /** - * @desc - * Test configuration function for roaming registration szenario. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_Gm Gm interface monitor component - * @param p_MxA Mx interface IMS A network - * @param p_ici Mw interface monitor component - * @param p_MxB Mx interface IMS B network - */ - function f_cf_roam_reg_up( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_Gm); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc Stops traffic cature + * + * @param + */ + function f_cf_stopCapture() runs on ImsTestCoordinator { + //Stop traffic capture processing. + timer tc_configureGuard; //TODO check to import correct modules + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + } + } + + group componentCreation { + + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor(in charstring p_name) runs on ImsTestCoordinator return ImsInterfaceMonitor { + var ImsInterfaceMonitor v_monitor := ImsInterfaceMonitor.create(p_name) alive; + v_monitor.start(f_setInterfaceNameOnComponent(p_name)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sip(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SipInterfaceMonitor { + var SipInterfaceMonitor v_monitor := SipInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_diameter(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return DiameterInterfaceMonitor { + var DiameterInterfaceMonitor v_monitor := DiameterInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_naptr(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return NaptrInterfaceMonitor { + var NaptrInterfaceMonitor v_monitor := NaptrInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + /** + * @desc creates a monitor component + * @param p_name name of the monitor component + * @return the created monitor component + */ + function f_cf_create_monitor_sgi(in MonitorInterfaceInfo p_mii) runs on ImsTestCoordinator return SgiInterfaceMonitor { + var SgiInterfaceMonitor v_monitor := SgiInterfaceMonitor.create(p_mii.interfaceName) alive; + //v_monitor.start(f_setInterfaceNameOnComponent(p_mii.interfaceName)); + v_monitor.start(f_setInterfaceInfoComponent(p_mii)); + v_monitor.done; + return v_monitor; + } + } + + + group testConfiguration { //TODO: check to delete at end of STF574 ATS devel + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_MxA Mx interface IMS A network + * @param p_ici Mw interface monitor component + * @param p_MxB Mx interface IMS B network + */ + function f_cf_roam_reg_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); f_cf_monitor_up(p_MxA); - f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_ici); f_cf_monitor_up(p_MxB); - - // TODO UE IP address and port is missing - p_Gm.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) - ) - ))); - p_Gm.done; - + + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + p_MxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -550,15 +544,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxA.done; - - p_ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_ici.done; - + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + p_MxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -566,137 +560,137 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxB.done; - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Test configuration function for roaming registration szenario. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_Gm Gm interface monitor component - * @param p_ic Mw interface monitor component - */ - function f_cf_roam_reg_down( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_Gm); + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Test configuration function for roaming registration szenario. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_Gm Gm interface monitor component + * @param p_ic Mw interface monitor component + */ + function f_cf_roam_reg_down( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); f_cf_monitor_down(p_MxA); - f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_ici); f_cf_monitor_down(p_MxB); - } - - /** - * @desc - * Interworking Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - * @param p_GmB - * Gm B Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_call_up( - inout CF_INT_CALL p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - - activate(a_receiveIOTVerdict()); - - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + } + + /** + * @desc + * Interworking Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_up( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + + activate(a_receiveIOTVerdict()); + + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.ici); f_cf_monitor_up(p_config.mxB); - if(isvalue(p_config.gmB)) { - f_cf_monitor_up(p_config.gmB); - } + if(isvalue(p_config.gmB)) { + f_cf_monitor_up(p_config.gmB); + } if(isvalue(p_config.naptr)) { f_cf_monitor_up(p_config.naptr); - } + } - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -704,15 +698,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -720,16 +714,16 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - if(isvalue(p_config.gmB)) { - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.gmB.done; - } + + if(isvalue(p_config.gmB)) { + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + } if(isvalue(p_config.naptr)) { p_config.naptr.start(f_cf_setFilter( valueof (m_SetFilterReq( @@ -739,129 +733,129 @@ module AtsImsIot_TestConfiguration { ))); p_config.naptr.done; } - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Call test configuration. Ummaps/disconnect the - * related component ports. More information can be found in ETSI TS - * 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - * @param p_GmB - * Gm B Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_call_down( - inout CF_INT_CALL p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - //setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + * @param p_GmB + * Gm B Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_call_down( + inout CF_INT_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} - if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} - } - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause - * 4.3.4. - * @param p_Gm Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - */ - function f_cf_roam_call_up( - inout ImsInterfaceMonitor p_Gm, - inout ImsInterfaceMonitor p_MxA, - inout ImsInterfaceMonitor p_ici, - inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_Gm); + if ( isvalue ( p_config.gmB ) ) { f_cf_monitor_down( p_config.gmB );} + if ( isvalue ( p_config.naptr ) ) { f_cf_monitor_down( p_config.naptr );} + } + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Cause + * 4.3.4. + * @param p_Gm Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_up( + inout ImsInterfaceMonitor p_Gm, + inout ImsInterfaceMonitor p_MxA, + inout ImsInterfaceMonitor p_ici, + inout ImsInterfaceMonitor p_MxB + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_Gm); f_cf_monitor_up(p_MxA); - f_cf_monitor_up(p_ici); + f_cf_monitor_up(p_ici); f_cf_monitor_up(p_MxB); - - // TODO UE IP address and port is missing - // TODO UE IP address and port is missing - p_Gm.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) - ) - ))); - p_Gm.done; - + + // TODO UE IP address and port is missing + // TODO UE IP address and port is missing + p_Gm.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Gm", PX_EUT_A, PX_EUT_B) + ) + ))); + p_Gm.done; + p_MxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -869,15 +863,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxA.done; - - p_ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_ici.done; - + + p_ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_ici.done; + p_MxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -885,163 +879,163 @@ module AtsImsIot_TestConfiguration { ) ))); p_MxB.done; - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Roaming Call test configuration. Ummaps/disconnect the - * related component ports. More information can be found in ETSI TS - * 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_GmA Gm A Interface Monitor component - * @param p_ici Mw Interface Monitor component - */ - function f_cf_roam_call_down( + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Roaming Call test configuration. Ummaps/disconnect the + * related component ports. More information can be found in ETSI TS + * 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_GmA Gm A Interface Monitor component + * @param p_ici Mw Interface Monitor component + */ + function f_cf_roam_call_down( inout ImsInterfaceMonitor p_Gm, inout ImsInterfaceMonitor p_MxA, inout ImsInterfaceMonitor p_ici, inout ImsInterfaceMonitor p_MxB - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_Gm); + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_Gm); f_cf_monitor_down(p_MxA); - f_cf_monitor_down(p_ici); + f_cf_monitor_down(p_ici); f_cf_monitor_down(p_MxB); - } - - - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_as_up( - inout CF_INT_AS p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_up( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); - f_cf_monitor_up(p_config.mxB); - f_cf_monitor_up(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_up(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_up(p_config.iscB); - } - - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - - p_config.mxA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - - p_config.gmB.start(f_cf_setFilter( + f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.mxB); + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} ) ))); - p_config.gmB.done; - + p_config.mxA.done; + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1049,167 +1043,167 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - if(isvalue(p_config.iscA)) { - p_config.iscA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.iscA.done; - } - - if(isvalue(p_config.iscB)) { - p_config.iscB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.iscB.done; - } - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Application Server test configuration. - * Ummaps/disconnect the related component ports. More information - * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_int_as_down( - inout CF_INT_AS p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - //setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_int_as_down( + inout CF_INT_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + //setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - f_cf_monitor_down(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_down(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_down(p_config.iscB); - } - } - - - /** - * @desc - * Roaming Call test configuration. Mapps/connects all related - * ports and initialize the test adapter. - * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause - * 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_roam_as_up( - inout CF_ROAM_AS p_config - ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } - - f_cf_monitor_up(p_config.gmA); + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + + /** + * @desc + * Roaming Call test configuration. Mapps/connects all related + * ports and initialize the test adapter. + * More information can be found in ETSI TS 186 011-2 V2.3.1 Clause + * 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_up( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; + activate(a_receiveIOTVerdict()); + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } + + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.mxA); - f_cf_monitor_up(p_config.ici); + f_cf_monitor_up(p_config.ici); f_cf_monitor_up(p_config.mxB); - f_cf_monitor_up(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_up(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_up(p_config.iscB); - } - - // TODO UE IP address and port is missing - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; - + f_cf_monitor_up(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_up(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_up(p_config.iscB); + } + + // TODO UE IP address and port is missing + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1217,15 +1211,15 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - - p_config.ici.start(f_cf_setFilter( - valueof(m_SetFilterReq( - e_sip, - f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) - ) - ))); - p_config.ici.done; - + + p_config.ici.start(f_cf_setFilter( + valueof(m_SetFilterReq( + e_sip, + f_getInterfaceInfoList("Ici", PX_EUT_A, PX_EUT_B) + ) + ))); + p_config.ici.done; + p_config.mxB.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1233,110 +1227,110 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxB.done; - - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.gmB.done; - - if(isvalue(p_config.iscA)) { - p_config.iscA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.iscA.done; - } - - if(isvalue(p_config.iscB)) { - p_config.iscB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - p_config.iscB.done; - } - - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } - - /** - * @desc - * Interworking Application Server test configuration. - * Ummaps/disconnect the related component ports. More information - * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. - * @param p_config.gmA Gm A Interface Monitor component - * @param p_config.mw Mw Interface Monitor component - * @param p_config.gmB Gm B Interface Monitor component - * @param p_config.iscA Isc A Interface Monitor component - * @param p_config.iscB Isc B Interface Monitor component - * IscA and IscB Interface Monitor component (optional, can be omitted) - */ - function f_cf_roam_as_down( - inout CF_ROAM_AS p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - f_cf_monitor_down(p_config.gmA); + + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.gmB.done; + + if(isvalue(p_config.iscA)) { + p_config.iscA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.iscA.done; + } + + if(isvalue(p_config.iscB)) { + p_config.iscB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Isc", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + p_config.iscB.done; + } + + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } + + /** + * @desc + * Interworking Application Server test configuration. + * Ummaps/disconnect the related component ports. More information + * can be found in ETSI TS 186 011-2 V2.3.1 Clause 4.3.4. + * @param p_config.gmA Gm A Interface Monitor component + * @param p_config.mw Mw Interface Monitor component + * @param p_config.gmB Gm B Interface Monitor component + * @param p_config.iscA Isc A Interface Monitor component + * @param p_config.iscB Isc B Interface Monitor component + * IscA and IscB Interface Monitor component (optional, can be omitted) + */ + function f_cf_roam_as_down( + inout CF_ROAM_AS p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.mxA); - f_cf_monitor_down(p_config.ici); + f_cf_monitor_down(p_config.ici); f_cf_monitor_down(p_config.mxB); - f_cf_monitor_down(p_config.gmB); - if(isvalue(p_config.iscA)) { - f_cf_monitor_down(p_config.iscA); - } - if(isvalue(p_config.iscB)) { - f_cf_monitor_down(p_config.iscB); - } - } - - function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { + f_cf_monitor_down(p_config.gmB); + if(isvalue(p_config.iscA)) { + f_cf_monitor_down(p_config.iscA); + } + if(isvalue(p_config.iscB)) { + f_cf_monitor_down(p_config.iscB); + } + } + + function f_cf_epc_call_up ( in CF_EPC_CALL p_config ) runs on ImsTestCoordinator { // Initialize the Adapter (including the TrafficCapture process). timer tc_configureGuard; var StartTrafficCaptureRsp startResult; - + activate(a_receiveIOTVerdict()); - + tc_configureGuard.start(PX_MAX_MSG_WAIT); acPort.send(m_generalConfigurationReq_offline); alt { @@ -1366,7 +1360,7 @@ module AtsImsIot_TestConfiguration { stop; } } - + f_cf_monitor_up(p_config.gmA); f_cf_monitor_up(p_config.rx); f_cf_monitor_up(p_config.mxA); @@ -1383,7 +1377,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.gmA.done; - + p_config.rx.start(f_cf_setFilter( valueof (m_SetFilterReq( e_diameter, @@ -1391,7 +1385,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.rx.done; - + p_config.mxA.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1399,7 +1393,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mxA.done; - + p_config.mw.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1407,7 +1401,7 @@ module AtsImsIot_TestConfiguration { ) ))); p_config.mw.done; - + p_config.sgi.start(f_cf_setFilter( valueof (m_SetFilterReq( e_sip, @@ -1441,75 +1435,75 @@ module AtsImsIot_TestConfiguration { stop; } } - } // end of function f_cf_epc_call_up + } // end of function f_cf_epc_call_up - function f_cf_epc_call_down( - inout CF_EPC_CALL p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - - f_cf_monitor_down(p_config.gmA); + function f_cf_epc_call_down( + inout CF_EPC_CALL p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + + f_cf_monitor_down(p_config.gmA); f_cf_monitor_down(p_config.rx); f_cf_monitor_down(p_config.mxA); f_cf_monitor_down(p_config.mw); f_cf_monitor_down(p_config.sgi); - f_cf_monitor_down(p_config.gmB); - } // end of function f_cf_epc_call_down - } - - function f_getInterfaceInfoList( - in charstring p_interfaceName, - in integer p_product1, - in integer p_product2 - ) return InterfaceInfoList { - var InterfaceInfoList v_list := { - f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), - f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) - }; - - return v_list; - } - - function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { - var InterfaceInfo v_info := { - IpInterfaceInfo := { - { - domainName := "invalid", - IpAddress := "0.0.0.0", - portNumbers := {0} - } - } - }; - - for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < - if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { - return p_product.monitorInterfaces[i].interfaceInfo; - } - } - - return v_info; - } - - group g_release15 { - + f_cf_monitor_down(p_config.gmB); + } // end of function f_cf_epc_call_down + } + + function f_getInterfaceInfoList( + in charstring p_interfaceName, + in integer p_product1, + in integer p_product2 + ) return InterfaceInfoList { + var InterfaceInfoList v_list := { + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product1]), + f_getInterfaceInfo(p_interfaceName, PX_PRODUCTS[p_product2]) + }; + + return v_list; + } + + function f_getInterfaceInfo(in charstring p_interfaceName, Product p_product) return InterfaceInfo { + var InterfaceInfo v_info := { + IpInterfaceInfo := { + { + domainName := "invalid", + IpAddress := "0.0.0.0", + portNumbers := {0} + } + } + }; + + for(var integer i := 0; i < lengthof(p_product.monitorInterfaces); i := i + 1) { // YANN: <= instead of < + if(p_product.monitorInterfaces[i].interfaceName == p_interfaceName) { + return p_product.monitorInterfaces[i].interfaceInfo; + } + } + + return v_info; + } + + group g_release15 { + function f_cf_epc_call_rel15_up_old ( in CF_ATT_old p_config ) runs on ImsTestCoordinator { // Initialize the Adapter (including the TrafficCapture process). timer tc_configureGuard; @@ -1658,157 +1652,157 @@ module AtsImsIot_TestConfiguration { f_cf_monitor_down(p_config.gmB); } // end of function f_cf_epc_call_rel15_down - function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { - // Initialize the Adapter (including the TrafficCapture process). - timer tc_configureGuard; - var StartTrafficCaptureRsp startResult; + function f_cf_epc_call_rel15_up ( in CF_ATT p_config ) runs on ImsTestCoordinator { + // Initialize the Adapter (including the TrafficCapture process). + timer tc_configureGuard; + var StartTrafficCaptureRsp startResult; - activate(a_receiveIOTVerdict()); + activate(a_receiveIOTVerdict()); - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_generalConfigurationReq_offline); - alt { - [] acPort.receive (m_generalConfigurationRsp_success) { - log("General configuration succeed."); - tc_configureGuard.stop; - } - [] acPort.receive (m_generalConfigurationRsp_timeout) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive (m_generalConfigurationRsp_error) { - setverdict(fail); - tc_configureGuard.stop; - stop; - } - [] acPort.receive { - log("Unknown response."); - tc_configureGuard.stop; - setverdict (inconc); - stop; - } - [] tc_configureGuard.timeout { - log("Timeout."); - setverdict (inconc); - stop; - } - } + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_generalConfigurationReq_offline); + alt { + [] acPort.receive (m_generalConfigurationRsp_success) { + log("General configuration succeed."); + tc_configureGuard.stop; + } + [] acPort.receive (m_generalConfigurationRsp_timeout) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive (m_generalConfigurationRsp_error) { + setverdict(fail); + tc_configureGuard.stop; + stop; + } + [] acPort.receive { + log("Unknown response."); + tc_configureGuard.stop; + setverdict (inconc); + stop; + } + [] tc_configureGuard.timeout { + log("Timeout."); + setverdict (inconc); + stop; + } + } - f_cf_monitor_up_sip(p_config.gmA); - f_cf_monitor_up_diameter(p_config.rx); - f_cf_monitor_up_diameter(p_config.s6a); - f_cf_monitor_up_diameter(p_config.gx); - f_cf_monitor_up_sip(p_config.mxA); - f_cf_monitor_up_sip(p_config.mw); - f_cf_monitor_up_sgi(p_config.sgi); - if(isvalue(p_config.gmB)) { - f_cf_monitor_up_sip(p_config.gmB); - } + f_cf_monitor_up_sip(p_config.gmA); + f_cf_monitor_up_diameter(p_config.rx); + f_cf_monitor_up_diameter(p_config.s6a); + f_cf_monitor_up_diameter(p_config.gx); + f_cf_monitor_up_sip(p_config.mxA); + f_cf_monitor_up_sip(p_config.mw); + f_cf_monitor_up_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_up_sip(p_config.gmB); + } - p_config.gmA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.gmA.done; + p_config.gmA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.gmA.done; - p_config.rx.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_diameter, - {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.rx.done; + p_config.rx.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_diameter, + {f_getInterfaceInfo("Rx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.rx.done; - p_config.mxA.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.mxA.done; + p_config.mxA.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mx", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mxA.done; - p_config.mw.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.mw.done; + p_config.mw.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Mw", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.mw.done; - p_config.sgi.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} - ) - ))); - p_config.sgi.done; + p_config.sgi.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Sgi", PX_PRODUCTS[PX_EUT_A])} + ) + ))); + p_config.sgi.done; - p_config.gmB.start(f_cf_setFilter( - valueof (m_SetFilterReq( - e_sip, - {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} - ) - ))); - // Start traffic capture processing. - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_startTrafficCaptureReq); - alt { - [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { - tc_configureGuard.stop; - if (startResult.status.code != e_success) - { - log("**** StartTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - stop; - } - } - [] tc_configureGuard.timeout { - log("**** StartTrafficCaptureReq not answered. ****"); - setverdict (inconc); - stop; - } - } - } // end of function f_cf_epc_call_rel15_up + p_config.gmB.start(f_cf_setFilter( + valueof (m_SetFilterReq( + e_sip, + {f_getInterfaceInfo("Gm", PX_PRODUCTS[PX_EUT_B])} + ) + ))); + // Start traffic capture processing. + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_startTrafficCaptureReq); + alt { + [] acPort.receive (m_startTrafficCaptureRsp_any) -> value startResult { + tc_configureGuard.stop; + if (startResult.status.code != e_success) + { + log("**** StartTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + stop; + } + } + [] tc_configureGuard.timeout { + log("**** StartTrafficCaptureReq not answered. ****"); + setverdict (inconc); + stop; + } + } + } // end of function f_cf_epc_call_rel15_up - function f_cf_epc_call_rel15_down( - inout CF_ATT p_config - ) runs on ImsTestCoordinator { - // Stop traffic capture processing. - timer tc_configureGuard; - var StopTrafficCaptureRsp stopResult; - tc_configureGuard.start(PX_MAX_MSG_WAIT); - acPort.send(m_stopTrafficCaptureReq); - alt { - [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { - tc_configureGuard.stop; - if (stopResult.status.code != e_success) - { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); - setverdict(fail); - } - } - [] tc_configureGuard.timeout { - log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); - setverdict (inconc); - } - } - - f_cf_monitor_down_sip(p_config.gmA); - f_cf_monitor_down_diameter(p_config.rx); - f_cf_monitor_down_diameter(p_config.s6a); - f_cf_monitor_down_diameter(p_config.gx); - f_cf_monitor_down_sip(p_config.mxA); - f_cf_monitor_down_sip(p_config.mw); - f_cf_monitor_down_sgi(p_config.sgi); - if(isvalue(p_config.gmB)) { - f_cf_monitor_down_sip(p_config.gmB); - } - - } // end of function f_cf_epc_call_rel15_down - - } // end group g_release15 + function f_cf_epc_call_rel15_down( + inout CF_ATT p_config + ) runs on ImsTestCoordinator { + // Stop traffic capture processing. + timer tc_configureGuard; + var StopTrafficCaptureRsp stopResult; + tc_configureGuard.start(PX_MAX_MSG_WAIT); + acPort.send(m_stopTrafficCaptureReq); + alt { + [] acPort.receive (m_stopTrafficCaptureRsp_any) -> value stopResult { + tc_configureGuard.stop; + if (stopResult.status.code != e_success) + { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq unsuccessfull! ****"); + setverdict(fail); + } + } + [] tc_configureGuard.timeout { + log("**** TC_IMS_MESS_0001: StopTrafficCaptureReq not answered. ****"); + setverdict (inconc); + } + } + f_cf_monitor_down_sip(p_config.gmA); + f_cf_monitor_down_diameter(p_config.rx); + f_cf_monitor_down_diameter(p_config.s6a); + f_cf_monitor_down_diameter(p_config.gx); + f_cf_monitor_down_sip(p_config.mxA); + f_cf_monitor_down_sip(p_config.mw); + f_cf_monitor_down_sgi(p_config.sgi); + if(isvalue(p_config.gmB)) { + f_cf_monitor_down_sip(p_config.gmB); + } + + } // end of function f_cf_epc_call_rel15_down + + } // end group g_release15 + } \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index 8b40c56..890c4af 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -1,172 +1,172 @@ module AtsImsIot_TestSystem { - import from LibSip_SIPTypesAndValues all; - import from LibMsrp_TypesAndValues all; - import from AtsImsIot_TypesAndValues all; - import from LibIot_TestInterface all; - import from LibIot_TestInterface all; - import from LibIot_TypesAndValues all; + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; import from LibDiameter_TypesAndValues all; - /** - * @desc interfaces to the SUT - */ - type component IotSystemInterface { - port DataPort dPort; - port SipPort sipPort; - port DiameterPort diameterPort; - port SgiPort sgiPort; - port EquipmentAccessPort eaPort; - port AdapterConfigPort acPort; - } - /** - * @desc - * providing monitoring functionality of involved interfaces. Used as - * PTC. - */ - type component ImsInterfaceMonitor extends InterfaceMonitor { - port DataPort dPort; - port NaptrPort naptrPort; - port DiameterPort rxPort; - port SgiPort sgiPort; - port ImsCoordinationPort icpPort; - } - - type component SipInterfaceMonitor extends InterfaceMonitor { - port SipPort sipPort; - port ImsCoordinationPort icpPort; - } - type component DiameterInterfaceMonitor extends InterfaceMonitor { - port DiameterPort diameterPort; - port ImsCoordinationPort icpPort; - } - type component NaptrInterfaceMonitor extends InterfaceMonitor { - port NaptrPort naptrPort; - port ImsCoordinationPort icpPort; - } - type component SgiInterfaceMonitor extends InterfaceMonitor { - port SgiPort sgiPort; - port ImsCoordinationPort icpPort; - } - - /** - * @desc - * used to coordinate the behavior of other components. It is in charge - * of controlling the overall execution, manangement of testing phases, - * test verdicts collection and synchronization. Used as MTC. - */ - type component ImsTestCoordinator extends TestCoordinator { - port ImsCoordinationPort icpPort; - var VxLTEMonitorInterfaceList vc_MonIntfList; - var CF_VXLTE_Interfaces vc_vxlte_monitor_components; - } - - group portDefinitions { - type port ImsCoordinationPort message { - inout SipMessage, DIAMETER_MSG; - } - type port DataPort message { - in Request, Response, SEND_request, RECEIVE_response; // SIP - } - type port SipPort message { //type port SipPort message - in Request, Response, SEND_request, RECEIVE_response; // SIP - } + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port SipPort sipPort; + port DiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port DiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port SipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port DiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port SipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } type port NaptrPort message { in NAPTRmessage; } type port DiameterPort message { in DIAMETER_MSG; } - type port SgiPort message { - in charstring; - } - } - - type record CF_INT_CALL { - ImsInterfaceMonitor gmA, + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor mxA, - ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxB, - ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, ImsInterfaceMonitor naptr optional - } - type record CF_INT_AS { + } + type record CF_INT_AS { ImsInterfaceMonitor gmA, ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mxA, ImsInterfaceMonitor gmB, ImsInterfaceMonitor mxB, - ImsInterfaceMonitor iscA optional, - ImsInterfaceMonitor iscB optional - } - type record CF_ROAM_AS { - ImsInterfaceMonitor gmA, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor mxA, - ImsInterfaceMonitor ici, - ImsInterfaceMonitor mxB, - ImsInterfaceMonitor gmB, - ImsInterfaceMonitor iscA optional, - ImsInterfaceMonitor iscB optional - } - type record CF_EPC_CALL { - ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 - ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 - ImsInterfaceMonitor mxA, - ImsInterfaceMonitor mw, - ImsInterfaceMonitor sgi, - ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 - } + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } - group g_release15 { - - type record CF_VXLTE_Interfaces{ - SipInterfaceMonitor gmA optional, - SipInterfaceMonitor gmB optional, - SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP - SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF - SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF - SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP - SipInterfaceMonitor ic optional, - SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - SipInterfaceMonitor mwPS optional, - SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF - SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF - SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF - SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF - SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF - SipInterfaceMonitor isc optional, - DiameterInterfaceMonitor cxIH optional, - DiameterInterfaceMonitor cxSH optional, - DiameterInterfaceMonitor gx optional, - DiameterInterfaceMonitor rx optional, - DiameterInterfaceMonitor s6a optional, - DiameterInterfaceMonitor s9 optional, - DiameterInterfaceMonitor sh optional - } + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } - type record CF_ATT_old { - ImsInterfaceMonitor gmA, + type record CF_ATT_old { + ImsInterfaceMonitor gmA, ImsInterfaceMonitor rx, - ImsInterfaceMonitor s6a, + ImsInterfaceMonitor s6a, ImsInterfaceMonitor gx, - ImsInterfaceMonitor mxA, - ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used - ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF - ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF - ImsInterfaceMonitor sgi, - ImsInterfaceMonitor gmB - } - - type record CF_ATT { - SipInterfaceMonitor gmA, - DiameterInterfaceMonitor rx, - DiameterInterfaceMonitor s6a, - DiameterInterfaceMonitor gx, - SipInterfaceMonitor mxA, - SipInterfaceMonitor mw, - SgiInterfaceMonitor sgi, - SipInterfaceMonitor gmB - } - } // end of g_release15 - + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 + } \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index dfe92c3..7c0384e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -1,61 +1,61 @@ /* - * @author STF 370 + * @author STF 370 * @version $Id: $ - * @desc This module provides the templates for Interoperability tests. + * @desc This module provides the templates for Interoperability tests. */ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; - import from LibSip_SIPTypesAndValues all; - import from LibMsrp_TypesAndValues all; - import from LibDiameter_TypesAndValues all; - import from LibCommon_DataStrings all; + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from LibDiameter_TypesAndValues all; + import from LibCommon_DataStrings all; - group SIPmessageTypes { - /** - * @desc SIP Message Type - * @member request SIP request - * @member response SIP response - * @member msrpRequest MSRP SEND/AUTH request messages - * @member msrpResponse MSRP response message - */ - - type union SipMessage { - Request request, - Response response, + group SIPmessageTypes { + /** + * @desc SIP Message Type + * @member request SIP request + * @member response SIP response + * @member msrpRequest MSRP SEND/AUTH request messages + * @member msrpResponse MSRP response message + */ + + type union SipMessage { + Request request, + Response response, SEND_request msrpRequest, RECEIVE_response msrpResponse, NAPTRmessage naptrmessage - } - /** - * @desc SIP Message List Type - */ - type record of SipMessage SipMessageList; - type record SkipType { - integer skipCount, - SipMessage skipMessage optional - } - } - - group DiameterMessageTypes{ - /** - * @desc DIAMETER Message List Type - */ - type record of DIAMETER_MSG DiameterMessageList; - type record SkipTypeDiameter { - integer skipCount, - DIAMETER_MSG skipMessage optional - } - } + } + /** + * @desc SIP Message List Type + */ + type record of SipMessage SipMessageList; + type record SkipType { + integer skipCount, + SipMessage skipMessage optional + } + } + + group DiameterMessageTypes{ + /** + * @desc DIAMETER Message List Type + */ + type record of DIAMETER_MSG DiameterMessageList; + type record SkipTypeDiameter { + integer skipCount, + DIAMETER_MSG skipMessage optional + } + } - group DnsEnumMessageTypes { + group DnsEnumMessageTypes { /** * @desc NAPTR Message Type */ type union NAPTRmessage { - DnsMessage dnsMessage, - EnumMessage enumMessage + DnsMessage dnsMessage, + EnumMessage enumMessage } /** * @desc DNS Message Type @@ -63,144 +63,144 @@ module AtsImsIot_TypesAndValues { * @member response DNS response */ type union DnsMessage { - DnsQuery query, - DnsResponse response + DnsQuery query, + DnsResponse response } /** * @desc DnsQuery Message Type */ type record DnsQuery { - DnsHeader header, - DnsQuestionList question_list optional, - DnsAnswerList answer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional + DnsHeader header, + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional } with { encode "NAPTRCodec"} - - /** + + /** * @desc DnsResponse Message Type */ type record DnsResponse { DnsHeader header, - DnsQuestionList question_list optional, - DnsAnswerList answer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional + DnsQuestionList question_list optional, + DnsAnswerList answer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional } with { encode "NAPTRCodec"} - - type record DnsHeader - { - UInt16 id, - Bit1 qR_flag, - UInt4 opcode, - Bit1 aA_flag, - Bit1 tC_flag, - Bit1 rD_flag, - Bit1 rA_flag, - Bit3 z_field, - UInt4 rCODE, - UInt16 qDCOUNT, - UInt16 aNCOUNT, - UInt16 nSCOUNT, - UInt16 aRCOUNT - } with { encode "NAPTRCodec"} - - type charstring DnsDomainName;//NB! DNS pointers are handled codec - - type record DnsQuestion - { - DnsDomainName qNAME, - UInt16 qTYPE, - UInt16 qCLASS - } with { encode "NAPTRCodec"} - - type record of DnsQuestion DnsQuestionList; - type record of DnsResourceRecord DnsAnswerList; - type record of DnsResourceRecord DnsAuthorityList; - type record of DnsResourceRecord DnsAdditionalList; - - type record DnsResourceRecord - { - DnsDomainName domainName, - Int16 type_, - Int16 class_, - UInt32 ttl, - UInt16 rd_length, - DnsRDATA r_data - } with { encode "NAPTRCodec"} - - type octetstring DnsRDATA; - - /** - * @desc ENUM Message Type - * @member request ENUM query - * @member response ENUM response - */ - type union EnumMessage { - EnumQuery query, - EnumResponse response - } - + + type record DnsHeader + { + UInt16 id, + Bit1 qR_flag, + UInt4 opcode, + Bit1 aA_flag, + Bit1 tC_flag, + Bit1 rD_flag, + Bit1 rA_flag, + Bit3 z_field, + UInt4 rCODE, + UInt16 qDCOUNT, + UInt16 aNCOUNT, + UInt16 nSCOUNT, + UInt16 aRCOUNT + } with { encode "NAPTRCodec"} + + type charstring DnsDomainName;//NB! DNS pointers are handled codec + + type record DnsQuestion + { + DnsDomainName qNAME, + UInt16 qTYPE, + UInt16 qCLASS + } with { encode "NAPTRCodec"} + + type record of DnsQuestion DnsQuestionList; + type record of DnsResourceRecord DnsAnswerList; + type record of DnsResourceRecord DnsAuthorityList; + type record of DnsResourceRecord DnsAdditionalList; + + type record DnsResourceRecord + { + DnsDomainName domainName, + Int16 type_, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsRDATA r_data + } with { encode "NAPTRCodec"} + + type octetstring DnsRDATA; + + /** + * @desc ENUM Message Type + * @member request ENUM query + * @member response ENUM response + */ + type union EnumMessage { + EnumQuery query, + EnumResponse response + } + /** * @desc EnumQuery Message Type */ type record EnumQuery { - DnsHeader header, - EnumQuestionList enumQuestion_list optional, - EnumAnswerList enumResponse_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional - } with { encode "NAPTRCodec"} - - type record EnumResponse - { - DnsHeader header, - EnumQuestionList enumQuestion_list optional, - EnumAnswerList enumAnswer_list optional, - DnsAuthorityList authority_list optional, - DnsAdditionalList additional_list optional - } with { encode "NAPTRCodec"} - - - type record EnumQuestion - { - E164TN e164TelNumber, - UInt16 qTYPE, //35 - UInt16 qCLASS // - }with { encode "NAPTRCodec"} - - type record of EnumQuestion EnumQuestionList; - type record of EnumAnswer EnumAnswerList; - - /** + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumResponse_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + type record EnumResponse + { + DnsHeader header, + EnumQuestionList enumQuestion_list optional, + EnumAnswerList enumAnswer_list optional, + DnsAuthorityList authority_list optional, + DnsAdditionalList additional_list optional + } with { encode "NAPTRCodec"} + + + type record EnumQuestion + { + E164TN e164TelNumber, + UInt16 qTYPE, //35 + UInt16 qCLASS // + }with { encode "NAPTRCodec"} + + type record of EnumQuestion EnumQuestionList; + type record of EnumAnswer EnumAnswerList; + + /** * @desc EnumAnswer Message Type */ - type record EnumAnswer - { - E164TN e164TelNumber, - Int16 naptrType, - Int16 class_, - UInt32 ttl, - UInt16 rd_length, - DnsNaptrRRData naptrRR - } with { encode "NAPTRCodec"} - type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible - - - type record DnsNaptrRRData - { - UInt16 naptrOrder, - UInt16 naptrPreference, - UInt8 flags_length, - NaptrCharString naptrFlags, - UInt8 service_length, - NaptrCharString naptrService, - UInt8 regex_length, - NaptrCharString naptrRegex, - UInt8 replacementLength, - DnsDomainName naptrReplacement - } with { encode "NAPTRCodec"} - + type record EnumAnswer + { + E164TN e164TelNumber, + Int16 naptrType, + Int16 class_, + UInt32 ttl, + UInt16 rd_length, + DnsNaptrRRData naptrRR + } with { encode "NAPTRCodec"} + type DnsDomainName E164TN;//NB! DNS pointers not recommended, but possible + + + type record DnsNaptrRRData + { + UInt16 naptrOrder, + UInt16 naptrPreference, + UInt8 flags_length, + NaptrCharString naptrFlags, + UInt8 service_length, + NaptrCharString naptrService, + UInt8 regex_length, + NaptrCharString naptrRegex, + UInt8 replacementLength, + DnsDomainName naptrReplacement + } with { encode "NAPTRCodec"} + type charstring NaptrCharString; - } + } }//end module diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 05d8125..e63cfda 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -26,6 +26,7 @@ sources := \ AtsImsIot_TP_behavior_MW_EB.ttcn \ AtsImsIot_TP_behavior_MM.ttcn \ AtsImsIot_TP_behavior_ML.ttcn \ + AtsImsIot_TP_behavior_Mx_LRF.ttcn \ AtsImsIot_TP_behavior_S6A.ttcn \ AtsImsIot_PIXITS.ttcn \ AtsImsIot_TD_INI.ttcn \ -- GitLab From 5f5fb9abf8cc5fe9fd5c570a730551610d7d53cc Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 2 Aug 2023 08:27:26 +0200 Subject: [PATCH 54/84] First compilation pass --- emergency-iop.code-workspace | 3 - .../AtsImsIot_Diameter_Templates.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 196 +++++++++--------- ttcn/AtsImsIot/AtsImsIot_Functions.ttcn | 20 +- ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn | 8 +- ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 115 +++++++++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 36 ++-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 26 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 26 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn | 45 +++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 9 +- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 8 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 8 +- .../AtsImsIot_TP_behavior_MW_IS.ttcn | 65 +++++- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 65 +++++- .../AtsImsIot_TP_behavior_Mx_LRF.ttcn | 3 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 4 +- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 7 + ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 40 +++- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 2 +- ttcn/AtsImsIot/module.mk | 1 + ttcn/LibMsrp/LibMsrp_Templates.ttcn | 36 ++-- .../ttcn/LibDiameter_Types_ShDh_AVPs.ttcn | 4 +- 28 files changed, 535 insertions(+), 244 deletions(-) diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index b28e8e8..c7c946f 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -8,9 +8,6 @@ }, { "path": "../../tmp/emergency-iop-ttf010" - }, - { - "path": "../../tmp/vxlte-iop" } ] } \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index fe9060e..b33c7b0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -10,8 +10,8 @@ module AtsImsIot_Diameter_Templates { //LibCommon - import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; - import from LibCommon_BasicTypesAndValues {type UInt8, UInt32, UInt64;}; + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; //LibDiameter import from LibDiameter_TypesAndValues all; @@ -21,7 +21,7 @@ module AtsImsIot_Diameter_Templates { import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code, Subscription_Data_AVP}; + import from LibDiameter_Types_S6a_AVPs all; import from LibDiameter_Types_S9_AVPs all; group DiameterHeaderFields { diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index b0e2e32..8376c86 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -19,6 +19,7 @@ module AtsImsIot_Emergency { // LibImsIot import from AtsImsIot_Functions all; // ImsIot + import from AtsImsIot_TypesAndValues all; import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; import from AtsImsIot_Functions all; @@ -29,7 +30,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_IS all; import from AtsImsIot_TP_behavior_MW_EC all; import from AtsImsIot_TP_behavior_MW_EB all; - import from AtsImsIot_TP_behavior_MX_LRF all; + import from AtsImsIot_TP_behavior_Mx_LRF all; // FIXME Rename into MX_ import from AtsImsIot_TP_behavior_MM all; import from AtsImsIot_TP_behavior_ML all; import from AtsImsIot_TP_behavior_IC all; @@ -40,6 +41,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_S9 all; import from AtsImsIot_TP_behavior_SH all; import from AtsImsIot_TP_behavior_RX all; + import from AtsImsIot_PIXITS all; /** * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) @@ -297,7 +299,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -336,11 +338,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -350,7 +352,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22 @@ -358,13 +360,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 @@ -414,7 +416,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -453,11 +455,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -467,7 +469,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -475,13 +477,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 @@ -530,7 +532,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCF -> PSAP })) { var SipMessage v_sip; @@ -565,11 +567,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -579,7 +581,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -587,13 +589,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 @@ -643,7 +645,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF })) { @@ -683,14 +685,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 11 - f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 12 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 13 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 14 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -700,7 +702,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 @@ -708,13 +710,13 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); // Event 21 f_mtc_userAnswerCall(v_psap); // Event 28 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 25 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 25 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 28 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 29 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 30 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 30 f_mtc_userCheckCallEstablished(v_ueA); // Event 31 f_mtc_userCheckCallEstablished(v_psap); // Event 31 @@ -762,7 +764,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { @@ -784,7 +786,7 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_CO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -799,8 +801,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx -<-> f_mtc_check_TP_ML_EBCF_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) @@ -818,7 +820,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -837,7 +839,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 @@ -887,9 +889,9 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; @@ -926,11 +928,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB); // Event 13 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 @@ -948,7 +950,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 @@ -967,7 +969,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 f_mtc_userCheckCallEstablished(v_ueA); // Event 36 @@ -1016,7 +1018,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1050,8 +1052,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_ECSCF_ECO_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // 183 Session Progress f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 @@ -1064,7 +1066,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -1083,7 +1085,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 @@ -1133,8 +1135,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; @@ -1171,11 +1173,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 @@ -1192,7 +1194,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 @@ -1211,7 +1213,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 f_mtc_userCheckCallEstablished(v_ueA); // Event 36 @@ -1261,8 +1263,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME })) { var SipMessage v_sip; @@ -1329,7 +1331,7 @@ module AtsImsIot_Emergency { //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1350,8 +1352,8 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); @@ -1362,11 +1364,11 @@ module AtsImsIot_Emergency { // 183 Session Progress f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 f_mtc_userCheckRinging(v_ueA); // Event 15 f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 @@ -1374,9 +1376,9 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 21 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 @@ -1425,7 +1427,7 @@ module AtsImsIot_Emergency { //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { @@ -1447,11 +1449,11 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, -, v_sip); // Event 21 + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 21 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); @@ -1462,11 +1464,11 @@ module AtsImsIot_Emergency { // 183 Session Progress f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 f_mtc_userCheckRinging(v_ueA); // Event 15 f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 @@ -1474,9 +1476,9 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 21 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 @@ -1527,7 +1529,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1600,7 +1602,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -1629,7 +1631,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 4 + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 4 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 @@ -1637,7 +1639,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 @@ -1687,7 +1689,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { @@ -1717,7 +1719,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_ECO_IBCF_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 //Rx/Gx exchange after BYE was received at P-CSCF @@ -1775,7 +1777,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -1862,8 +1864,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -1938,7 +1940,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS })) { @@ -2015,7 +2017,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; @@ -2094,8 +2096,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -2131,15 +2133,15 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 - f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 7 + f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 8 + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 28 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2187,7 +2189,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2263,7 +2265,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2339,8 +2341,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; @@ -2415,7 +2417,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2491,7 +2493,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { @@ -2566,8 +2568,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; diff --git a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn index 9a94e23..19f0bd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -6,7 +6,7 @@ module AtsImsIot_Functions { //LibDiameter - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + import from LibDiameter_TypesAndValues all; //LibSip import from LibSip_SIPTypesAndValues all; @@ -15,22 +15,22 @@ module AtsImsIot_Functions { import from LibIms_UpperTester all; //LibIot - import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; - import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } - import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } - import from LibIot_Functions { function f_getE2EVerdict; } - import from LibIot_TypesAndValues { type DefaultList, MonitorInterfaceInfo; } - import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;} + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_Functions all; + import from LibIot_TypesAndValues all; + import from LibIot_VxLTE_Functions all; //LibUpperTester import from LibUpperTester all; //AtsImsIot - import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } + import from AtsImsIot_Templates all; import from AtsImsIot_TestSystem all; - import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter;} + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; group ue { diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn index ca42c58..7b10a47 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_ATT{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser}; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn index 0dd94a7..c3d3639 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DRG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn index a88b3f0..066a4d2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DTC{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn index a41eada..ad9f369 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn @@ -11,17 +11,15 @@ module AtsImsIot_TD_INI{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface {type IotEquipmentUser;} - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C;} + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions {function f_getImUser;} + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TypesAndValues all; import from AtsImsIot_TestConfiguration all; @@ -2440,7 +2438,7 @@ module AtsImsIot_TD_INI{ //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) - f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 4) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 4) //Rx/Gx/S9 exchange after INVITE was received at P-CSCF diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn index bde4e54..51a6fd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_REG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index a2b7b13..be3da7b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -439,6 +439,65 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02 + /** * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). * Initial conditions with { @@ -1581,7 +1640,7 @@ module AtsImsIot_TP_behavior_GM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04 + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 /** * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). @@ -1839,6 +1898,32 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 + function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01 + /** * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2580,6 +2665,34 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 + function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01 + /** * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). * Initial conditions with { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 95670b3..d9a9528 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -234,7 +234,7 @@ group g_PGW { p_monitorCompRef.done; mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -292,7 +292,7 @@ group g_PGW { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; - var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_dummy }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -309,8 +309,8 @@ group g_PGW { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -368,7 +368,7 @@ group g_PGW { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; - var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_dummy }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -385,8 +385,8 @@ group g_PGW { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_RAA_basic }; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -446,7 +446,7 @@ group g_PGW { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; - var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_RAR_Gx_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -463,8 +463,8 @@ group g_PGW { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { rAR_MSG := mw_RAA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_RAA_Gx_basic }; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -572,8 +572,8 @@ group g_PCRF { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -651,8 +651,8 @@ group g_PCRF { ); p_monitorCompRef.done; - mw_diameter_msg_pass := mw_CCA_resultCode; - mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -729,8 +729,8 @@ group g_PCRF { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { @@ -1323,8 +1323,8 @@ group g_PCRF { ); p_monitorCompRef.done; - mw_diameter_msg_pass := { cCR_MSG := mw_CCA_resultCode }; - mw_diameter_msg_fail := { cCR_MSG := mw_CCA_basic }; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index adc402c..0e70a40 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -7,27 +7,23 @@ module AtsImsIot_TP_behavior_IC { - import from AtsImsIot_TestSystem { type SipInterfaceMonitor , ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_Common all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; import from AtsImsIot_Templates_IC all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn index 0559a25..5b20a2a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -7,28 +7,24 @@ module AtsImsIot_TP_behavior_ISC { - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_Common all; import from AtsImsIot_Functions all; import from AtsImsIot_Templates_MW all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; // LibMsrp // import from LibMsrp_TypesAndValues { type MsrpURI }; // import from LibMsrp_Functions { function f_str2msrpUri }; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn index 08ca556..911d621 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn @@ -25,6 +25,7 @@ module AtsImsIot_TP_behavior_ML { // AtsImsIot import from AtsImsIot_TestSystem all; import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_ML all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; @@ -84,8 +85,8 @@ module AtsImsIot_TP_behavior_ML { { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) ), ( mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), @@ -107,6 +108,44 @@ module AtsImsIot_TP_behavior_ML { } } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01 + function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_ML_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02 + } // End of group imsInvite group ims3xxx { @@ -139,4 +178,4 @@ module AtsImsIot_TP_behavior_ML { } // End of group ims183SessionProgress -} // End of module AtsImsIot_TP_behavior_ML \ No newline at end of file +} // End of module AtsImsIot_TP_behavior_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 798fadb..bc71676 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -25,6 +25,7 @@ module AtsImsIot_TP_behavior_MM { // AtsImsIot import from AtsImsIot_TestSystem all; import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_MM all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; @@ -157,10 +158,10 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 100 TRYING p_monitorCompRef.start( diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 308bd6d..e2c2472 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -357,8 +357,6 @@ module AtsImsIot_TP_behavior_MW_EB { in SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the 200 OK p_monitorCompRef.start( f_Iot_Sip_receive( @@ -391,8 +389,6 @@ module AtsImsIot_TP_behavior_MW_EB { in SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the 200 OK p_monitorCompRef.start( f_Iot_Sip_receive( @@ -401,8 +397,8 @@ module AtsImsIot_TP_behavior_MW_EB { p_sip.request.msgHeader.callId, p_sip.request.msgHeader.fromField, ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_PSAP).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_PSAP).publicId), p_sip.request.msgHeader.toField ) )) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 919aea6..3cb326d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -150,8 +150,8 @@ module AtsImsIot_TP_behavior_MW_EC { { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) ), ( mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), @@ -188,8 +188,8 @@ module AtsImsIot_TP_behavior_MW_EC { { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) ), ( mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index 14428e2..e72bdfa 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -400,6 +400,66 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02 + /** * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { @@ -778,7 +838,10 @@ module AtsImsIot_TP_behavior_MW_IS { { mw_SipResponse(mw_Response_200onREGISTER_IMS( v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? )) }, { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index f46dad4..b0ffe01 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -453,6 +453,65 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02 + /** * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { @@ -3185,11 +3244,7 @@ module AtsImsIot_TP_behavior_MW_PS { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField + p_sip.request.msgHeader.callId )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn index b6d0500..f38a038 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn @@ -26,7 +26,8 @@ module AtsImsIot_TP_behavior_Mx_LRF { // AtsImsIot import from AtsImsIot_TestSystem all; import from AtsImsIot_Templates all; - import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_ML all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn index d21cc0a..b9a7056 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -83,8 +83,8 @@ group g_HSS { ); p_monitorCompRef.done; - var template DIAMETER_MSG mw_diameter_msg_pass := { aIA_MSG := mw_AIA_resultCode }; - var template DIAMETER_MSG mw_diameter_msg_fail := { aIA_MSG := mw_AIA_basic }; + mw_diameter_msg_pass := { aIA_MSG := mw_AIA_resultCode }; + mw_diameter_msg_fail := { aIA_MSG := mw_AIA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 8ab3be6..b6eaca6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -101,6 +101,13 @@ module AtsImsIot_Templates_GM { toParams := * } // End of template mw_To_NameAddr_TelUrl + template (present) Contact mw_contact( + template (present) ContactAddress p_contactAddresses := ? + ) := { + fieldName := CONTACT_E, + contactBody := { contactAddresses := { p_contactAddresses } } + } // End of template mw_Contact + template (present) Response mw_200OK( template (present) CSeq p_cSeq := ?, template (present) CallId p_callId := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn index 556879a..3d86c74 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn @@ -15,7 +15,7 @@ module AtsImsIot_Templates_IC import from LibSip_Common all; import from LibMsrp_TypesAndValues all; import from LibIot_PIXITS all; - import from AtsImsIot_PIXITS all; + import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; group g_IBCF { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index f0ca8b4..8b6867a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -132,12 +132,12 @@ module AtsImsIot_Templates_MM { } // End of template mw_TP_MM_PSAP_ACK_01 template (present) BYE_Request mw_TP_MM_PSAP_BYE_01( // TODO To be enforced - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) SipUrl p_bye_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_BYE_Request_Base := { + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { requestLine := { method := BYE_E, requestUri := p_bye_uri, // @TODO @@ -157,6 +157,32 @@ module AtsImsIot_Templates_MM { } } } // End of template mw_TP_MW_PCSCF_BYE_01 - + + template (present) CANCEL_Request mw_TP_MM_PSAP_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index 7c0384e..961f35c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -9,7 +9,7 @@ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibMsrp_TypesAndValues all; - import from LibDiameter_TypesAndValues all; + import from LibDiameter_TypesAndValues {type DIAMETER_MSG} import from LibCommon_DataStrings all; group SIPmessageTypes { diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index e63cfda..27c8fe8 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -32,6 +32,7 @@ sources := \ AtsImsIot_TD_INI.ttcn \ AtsImsIot_Templates_MW.ttcn \ AtsImsIot_Templates_MM.ttcn \ + AtsImsIot_Templates_ML.ttcn \ AtsImsIot_TestSystem.ttcn \ AtsImsIot_TP_behavior_IC.ttcn \ AtsImsIot_TP_behavior_MW_SI.ttcn \ diff --git a/ttcn/LibMsrp/LibMsrp_Templates.ttcn b/ttcn/LibMsrp/LibMsrp_Templates.ttcn index be324d4..5f27531 100644 --- a/ttcn/LibMsrp/LibMsrp_Templates.ttcn +++ b/ttcn/LibMsrp/LibMsrp_Templates.ttcn @@ -539,19 +539,19 @@ module LibMsrp_Templates { toPath := m_msrpToPath_Dummy, fromPath := m_msrpFromPath_Dummy, headers := { - authenticationInfo := omit, - authorization := omit, + messageID := m_msrpMessageID_Dummy, + successReport := omit, + failureReport := omit, byteRange := omit, + status := omit, expires := omit, - extHeaders := omit, - failureReport := omit, - maxExpires := omit, - messageID := m_msrpMessageID_Dummy, minExpires := omit, - status := omit, - successReport := omit, + maxExpires := omit, usePath := omit, - wwwAuthenticate := omit + wwwAuthenticate := omit, + authorization := omit, + authenticationInfo := omit, + extHeaders := omit } }, // End of 'headers' field endLine := { @@ -587,15 +587,7 @@ module LibMsrp_Templates { ) modifies mw_msrpResponse_toPath_fromPath := { headers := { headers := { - authenticationInfo := *, - authorization := *, - byteRange := *, - expires := *, - extHeaders := *, - maxExpires := *, messageID := *, - minExpires := *, - status := *, successReport := { headerName := SUCCESS_REPORT_E, reportStatus := e_YES @@ -604,8 +596,16 @@ module LibMsrp_Templates { headerName := FAILURE_REPORT_E, reportStatus := e_NO }, + byteRange := *, + status := *, + expires := *, + minExpires := *, + maxExpires := *, usePath := *, - wwwAuthenticate := * + wwwAuthenticate := *, + authorization := *, + authenticationInfo := *, + extHeaders := * } // End of 'header' field } // End of 'headers' field } // // End of template mw_msrpResponse_toPath_fromPath_with_transferReports diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn index d6dae2c..416958c 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn @@ -11,8 +11,8 @@ module LibDiameter_Types_ShDh_AVPs { // LibCommmon - import from LibCommon_BasicTypesAndValues {type UInt8,UInt24,UInt32;}; - import from LibCommon_DataStrings {type Bit1,Bit4,Oct2;}; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_DataStrings all; // LibDiameter import from LibDiameter_Types_Base_AVPs all; -- GitLab From bae5117ded8304fae4b049d435964419f3ab7ad1 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 3 Aug 2023 10:58:10 +0200 Subject: [PATCH 55/84] Add _REJ_01..02 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 394 ++++++++++++------ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 74 +++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 31 ++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 125 ++++-- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 107 +++++ .../AtsImsIot_TP_behavior_MW_EC.ttcn | 31 ++ .../AtsImsIot_TP_behavior_MW_PS.ttcn | 35 ++ ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 205 ++++++++- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 288 ++++++------- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 202 ++------- ttcn/AtsImsIot/module.mk | 30 +- 12 files changed, 1020 insertions(+), 528 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 8376c86..1bd58db 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -32,6 +32,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_EB all; import from AtsImsIot_TP_behavior_Mx_LRF all; // FIXME Rename into MX_ import from AtsImsIot_TP_behavior_MM all; + import from AtsImsIot_TP_behavior_MI all; import from AtsImsIot_TP_behavior_ML all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; @@ -667,6 +668,7 @@ module AtsImsIot_Emergency { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -780,8 +782,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -800,16 +807,15 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - // FIXME f_mtc_check_TP_MW_IBCF_xxx -<-> f_mtc_check_TP_ML_EBCF_xxx f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 - f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 // 183 Session Progress + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -906,8 +912,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1018,7 +1029,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; @@ -1033,8 +1045,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 @@ -1051,12 +1068,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_ECSCF_ECO_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -1066,8 +1084,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 + f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -1075,18 +1093,15 @@ module AtsImsIot_Emergency { f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 - f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 - f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK – Event 26 + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 - f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 @@ -1151,8 +1166,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1279,8 +1299,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1346,7 +1371,12 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01(); // Test body @@ -1443,8 +1473,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1544,8 +1579,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1617,14 +1657,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1705,14 +1744,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1776,8 +1814,8 @@ module AtsImsIot_Emergency { if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; @@ -1792,13 +1830,12 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); // Test body @@ -1806,7 +1843,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 + f_mtc_check_TP_MI_BGCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 @@ -1814,7 +1851,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 @@ -1880,14 +1917,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1956,14 +1992,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2032,14 +2067,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2112,15 +2146,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2135,10 +2167,12 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 28 @@ -2205,19 +2239,43 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 + f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic) + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // 200 CANCEL – Event 11 + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20 + f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_IBCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, true); // Event 30 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2281,19 +2339,42 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 + + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 + f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 32 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2357,19 +2438,50 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + + // 480 Temporary Unvailable + f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2433,19 +2545,53 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + + // 480 Temporary Unavailable + f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31 + + + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2509,14 +2655,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2584,14 +2729,13 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index be3da7b..8e04ca3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -2666,10 +2666,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the ACK p_monitorCompRef.start( @@ -3983,6 +3983,41 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 + function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). * Initial conditions with { @@ -4114,4 +4149,35 @@ module AtsImsIot_TP_behavior_GM { } // End of group imsRequestTermination + group imsTemporaryUnavailable { + + function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index 0e70a40..71fa1da 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -1664,5 +1664,36 @@ module AtsImsIot_TP_behavior_IC } // end group g_IBCF + group imsTemporaryUnavailable { + + function f_mtc_check_TP_IC_IBCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_IC_IBCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_IC_IBCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index bc71676..ae8c835 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -24,7 +24,6 @@ module AtsImsIot_TP_behavior_MM { import from LibMsrp_Templates all; // AtsImsIot import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; import from AtsImsIot_Templates_MM all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; @@ -80,7 +79,7 @@ module AtsImsIot_TP_behavior_MM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -88,7 +87,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_PSAP_INVITE_01 - Request", + "TP_MM_ECSCF_INVITE_01 - Request", true, p_checkMessage ) @@ -112,7 +111,7 @@ module AtsImsIot_TP_behavior_MM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -120,7 +119,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_PSAP_INVITE_01 - Request", + "TP_MM_ECSCF_INVITE_01 - Request", true, p_checkMessage ) @@ -166,7 +165,7 @@ module AtsImsIot_TP_behavior_MM { // Check the 100 TRYING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_100Trying_01( + { mw_SipResponse(mw_TP_MM_ECSCF_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -174,7 +173,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MM_PSAP_100Trying_01", + "TP_MM_ECSCF_100Trying_01", false, p_checkMessage ) @@ -221,15 +220,15 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 180 RINGING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_180Ringing_01( + { mw_SipResponse(mw_TP_MM_ECSCF_180Ringing_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, mw_To_NameAddr_TelUrl( @@ -239,7 +238,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_180Ringing_Base) }, { 0, omit }, - "TP_MM_PSAP_180RINGING_01", + "TP_MM_ECSCF_180RINGING_01", false, p_checkMessage ) @@ -286,15 +285,15 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_183SessionProgress_01( + { mw_SipResponse(mw_TP_MM_ECSCF_183SessionProgress_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -302,7 +301,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_183SessionProgress_Base) }, { 0, omit }, - "TP_MM_PSAP_183SESSION_PROGRESS_01", + "TP_MM_ECSCF_183SESSION_PROGRESS_01", false, p_checkMessage ) @@ -378,7 +377,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MM_PSAP_200OK_01", + "TP_MM_ECSCF_200OK_01", false, p_checkMessage ) @@ -434,7 +433,7 @@ module AtsImsIot_TP_behavior_MM { // Check the ACK p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_ACK_01( + { mw_SipRequest(mw_TP_MM_ECSCF_ACK_01( p_sip.request.msgHeader.callId, p_sip.request.msgHeader.cSeq, -, // FIXME To be set @@ -444,7 +443,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_ACK_Request_Base) }, { 0, omit }, - "TP_MM_PSAP_ACK_01 - Request", + "TP_MM_ECSCF_ACK_01 - Request", false, p_checkMessage ) @@ -500,7 +499,7 @@ module AtsImsIot_TP_behavior_MM { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_BYE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -518,7 +517,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MM_PSAP_BYE_01 - Request", + "TP_MM_ECSCF_BYE_01 - Request", true, p_checkMessage ) @@ -588,7 +587,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MM_PSAP_200OK_BYE_01", + "TP_MM_ECSCF_200OK_BYE_01", false, p_checkMessage ) @@ -610,7 +609,7 @@ module AtsImsIot_TP_behavior_MM { // Check the CANCEL p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_CANCEL_01( + { mw_SipRequest(mw_TP_MM_ECSCF_CANCEL_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -628,7 +627,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MM_PSAP_CANCEL_01 - Request", + "TP_MM_ECSCF_CANCEL_01 - Request", true, p_checkMessage ) @@ -640,5 +639,75 @@ module AtsImsIot_TP_behavior_MM { } // End of function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01 } // End of group imsCancel - + + group imsRequestTermination { + + function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index e2c2472..89e5f3c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -546,6 +546,34 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + function f_mtc_check_TP_MW_IBCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + } // End of group imsAck group imsBye { @@ -730,4 +758,83 @@ module AtsImsIot_TP_behavior_MW_EB { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group ims487Invite { + + function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_IBCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01 + + } // End of group ims487Invite + } // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 3cb326d..9dda073 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -706,4 +706,35 @@ module AtsImsIot_TP_behavior_MW_EC { } // End of group imsCancel + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index b0ffe01..ab66af6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -3864,6 +3864,41 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). * Initial conditions with { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 5627105..32db8f6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -2149,30 +2149,30 @@ module AtsImsIot_Templates { template UPDATE_Request mdw_TP_IMS_5106_02_f_ic( template CallId p_callId, template SipUrl p_SCSCF_URI - ) modifies mw_UPDATE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_URI), - * - } - } - } - } + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } /** * @desc OPTIONS Request checking TP_IMS_CONTENT_SHARE_01 */ template OPTIONS_Request mdw_TP_IMS_CONTENT_SHARE_01_ic( - template CallId p_callId - ) modifies mw_OPTIONS_Request_Base := { - msgHeader := { - acceptContact := mw_AcceptContact_share, - contact := mw_Contact_share + template CallId p_callId + ) modifies mw_OPTIONS_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } } - } /** @@ -2186,6 +2186,177 @@ module AtsImsIot_Templates { } } + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + template(present) From mw_From_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + fromParams := * + } // End of template mw_From_AddrUnion_SipUrl + + template(present) From mw_From_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_TelUrl(p_number), + fromParams := * + } // End of template mw_From_AddrUnion_TelUrl + + template From mw_From_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + fromParams := * + } // End of template mw_From_NameAddr_TelUrl + + template(present) To mw_To_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + toParams := * + } // End of template mw_To_AddrUnion_SipUrl + + template(present) To mw_To_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_TelUrl(p_number), + toParams := * + } // End of template mw_To_AddrUnion_TelUrl + + template To mw_To_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + toParams := * + } // End of template mw_To_NameAddr_TelUrl + + template (present) Contact mw_contact( + template (present) ContactAddress p_contactAddresses := ? + ) := { + fieldName := CONTACT_E, + contactBody := { contactAddresses := { p_contactAddresses } } + } // End of template mw_Contact + + template (present) Response mw_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_200OK + + template Response mw_401Unauthorized( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_401Unauthorized_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_401Unauthorized + + template Response mw_404NotFound( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_404NotFound_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_404NotFound + + template Response mw_480TemporaryUnavailable( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mw_480TemporaryUnavailable_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_480TemporaryUnavailable + + template (present) Response mw_486Busy( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_486Busy_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_486Busy + + template (present) Response mw_600BusyEverywhere( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_600BusyEverywhere_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_600BusyEverywhere + + template (present) Response mw_487RequestTerminated( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_487RequestTerminated_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_487RequestTerminated + } // End of group modifiedSIPBaseTemplates group EmergencySIPTemplates { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index b6eaca6..106f465 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -47,159 +47,143 @@ module AtsImsIot_Templates_GM { } } // End of template mw_NameAddr_DispName_Tel - template(present) From mw_From_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - fromParams := * - } // End of template mw_From_AddrUnion_SipUrl - - template(present) From mw_From_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_TelUrl(p_number), - fromParams := * - } // End of template mw_From_AddrUnion_TelUrl - - template From mw_From_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - fromParams := * - } // End of template mw_From_NameAddr_TelUrl - - template(present) To mw_To_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - toParams := * - } // End of template mw_To_AddrUnion_SipUrl - - template(present) To mw_To_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_TelUrl(p_number), - toParams := * - } // End of template mw_To_AddrUnion_TelUrl - - template To mw_To_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - toParams := * - } // End of template mw_To_NameAddr_TelUrl - - template (present) Contact mw_contact( - template (present) ContactAddress p_contactAddresses := ? - ) := { - fieldName := CONTACT_E, - contactBody := { contactAddresses := { p_contactAddresses } } - } // End of template mw_Contact - - template (present) Response mw_200OK( - template (present) CSeq p_cSeq := ?, - template (present) CallId p_callId := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_200OK_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_200OK + // template(present) From mw_From_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // fromParams := * + // } // End of template mw_From_AddrUnion_SipUrl + + // template(present) From mw_From_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // fromParams := * + // } // End of template mw_From_AddrUnion_TelUrl + + // template From mw_From_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // fromParams := * + // } // End of template mw_From_NameAddr_TelUrl + + // template(present) To mw_To_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // toParams := * + // } // End of template mw_To_AddrUnion_SipUrl + + // template(present) To mw_To_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // toParams := * + // } // End of template mw_To_AddrUnion_TelUrl + + // template To mw_To_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // toParams := * + // } // End of template mw_To_NameAddr_TelUrl + + // template (present) Contact mw_contact( + // template (present) ContactAddress p_contactAddresses := ? + // ) := { + // fieldName := CONTACT_E, + // contactBody := { contactAddresses := { p_contactAddresses } } + // } // End of template mw_Contact + + // template (present) Response mw_200OK( + // template (present) CSeq p_cSeq := ?, + // template (present) CallId p_callId := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ? + // ) modifies mw_200OK_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to + // } + // } // End of template mw_200OK - template (present) Response mw_401Unauthorized( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_401Unauthorized_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_401Unauthorized - - template (present) Response mw_404NotFound( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_404NotFound_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_404NotFound - - template Response mw_480TemporaryUnavailable( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template WwwAuthenticate p_wwwAuthenticate := * - ) modifies mw_480TemporaryUnavailable_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_480TemporaryUnavailable - - template (present) Response mw_486Busy( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_486Busy_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_486Busy - - template (present) Response mw_600BusyEverywhere( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_600BusyEverywhere_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_600BusyEverywhere - - template (present) Response mw_487RequestTerminated( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_487RequestTerminated_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_487RequestTerminated + // template (present) Response mw_401Unauthorized( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_401Unauthorized_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_401Unauthorized + + // template (present) Response mw_404NotFound( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_404NotFound_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_404NotFound + + // template Response mw_480TemporaryUnavailable( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template WwwAuthenticate p_wwwAuthenticate := * + // ) modifies mw_480TemporaryUnavailable_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_480TemporaryUnavailable + + // template (present) Response mw_486Busy( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_486Busy_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_486Busy + + // template (present) Response mw_600BusyEverywhere( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_600BusyEverywhere_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_600BusyEverywhere } // End of group sip_templates diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 8b6867a..0a37e1e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -29,9 +29,9 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 + * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 */ - template(present) INVITE_Request mw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, template (present) From p_from := ?, template (present) To p_to := ?) modifies mw_INVITE_Request_Base := { @@ -68,7 +68,7 @@ module AtsImsIot_Templates_MM { } } - template (present) Response mw_TP_MM_PSAP_100Trying_01( + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -78,9 +78,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_100Trying_01 + } // End of template mw_TP_MM_ECSCF_100Trying_01 - template (present) Response mw_TP_MM_PSAP_180Ringing_01( + template (present) Response mw_TP_MM_ECSCF_180Ringing_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -90,9 +90,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_180Ringing_01 + } // End of template mw_TP_MM_ECSCF_180Ringing_01 - template (present) Response mw_TP_MM_PSAP_183SessionProgress_01( + template (present) Response mw_TP_MM_ECSCF_183SessionProgress_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -102,9 +102,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_183SessionProgress_01 + } // End of template mw_TP_MM_ECSCF_183SessionProgress_01 - template (present) ACK_Request mw_TP_MM_PSAP_ACK_01( // TODO To be enforced + template (present) ACK_Request mw_TP_MM_ECSCF_ACK_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_ack_uri := ?, @@ -129,9 +129,9 @@ module AtsImsIot_Templates_MM { } } } - } // End of template mw_TP_MM_PSAP_ACK_01 + } // End of template mw_TP_MM_ECSCF_ACK_01 - template (present) BYE_Request mw_TP_MM_PSAP_BYE_01( // TODO To be enforced + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -158,7 +158,7 @@ module AtsImsIot_Templates_MM { } } // End of template mw_TP_MW_PCSCF_BYE_01 - template (present) CANCEL_Request mw_TP_MM_PSAP_CANCEL_01( // TODO To be enforced + template (present) CANCEL_Request mw_TP_MM_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -183,6 +183,6 @@ module AtsImsIot_Templates_MM { } } } - } // End of template mw_TP_MW_PCSCF_CANCEL_01 + } // End of template mw_TP_MM_ECSCF_CANCEL_01 } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index a92c708..05dd774 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -28,181 +28,6 @@ module AtsImsIot_Templates_MW { import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; - group sip_templates { - - template NameAddr mw_NameAddr_DispName_Tel( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - displayName := p_displayName, - addrSpec := { - scheme := c_telScheme, //* contains "tel" - components := { - tel := { - subscriber := p_number - } - }, - urlParameters := *, - headers := * - } - } // End of template mw_NameAddr_DispName_Tel - - template(present) From mw_From_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - fromParams := * - } // End of template mw_From_AddrUnion_SipUrl - - template(present) From mw_From_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_TelUrl(p_number), - fromParams := * - } // End of template mw_From_AddrUnion_TelUrl - - template From mw_From_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - fromParams := * - } // End of template mw_From_NameAddr_TelUrl - - template(present) To mw_To_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - toParams := * - } // End of template mw_To_AddrUnion_SipUrl - - template(present) To mw_To_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_TelUrl(p_number), - toParams := * - } // End of template mw_To_AddrUnion_TelUrl - - template To mw_To_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - toParams := * - } // End of template mw_To_NameAddr_TelUrl - - template (present) Contact mw_contact( - template (present) ContactAddress p_contactAddresses := ? - ) := { - fieldName := CONTACT_E, - contactBody := { contactAddresses := { p_contactAddresses } } - } // End of template mw_Contact - - template (present) Response mw_200OK( - template (present) CSeq p_cSeq := ?, - template (present) CallId p_callId := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_200OK_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_200OK - - template Response mw_401Unauthorized( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_401Unauthorized_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_401Unauthorized - - template Response mw_404NotFound( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_404NotFound_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_404NotFound - - template Response mw_480TemporaryUnavailable( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template WwwAuthenticate p_wwwAuthenticate := * - ) modifies mw_480TemporaryUnavailable_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_480TemporaryUnavailable - - template (present) Response mw_486Busy( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_486Busy_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_486Busy - - template (present) Response mw_600BusyEverywhere( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_600BusyEverywhere_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_600BusyEverywhere - - template (present) Response mw_487RequestTerminated( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_487RequestTerminated_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_487RequestTerminated - - } // End of group sip_templates - group g_pcscf { template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_01( @@ -1253,6 +1078,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_IBCF_BYE_01 + template (present) CANCEL_Request mw_TP_MW_IBCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_CANCEL_01 + } } // End of module AtsImsIot_Templates_MW \ No newline at end of file diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 27c8fe8..ebed44d 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -1,38 +1,40 @@ suite := AtsImsIot_Emergency sources := \ + AtsImsIot_TypesAndValues.ttcn \ AtsImsIot_Diameter_Templates.ttcn \ - AtsImsIot_TD_ATT.ttcn \ - AtsImsIot_TD_REG.ttcn \ AtsImsIot_Templates.ttcn \ + AtsImsIot_Templates_GM.ttcn \ + AtsImsIot_Templates_IC.ttcn \ + AtsImsIot_Templates_MW.ttcn \ + AtsImsIot_Templates_MI.ttcn \ + AtsImsIot_Templates_MM.ttcn \ + AtsImsIot_Templates_ML.ttcn \ + AtsImsIot_TestConfiguration.ttcn \ AtsImsIot_TP_behavior_CX.ttcn \ AtsImsIot_TP_behavior_ISC.ttcn \ AtsImsIot_TP_behavior_SH.ttcn \ - AtsImsIot_Emergency.ttcn \ - AtsImsIot_TD_DRG.ttcn \ - AtsImsIot_Templates_GM.ttcn \ - AtsImsIot_TestConfiguration.ttcn \ AtsImsIot_TP_behavior_GM.ttcn \ AtsImsIot_TP_behavior_MW_IS.ttcn \ AtsImsIot_TP_behavior_RX.ttcn \ - AtsImsIot_TypesAndValues.ttcn \ - AtsImsIot_Functions.ttcn \ - AtsImsIot_TD_DTC.ttcn \ - AtsImsIot_Templates_IC.ttcn \ - AtsImsIot_TestControl.ttcn \ AtsImsIot_TP_behavior_GX.ttcn \ AtsImsIot_TP_behavior_MW_PS.ttcn \ AtsImsIot_TP_behavior_MW_EC.ttcn \ AtsImsIot_TP_behavior_MW_EB.ttcn \ AtsImsIot_TP_behavior_MM.ttcn \ AtsImsIot_TP_behavior_ML.ttcn \ + AtsImsIot_TP_behavior_MI.ttcn \ AtsImsIot_TP_behavior_Mx_LRF.ttcn \ AtsImsIot_TP_behavior_S6A.ttcn \ + AtsImsIot_TD_ATT.ttcn \ + AtsImsIot_TD_REG.ttcn \ + AtsImsIot_Functions.ttcn \ + AtsImsIot_Emergency.ttcn \ + AtsImsIot_TD_DRG.ttcn \ + AtsImsIot_TD_DTC.ttcn \ + AtsImsIot_TestControl.ttcn \ AtsImsIot_PIXITS.ttcn \ AtsImsIot_TD_INI.ttcn \ - AtsImsIot_Templates_MW.ttcn \ - AtsImsIot_Templates_MM.ttcn \ - AtsImsIot_Templates_ML.ttcn \ AtsImsIot_TestSystem.ttcn \ AtsImsIot_TP_behavior_IC.ttcn \ AtsImsIot_TP_behavior_MW_SI.ttcn \ -- GitLab From 7812a27d25a2c864f8c5622f248d4a088f94a34f Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 4 Aug 2023 09:52:00 +0200 Subject: [PATCH 56/84] TTF T010 FSCOM week#31 session --- .../AtsImsIot_Diameter_Templates.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 1886 +++++++++++------ ttcn/AtsImsIot/AtsImsIot_Functions.ttcn | 20 +- ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn | 8 +- ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 127 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 335 +++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 192 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 80 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 647 ++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn | 45 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 206 +- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 207 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 107 +- .../AtsImsIot_TP_behavior_MW_IS.ttcn | 65 +- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 100 +- .../AtsImsIot_TP_behavior_MW_SI.ttcn | 2 +- .../AtsImsIot_TP_behavior_Mx_LRF.ttcn | 98 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn | 255 ++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn | 214 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn | 92 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn | 24 +- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 259 ++- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 283 ++- ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn | 46 +- ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 188 ++ ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn | 9 + ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 62 +- ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 229 +- .../AtsImsIot_TestConfiguration.ttcn | 28 +- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 12 +- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 10 +- 36 files changed, 4275 insertions(+), 1637 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index fe9060e..b33c7b0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -10,8 +10,8 @@ module AtsImsIot_Diameter_Templates { //LibCommon - import from LibCommon_DataStrings {type Bit1, Bit4, Bit5, Bit8;}//all; - import from LibCommon_BasicTypesAndValues {type UInt8, UInt32, UInt64;}; + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; //LibDiameter import from LibDiameter_TypesAndValues all; @@ -21,7 +21,7 @@ module AtsImsIot_Diameter_Templates { import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_S6a_AVPs {type Cancellation_Type_AVP, Cancellation_Type_Code, Subscription_Data_AVP}; + import from LibDiameter_Types_S6a_AVPs all; import from LibDiameter_Types_S9_AVPs all; group DiameterHeaderFields { diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index a12755a..a3d29d9 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -19,17 +19,20 @@ module AtsImsIot_Emergency { // LibImsIot import from AtsImsIot_Functions all; // ImsIot - import from AtsImsIot_TestConfiguration all; - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Functions all; - import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_TestConfiguration all; + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Functions all; + import from AtsImsIot_Templates all; import from AtsImsIot_TP_behavior_GM all; import from AtsImsIot_TP_behavior_MW_PS all; import from AtsImsIot_TP_behavior_MW_SI all; import from AtsImsIot_TP_behavior_MW_IS all; import from AtsImsIot_TP_behavior_MW_EC all; import from AtsImsIot_TP_behavior_MW_EB all; + import from AtsImsIot_TP_behavior_Mx_LRF all; // FIXME Rename into MX_ import from AtsImsIot_TP_behavior_MM all; + import from AtsImsIot_TP_behavior_MI all; import from AtsImsIot_TP_behavior_ML all; import from AtsImsIot_TP_behavior_IC all; import from AtsImsIot_TP_behavior_CX all; @@ -39,6 +42,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_S9 all; import from AtsImsIot_TP_behavior_SH all; import from AtsImsIot_TP_behavior_RX all; + import from AtsImsIot_PIXITS all; /** * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) @@ -56,37 +60,37 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_VxLteMonitor_Up(); - + // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // test body // Check that user A starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) - + // postamble f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -104,7 +108,7 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -116,7 +120,7 @@ module AtsImsIot_Emergency { f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -158,10 +162,10 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.2.1 IMS Emergency Registration - Successful */ testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -172,7 +176,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME})) { - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -181,7 +185,7 @@ module AtsImsIot_Emergency { // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 @@ -193,14 +197,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.gmA); // Events 13, 22 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwPI); // Events 14, 21 f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 - + f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble f_PO_user_home_deregistration ( v_ueA ); f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnet component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -216,10 +220,10 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.2.2 IMS Emergency Registration - Unsuccessful */ testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, @@ -230,7 +234,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME})) { - f_cf_createVxLteMonitor(); + f_cf_createVxLteMonitor(); // map/connect component ports f_cf_adapter_up ( ); @@ -239,7 +243,7 @@ module AtsImsIot_Emergency { // preamble f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - + // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.gmA); // Events 1, 12 f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_01(vc_vxlte_monitor_components.mwPI); // Event 4, 11 @@ -258,7 +262,7 @@ module AtsImsIot_Emergency { // postamble f_PO_user_home_deregistration ( v_ueA ); f_mtc_userRadioEnabled ( v_ueA, false, true ); - + //unmap/disconnet component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -280,7 +284,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. - * PSAP is located in the IM CN subsystem of IMS A. + * PSAP is located in the IM CN subsystem of IMS A * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration */ testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -288,41 +292,39 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); - + // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -332,49 +334,48 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 20 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -385,18 +386,18 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_01 - + group f_TD_VoLTE_ECO_INT_INI_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01 - + } // End of group f_TD_VoLTE_ECO_INT_INI_01 - + /** - * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration. * PSAP is located in the IM CN subsystem of IMS A. * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface @@ -406,41 +407,41 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -450,48 +451,48 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -502,16 +503,16 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_02 - + group f_TD_VoLTE_ECO_INT_INI_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02 - + } // End of group f_TD_VoLTE_ECO_INT_INI_02 - + /** * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment without any registration. * PSAP is located in the IM CN subsystem of IMS A. @@ -522,37 +523,37 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME // E-CSCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble // No registration for user A - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -562,48 +563,48 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 11 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); // Event 19 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 f_mtc_userAnswerCall(v_psap); // Event 26 - - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 23 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 28 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 f_mtc_userCheckCallEstablished(v_ueA); // Event 29 f_mtc_userCheckCallEstablished(v_psap); // Event 29 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -614,19 +615,19 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_03 - + group f_TD_VoLTE_ECO_INT_INI_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_03 - + } // End of group f_TD_VoLTE_ECO_INT_INI_03 /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. - * PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF + * PSAP is located in the IM CN subsystem of IMS A. The PSAP URI is delivered by the LRF. * @see ETSI TS 103 795-2 Clause 5.3.1.5 UE calling PSAP in same network, LRF derived PSAP URI * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ @@ -635,42 +636,43 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MM_PSAP_INTERFACENAME, // E-CSCF -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF + PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); + f_mtc_userRegistration(v_ueA, v_userInfoA); if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_psap, v_infoPsap); } else { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -683,48 +685,48 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 11 - f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LTF, -, v_sip); // Event 12 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwB_PSAP, true); // Event 13 - f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 Session Progress - f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 183 In Progress Event 14 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 - - f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwB_PSAP); // 180 Ringing – Event 22 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 - + f_mtc_userCheckRinging(v_psap); // Event 21 f_mtc_userCheckPeerIsRinging(v_ueA); // Event 21 f_mtc_userAnswerCall(v_psap); // Event 28 - - f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwB_PSAP, -, v_sip); // 200 OK Event 25 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 25 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 28 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 29 - f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwB_PSAP); // ACK – Event 30 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 30 f_mtc_userCheckCallEstablished(v_ueA); // Event 31 f_mtc_userCheckCallEstablished(v_psap); // Event 31 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -735,14 +737,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_04 - + group f_TD_VoLTE_ECO_INT_INI_04 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04 - + } // End of group f_TD_VoLTE_ECO_INT_INI_04 /** @@ -751,41 +753,47 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.3.1.6 UE calling PSAP in other network via IBCF */ testcase TD_VoLTE_ECO_INT_INI_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 - f_mtc_check_TP_GM_PCSCF_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 @@ -795,60 +803,59 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 - - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 11 - f_mtc_check_TP_MW_IBCF_100Trying_01(vc_vxlte_monitor_components.mwBE, -, v_sip); - + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_03(vc_vxlte_monitor_components.ic); // INVITE ENUM Event 8 - f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 13 // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 14 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 - + //Rx/Gx exchange after 183(SDP) was received at P-CSCF f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 - - f_mtc_check_TP_IC_IBCF_180RINGING_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 23 + + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 - + f_mtc_userCheckRinging(v_psap); f_mtc_userCheckPeerIsRinging(v_ueA); f_mtc_userAnswerCall(v_psap); - + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBSCF_ACK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 32 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -859,13 +866,13 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_05 - + group f_TD_VoLTE_ECO_INT_INI_05 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_05 - + } // End of f_TD_VoLTE_ECO_INT_INI_05 /** @@ -879,47 +886,111 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 + + f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 + + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 + + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 36 + f_mtc_userCheckCallEstablished(v_psap); // Event 36 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -930,14 +1001,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_06 - + group f_TD_VoLTE_ECO_INT_INI_06 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_06 - + } // End of group f_TD_VoLTE_ECO_INT_INI_06 /** @@ -950,40 +1021,97 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - // PSAP is not known from the IMS A + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body - // TODO - + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 16 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 17 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 18 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 + f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK – Event 26 + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 33 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 + f_mtc_userCheckCallEstablished(v_psap); // Event 34 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -994,14 +1122,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_INI_07 - + group f_TD_VoLTE_ECO_INT_INI_07 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_07 - + } // End of group f_TD_VoLTE_ECO_INT_INI_07 /** @@ -1014,117 +1142,184 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> BGCF - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LTF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - - // Postamble - f_mtc_EndCall(v_ueA); - f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); - //f_cf_int_call_down(v_config); - - //unmap/disconnect component ports - f_cf_user_down ( v_psap ); - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_08 - - group f_TD_VoLTE_ECO_INT_INI_08 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator { - log("If the test case fails, please check the preconditions"); - // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08 - - } // End of group f_TD_VoLTE_ECO_INT_INI_08 + f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + //f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 + + // 183 Session Progress + f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 18 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 19 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 20 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 + + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 + f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 + f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 + + f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 + f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 36 + f_mtc_userCheckCallEstablished(v_psap); // Event 36 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_08 + + group f_TD_VoLTE_ECO_INT_INI_08 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_08 + + } // End of group f_TD_VoLTE_ECO_INT_INI_08 + + + /** + * @desc + * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration + */ + testcase TD_VoLTE_ECO_INT_INI_09() runs on ImsTestCoordinator system IotSystemInterface { - /** - * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 1: PSAP is in IMS A netwwork - */ - testcase TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1134,67 +1329,98 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_01 - - group f_TD_VoLTE_ECO_INT_INI_09_01 { - + } // End of TC TD_VoLTE_ECO_INT_INI_09 + + group f_TD_VoLTE_ECO_INT_INI_09 { + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_01 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09 + + } // End of group f_TD_VoLTE_ECO_INT_INI_09 /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 2: PSAP is not in IMS A netwwork + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP in IMS A */ - testcase TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02(); - + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01(); + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10 + + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 + + f_mtc_userCheckRinging(v_ueA); // Event 15 + f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 + f_mtc_userAnswerCall(v_ueA); // Event 26 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 + + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 37 + f_mtc_userCheckCallEstablished(v_psap); // Event 37 + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1204,66 +1430,176 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_02 - - group f_TD_VoLTE_ECO_INT_INI_09_02 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02() runs on ImsTestCoordinator { + } // End of TC TD_VoLTE_ECO_INT_INI_10_01 + + group f_TD_VoLTE_ECO_INT_INI_10_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_02 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_02 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_01 /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.5 Callback from PSAP - @remark Opetion 2: PSAP is in PSTN netwwork + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP NOT in IMS A */ - testcase TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Test body + //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 21 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 10 + + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 + + f_mtc_userCheckRinging(v_ueA); // Event 15 + f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 + f_mtc_userAnswerCall(v_ueA); // Event 26 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 + + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 37 + f_mtc_userCheckCallEstablished(v_psap); // Event 37 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_10_02 + + group f_TD_VoLTE_ECO_INT_INI_10_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_02 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_02 + + /** + * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @remark Ipetion 1: PSAP in PSTN A + */ + testcase TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03(); - + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallEstablished(v_ueA); // Event 34 f_mtc_userCheckCallEstablished(v_psap); // Event 34 - + // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); //f_cf_int_call_down(v_config); - + //unmap/disconnect component ports f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); @@ -1273,16 +1609,16 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_INI_09_03 - - group f_TD_VoLTE_ECO_INT_INI_09_03 { - - function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03() runs on ImsTestCoordinator { + } // End of TC TD_VoLTE_ECO_INT_INI_10_03 + + group f_TD_VoLTE_ECO_INT_INI_10_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_03 - - } // End of group f_TD_VoLTE_ECO_INT_INI_09_03 + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_03 + + } // End of group f_TD_VoLTE_ECO_INT_INI_10_03 } // End of group EmergencySessionEstablishment @@ -1291,74 +1627,70 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwB_PSAP); // Event 6 + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 4 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 - - f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 - + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 20 + f_mtc_userCheckCallCancelled(v_psap); // Event 21 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1368,14 +1700,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_01 - + group f_TD_VoLTE_ECO_INT_REL_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 /** @@ -1384,71 +1716,69 @@ module AtsImsIot_Emergency { * @remark This is option 2: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 3 - f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 + f_mtc_check_TP_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - - - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwBE, -, v_sip); // Event 15 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 - f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 - + + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 - + f_mtc_userCheckCallCancelled(v_psap); // Event 23 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1458,13 +1788,13 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_02 - + group f_TD_VoLTE_ECO_INT_REL_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 - + } // End of f_TD_VoLTE_ECO_INT_REL_01_02 /** @@ -1477,52 +1807,63 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 + f_mtc_check_TP_MI_BGCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 11) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) + + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 - f_mtc_userCheckCallCancelled(v_ueB); // Event 23 - + f_mtc_userCheckCallCancelled(v_psap); // Event 23 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1532,14 +1873,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_01_03 - + group f_TD_VoLTE_ECO_INT_REL_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 /** @@ -1552,53 +1893,52 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 - + f_mtc_userCheckCallCancelled(v_psap); // Event 20 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1608,14 +1948,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_01 - + group f_TD_VoLTE_ECO_INT_REL_02_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_01 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_01 /** @@ -1628,53 +1968,52 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 - + f_mtc_userCheckCallCancelled(v_psap); // Event 20 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1684,14 +2023,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_02 - + group f_TD_VoLTE_ECO_INT_REL_02_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_02 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_02 /** @@ -1705,52 +2044,51 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME // E-CSCF -> BGCF + PX_SIP_MW_EB_INTERFACENAME // E-CSCF -> BGCF })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO - + f_mtc_userCheckCallTerminated(v_ueA); // Event 21 - f_mtc_userCheckCallCancelled(v_ueB); // Event 20 - + f_mtc_userCheckCallCancelled(v_psap); // Event 20 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1760,14 +2098,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REL_02_03 - + group f_TD_VoLTE_ECO_INT_REL_02_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_02_03 - + } // End of group f_TD_VoLTE_ECO_INT_REL_02_03 } // End of group EmergencySessionRelease @@ -1777,60 +2115,77 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 + + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 28 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_userCheckCallCancelled(v_psap); // Event 34 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1840,73 +2195,97 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_01 - + group f_TD_VoLTE_ECO_INT_ABT_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_01 /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is not in IMA A network + * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 + f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic) + + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // 200 CANCEL – Event 11 + f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20 + f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MW_IBCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, true); // Event 30 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_userCheckCallCancelled(v_psap); // Event 34 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1916,14 +2295,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_02 - + group f_TD_VoLTE_ECO_INT_ABT_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_02 /** @@ -1936,53 +2315,76 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + + //Rx/Gx exchange after CANCEL was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 3) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) + + f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 + + f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 + f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 32 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_userCheckCallCancelled(v_psap); // Event 34 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -1992,73 +2394,104 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_ABT_01_03 - + group f_TD_VoLTE_ECO_INT_ABT_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_ABT_01_03 /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject - * @remark This is option 1: PSAP is in IMA A network + * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + + // 480 Temporary Unvailable + f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 36 + f_mtc_userCheckCallCancelled(v_psap); // Event 37 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2068,73 +2501,104 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_01 - + group f_TD_VoLTE_ECO_INT_REJ_01_01 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_01 /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject - * @remark This is option 1: PSAP is not in IMA A network + * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + + // 480 Temporary Unavailable + f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.mmB_PSAP); // Event 31 + + f_mtc_userCheckCallTerminated(v_ueA); // Event 36 + f_mtc_userCheckCallCancelled(v_psap); // Event 37 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2144,14 +2608,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_02 - + group f_TD_VoLTE_ECO_INT_REJ_01_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_02 /** @@ -2164,53 +2628,85 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, PX_DIAMETER_GX_INTERFACENAME, PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19 + f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 20 + + // 480 Temporary Unavailable + f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 35 + f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - + f_mtc_userCheckCallCancelled(v_psap); // Event 34 + // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2220,14 +2716,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_01_03 - + group f_TD_VoLTE_ECO_INT_REJ_01_03 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_01_03 /** @@ -2239,53 +2735,45 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); - + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_PSAP_INTERFACENAME // IBCF -> PSAP + PX_DIAMETER_GX_INTERFACENAME })) { var SipMessage v_sip; - + f_cf_createVxLteMonitor(); - + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - + // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - f_mtc_userRegistration(v_psap, v_infoPsap); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); - f_mtc_userCheckRinging(v_psap); - f_mtc_userCheckPeerIsRinging(v_ueA); - f_mtc_userAnswerCall(v_psap); - f_mtc_userCheckCallEstablished(v_ueA); // Event 1 - f_mtc_userCheckCallEstablished(v_psap); // Event 1 + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); - + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 - // TODO - - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_ueB); // Event 34 - // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_ueB); - + f_PO_user_home_deregistration(v_psap); + //unmap/disconnect component ports - f_cf_user_down ( v_ueB ); + f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2295,14 +2783,14 @@ module AtsImsIot_Emergency { } f_cf_adapter_down ( ); } // End of TC TD_VoLTE_ECO_INT_REJ_02 - + group f_TD_VoLTE_ECO_INT_REJ_02 { - + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02 - + } // End of group f_TD_VoLTE_ECO_INT_REJ_02 } // End of group EmergencySessionAbortOrReject @@ -2321,15 +2809,15 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.5.1 UE Emergency Network Detachment (with/without Emergency Registration) */ testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); @@ -2341,9 +2829,9 @@ module AtsImsIot_Emergency { // test body // Check that user A starts initial network attachment f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) - + //postamble - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); @@ -2359,15 +2847,15 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session */ testcase TC_VoLTE_ECO_INT_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - + f_cf_createVxLteMonitor(); + // map/connect component ports f_cf_adapter_up ( ); f_cf_user_up ( v_ueA ); @@ -2378,9 +2866,9 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, false, true ); // test body // TODO - + //postamble - + //unmap/disconnect component ports f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); diff --git a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn index 9a94e23..19f0bd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Functions.ttcn @@ -6,7 +6,7 @@ module AtsImsIot_Functions { //LibDiameter - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + import from LibDiameter_TypesAndValues all; //LibSip import from LibSip_SIPTypesAndValues all; @@ -15,22 +15,22 @@ module AtsImsIot_Functions { import from LibIms_UpperTester all; //LibIot - import from LibIot_PIXITS { modulepar PX_MAX_MSG_WAIT, PX_PRODUCTS, PX_AVAILABLE_INTERFACES; } + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; - import from LibIot_Functions { function f_setConformanceVerdict, f_sendEquipmentCmd; } - import from LibIot_TestInterface { type InterfaceMonitor, TestCoordinator, EquipmentUser; } - import from LibIot_Functions { function f_getE2EVerdict; } - import from LibIot_TypesAndValues { type DefaultList, MonitorInterfaceInfo; } - import from LibIot_VxLTE_Functions {function f_SipMonitorInterface_available,f_DiameterMonitorInterface_available;} + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_Functions all; + import from LibIot_TypesAndValues all; + import from LibIot_VxLTE_Functions all; //LibUpperTester import from LibUpperTester all; //AtsImsIot - import from AtsImsIot_Templates { template mw_EnumQuery_Base, mw_EnumResponse_Base, mw_SIP_URI_Base; } + import from AtsImsIot_Templates all; import from AtsImsIot_TestSystem all; - import from AtsImsIot_TestSystem { type ImsTestCoordinator, ImsInterfaceMonitor; } - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumMessage, SkipType, DiameterMessageList, SkipTypeDiameter;} + import from AtsImsIot_TestSystem all; + import from AtsImsIot_TypesAndValues all; group ue { diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn index ca42c58..7b10a47 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_ATT.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_ATT{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser}; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn index 0dd94a7..c3d3639 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DRG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DRG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn index a88b3f0..066a4d2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_DTC.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_DTC{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn index a41eada..ad9f369 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_INI.ttcn @@ -11,17 +11,15 @@ module AtsImsIot_TD_INI{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester {type ImsUserInfo;} + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface {type IotEquipmentUser;} - import from LibIot_TestConfiguration { - function f_cf_create_IotEquipmentUser; - } - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C;} + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions {function f_getImUser;} + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TypesAndValues all; import from AtsImsIot_TestConfiguration all; @@ -2440,7 +2438,7 @@ module AtsImsIot_TD_INI{ //MwPS TP_MW_PCSCF_INVITE_04 (Event 4) f_mtc_check_TP_IC_IBCF_INVITE_04(vc_vxlte_monitor_components.ic, false); // (INVITE – Event 3) f_mtc_check_TP_IC_IBCF_100TRY_01(vc_vxlte_monitor_components.ic, false); // (INVITE, 100 Trying – Event 3) - f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS); // (Event 4) + f_mtc_check_TP_MW_PCSCF_INVITE_04(vc_vxlte_monitor_components.mwPS, -, v_sip); // (Event 4) //Rx/Gx/S9 exchange after INVITE was received at P-CSCF diff --git a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn index bde4e54..51a6fd1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TD_REG.ttcn @@ -9,15 +9,15 @@ module AtsImsIot_TD_REG{ // LibCommon // LibSip // LibIms - import from LibIms_UpperTester { type ImsUserInfo }; + import from LibIms_UpperTester all; // LibIot - import from LibIot_TestInterface { type IotEquipmentUser }; - import from LibIot_TestConfiguration { function f_cf_create_IotEquipmentUser }; - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_EUT_C }; + import from LibIot_TestInterface all; + import from LibIot_TestConfiguration all; + import from LibIot_PIXITS all; import from LibIot_VxLTE_PIXITS all; import from LibIot_VxLTE_Functions all; // LibImsIot - import from AtsImsIot_Functions { function f_getImUser }; + import from AtsImsIot_Functions all; // ImsIot import from AtsImsIot_TestConfiguration all; import from AtsImsIot_TestSystem all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn index 3d3f7a4..176d04c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -9,21 +9,21 @@ module AtsImsIot_TP_behavior_CX // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; // LibIot - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_PIXITS all; // AtsImsIot - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; import from AtsImsIot_Diameter_Templates all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from AtsImsIot_TestSystem all; // LibIms import from LibIms_UpperTester all; @@ -95,13 +95,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { mAR_MSG := mw_MAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{mAR_MSG := mw_MAR(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{mAR_MSG := mw_MAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_MAA_01 - MAR", @@ -111,13 +113,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { mAA_MSG := mw_MAA }; + mw_diameter_msg_fail := { mAA_MSG := mw_MAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{mAA_MSG := mw_MAA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{mAA_MSG := mw_MAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_MAA_01 - MAA", @@ -183,13 +187,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rTR_MSG := mw_RTR }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rTR_MSG := mw_RTR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{rTR_MSG := mw_RTR} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{rTR_MSG := mw_RTR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_RTA_01 - RTR", @@ -199,13 +205,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rTA_MSG := mw_RTA }; + mw_diameter_msg_fail := { rTA_MSG := mw_RTA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{rTA_MSG := mw_RTA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{rTA_MSG := mw_RTA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_RTA_01 - RTA", @@ -277,13 +285,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAR_MSG := mw_SAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_01 - SAR", @@ -293,13 +303,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sAA_MSG := mw_SAA_userData }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAA_MSG := mw_SAA_userData} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_01 - SAA", @@ -369,13 +381,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sAR_MSG := mw_SAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAR_MSG := mw_SAR_UserDeregistration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAR_MSG := mw_SAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_02 -SAR", @@ -385,13 +399,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sAA_MSG := mw_SAA }; + mw_diameter_msg_fail := { sAA_MSG := mw_SAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{sAA_MSG := mw_SAA} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{sAA_MSG := mw_SAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_SAA_02 - SAA", @@ -467,13 +483,15 @@ group g_HSS { var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAR", @@ -483,13 +501,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAA", @@ -564,13 +584,15 @@ group g_HSS { var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; //"sip:"&v_userInfoA.publicId&@&v_userInfoA.domain + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_Registration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAR", @@ -580,13 +602,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamFirstRegistration }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamFirstRegistration} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_01 - UAA", @@ -644,13 +668,16 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic}}, + mw_diameter_msg_fail + }, {0, omit}, "TP_CX_HSS_UAA_02 - UAR", p_forward_to_mtc, @@ -659,13 +686,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/ }; //TODO:Check TP + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/}//TODO:Check TP + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_02 - UAA", @@ -720,13 +749,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_unknownPrivateId }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_unknownPrivateId} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_03 - UAR", @@ -735,13 +766,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamErrorUserUnknown }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamErrorUserUnknown} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_03 - UAA", @@ -798,13 +831,15 @@ group g_HSS { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAR_MSG := mw_UAR_deRegistration(mw_publicIdentity(v_publicIdentity))} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAR_MSG := mw_UAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_04 - UAR", @@ -814,13 +849,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess }; + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uAA_MSG := mw_UAA_diamSuccess} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{uAA_MSG := mw_UAA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_CX_HSS_UAA_04 - UAA", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 93f36b6..7dcd6f0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -439,6 +439,65 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02 + /** * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). * Initial conditions with { @@ -1487,6 +1546,70 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1775,6 +1898,32 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 + function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01 + /** * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2305,6 +2454,38 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2484,6 +2665,34 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 + function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01 + /** * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). * Initial conditions with { @@ -2654,6 +2863,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). * Initial conditions with { @@ -3143,6 +3382,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). * Initial conditions with { @@ -3714,6 +3983,41 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 + function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). * Initial conditions with { @@ -3845,4 +4149,35 @@ module AtsImsIot_TP_behavior_GM { } // End of group imsRequestTermination + group imsTemporaryUnavailable { + + function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index 4ae196b..d9a9528 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_GX { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; group g_PGW { @@ -87,13 +87,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_CCR_01 - CCR", @@ -142,13 +144,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_CCR_02 - CCR", @@ -211,13 +215,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall)} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_01 - RAR", @@ -227,13 +233,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_01 - RAA", @@ -283,13 +291,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_02 - RAR", @@ -299,13 +309,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_02 - RAA", @@ -355,13 +367,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_Gx_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_dummy} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_03 - RAR", @@ -371,13 +385,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_03 - RAA", @@ -429,13 +445,15 @@ group g_PGW { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_04 - RAR", @@ -445,13 +463,15 @@ group g_PGW { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PGW_RAA_04 - RAA", @@ -534,13 +554,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_01 - CCR", @@ -550,13 +572,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_01 - CCA", @@ -609,13 +633,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_02 - CCR", @@ -625,13 +651,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_02 - CCA", @@ -683,13 +711,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_RequestType(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_03 - CCR", @@ -699,13 +729,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_03 - CCA", @@ -769,13 +801,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_qosInformation_class5 }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_qosInformation_class5 } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_04 - CCA", @@ -826,13 +860,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_CCA_05 - CCA", @@ -902,13 +938,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos)} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_01 - RAR", @@ -959,13 +997,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove} + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_02 - RAR", @@ -1033,13 +1073,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) }; //During validation some additions may be required + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleInstall(mw_chrgRuleInstall_Qos) } //During validation some additions may be required + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_03 - RAR", @@ -1089,13 +1131,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_ChargingRuleRemove }; //During validation some additions may be required + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_Gx_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_ChargingRuleRemove } //During validation some additions may be required + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_Gx_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_RAR_04 - RAR", @@ -1166,13 +1210,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) } - }, - { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_01 - CCR", @@ -1182,13 +1228,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic}; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } - }, - { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_01 - CCA", @@ -1257,13 +1305,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMEI_qosInformation_class5_ES(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_SubscriberIMEI_qosInformation_class5_ES(INITIAL_REQUEST_E) } - }, - { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_02 - CCR", @@ -1273,13 +1323,15 @@ group g_PCRF { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_resultCode } - }, - { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_basic } + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ECO_CCA_02 - CCA", @@ -1294,4 +1346,4 @@ group g_PCRF { } // end group g_PCRF -} // end module AtsImsIot_TP_behavior_GX \ No newline at end of file +} // end module AtsImsIot_TP_behavior_GX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index f46956d..0c90b1e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -7,27 +7,23 @@ module AtsImsIot_TP_behavior_IC { - import from AtsImsIot_TestSystem { type SipInterfaceMonitor , ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_Common all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; import from AtsImsIot_Templates_IC all; @@ -897,7 +893,28 @@ module AtsImsIot_TP_behavior_IC ); p_monitorCompRef.done; } - } //function + } + + function f_mtc_check_TP_IC_IBCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A) + + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mdw_TP_IMS_5107_01_ic(?, mw_SipUrl_Host(v_EUT_A_Addr))) }, + { mw_SipRequest(mw_BYE_Request_Base) }, + {0, omit}, + "TP_IC_IBCF_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } /** * @desc Starts monitor component behavior @@ -1647,5 +1664,36 @@ module AtsImsIot_TP_behavior_IC } // end group g_IBCF + group imsTemporaryUnavailable { + + function f_mtc_check_TP_IC_IBCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_IC_IBCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_IC_IBCF_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // end module AtsImsIot_TP_behavior_IC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn index 0559a25..5b20a2a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -7,28 +7,24 @@ module AtsImsIot_TP_behavior_ISC { - import from AtsImsIot_TestSystem { type ImsInterfaceMonitor, ImsTestCoordinator, SipInterfaceMonitor; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIms_UpperTester {type ImsUserInfo;} - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIms_UpperTester all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } + import from LibSip_Common all; import from AtsImsIot_Functions all; import from AtsImsIot_Templates_MW all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; // LibSip - import from LibSip_SDPTypes { type SDP_media_desc_list }; + import from LibSip_SDPTypes all; // LibMsrp // import from LibMsrp_TypesAndValues { type MsrpURI }; // import from LibMsrp_Functions { function f_str2msrpUri }; diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn new file mode 100644 index 0000000..1dc3357 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -0,0 +1,647 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MI interface + */ +module AtsImsIot_TP_behavior_MI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_MI all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_BGCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01 + + function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_BGCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 100_Trying + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MI_BGCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MI_BGCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MI_BGCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_BGCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_BYE_01 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_BGCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_BGCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01 + + } // End of group imsRequestTermination + +} // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn index 08ca556..911d621 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn @@ -25,6 +25,7 @@ module AtsImsIot_TP_behavior_ML { // AtsImsIot import from AtsImsIot_TestSystem all; import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_ML all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; @@ -84,8 +85,8 @@ module AtsImsIot_TP_behavior_ML { { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) ), ( mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), @@ -107,6 +108,44 @@ module AtsImsIot_TP_behavior_ML { } } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01 + function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_ML_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02 + } // End of group imsInvite group ims3xxx { @@ -139,4 +178,4 @@ module AtsImsIot_TP_behavior_ML { } // End of group ims183SessionProgress -} // End of module AtsImsIot_TP_behavior_ML \ No newline at end of file +} // End of module AtsImsIot_TP_behavior_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index ded58e6..8b7b62e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -24,7 +24,7 @@ module AtsImsIot_TP_behavior_MM { import from LibMsrp_Templates all; // AtsImsIot import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_MM all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; @@ -79,7 +79,7 @@ module AtsImsIot_TP_behavior_MM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_INVITE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -87,7 +87,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_PSAP_INVITE_01 - Request", + "TP_MM_ECSCF_INVITE_01 - Request", true, p_checkMessage ) @@ -99,6 +99,38 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02 + } // End of group imsInvite group ims100Trying { @@ -125,15 +157,15 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 100 TRYING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_100Trying_01( + { mw_SipResponse(mw_TP_MM_ECSCF_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -141,7 +173,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MM_PSAP_100Trying_01", + "TP_MM_ECSCF_100Trying_01", false, p_checkMessage ) @@ -188,15 +220,15 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 180 RINGING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_180Ringing_01( + { mw_SipResponse(mw_TP_MM_ECSCF_180Ringing_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, mw_To_NameAddr_TelUrl( @@ -206,7 +238,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_180Ringing_Base) }, { 0, omit }, - "TP_MM_PSAP_180RINGING_01", + "TP_MM_ECSCF_180RINGING_01", false, p_checkMessage ) @@ -253,15 +285,15 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MM_PSAP_183SessionProgress_01( + { mw_SipResponse(mw_TP_MM_ECSCF_183SessionProgress_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -269,7 +301,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_183SessionProgress_Base) }, { 0, omit }, - "TP_MM_PSAP_183SESSION_PROGRESS_01", + "TP_MM_ECSCF_183SESSION_PROGRESS_01", false, p_checkMessage ) @@ -322,10 +354,10 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); @@ -345,7 +377,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MM_PSAP_200OK_01", + "TP_MM_ECSCF_200OK_01", false, p_checkMessage ) @@ -401,7 +433,7 @@ module AtsImsIot_TP_behavior_MM { // Check the ACK p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_ACK_01( + { mw_SipRequest(mw_TP_MM_ECSCF_ACK_01( p_sip.request.msgHeader.callId, p_sip.request.msgHeader.cSeq, -, // FIXME To be set @@ -411,7 +443,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_ACK_Request_Base) }, { 0, omit }, - "TP_MM_PSAP_ACK_01 - Request", + "TP_MM_ECSCF_ACK_01 - Request", false, p_checkMessage ) @@ -467,7 +499,7 @@ module AtsImsIot_TP_behavior_MM { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_PSAP_BYE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -485,7 +517,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MM_PSAP_BYE_01 - Request", + "TP_MM_ECSCF_BYE_01 - Request", true, p_checkMessage ) @@ -555,7 +587,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MM_PSAP_200OK_BYE_01", + "TP_MM_ECSCF_200OK_BYE_01", false, p_checkMessage ) @@ -566,4 +598,116 @@ module AtsImsIot_TP_behavior_MM { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MM_ECSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 715f085..eaf605c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -102,6 +102,34 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 + function f_mtc_check_TP_MW_IBCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mdw_TP_MW_IBCF_INVITE_01( + ( + mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_IBCF_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_INVITE_02 + } // End of group imsInvite group ims100Trying { @@ -330,8 +358,6 @@ module AtsImsIot_TP_behavior_MW_EB { in SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the 200 OK p_monitorCompRef.start( f_Iot_Sip_receive( @@ -358,6 +384,38 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 + function f_mtc_check_TP_MW_IBCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_PSAP).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_PSAP).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_IBCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_200OK_01 + /** * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -489,6 +547,34 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + function f_mtc_check_TP_MW_IBCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 + } // End of group imsAck group imsBye { @@ -565,6 +651,44 @@ module AtsImsIot_TP_behavior_MW_EB { } } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 + function f_mtc_check_TP_MW_IBCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_BYE_01 + } // End of group imsBye group ims200OkBye { @@ -635,4 +759,83 @@ module AtsImsIot_TP_behavior_MW_EB { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_IBCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_IBCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group ims487Invite { + + function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_IBCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01 + + } // End of group ims487Invite + } // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 98c80ff..559f61d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -150,8 +150,8 @@ module AtsImsIot_TP_behavior_MW_EC { { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) ), ( mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), @@ -173,6 +173,44 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), + mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03 + } // End of group imsInvite group ims100Trying { @@ -634,4 +672,69 @@ module AtsImsIot_TP_behavior_MW_EC { } // End of group ims200OkBye + group imsCancel { + + function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index 14428e2..e72bdfa 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -400,6 +400,66 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_Response_200onREGISTER_IMS( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02 + /** * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { @@ -778,7 +838,10 @@ module AtsImsIot_TP_behavior_MW_IS { { mw_SipResponse(mw_Response_200onREGISTER_IMS( v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq + v_sip.request.msgHeader.cSeq, + ?, // UE URI + mw_contact(mw_ContactAddress), + ? //FIXME ? )) }, { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index f46dad4..ab66af6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -453,6 +453,65 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the second REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check the second REGISTER response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02 + /** * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { @@ -3185,11 +3244,7 @@ module AtsImsIot_TP_behavior_MW_PS { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MW_PCSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField + p_sip.request.msgHeader.callId )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, @@ -3809,6 +3864,41 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). * Initial conditions with { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn index 9ccf70c..0136fc3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_SI.ttcn @@ -1249,7 +1249,7 @@ module AtsImsIot_TP_behavior_MW_SI { }} // End of function f_mtc_check_TP_MW_SCSCF_200OK_02 } // End of group ims200Ok - + group imsAck { /** diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn new file mode 100644 index 0000000..f38a038 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn @@ -0,0 +1,98 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_Mx_LRF { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_ML all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group ims3xxAny { + + /** + * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_LRF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * from the IMS_EBCF_A entity + * } + * then { + * the IMS_LRF_A entity sends a 3xx Any containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_LRF_3xxAny_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 3xx Any + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_3xxContact( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.accept + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_Mx_LRF_3xxAny_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 + + } // End of group ims3xxAny + +} // End of module AtsImsIot_TP_behavior_Mx_LRF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn index 606a44d..5c86273 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn @@ -8,23 +8,23 @@ module AtsImsIot_TP_behavior_RX { // LibIot - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT, PX_EUT_A, PX_EUT_B;} - import from LibIot_VxLTE_PIXITS {modulepar PX_SIP_GMA_UE_IPADDR;} - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from LibIot_PIXITS all; + import from LibIot_VxLTE_PIXITS all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; // AtsImsIot - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; import from AtsImsIot_Diameter_Templates all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } + import from AtsImsIot_TestSystem all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; - import from LibDiameter_Steps {function f_IPV4_Address2oct;}; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Steps all; group g_PCRF { @@ -70,13 +70,15 @@ group g_PCRF_ASA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ASA_01 - ASR", @@ -86,13 +88,15 @@ group g_PCRF_ASA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { aSA_MSG := mw_ASA_resultCode }; + mw_diameter_msg_fail := { aSA_MSG := mw_ASA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_ASA_01 - ASA", @@ -152,13 +156,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_01 - AAR", @@ -168,13 +174,15 @@ group g_PCRF_AAA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ }; + mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode/*mw_AAA_AcceptableService*/ } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_01 - AAA", @@ -213,13 +221,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_02 - AAA", @@ -265,13 +275,15 @@ group g_PCRF_AAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_resultCode }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_AAA_03 - AAA", @@ -324,13 +336,15 @@ group g_PCRF_STA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_01 - STA", @@ -378,13 +392,15 @@ group g_PCRF_STA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_02 - STR", @@ -394,13 +410,15 @@ group g_PCRF_STA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { sTA_MSG := mw_STA_diamSuccess }; + mw_diameter_msg_fail := { sTA_MSG := mw_STA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCRF_STA_02 - STA", @@ -462,13 +480,15 @@ group g_PCSCF_ASR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_ASR_01 - ASR", @@ -541,13 +561,15 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_MediaComponent_specificActionLossOfBearer } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_01 - AAR", @@ -596,13 +618,14 @@ group g_PCSCF_AAR { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var boolean v_noDiameterMessageExpected := true; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { //check if nothing received }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } //Fail criteria: check if AAR is sent + mw_diameter_msg_fail //Fail criteria: check if AAR is sent }, {0, omit}, "TP_RX_PCSCF_AAR_02 - AAR", @@ -668,17 +691,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(INITIAL_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_03 - AAR", @@ -745,17 +769,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_04 - AAR", @@ -823,17 +848,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_05 - AAR", @@ -899,17 +925,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(INITIAL_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(INITIAL_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_06 - AAR", @@ -977,17 +1004,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_07 - AAR", @@ -1055,17 +1083,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(PRELIMINARY_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_08 - AAR", @@ -1133,17 +1162,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_09 - AAR", @@ -1210,17 +1240,18 @@ group g_PCSCF_AAR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( + mw_rxRequestType(UPDATE_REQUEST_E), + mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), + mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_RequestType_ServiceInfoStatus_FramedIPv4( - mw_rxRequestType(UPDATE_REQUEST_E), - mw_serviceInfoStatus(FINAL_SERVICE_INFORMATION_E), - mw_framedIPAddress(f_IPV4_Address2oct(PX_SIP_GMA_UE_IPADDR))) - } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_AAR_10 - AAR", @@ -1293,13 +1324,15 @@ group g_PCSCF_RAA { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { rAR_MSG := mw_RAR_SpecificAction }; + var template DIAMETER_MSG mw_diameter_msg_fail := { rAR_MSG := mw_RAR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_SpecificAction } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAR_MSG := mw_RAR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_RAA_01 - RAR", @@ -1309,13 +1342,15 @@ group g_PCSCF_RAA { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { rAA_MSG := mw_RAA_Rx_resultCode }; + mw_diameter_msg_fail := { rAA_MSG := mw_RAA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_Rx_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ rAA_MSG := mw_RAA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_RAA_01 - RAA", @@ -1368,13 +1403,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_01 - STR", @@ -1424,13 +1461,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_02 - STR", @@ -1479,13 +1518,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_03 - STR", @@ -1534,13 +1575,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_04 - STR", @@ -1589,13 +1632,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_05 - STR", @@ -1644,13 +1689,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_06 - STR", @@ -1699,13 +1746,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_07 - STR", @@ -1754,13 +1803,15 @@ group g_PCSCF_STR { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_RX_PCSCF_STR_08 - STR", @@ -1777,4 +1828,4 @@ group g_PCSCF_STR { } // end group g_PCSCF -} // end module AtsImsIot_TP_behavior_RX \ No newline at end of file +} // end module AtsImsIot_TP_behavior_RX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn index f8a1a1a..b9a7056 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S6A.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_S6A { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; @@ -65,13 +65,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aIR_MSG := mw_AIR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aIR_MSG := mw_AIR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_AIA_01 - AIR", @@ -81,13 +83,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { aIA_MSG := mw_AIA_resultCode }; + mw_diameter_msg_fail := { aIA_MSG := mw_AIA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIA_MSG := mw_AIA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIA_MSG := mw_AIA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_AIA_01 - AIA", @@ -140,13 +144,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cLR_MSG := mw_CLR_cancelation }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cLR_MSG := mw_CLR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_cancelation } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_CLR_01 - CLR", @@ -195,13 +201,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { pUER_MSG := mw_PUER_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { pUER_MSG := mw_PUER_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_PUA_01 - PUR", @@ -211,13 +219,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { pUEA_MSG := mw_PUEA_resultCode }; + mw_diameter_msg_fail := { pUEA_MSG := mw_PUEA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUEA_MSG := mw_PUEA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_PUA_01 - PUA", @@ -267,13 +277,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_01 - ULR", @@ -283,13 +295,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uLA_MSG := mw_ULA_resultCode_flags }; + mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_01 - ULA", @@ -339,13 +353,15 @@ group g_HSS { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_02 - ULR", @@ -355,13 +371,15 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uLA_MSG := mw_ULA_resultCode_flags }; + mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_resultCode_flags } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_HSS_ULA_02 - ULA", @@ -373,12 +391,12 @@ group g_HSS { } } // End of function f_mtc_check_TP_S6A_HSS_ULA_02 - group ES{ - /** - * Starts monitor component behavior for TP_S6A_HSS_ECO_ULA_01 - * @param p_monitorCompRef Reference to monitor component - *
      -		 *Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP."
      +    group ES{
      +        /**
      +         * Starts monitor component behavior for TP_S6A_HSS_ECO_ULA_01
      +         * @param p_monitorCompRef Reference to monitor component
      +         * 
      +         *Test objective  "Verify that IUT after receipt of UL-Request sends UL-Answer containing Emergency-Info AVP."
                *
                *Reference 
                *   "TS 129 272 [10], clause 5.2.1.1.2"
      @@ -408,49 +426,53 @@ group g_HSS {
                *           to the EPC_MME_A entity
                *       }
                *   } 
      -		 * 
      - */ - function f_mtc_check_TP_S6A_HSS_ECO_ULA_01( - DiameterInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in boolean p_forward_to_mtc := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ -// p_monitorCompRef.start ( -// f_Iot_Diameter_receive( -// { -// DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } -// }, -// { -// DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } -// }, -// {0, omit}, -// "TP_S6A_HSS_ULA_01 - ULR", -// p_forward_to_mtc, -// p_checkMessage -// ) -// ); -// p_monitorCompRef.done; + *
      + */ + function f_mtc_check_TP_S6A_HSS_ECO_ULA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; +// var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; +// p_monitorCompRef.start ( +// f_Iot_Diameter_receive( +// { +// mw_diameter_msg_pass +// }, +// { +// mw_diameter_msg_fail +// }, +// {0, omit}, +// "TP_S6A_HSS_ULA_01 - ULR", +// p_forward_to_mtc, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; - p_monitorCompRef.start ( - f_Iot_Diameter_receive( - { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_subsdata_flags } - }, - { - DIAMETER_MSG:{ uLA_MSG := mw_ULA_basic } - }, - {0, omit}, - "TP_S6A_HSS_ECO_ULA_01 - ULA", - p_forward_to_mtc, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_S6A_HSS_ECO_ULA_01 - - }// end group ES + var template DIAMETER_MSG mw_diameter_msg_pass := { uLA_MSG := mw_ULA_subsdata_flags }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLA_MSG := mw_ULA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_S6A_HSS_ECO_ULA_01 - ULA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_S6A_HSS_ECO_ULA_01 + + }// end group ES } // end group g_HSS group g_MME { @@ -494,13 +516,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - p_monitorCompRef.start ( + var template DIAMETER_MSG mw_diameter_msg_pass := { aIR_MSG := mw_AIR }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aIR_MSG := mw_AIR_basic }; + p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aIR_MSG := mw_AIR } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aIR_MSG := mw_AIR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_AIR_01 - AIR", @@ -549,13 +573,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cLR_MSG := mw_CLR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cLR_MSG := mw_CLR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLR_MSG := mw_CLR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_CLA_01 - CLR", @@ -565,13 +591,15 @@ group g_MME { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { cLA_MSG := mw_CLA_resultCode }; + mw_diameter_msg_fail := { cLA_MSG := mw_CLA_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cLA_MSG := mw_CLA_resultCode } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cLA_MSG := mw_CLA_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_CLA_01 - CLA", @@ -620,13 +648,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { pUER_MSG := mw_PUER_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { pUER_MSG := mw_PUER_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ pUER_MSG := mw_PUER_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_PUR_01 - PUR", @@ -678,13 +708,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic} + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_ULR_01 - ULR", @@ -736,13 +768,15 @@ group g_MME { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { uLR_MSG := mw_ULR_userName }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uLR_MSG := mw_ULR_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_userName } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ uLR_MSG := mw_ULR_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S6A_MME_ULR_02 - ULR", @@ -755,9 +789,9 @@ group g_MME { } // End of function f_mtc_check_TP_S6A_MME_ULR_02 group ES{ - + }// end group ES } // end group g_MME -} // end module AtsImsIot_TP_behavior_S6A \ No newline at end of file +} // end module AtsImsIot_TP_behavior_S6A diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn index a0bdc8b..72aabfd 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_S9.ttcn @@ -7,21 +7,21 @@ module AtsImsIot_TP_behavior_S9 { - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; group g_PCRF { @@ -61,13 +61,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAR_MSG := mw_AAR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAR_01 - AAR", @@ -134,13 +136,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_S9_resultCode /*mw_AAA_S9_AcceptableService*/ }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode /*mw_AAA_S9_AcceptableService*/ } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAA_01 - AAA", @@ -192,13 +196,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAA_MSG := mw_AAA_S9_resultCode_mediaCopmonentDescription }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAA_MSG := mw_AAA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_resultCode_mediaCopmonentDescription } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aAA_MSG := mw_AAA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_AAA_02 - AAA", @@ -247,14 +253,16 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSR_MSG := mw_ASR_S9_abortCause(BEARER_RELEASED_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSR_MSG := mw_ASR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_abortCause(BEARER_RELEASED_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSR_MSG := mw_ASR_S9_basic } - }, + mw_diameter_msg_fail + }, {0, omit}, "TP_S9_PCRF_ASR_01 - ASR", p_forward_to_mtc, @@ -299,13 +307,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aSA_MSG := mw_ASA_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aSA_MSG := mw_ASA_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ aSA_MSG := mw_ASA_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_ASA_01 - ASA", @@ -384,13 +394,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_S9_Establishment(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Establishment(INITIAL_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCR_01 - CCR", @@ -444,13 +456,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_S9_Termination(TERMINATION_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_Termination(TERMINATION_REQUEST_E) } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCR_MSG := mw_CCR_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCR_02 - CCR", @@ -515,13 +529,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecision_qosInfoAndDefaultEpsBearer } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCA_01 - CCA", @@ -573,13 +589,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCA_MSG := mw_CCA_S9_subsessionDecisionAny }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCA_MSG := mw_CCA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_subsessionDecisionAny } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ cCA_MSG := mw_CCA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_CCA_02 - CCA", @@ -625,13 +643,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTR_MSG := mw_STR_S9_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTR_MSG := mw_STR_dummy }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTR_MSG := mw_STR_S9_basic } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTR_MSG := mw_STR_dummy } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STR_01 - STR", @@ -680,13 +700,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_S9_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STA_01 - STA", @@ -735,13 +757,15 @@ group g_PCRF { in boolean p_forward_to_mtc := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { sTA_MSG := mw_STA_S9_diamSuccess }; + var template DIAMETER_MSG mw_diameter_msg_fail := { sTA_MSG := mw_STA_S9_basic }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_diamSuccess } + mw_diameter_msg_pass }, { - DIAMETER_MSG:{ sTA_MSG := mw_STA_S9_basic } + mw_diameter_msg_fail }, {0, omit}, "TP_S9_PCRF_STA_02 - STA", diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn index 9272998..c7e19d2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_SH.ttcn @@ -9,21 +9,21 @@ module AtsImsIot_TP_behavior_SH // LibIms import from LibIms_UpperTester all; - import from AtsImsIot_TestSystem { type DiameterInterfaceMonitor, ImsTestCoordinator; } - import from LibIot_PIXITS {modulepar PX_MAX_MSG_WAIT;} - import from AtsImsIot_Templates {template all;} - import from AtsImsIot_TypesAndValues { type SipMessage, SipMessageList, NAPTRmessage, EnumResponse, EnumQuery, SkipType; } - import from LibIot_TestInterface { type EquipmentUser, IotEquipmentUser }; - import from LibIot_TypesAndValues {type SetFilterReq, SetFilterRsp;} - import from LibIot_Functions { function f_setConformanceVerdict, f_setIotVerdictFAIL; } + import from AtsImsIot_TestSystem all; + import from LibIot_PIXITS all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; import from AtsImsIot_Functions all; - import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;} + import from LibIot_PIXITS all; import from AtsImsIot_Diameter_Templates all; // LibDiameter import from LibDiameter_Templates all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;}; + import from LibDiameter_TypesAndValues all; @@ -84,10 +84,11 @@ group g_HSS { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var template DIAMETER_MSG mw_diameter_msg_pass := { uDR_MSG := mw_UDR_userData_publicIdentity("tel:"&v_userInfoA.publicId) }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uDR_MSG := mw_UDR_userData_publicIdentity("tel:"&v_userInfoA.publicId)} + mw_diameter_msg_pass }, {}, {0, omit}, @@ -98,10 +99,11 @@ group g_HSS { ); p_monitorCompRef.done; + mw_diameter_msg_pass := { uDA_MSG := mw_UDA_diamSuccess }; p_monitorCompRef.start ( f_Iot_Diameter_receive( { - DIAMETER_MSG:{uDA_MSG := mw_UDA_diamSuccess} + mw_diameter_msg_pass }, {}, {0, omit}, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 7b149a1..32db8f6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -6,54 +6,16 @@ module AtsImsIot_Templates { - import from LibCommon_BasicTypesAndValues {type UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_TypesAndValues { - type - InterfaceInfoList, - ProtocolFilter, - GeneralConfigurationReq, - GeneralConfigurationRsp, - SetFilterReq, - SetFilterRsp, - StartTrafficCaptureReq, - StartTrafficCaptureRsp, - StopTrafficCaptureReq, - StopTrafficCaptureRsp, - IpAddress, - Status; - } - import from AtsImsIot_TypesAndValues { - type - SipMessage, NAPTRmessage - }; + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common { - type - GenericParam, - SemicolonParam_List - } - import from LibMsrp_TypesAndValues { - type - SEND_request, - RECEIVE_response - }; - import from LibIot_PIXITS { - modulepar - PX_IOT_TIMESTAMP_OFFSET, - PX_IOT_PCAP_SESSIONS_PATH, - PX_IOT_RECORD_MODE, - PX_IOT_EUTs_IFACE_INFO_LIST, - PX_IOT_FILE_MERGE_LIST, - PX_IOT_FILE_MERGE_PATH, - PX_IOT_MERGE_TOOL_PATH, - PX_IOT_IFACES; - } - import from AtsImsIot_PIXITS { - modulepar - PX_IMS_SUT_CONF_FACTORY_NAME, PX_IMS_SUT_CONF_HOME_DOMAIN - }; + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; group adapterMsgTemplates { template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { @@ -2187,30 +2149,30 @@ module AtsImsIot_Templates { template UPDATE_Request mdw_TP_IMS_5106_02_f_ic( template CallId p_callId, template SipUrl p_SCSCF_URI - ) modifies mw_UPDATE_Request_Base := { - msgHeader := { - route := { - fieldName := ROUTE_E, - routeBody := { - mw_routeBody(p_SCSCF_URI), - * - } - } - } - } + ) modifies mw_UPDATE_Request_Base := { + msgHeader := { + route := { + fieldName := ROUTE_E, + routeBody := { + mw_routeBody(p_SCSCF_URI), + * + } + } + } + } /** * @desc OPTIONS Request checking TP_IMS_CONTENT_SHARE_01 */ template OPTIONS_Request mdw_TP_IMS_CONTENT_SHARE_01_ic( - template CallId p_callId - ) modifies mw_OPTIONS_Request_Base := { - msgHeader := { - acceptContact := mw_AcceptContact_share, - contact := mw_Contact_share + template CallId p_callId + ) modifies mw_OPTIONS_Request_Base := { + msgHeader := { + acceptContact := mw_AcceptContact_share, + contact := mw_Contact_share + } } - } /** @@ -2224,6 +2186,177 @@ module AtsImsIot_Templates { } } + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + template(present) From mw_From_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + fromParams := * + } // End of template mw_From_AddrUnion_SipUrl + + template(present) From mw_From_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := mw_AddrUnion_TelUrl(p_number), + fromParams := * + } // End of template mw_From_AddrUnion_TelUrl + + template From mw_From_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := FROM_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + fromParams := * + } // End of template mw_From_NameAddr_TelUrl + + template(present) To mw_To_AddrUnion_SipUrl( + template DisplayName p_dn, + template(present) charstring p_user := ?, + template charstring p_host + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_SipUrl(p_user, p_host), + toParams := * + } // End of template mw_To_AddrUnion_SipUrl + + template(present) To mw_To_AddrUnion_TelUrl( + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := mw_AddrUnion_TelUrl(p_number), + toParams := * + } // End of template mw_To_AddrUnion_TelUrl + + template To mw_To_NameAddr_TelUrl( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + fieldName := TO_E, + addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + toParams := * + } // End of template mw_To_NameAddr_TelUrl + + template (present) Contact mw_contact( + template (present) ContactAddress p_contactAddresses := ? + ) := { + fieldName := CONTACT_E, + contactBody := { contactAddresses := { p_contactAddresses } } + } // End of template mw_Contact + + template (present) Response mw_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_200OK + + template Response mw_401Unauthorized( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_401Unauthorized_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_401Unauthorized + + template Response mw_404NotFound( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_404NotFound_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_404NotFound + + template Response mw_480TemporaryUnavailable( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mw_480TemporaryUnavailable_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_480TemporaryUnavailable + + template (present) Response mw_486Busy( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_486Busy_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_486Busy + + template (present) Response mw_600BusyEverywhere( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_600BusyEverywhere_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_600BusyEverywhere + + template (present) Response mw_487RequestTerminated( + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_487RequestTerminated_Base := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_487RequestTerminated + } // End of group modifiedSIPBaseTemplates group EmergencySIPTemplates { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 35b6edd..106f465 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -47,152 +47,143 @@ module AtsImsIot_Templates_GM { } } // End of template mw_NameAddr_DispName_Tel - template(present) From mw_From_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - fromParams := * - } // End of template mw_From_AddrUnion_SipUrl - - template(present) From mw_From_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_TelUrl(p_number), - fromParams := * - } // End of template mw_From_AddrUnion_TelUrl - - template From mw_From_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - fromParams := * - } // End of template mw_From_NameAddr_TelUrl - - template(present) To mw_To_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - toParams := * - } // End of template mw_To_AddrUnion_SipUrl - - template(present) To mw_To_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_TelUrl(p_number), - toParams := * - } // End of template mw_To_AddrUnion_TelUrl - - template To mw_To_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - toParams := * - } // End of template mw_To_NameAddr_TelUrl - - template (present) Response mw_200OK( - template (present) CSeq p_cSeq := ?, - template (present) CallId p_callId := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_200OK_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_200OK - - template (present) Response mw_401Unauthorized( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_401Unauthorized_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_401Unauthorized - - template (present) Response mw_404NotFound( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_404NotFound_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_404NotFound - - template Response mw_480TemporaryUnavailable( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template WwwAuthenticate p_wwwAuthenticate := * - ) modifies mw_480TemporaryUnavailable_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_480TemporaryUnavailable - - template (present) Response mw_486Busy( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_486Busy_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_486Busy - - template (present) Response mw_600BusyEverywhere( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_600BusyEverywhere_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_600BusyEverywhere - - template (present) Response mw_487RequestTerminated( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_487RequestTerminated_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_487RequestTerminated + // template(present) From mw_From_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // fromParams := * + // } // End of template mw_From_AddrUnion_SipUrl + + // template(present) From mw_From_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // fromParams := * + // } // End of template mw_From_AddrUnion_TelUrl + + // template From mw_From_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // fromParams := * + // } // End of template mw_From_NameAddr_TelUrl + + // template(present) To mw_To_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // toParams := * + // } // End of template mw_To_AddrUnion_SipUrl + + // template(present) To mw_To_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // toParams := * + // } // End of template mw_To_AddrUnion_TelUrl + + // template To mw_To_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // toParams := * + // } // End of template mw_To_NameAddr_TelUrl + + // template (present) Contact mw_contact( + // template (present) ContactAddress p_contactAddresses := ? + // ) := { + // fieldName := CONTACT_E, + // contactBody := { contactAddresses := { p_contactAddresses } } + // } // End of template mw_Contact + + // template (present) Response mw_200OK( + // template (present) CSeq p_cSeq := ?, + // template (present) CallId p_callId := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ? + // ) modifies mw_200OK_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to + // } + // } // End of template mw_200OK + + // template (present) Response mw_401Unauthorized( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_401Unauthorized_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_401Unauthorized + + // template (present) Response mw_404NotFound( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_404NotFound_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_404NotFound + + // template Response mw_480TemporaryUnavailable( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template WwwAuthenticate p_wwwAuthenticate := * + // ) modifies mw_480TemporaryUnavailable_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_480TemporaryUnavailable + + // template (present) Response mw_486Busy( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_486Busy_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_486Busy + + // template (present) Response mw_600BusyEverywhere( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_600BusyEverywhere_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_600BusyEverywhere } // End of group sip_templates diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn index 4624eff..3d86c74 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_IC.ttcn @@ -6,46 +6,16 @@ module AtsImsIot_Templates_IC { - import from LibCommon_BasicTypesAndValues {type UInt16;} - import from LibCommon_VerdictControl {type FncRetCode;} - import from LibIot_TypesAndValues { - type - InterfaceInfoList, - ProtocolFilter, - GeneralConfigurationReq, - GeneralConfigurationRsp, - SetFilterReq, - SetFilterRsp, - StartTrafficCaptureReq, - StartTrafficCaptureRsp, - StopTrafficCaptureReq, - StopTrafficCaptureRsp, - IpAddress, - Status; - } - import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} + import from LibCommon_BasicTypesAndValues all; + import from LibCommon_VerdictControl all; + import from LibIot_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibSip_Templates all; - import from LibSip_Common {type GenericParam, SemicolonParam_List;} - import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} - import from LibIot_PIXITS { - modulepar - PX_IOT_TIMESTAMP_OFFSET, - PX_IOT_PCAP_SESSIONS_PATH, - PX_IOT_RECORD_MODE, - PX_IOT_EUTs_IFACE_INFO_LIST, - PX_IOT_FILE_MERGE_LIST, - PX_IOT_FILE_MERGE_PATH, - PX_IOT_MERGE_TOOL_PATH, - PX_IOT_IFACES; - } - import from AtsImsIot_PIXITS { - modulepar - PX_IMS_SUT_CONF_FACTORY_NAME, - PX_IMS_SUT_CONF_HOME_DOMAIN, - PX_IMS_A_ICID; - } - + import from LibSip_Common all; + import from LibMsrp_TypesAndValues all; + import from LibIot_PIXITS all; + import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; group g_IBCF { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn new file mode 100644 index 0000000..448ec57 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -0,0 +1,188 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MI interface + */ +module AtsImsIot_Templates_MI { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MI_BGCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MI_BGCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MI_BGCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_100Trying_01 + + template (present) Response mw_TP_MI_BGCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_180Ringing_01 + + template (present) Response mw_TP_MI_BGCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MI_BGCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_BGCF_ACK_01 + + template (present) BYE_Request mw_TP_MI_BGCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template (present) CANCEL_Request mw_TP_MI_BGCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_BGCF_CANCEL_01 + +} // End of module AtsImsIot_Templates_MI diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn index 073ab4a..47259fc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn @@ -80,4 +80,13 @@ module AtsImsIot_Templates_ML { } } // End of template mw_TP_ML_ECSCF_3XX_Base_01 + template (present) Response mw_3xxContact( + template (present) CSeq p_cSeq := ?, + Accept p_accept) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + accept := p_accept + } + } // End of template mw_3xxContact + } // End of module AtsImsIot_Templates_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index f0ca8b4..0a37e1e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -29,9 +29,9 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MM_PSAP_INVITE_01 + * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 */ - template(present) INVITE_Request mw_TP_MM_PSAP_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, template (present) From p_from := ?, template (present) To p_to := ?) modifies mw_INVITE_Request_Base := { @@ -68,7 +68,7 @@ module AtsImsIot_Templates_MM { } } - template (present) Response mw_TP_MM_PSAP_100Trying_01( + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -78,9 +78,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_100Trying_01 + } // End of template mw_TP_MM_ECSCF_100Trying_01 - template (present) Response mw_TP_MM_PSAP_180Ringing_01( + template (present) Response mw_TP_MM_ECSCF_180Ringing_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -90,9 +90,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_180Ringing_01 + } // End of template mw_TP_MM_ECSCF_180Ringing_01 - template (present) Response mw_TP_MM_PSAP_183SessionProgress_01( + template (present) Response mw_TP_MM_ECSCF_183SessionProgress_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -102,9 +102,9 @@ module AtsImsIot_Templates_MM { fromField := p_from, toField := p_to } - } // End of template mw_TP_MM_PSAP_183SessionProgress_01 + } // End of template mw_TP_MM_ECSCF_183SessionProgress_01 - template (present) ACK_Request mw_TP_MM_PSAP_ACK_01( // TODO To be enforced + template (present) ACK_Request mw_TP_MM_ECSCF_ACK_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_ack_uri := ?, @@ -129,15 +129,15 @@ module AtsImsIot_Templates_MM { } } } - } // End of template mw_TP_MM_PSAP_ACK_01 + } // End of template mw_TP_MM_ECSCF_ACK_01 - template (present) BYE_Request mw_TP_MM_PSAP_BYE_01( // TODO To be enforced - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) SipUrl p_bye_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_BYE_Request_Base := { + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { requestLine := { method := BYE_E, requestUri := p_bye_uri, // @TODO @@ -157,6 +157,32 @@ module AtsImsIot_Templates_MM { } } } // End of template mw_TP_MW_PCSCF_BYE_01 - + + template (present) CANCEL_Request mw_TP_MM_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MM_ECSCF_CANCEL_01 } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index bede675..05dd774 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -28,181 +28,6 @@ module AtsImsIot_Templates_MW { import from AtsImsIot_PIXITS all; import from AtsImsIot_Templates all; - group sip_templates { - - template NameAddr mw_NameAddr_DispName_Tel( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - displayName := p_displayName, - addrSpec := { - scheme := c_telScheme, //* contains "tel" - components := { - tel := { - subscriber := p_number - } - }, - urlParameters := *, - headers := * - } - } // End of template mw_NameAddr_DispName_Tel - - template(present) From mw_From_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - fromParams := * - } // End of template mw_From_AddrUnion_SipUrl - - template(present) From mw_From_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := mw_AddrUnion_TelUrl(p_number), - fromParams := * - } // End of template mw_From_AddrUnion_TelUrl - - template From mw_From_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := FROM_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - fromParams := * - } // End of template mw_From_NameAddr_TelUrl - - template(present) To mw_To_AddrUnion_SipUrl( - template DisplayName p_dn, - template(present) charstring p_user := ?, - template charstring p_host - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_SipUrl(p_user, p_host), - toParams := * - } // End of template mw_To_AddrUnion_SipUrl - - template(present) To mw_To_AddrUnion_TelUrl( - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := mw_AddrUnion_TelUrl(p_number), - toParams := * - } // End of template mw_To_AddrUnion_TelUrl - - template To mw_To_NameAddr_TelUrl( - template DisplayName p_displayName := *, - template(present) charstring p_number := ? - ) := { - fieldName := TO_E, - addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, - toParams := * - } // End of template mw_To_NameAddr_TelUrl - - template (present) Contact mw_contact( - template (present) ContactAddress p_contactAddresses := ? - ) := { - fieldName := CONTACT_E, - contactBody := { contactAddresses := { p_contactAddresses } } - } // End of template mw_Contact - - template (present) Response mw_200OK( - template (present) CSeq p_cSeq := ?, - template (present) CallId p_callId := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_200OK_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to - } - } // End of template mw_200OK - - template Response mw_401Unauthorized( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_401Unauthorized_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_401Unauthorized - - template Response mw_404NotFound( - template (present) CSeq p_cSeq := ?, - template (present) WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_404NotFound_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_404NotFound - - template Response mw_480TemporaryUnavailable( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template WwwAuthenticate p_wwwAuthenticate := * - ) modifies mw_480TemporaryUnavailable_Base := { - msgHeader := { - cSeq := p_cSeq, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_480TemporaryUnavailable - - template (present) Response mw_486Busy( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_486Busy_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_486Busy - - template (present) Response mw_600BusyEverywhere( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_600BusyEverywhere_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_600BusyEverywhere - - template (present) Response mw_487RequestTerminated( - template (present) CallId p_callId := ?, - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template WwwAuthenticate p_wwwAuthenticate := ? - ) modifies mw_487RequestTerminated_Base := { - msgHeader := { - callId := p_callId, - cSeq := p_cSeq, - fromField := p_from, - toField := p_to, - wwwAuthenticate := p_wwwAuthenticate - } - } // End of template mw_487RequestTerminated - - } // End of group sip_templates - group g_pcscf { template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_01( @@ -1092,6 +917,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_BYE_01 + template (present) CANCEL_Request mw_TP_MW_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_CANCEL_01 + } group g_ibcf { @@ -1226,6 +1078,33 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_IBCF_BYE_01 + template (present) CANCEL_Request mw_TP_MW_IBCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_IBCF_CANCEL_01 + } } // End of module AtsImsIot_Templates_MW \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index b43963b..ec88bbc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -9,25 +9,19 @@ module AtsImsIot_TestConfiguration { - import from LibCommon_VerdictControl { type FncRetCode; } + import from LibCommon_VerdictControl all; /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ - import from LibIms_UpperTester { modulepar PX_IMS_USER_DATA; } - import from LibIot_PIXITS { modulepar PX_EUT_A, PX_EUT_B, PX_PRODUCTS, PX_MAX_MSG_WAIT; } - import from LibIot_TypesAndValues { - type StartTrafficCaptureRsp, StopTrafficCaptureRsp, MonitorInterfaceInfo, InterfaceInfo, InterfaceInfoList, Product, - ProtocolFilter, StartTrafficCaptureRsp, StopTrafficCaptureRsp, SetFilterReq, SetFilterRsp, Status; } + import from LibIms_UpperTester all; + import from LibIot_PIXITS all; + import from LibIot_TypesAndValues all; /*language "TTCN-3:2008 Amendment 1" - FSCOM/YGA*/ - import from LibIot_Functions { altstep a_receiveIOTVerdict; function f_setConformanceVerdict, f_setE2EVerdict; } - import from LibIot_TestConfiguration { function f_cf_oracle_up, f_cf_oracle_down; } - import from LibIot_TestInterface {type IotEquipmentUser;} - import from AtsImsIot_TestSystem {type ImsInterfaceMonitor, SipInterfaceMonitor, DiameterInterfaceMonitor, NaptrInterfaceMonitor, SgiInterfaceMonitor, ImsTestCoordinator, CF_INT_CALL, CF_INT_AS, CF_ROAM_AS, CF_EPC_CALL, CF_ATT, CF_ATT_old;} - import from LibIot_TestInterface {type InterfaceMonitor;} - import from AtsImsIot_Templates { - template m_generalConfigurationReq_offline, m_generalConfigurationReq_online, m_generalConfigurationReq_merge, - m_generalConfigurationRsp_success, m_generalConfigurationRsp_error, m_generalConfigurationRsp_timeout, - m_SetFilterReq, mw_SetFilterRsp, m_startTrafficCaptureReq, m_stopTrafficCaptureReq, - m_startTrafficCaptureRsp_any, m_stopTrafficCaptureRsp_any; } - import from AtsImsIot_Functions {function f_setInterfaceNameOnComponent, f_setInterfaceInfoComponent;} + import from LibIot_Functions all; + import from LibIot_TestConfiguration all; + import from LibIot_TestInterface all; + import from AtsImsIot_TestSystem all; + import from LibIot_TestInterface all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Functions all; group constantDefinitions { //* interface monitor name Gm A diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index f0d76d6..890c4af 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -1,12 +1,12 @@ module AtsImsIot_TestSystem { - import from LibSip_SIPTypesAndValues {type Request, Response;} - import from LibMsrp_TypesAndValues {type SEND_request, RECEIVE_response;} - import from AtsImsIot_TypesAndValues {type SipMessage, NAPTRmessage;} - import from LibIot_TestInterface {type EquipmentAccessPort;} + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; import from LibIot_TestInterface all; - import from LibIot_TypesAndValues {type VxLTEMonitorInterfaceList;} - import from LibDiameter_TypesAndValues {type DIAMETER_MSG;} + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibDiameter_TypesAndValues all; /** * @desc interfaces to the SUT diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index 61a232b..961f35c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -7,14 +7,10 @@ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; - import from LibSip_SIPTypesAndValues {type Request, SipUrl, Response;} - import from LibMsrp_TypesAndValues { - type - SEND_request, - RECEIVE_response - }; + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; import from LibDiameter_TypesAndValues {type DIAMETER_MSG} - import from LibCommon_DataStrings {type Bit1, Bit3}; + import from LibCommon_DataStrings all; group SIPmessageTypes { /** -- GitLab From 61e9ed2af768232bd3aa7b80cf95ac826b77485f Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 4 Aug 2023 11:03:04 +0200 Subject: [PATCH 57/84] TTF T010 FSCOM week#31 session --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 6 ++-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 31 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index a3d29d9..8004e35 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -2570,7 +2570,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) @@ -2682,8 +2682,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 20 // 480 Temporary Unavailable - f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 - f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 + f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn index 1dc3357..44d7029 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -644,4 +644,35 @@ module AtsImsIot_TP_behavior_MI { } // End of group imsRequestTermination + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_BGCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file -- GitLab From e670bb9b9483893d3e5281168dfa9ae1c5338b23 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 4 Aug 2023 11:03:55 +0200 Subject: [PATCH 58/84] TTF T010 FSCOM week#31 session --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 77 ++++++++++++------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn | 10 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 2 +- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 7 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 2 +- .../LibSip_SIPTypesAndValues.ttcn | 2 +- .../LibSip_SMSTypesAndValues.ttcn | 4 + .../LibSip_SimpleMsgSummaryTypes.ttcn | 3 + ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn | 15 ++++ 10 files changed, 85 insertions(+), 39 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1bd58db..8004e35 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -323,8 +323,6 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); @@ -647,7 +645,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_MM_B_PSAP_INTERFACENAME, // E-CSCF -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF })) { var SipMessage v_sip; @@ -759,6 +757,7 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -897,7 +896,7 @@ module AtsImsIot_Emergency { PX_SIP_MW_PE_INTERFACENAME, PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF PX_SIP_IC_INTERFACENAME, // IBCF -> IMS_B -> PSAP - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; @@ -942,7 +941,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB); // Event 13 + f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 @@ -1022,6 +1021,7 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -1151,7 +1151,7 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> BGCF - PX_SIP_ML_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF + PX_SIP_ML_E_LRF_INTERFACENAME // E-CSCF -> LRF: mlE_LRF })) { var SipMessage v_sip; @@ -2483,8 +2483,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31 - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_psap); // Event 34 + f_mtc_userCheckCallTerminated(v_ueA); // Event 36 + f_mtc_userCheckCallCancelled(v_psap); // Event 37 // Postamble f_PO_user_home_deregistration(v_ueA); @@ -2576,7 +2576,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) // 480 Temporary Unavailable - f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 @@ -2588,13 +2588,10 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 - f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 31 - + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.mmB_PSAP); // Event 31 - - - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_psap); // Event 34 + f_mtc_userCheckCallTerminated(v_ueA); // Event 36 + f_mtc_userCheckCallCancelled(v_psap); // Event 37 // Postamble f_PO_user_home_deregistration(v_ueA); @@ -2666,7 +2663,40 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 4 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 5 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 6 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 7 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19 + f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 20 + + // 480 Temporary Unavailable + f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 + + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 + f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 35 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 f_mtc_userCheckCallCancelled(v_psap); // Event 34 @@ -2710,11 +2740,7 @@ module AtsImsIot_Emergency { f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME, - PX_SIP_MW_PE_INTERFACENAME, - PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + PX_DIAMETER_GX_INTERFACENAME })) { var SipMessage v_sip; @@ -2738,12 +2764,9 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - // TODO - - f_mtc_userCheckCallTerminated(v_ueA); // Event 33 - f_mtc_userCheckCallCancelled(v_psap); // Event 34 + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 // Postamble f_PO_user_home_deregistration(v_ueA); diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 8e04ca3..7dcd6f0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -4161,7 +4161,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn index 71fa1da..0c90b1e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_IC.ttcn @@ -1667,16 +1667,16 @@ module AtsImsIot_TP_behavior_IC group imsTemporaryUnavailable { function f_mtc_check_TP_IC_IBCF_480TEMPAV_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 487 Request Terminated p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index ae8c835..8b7b62e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -691,7 +691,7 @@ module AtsImsIot_TP_behavior_MM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index 89e5f3c..eaf605c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -103,9 +103,10 @@ module AtsImsIot_TP_behavior_MW_EB { } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 function f_mtc_check_TP_MW_IBCF_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); p_monitorCompRef.start( diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 9dda073..559f61d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -718,7 +718,7 @@ module AtsImsIot_TP_behavior_MW_EC { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq)) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) diff --git a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn index d4f23c2..4200ebc 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn @@ -1981,4 +1981,4 @@ module LibSip_SIPTypesAndValues { } with { encode "SIPCodec"; variant ""; -} // end module LibSip_TypesAndValues +} // end module LibSip_SIPTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn index 30f2526..08d0544 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SMSTypesAndValues.ttcn @@ -482,4 +482,8 @@ module LibSip_SMSTypesAndValues { with { encode "SMSCodec"; } // group SMS_Declarations + +} +with { + encode "SIPCodec"; variant ""; } // End of module LibSip_SMSTypesAndValues diff --git a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn index ca4a39f..6364931 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SimpleMsgSummaryTypes.ttcn @@ -54,4 +54,7 @@ module LibSip_SimpleMsgSummaryTypes { // type integer msgcount length(1); //msgs and urgent_msgs can be dividet into subtypes } +} +with { + encode "SIPCodec"; variant ""; } \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn index ae36e95..af7ce02 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_Steps.ttcn @@ -1590,6 +1590,21 @@ module LibSip_Steps { vc_reqHostPort := vc_requestUri.components.sip.hostPort; } // end function f_setHeadersNOTIFY + /** + * @desc setting of general and basic Notify header fields in additon to the addresses (To, From, ReqUri) + * @param p_cSeq_s + */ + function f_setHeadersOPTIONS( + inout CSeq p_cSeq_s + ) runs on SipComponent { + f_setHeadersGeneral(p_cSeq_s, "OPTIONS"); // cseq, contact, branch, via + vc_cancel_To := vc_to; + vc_caller_To := vc_to; + vc_caller_From := vc_from; + + vc_reqHostPort := vc_requestUri.components.sip.hostPort; + } // end function f_setHeadersOPTIONS + /** * @desc setting of general and basic Publish header fields in additon to the addresses (To, From, ReqUri) * @param p_cSeq_s -- GitLab From ca32077b8588e03fe27cdc86f3a8a9899b029944 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 4 Aug 2023 11:04:39 +0200 Subject: [PATCH 59/84] TTF T010 FSCOM week#31 session --- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 678 +++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 188 +++++ ttcn/AtsImsIot/out.txt | 1 + 3 files changed, 867 insertions(+) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn create mode 100644 ttcn/AtsImsIot/out.txt diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn new file mode 100644 index 0000000..44d7029 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -0,0 +1,678 @@ +/* + * @author TTF T010 + * @version $Id$ + * @desc This module provides the TP behaviour functions at MI interface + */ +module AtsImsIot_TP_behavior_MI { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_MI all; + import from AtsImsIot_Templates all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_BGCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01 + + function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_BGCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02 + + } // End of group imsInvite + + group ims100Trying { + + /** + * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 100_Trying + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 100_Trying + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MI_BGCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 180_Ringing containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MI_BGCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_SAP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_SAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MI_BGCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MI_BGCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE, + * PChargingVector, + * PChargingFunctionAddresses, + * PPreferredIdentity + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_BGCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + /** + * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the PSAP entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the PSAP entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_PSAP_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the PSAP entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_BYE_01 + + } // End of group imsBye + + group ims200OkBye { + + /** + * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the PSAP entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MI_BGCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_BGCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MI_BGCF_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_BGCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MI_BGCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + +} // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn new file mode 100644 index 0000000..448ec57 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -0,0 +1,188 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MI interface + */ +module AtsImsIot_Templates_MI { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MI_BGCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MI_BGCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_IBCF_SIP_URI)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + }, + pChargingVector := { + fieldName := P_CHARGING_VECTOR_E, + chargeParams := { + *, +// {id := "icid-value", paramValue := ?}, + *, + {id := "orig-ioi", paramValue := ?}, + *, +// complement({id := "term-ioi", paramValue := ?}), + *, + complement({id := "access-network-charging-info", paramValue := ?}), + * + } + }, + pAccessNetworkInfo := omit + } + } + + template (present) Response mw_TP_MI_BGCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_100Trying_01 + + template (present) Response mw_TP_MI_BGCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_180Ringing_01 + + template (present) Response mw_TP_MI_BGCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MI_BGCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MI_BGCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_BGCF_ACK_01 + + template (present) BYE_Request mw_TP_MI_BGCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MW_PCSCF_BYE_01 + + template (present) CANCEL_Request mw_TP_MI_BGCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MI_BGCF_CANCEL_01 + +} // End of module AtsImsIot_Templates_MI diff --git a/ttcn/AtsImsIot/out.txt b/ttcn/AtsImsIot/out.txt new file mode 100644 index 0000000..33edf65 --- /dev/null +++ b/ttcn/AtsImsIot/out.txt @@ -0,0 +1 @@ +make: *** No targets specified and no makefile found. Stop. -- GitLab From 1732cd18ad6737bc7c9f65476c36940073292eb0 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 4 Aug 2023 11:05:00 +0200 Subject: [PATCH 60/84] TTF T010 FSCOM week#31 session --- ttcn/AtsImsIot/out.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 ttcn/AtsImsIot/out.txt diff --git a/ttcn/AtsImsIot/out.txt b/ttcn/AtsImsIot/out.txt deleted file mode 100644 index 33edf65..0000000 --- a/ttcn/AtsImsIot/out.txt +++ /dev/null @@ -1 +0,0 @@ -make: *** No targets specified and no makefile found. Stop. -- GitLab From c4b2f3a90eda0ce1050fb16bbbb97d44b272e33e Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 11 Aug 2023 10:56:14 +0200 Subject: [PATCH 61/84] Titaniozation od LibDiameter and LibSip --- ccsrc/Protocols/Diameter/diameter_layer.cc | 117 +- ccsrc/Protocols/Diameter/diameter_layer.hh | 39 +- ccsrc/Protocols/Diameter/module.mk | 5 +- emergency-iop.code-workspace | 3 + ttcn/patch_lib_diameter_titan/module.mk | 6 +- .../ttcn/LibDiameter_Templates.ttcn | 3849 +++++++++++++++++ .../ttcn/LibDiameter_Types_S6a_AVPs.ttcn | 1162 +++++ .../ttcn/LibDiameter_Types_S9_AVPs.ttcn | 291 ++ .../LibSip_SIPTypesAndValues.ttcn | 2 +- .../patch_lib_sip_titan/LibSip_Templates.ttcn | 4 +- 10 files changed, 5324 insertions(+), 154 deletions(-) create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn create mode 100644 ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn diff --git a/ccsrc/Protocols/Diameter/diameter_layer.cc b/ccsrc/Protocols/Diameter/diameter_layer.cc index cf90816..2f9f5d3 100644 --- a/ccsrc/Protocols/Diameter/diameter_layer.cc +++ b/ccsrc/Protocols/Diameter/diameter_layer.cc @@ -1,5 +1,5 @@ -#include "LibSip_Interface.hh" -#include "LibSip_SIPTypesAndValues.hh" +#include "LibDiameter_Interface.hh" +#include "LibDiameter_TypesAndValues.hh" #include "diameter_layer_factory.hh" @@ -13,105 +13,15 @@ diameter_layer::diameter_layer(const std::string & p_type, const std::string & p params::convert(_params, p_param); } -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::REGISTER__Request& p_diameter_message, params& p_param) { +void diameter_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - // Encode SipMessage + // Encode DiameterMessage OCTETSTRING data; _codec_register.encode(p_diameter_message, data); send_data(data, _params); } -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::INVITE__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_invite.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::ACK__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_ack.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_subscribe.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_message.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_options.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::BYE__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_bye.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::CANCEL__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_cancel.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_notify.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::INFO__Request& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_info.encode(p_diameter_message, data); - send_data(data, _params); -} - -void diameter_layer::sendMsg(const LibDiameter__SIPTypesAndValues::Response& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> diameter_layer::sendMsg: ", p_diameter_message); - - // Encode SipMessage - OCTETSTRING data; - _codec_response.encode(p_diameter_message, data); - send_data(data, _params); -} - void diameter_layer::send_data(OCTETSTRING& data, params& p_params) { loggers::get_instance().log_msg(">>> diameter_layer::send_data: ", data); @@ -122,24 +32,7 @@ void diameter_layer::receive_data(OCTETSTRING& data, params& p_params) { loggers::get_instance().log_msg(">>> diameter_layer::receive_data: ", data); - // Decode SIP message - if ((data[0].get_octet() == 'S') && (data[1].get_octet() == 'I') && (data[2].get_octet() == 'P')) { // SIP... Assume it is a responce - LibDiameter__SIPTypesAndValues::Response diameter_response; - if (_codec_response.decode(data, diameter_response) == -1) { - loggers::get_instance().warning("diameter_layer::receive_data: Failed to decode response data"); - return; - } - // Pass it to the ports - to_all_upper_ports(diameter_response, p_params); - } else { // Assume it is a request - LibDiameter__SIPTypesAndValues::Request diameter_request; - if (_codec_request.decode(data, diameter_request) == -1) { - loggers::get_instance().warning("diameter_layer::receive_data: Failed to decode request data"); - return; - } - // Pass it to the ports - to_all_upper_ports(diameter_request, p_params); - } + // Decode Diameter message } diameter_layer_factory diameter_layer_factory::_f; diff --git a/ccsrc/Protocols/Diameter/diameter_layer.hh b/ccsrc/Protocols/Diameter/diameter_layer.hh index 12638eb..a6409c6 100644 --- a/ccsrc/Protocols/Diameter/diameter_layer.hh +++ b/ccsrc/Protocols/Diameter/diameter_layer.hh @@ -18,19 +18,8 @@ namespace LibDiameter__Interface { class DiameterPort; //! Forward declaration of TITAN class } -namespace LibDiameter__SIPTypesAndValues { - class REGISTER__Request; //! Forward declaration of TITAN class - class INVITE__Request; //! Forward declaration of TITAN class - class ACK__Request; //! Forward declaration of TITAN class - class SUSCRIBE__Request; //! Forward declaration of TITAN class - class MESSAGE__Request; //! Forward declaration of TITAN class - class OPTIONS__Request; //! Forward declaration of TITAN class - class CANCEL__Request; //! Forward declaration of TITAN class - class NOTIFY__Request; //! Forward declaration of TITAN class - class INFO__Request; //! Forward declaration of TITAN class - class BYE__Request; //! Forward declaration of TITAN class - class Resquest; //! Forward declaration of TITAN class - class Response; //! Forward declaration of TITAN class +namespace LibDiameter__TypesAndValues { + class DIAMETER__MSG; //! Forward declaration of TITAN class } class OCTETSTRING; //! Forward declaration of TITAN class @@ -62,28 +51,8 @@ public: //! \publicsection */ virtual ~diameter_layer() { }; - void sendMsg(const LibDiameter__SIPTypesAndValues::REGISTER__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::INVITE__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::ACK__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::BYE__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::CANCEL__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::INFO__Request& p_diameter_message, params& p_param); - - void sendMsg(const LibDiameter__SIPTypesAndValues::Response& p_diameter_message, params& p_param); - + void sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param); + /*! * \virtual * \fn void send_data(OCTETSTRING& data, params& p_params); diff --git a/ccsrc/Protocols/Diameter/module.mk b/ccsrc/Protocols/Diameter/module.mk index d2e13f7..81e106f 100644 --- a/ccsrc/Protocols/Diameter/module.mk +++ b/ccsrc/Protocols/Diameter/module.mk @@ -1,3 +1,6 @@ sources := \ - diameter_layer.cc + diameter_layer.cc \ + diameter_codec.cc \ + avp.cc + includes := . diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index c7c946f..b28e8e8 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -8,6 +8,9 @@ }, { "path": "../../tmp/emergency-iop-ttf010" + }, + { + "path": "../../tmp/vxlte-iop" } ] } \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index 0479d12..b63584c 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -2,9 +2,9 @@ sources := \ ttcn/LibDiameter_PIXITS.ttcn \ ttcn/LibDiameter_Interface.ttcn \ ttcn/LibDiameter_Steps.ttcn \ - ttcn/LibDiameter_Templates.ttcn \ - ttcn/LibDiameter_Types_S6a_AVPs.ttcn3 \ - ttcn/LibDiameter_Types_S9_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn new file mode 100644 index 0000000..abc56bf --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn @@ -0,0 +1,3849 @@ +/** + * @author STF 434 + * @version $Id$ + * @desc This module defines Diameter Templates for message, header, and + * structured types.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Any additions to the templates shall follow the design rules + * and always modify base templates only; + */ + +module LibDiameter_Templates { + + //LibCommon + import from LibCommon_DataStrings all; + import from LibCommon_BasicTypesAndValues all; + + //LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_PIXITS all; + import from LibDiameter_TypesAndValues all; + + group LowerLayerPrimitives { + + template Lower_Layer_Primitive m_llp_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + ll_header := m_llh_listen(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port), + pdu := omit + } + + template Lower_Layer_Primitive m_llp_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := m_llh_connect(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectIndication(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive mw_llp_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + ll_header := mw_llh_connectConfirm(p_ETS_address, p_ETS_port, p_SUT_address, p_SUT_port, p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_disconnect(template integer p_ETS_conn) := { + ll_header := m_llh_disconnect(p_ETS_conn), + pdu := omit + } + + template Lower_Layer_Primitive mw_llp_disconnectIndication(template integer p_ETS_conn) := { + ll_header := mw_llh_disconnectIndication(p_ETS_conn), + pdu := * + } + + template Lower_Layer_Primitive m_llp_dataRequest( template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := m_llh_dataRequest(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Primitive mw_llp_dataIndication(template integer p_ETS_conn, template DIAMETER_MSG p_pdu) := { + ll_header := mw_llh_dataIndication(p_ETS_conn), + pdu := p_pdu + } + + template Lower_Layer_Header m_llh_listen(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port) := { + primitive := LISTEN_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := omit + } + + template Lower_Layer_Header m_llh_connect(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectIndication(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_connectConfirm(template charstring p_ETS_address, template integer p_ETS_port, template charstring p_SUT_address, template integer p_SUT_port, template integer p_ETS_conn) := { + primitive := CONNECT_CONFIRM_E, + transport_used := c_defaultTransportProtocol, + ETS_address := p_ETS_address, + ETS_port := p_ETS_port, + SUT_address := p_SUT_address, + SUT_port := p_SUT_port, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_disconnect(template integer p_ETS_conn) := { + primitive := DISCONNECT_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_disconnectIndication(template integer p_ETS_conn) := { + primitive := DISCONNECT_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header m_llh_dataRequest(template integer p_ETS_conn) := { + primitive := DATA_REQUEST_E, + transport_used := c_defaultTransportProtocol, + ETS_address := omit, + ETS_port := omit, + SUT_address := omit, + SUT_port := omit, + ETS_conn := p_ETS_conn + } + + template Lower_Layer_Header mw_llh_dataIndication(template integer p_ETS_conn) := { + primitive := DATA_INDICATION_E, + transport_used := c_defaultTransportProtocol, + ETS_address := *, + ETS_port := *, + SUT_address := *, + SUT_port := *, + ETS_conn := p_ETS_conn + } + + }//end group LowerLayerPrimitives + + //internal PIXITS if some + group ModuleParameters { + } //end group ModuleParameters + + group SubFields{ + + template Result_Code_Type/*integer*/ m_resultCode_diameterSuccess := DIAMETER_SUCCESS_E/*2001*/; + template Result_Code_Type/*integer*/ mw_resultCode_diameterSuccess := (DIAMETER_SUCCESS_E,DIAMETER_LIMITED_SUCCESS_E/*2000..2999*/); + + template AVP_Type mw_avpType(template (present) AVP_Header p_avpHeader) := { + aVP_Header := p_avpHeader, + aVP_Data := * + } + + } //end group SubFields + + group HeaderFieldTemplates{ + group DiameterHeaderGroup{ + template (value) Command_Flags m_cmdFlagsAns := { + r_bit := '0'B, + p_bit := '0'B, + e_bit := '0'B, + t_bit := '0'B, + reserved_bits := '0000'B + } + + template (value) Command_Flags m_cmdFlagsAnsProx modifies m_cmdFlagsAns:= { + p_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReq modifies m_cmdFlagsAns:= { + r_bit := '1'B + } + + template (value) Command_Flags m_cmdFlagsReqDuplicated modifies m_cmdFlagsAns:= { + r_bit := '1'B, + t_bit := '1'B + } + + template Command_Flags mw_cmdFlags := { + r_bit := ?, + p_bit := ?, + e_bit := ?, + t_bit := ?, + reserved_bits := ? + } + + template (value) DiameterHeader m_diameterHeaderReq_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsReq, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template (value) DiameterHeader m_diameterHeaderReqDuplicated_dummy(Command_Code p_cmdcode, UInt32 p_applid) modifies m_diameterHeaderReq_dummy := { + cmdflags := m_cmdFlagsReqDuplicated + } + + template DiameterHeader mw_diameterHeaderReq_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) DiameterHeader m_diameterHeaderAns_dummy(Command_Code p_cmdcode, UInt32 p_applid) := { + version := c_versionId, + msglen := 0, //Message lenght with AVPs has to be calculated + cmdflags := m_cmdFlagsAns, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := 0, + endid := 0 + } + + template DiameterHeader mw_diameterHeaderAns_dummy(Command_Code p_cmdcode, template (present) UInt32 p_applid) := { + version := c_versionId, + msglen := ?, //Message lenght with AVPs has to be calculated + cmdflags := mw_cmdFlags, //RPETrrrr + cmdcode := p_cmdcode, //Command code + applid := p_applid, //Diameter common messages =0, Vendor specific applications = 16777216 - 4294967294(0x01000000-0xfffffffe) -Gx=16777238,Rx=16777236, 3GPP Cx/Dx=13777216,3GPP Sh=16777217 + hopid := ?, + endid := ? + } + + template (value) AVP_Flags m_avpFlags_Mbit1 := { + v_bit := '0'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_Mbit0 := { + v_bit := '0'B, + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template (value) AVP_Flags m_avpFlags_VMbit1 := { + v_bit := '1'B, + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_any := { + v_bit := ?, + m_bit := ?, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Flags mw_avpFlags_VMbits(template (present) Bit1 p_vbit, template (present) Bit1 p_mbit) := { + v_bit := p_vbit, + m_bit := p_mbit, + p_bit := ?, + reserved_bits := '00000'B + } + + template AVP_Header mw_aVP_Header_any := { + aVP_Code :=?, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_any_Code (template (present) AVP_Code p_avpCode):= { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_any, + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, ?), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '0'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit0Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('0'B, '1'B), + aVP_len := ?, + aVP_vid := * + } + + template AVP_Header mw_aVP_Header_Vbit1Mbit0 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '0'B), + aVP_len := ?, + aVP_vid := ? + } + + //Same template as mw_aVP_Header_VMbit1 but same name style as above templates mw_aVP_Header_VbitXMbitX + template AVP_Header mw_aVP_Header_Vbit1Mbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template AVP_Header mw_aVP_Header_VMbit1 (AVP_Code p_avpCode) := { + aVP_Code := p_avpCode, + aVP_flags := mw_avpFlags_VMbits('1'B, '1'B), + aVP_len := ?, + aVP_vid := ? + } + + template (value) AVP_Header m_aVP_Header_Mbit1(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit1, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + template (value) AVP_Header m_aVP_Header_Mbit0(AVP_Code p_avpCode, AVP_Length p_dataLen:=0) := { + aVP_Code := p_avpCode, + aVP_flags := m_avpFlags_Mbit0, + aVP_len := f_aVP_len(8, p_dataLen, omit), + aVP_vid := omit + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit0(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '0'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (value) AVP_Header m_aVP_HeaderVid_Mbit1(AVP_Code p_avpCode, AVP_Length p_avpDataLen, template (omit) AVP_Vendor_ID p_avpVid := omit) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := '0'B, + reserved_bits := '00000'B}, + aVP_len :=f_aVP_len(8, p_avpDataLen, p_avpVid), // add length of avpData and optional 4 (if Vid is present) + aVP_vid := p_avpVid + } + + /** + * @desc complete AVP header field receive template + * @param p_avpCode specific Code of the AVP parameter + * @param p_avpDataLen additional length caused if AVP data field is present + * @param p_avpVid vendor id if needed + */ + template (present) AVP_Header mw_aVP_HeaderVid_Mbit1( + in AVP_Code p_avpCode, + in template (present) AVP_Length p_avpDataLen := ?, + in template (present) AVP_Vendor_ID p_avpVid) := { + aVP_Code := p_avpCode, + aVP_flags := {v_bit := f_aVPvBit(p_avpVid), + m_bit := '1'B, + p_bit := ?, + reserved_bits := '00000'B}, + aVP_len := p_avpDataLen, + aVP_vid := p_avpVid + } + + function f_aVP_len(AVP_Length p_length8, AVP_Length p_avpDataLen, template AVP_Vendor_ID p_avpVid)return AVP_Length { + var AVP_Length v_sum; + v_sum := p_length8 + p_avpDataLen + f_lengthVid(p_avpVid); + return v_sum + } + + function f_lengthof_AVP(AVP_Header p_header) return AVP_Length { + var AVP_Length v_sum; + v_sum := f_aVP_len (8, p_header.aVP_len, p_header.aVP_vid); + return v_sum + } + + function f_getByteAlignedLength(template AVP_Length p_length) return AVP_Length { + return (valueof(p_length) + ((4-valueof(p_length) mod 4) mod 4)); + + } + + function f_lengthVid(template AVP_Vendor_ID p_avpVid) return AVP_Length { + if(isvalue(p_avpVid)){return 4} else{return 0} + } + + function f_aVPvBit(template AVP_Vendor_ID p_avpVid) return Bit1 { + if(isvalue(p_avpVid)){return '1'B} else{return '0'B} + } + + } //end group DiameterHeaderGroup + + group DummyAVPHeaders{ + + template (value) Origin_Host_AVP m_originHost_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Origin_Realm_AVP m_originRealm_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Vendor_Id_AVP m_vendorId_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Product_Name_AVP m_productName_dummy := { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, 3), + aVP_Data := "abc" + } + + template Disconnect_Cause_AVP m_disconnectCause_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_disconnect_Cause_AVP_Code, 4), + aVP_Data := REBOOTING_E + } + + template Result_Code_AVP m_resultCode_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := DIAMETER_DUMMY_E + } + + template (value) Destination_Host_AVP m_destinationHost_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Destination_Realm_AVP m_destinationRealm_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, 3), + aVP_Data := "abc" + } + + template Termination_Cause_AVP m_terminationCause_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_termination_Cause_AVP_Code, 4), + aVP_Data := DIAMETER_LOGOUT_E + } + + template (value) Session_Id_AVP m_sessionId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, 3), + aVP_Data := "abc" + } + + template (value) Auth_Application_Id_AVP m_authApplicationId_dummy := + { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Application_Id_AVP_Code, 4), + aVP_Data := 0 + } + + template Accounting_Record_Type_AVP m_accounting_Record_Type_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Type_AVP_Code,4), + aVP_Data := EVENT_RECORD_E + } + + template Accounting_Record_Number_AVP m_accounting_Record_Number_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_accounting_Record_Number_AVP_Code,4), + aVP_Data := 0 + } + + template Auth_Session_State_AVP m_auth_Session_State_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := STATE_MAINTAINED_E + } + + template Auth_Session_State_AVP m_auth_Session_State_no_maintained := { + aVP_Header := m_aVP_Header_Mbit1(c_auth_Session_State_AVP_Code,4), + aVP_Data := NO_STATE_MAINTAINED_E + } + + template SIP_AOR_AVP m_sIP_AOR_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_AOR_AVP_Code, 18, omit), + aVP_Data := f_DiameterURI_2_UTF8String(m_diameterURI_dummy) + } + + template (value) DiameterURI m_diameterURI_dummy := + { + scheme := "aaa", + diameterId_FQDN := "www.etsi.org", + portField := omit, + transport := omit, + protocol := omit + } + + template SIP_Visited_Network_Id_AVP m_sIP_Visited_Network_Id_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Visited_Network_Id_AVP_Code, 6, omit), + aVP_Data := "abcabc" + } + + template SIP_Digest_Authenticate_AVP m_sIP_Digest_Authenticate( + in template (value) Digest_Realm_AVP p_digest_Realm + ) := { + aVP_Header := m_aVP_Header_Mbit1(c_sIP_Digest_Authenticate_AVP_Code), + digest_Realm := p_digest_Realm, + digest_Algorithm := omit, + digest_QoP := omit, + digest_HA1 := omit, + aVP_Type := omit + } + + template SIP_User_Authorization_Type_AVP m_sIP_User_Authorization_Type( + in template (value) SIP_User_Auth_Ty_Type p_aVP_Data := REGISTRATION_E + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Authorization_Type_AVP_Code, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_User_Data_Already_Available_AVP m_sIP_User_Data_Already_Available_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Already_Available_AVP_Code, 4, omit), + aVP_Data := USER_DATA_NOT_AVAILABLE_E + } + + template SIP_Server_Assignment_Type_AVP m_sIP_Server_Assignment_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Server_Assignment_Type_AVP_Code, 4, omit), + aVP_Data := NO_ASSIGNMENT_E + } + + template SIP_User_Data_AVP m_sIP_User_Data_dummy := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_AVP_Code, 0, omit), + sIP_User_Data_Type := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Type_AVP_Code, 3 ,omit), + aVP_Data := "abc" + }, + sIP_User_Data_Contents := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_User_Data_Contents_AVP_Code, 1, omit), + aVP_Data := '00'O + }, + aVP_Type := omit + } + + template SIP_Accounting_Information_AVP m_sIP_Accounting_Information_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Accounting_Information_AVP_Code, 0, omit), + sIP_Accounting_Server_URI := omit, + sIP_Credit_Control_Server_URI := omit, + aVP_Type := omit + } + + template SIP_Method_AVP m_sIP_Method_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Method_AVP_Code, 3, omit), + aVP_Data := "sip" + } + + template SIP_Deregistration_Reason_AVP m_sIP_Deregistration_Reason_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Deregistration_Reason_AVP_Code, 8, omit), + sIP_Reason_Code_AVP := m_sIP_Reason_Code_dummy, + sIP_Reason_Info_AVP := omit, + aVP_Type := omit + } + + template SIP_Reason_Code_AVP m_sIP_Reason_Code_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Reason_Code_AVP_Code, 4, omit), + aVP_Data := PERMANENT_TERMINATION_E + } + + template User_Name_AVP m_user_Name_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, 3), + aVP_Data := "dbo" + } + + template User_Identity_AVP m_user_Identity_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Identity_AVP_Code, 0, c_vendId3gpp), + public_Identity_AVP := omit, + mSISDN_AVP := omit, + aVP_Type := omit + } + + template User_Data_AVP m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_AVP_Code, 1, c_vendId3gpp), + aVP_Data := '00'O + } + + template CC_Request_Type_AVP m_cC_Request_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Type_AVP_Code,4, omit), + aVP_Data := INITIAL_REQUEST_E + } + + template CC_Request_Number_AVP m_cC_Request_Number_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_cC_Request_Number_AVP_Code,4, omit), + aVP_Data := 0 + } + + template Data_Reference_AVP m_data_Reference_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_data_Reference_AVP_Code, 4, c_vendId3gpp), + aVP_Data := REPOSITORY_DATA_E + } + + template (value) Server_Name_AVP m_server_name_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_server_Name_AVP_Code, 4, c_vendId3gpp), + aVP_Data := "sip_url" + } + + template Service_Indication_AVP m_service_Indication_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_service_Indication_AVP_Code, 4, c_vendId3gpp), + aVP_Data := '00'O + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code), + vendor_Id := omit, + auth_Application_Id := omit, + acct_Application_Id := omit + } + + template Re_Auth_Request_Type_AVP m_re_Auth_Request_dummy := { + aVP_Header := m_aVP_Header_Mbit1(c_re_Auth_Request_Type_AVP_Code, 4), + aVP_Data := AUTHORIZE_ONLY_E + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := 1 + } + + template SIP_Auth_Data_Item_RFC_AVP m_sIPAuthDataItem_dummy_RFC := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC, 1, c_vendId3gpp), + sIP_Authentication_Scheme := m_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_unknown_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := UNKNOWN_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_nass_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := NASS_BUNDLE_E + } + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_giga_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := GIBA_E + } + } + + template Subs_Req_Type_AVP m_subs_Req_Type_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_subs_Req_Type_AVP_Code, 4, c_vendId3gpp), + aVP_Data := SUBSCRIBE_E + } + + } //end group DummyAVPHeaders + + group SpecificAVPHeaders { + + template Session_Id_AVP m_sessionId(UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_session_Id_AVP_Code, f_getUTF8StringLength(p_avpData)), + aVP_Data := p_avpData + } + + template Auth_Application_Id_AVP m_authApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_auth_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP m_acctApplicationId(UInt32 p_avpData):= + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_acct_Application_Id_AVP_Code, 4, omit), + aVP_Data := p_avpData + } + + template Disconnect_Cause_AVP m_disconnectCause(Disconnect_Cause_Type p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_disconnect_Cause_AVP_Code, 4, omit ), + aVP_Data := p_aVP_Data + } + + template Host_IP_Address_AVP m_hostIPAddress(Address p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_host_IP_Address_AVP_Code, f_IPAdressLengthUInt24()), + aVP_Data := p_avpData + } + + template Origin_Host_AVP m_originHost(template(value) charstring p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Origin_Realm_AVP m_originRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_origin_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Host_AVP m_destinationHost(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Host_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Destination_Realm_AVP m_destinationRealm(template(value) charstring p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit1(c_destination_Realm_AVP_Code, f_getCharStringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Product_Name_AVP m_productName(template(value) UTF8String p_avpData) := + { + aVP_Header := m_aVP_Header_Mbit0(c_product_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template Result_Code_AVP m_resultCode(template (value) /*integer*/Result_Code_Type p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_result_Code_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_supportedVendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_supported_Vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Id_AVP m_vendorId(template(value) UInt32 p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Id_AVP_Code, 4), + aVP_Data := p_avpData + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Appl_Id(UInt32 p_authApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)}, + acct_Application_Id := omit + } + + template Vendor_Specific_Appl_Id_AVP m_vendor_Specific_Acct_Id(UInt32 p_acctApplicationId) := { + aVP_Header := m_aVP_Header_Mbit1(c_vendor_Specific_Appl_Id_AVP_Code, 24), + vendor_Id := {m_vendorId(c_vendId3gpp)}, + auth_Application_Id := omit, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + + template Auth_Application_Id_AVP mw_authApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_auth_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template Acct_Application_Id_AVP mw_acctApplicationId(UInt32 p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_acct_Application_Id_AVP_Code), + aVP_Data := p_avpData + } + + template QoS_Information_AVP mw_qosInformation_QosInfo_ARP := { + aVP_Header := mw_aVP_Header_VMbit1(c_qoS_Information_AVP_Code), // + qoS_Class_Identifier :=?, + max_Requested_Bandwidth_UL :=*, + max_Requested_Bandwidth_DL :=*, + guaranteed_Bitrate_UL :=*, + guaranteed_Bitrate_DL :=*, + bearer_Identifier :=*, + allocation_Retention_Priority :=?, + aPN_Aggregate_Max_Bitrate_UL :=*, + aPN_Aggregate_Max_Bitrate_DL :=*, + aVP_Type:=* + } + + template Result_Code_AVP mw_resultCode(template (present)/*integer*/Result_Code_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_result_Code_AVP_Code), + aVP_Data := p_avpData + } +// +// template Experimental_Result_AVP mw_experimentalResult(template (present)/*integer*/Experimental_Result_Code_AVP p_experimental_Result_Code) := { +// aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_AVP_Code), +// vendor_Id := ?, +// experimental_Result_Code := p_experimental_Result_Code +// } + + template Experimental_Result_Code_AVP mw_experimentalResultCode(template (present)/*integer*/Experimental_Result_Type p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_experimental_Result_Code_AVP_Code), + aVP_Data := p_avpData + } + + template Session_Release_Cause_AVP mw_sessReleaseCause(template (present) Session_Release_Cause p_avpData) := + { + aVP_Header := mw_aVP_Header_VMbit1(c_session_Release_Cause_AVP_Code), + aVP_Data := p_avpData + } + + template Supported_Features_AVP mw_supportedFeatures_dummy := { + aVP_Header := mw_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, ?, c_vendId3gpp), + vendor_Id := ?, + feature_list_Id := *, + feature_list := ?, + aVP_Data := * + } + + template Supported_Features_AVP m_supportedFeatures ( + template Vendor_Id_AVP p_vendorId, + template Feature_List_ID_AVP p_feature_list_Id, + template (value) Feature_List_AVP p_feature_list, + template Supported_Features_AVP.aVP_Data p_aVP_Data + ):= { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_supported_Features_AVP_Code, 1, c_vendId3gpp), + vendor_Id := m_vendorId(c_vendId3gpp), + feature_list_Id := p_feature_list_Id, + feature_list := p_feature_list, + aVP_Data := p_aVP_Data + } + + template Feature_List_AVP m_featureList(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Feature_List_ID_AVP m_featureListId(template (present) UInt32 p_avpData) := + { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_feature_List_ID_AVP_Code, 1, c_vendId3gpp), + aVP_Data := p_avpData + } + + template Failed_AVP mw_failed(template (present) Failed_AVP.aVP p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_failed_AVP_Code), + aVP := p_avpData + } + + template SIP_Number_Auth_Items_AVP m_sIPNumberAuthItems_RFC (template (value) UInt32 p_avpData) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC, 4, omit), + aVP_Data := p_avpData + } + + template SIP_Authentication_Scheme_AVP m_sIPAuthenticationScheme_RFC(template (value) SIP_Auth_Schm_Type p_SIPAuthSchmType) := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC, 4, omit), + aVP_Data := p_SIPAuthSchmType + } + } + + template User_Name_AVP m_userName(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_user_Name_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData + } + + template SIP_Item_Number_AVP m_sIPItemNumber_RFC(template (value) UInt32 p_aVP_Data) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Item_Number_AVP_Code_RFC, 4, omit), + aVP_Data := p_aVP_Data + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_sIP_Authorization_AVP_Code_RFC, 4, omit), + digest_Username := p_digest_Username, + digest_Realm := p_digestRealm, + digest_Nonce := p_digestNonce, + digest_URI := p_digestUri, + digest_Response := p_digest_Response, + digest_Algorithm := omit, + digest_CNonce := omit, + digest_Opaque := omit, + digest_QoP := omit, + digest_Nonce_Count := omit, + digest_Method := omit, + digest_Entity_Body_Hash := omit, + digest_Auth_Param := omit, + aVP_Type := omit + } + + template SIP_Authorization_RFC_AVP m_sIP_Authorization_digest_aka_RFC( + template (value) Digest_Username_AVP p_digest_Username, + template (value) Digest_Realm_AVP p_digestRealm, + template (value) Digest_Nonce_AVP p_digestNonce, + template (value) Digest_URI_AVP p_digestUri, + template (value) Digest_Response_AVP p_digest_Response + ) modifies m_sIP_Authorization_RFC := { + // TODO How to pass RAND + AUX + } + + template Digest_Username_AVP m_digestUsername(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Username_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Username_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Realm_AVP m_digestRealm(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Nonce_AVP m_digestNonce(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Realm_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Realm_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_URI_AVP m_digestUri(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_URI_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_URI_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template Digest_Response_AVP m_digestResponse(template (value) UTF8String p_avpData) := { + aVP_Header := m_aVP_Header_Mbit1(c_digest_Response_AVP_Code, f_getUTF8StringLength(valueof(p_avpData))), + aVP_Data := p_avpData +// Type := c_digest_Response_AVP_Code, +// Length := f_getUTF8StringLength(valueof(p_text)), +// Text := p_text + } + + template User_Name_AVP mw_userName(template (present) UTF8String p_avpData) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Name_AVP_Code), + aVP_Data := p_avpData + } + + + template User_Data_AVP m_user_Data_shData (octetstring p_ud) modifies m_user_Data_dummy := { + aVP_Header := m_aVP_HeaderVid_Mbit1(c_user_Data_Sh_AVP_Code, lengthof(p_ud), c_vendId3gpp), + aVP_Data := p_ud + } + + } //end group SpecificAVPHeaders + } //end group HeaderFieldTemplates + + /** Message templates for CER,CEA, DWR, DWA, AAA, AAR, .... methods */ + group MessageTemplates { + + group dummy_templates { + + template UNKNOWN_MSG mw_UNKNOWN_dummy := { + header := ?, + aVP_Type := * + } + group dummy_request_templates_send { + + template (value) AAR_MSG m_AAR_dummy := + { + header := m_diameterHeaderReq_dummy(AAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAR_Body := m_AAR_Body_dummy + } + + template (value) AAR_Body_AVP m_AAR_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + iP_Domain := omit, + af_Application_Id := omit, + media_Component_Description := omit, + service_Info_Status := omit, + af_Charging_Identifier := omit, + sip_Forking_Indication := omit, + specific_Action := omit, + subscription_Id := omit, + //oC_Supported_Features := omit, + supported_Features := omit, + reservation_Priority := omit, + framed_IP_Address := omit, + framed_IPv6_Address := omit, + called_Station_Id := omit, + service_URN := omit, + sponsored_Connectivity_Data := omit, + mps_Identifier := omit, + gcs_Identifier := omit, + mcptt_Identifier := omit, + mCVideo_Identifier := omit, + iMS_Content_Identifier := omit, + iMS_Content_Type := omit, + rx_Request_Type := omit, + required_Access_Info := omit, + aF_Requested_Data := omit, + //reference_Id := omit, + pre_emption_Control_Info := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) ACR_MSG m_ACR_dummy := { + header := m_diameterHeaderReq_dummy(ACR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCR_Body := m_ACR_Body_dummy + } + + template (omit) ACR_Body_AVP m_ACR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + supported_Features := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + route_Record := omit, + service_Context_Id := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) ASR_MSG m_ASR_dummy := { + header := m_diameterHeaderReq_dummy(ASR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSR_Body := m_ASR_Body_dummy + } + + template (value) ASR_Body_AVP m_ASR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + abort_cause := omit, + user_Name := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) CCR_MSG m_CCR_dummy := { + header := m_diameterHeaderReq_dummy(CCR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCR_Body := m_CCR_Body_dummy + } + + template (omit) CCR_Body_AVP m_CCR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + service_Context_Id := omit, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + destination_Host := omit, + user_Name := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + subscription_Id := omit, + service_Identifier := omit, + termination_Cause := omit, + requested_Service_Unit := omit, + requested_Action := omit, + used_Service_Unit := omit, + aoc_Request_Type_AVP := omit, + multiple_Services_Indicator := omit, + multiple_Services_Credit_Control := omit, + service_Parameter_Info := omit, + cC_Correlation_Id := omit, + supported_Features := omit, + network_Request_Support := omit, + packet_Filter_Information := omit, + packet_Filter_Operation := omit, + bearer_Identifier := omit, + bearer_Operation := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + iP_CAN_Type := omit, + threeGPP_RAT_Type := omit, + rat_Type := omit, + qoS_Information := omit, + qoS_Negotiation := omit, + qoS_Upgrade := omit, + default_EPS_Bearer_QoS := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + called_Station_Id := omit, + pDN_Connection_ID := omit, + bearer_Usage := omit, + online := omit, + offline := omit, + tFT_Packet_Filter_Information := omit, + charging_Rule_Report := omit, + event_Trigger := omit, + event_Report_Indication := omit, + access_Network_Charging_Address := omit, + access_Network_Charging_Identifier_Gx := omit, + coA_Information := omit, + usage_Monitoring_Information := omit, + routing_Rule_Install := omit, + routing_Rule_Remove := omit, + maximum_Bandwidth := omit, + logical_Access_ID := omit, + physical_Access_ID := omit, + session_Linking_Indicator := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + threeGPP2_BSID := omit, + multiple_BBERF_Action := omit, + user_CSG_Information := omit, + user_Equipment_Info := omit, + proxy_Info := omit, + route_Record := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CER_MSG m_CER_dummy := { + header := m_diameterHeaderReq_dummy(CER_E, c_applIdCommonMsg), + cER_Body := m_CER_Body_dummy + } + + template (value) CER_Body_AVP m_CER_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWR_MSG m_DWR_dummy := { + header := m_diameterHeaderReq_dummy(DWR_E, c_applIdCommonMsg), + dWR_Body := m_DWR_Body_dummy + } + + template (value) DWR_Body_AVP m_DWR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPR_MSG m_DPR_dummy := { + header := m_diameterHeaderReq_dummy(DPR_E, c_applIdCommonMsg), + dPR_Body := m_DPR_Body_dummy + } + + template (value) DPR_Body_AVP m_DPR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + disconnect_Cause := m_disconnectCause_dummy, + aVP_Type := omit + } + + template (value) LIR_MSG m_LIR_dummy := { + header := m_diameterHeaderReq_dummy(LIR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIR_Body := m_LIR_Body_dummy + } + + template (value) LIR_Body_AVP m_LIR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + originating_Request := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + user_Authorization_Type := omit, //only TS129 229 + session_Priority := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAR_MSG m_MAR_dummy := { + header := m_diameterHeaderReq_dummy(MAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAR_Body := m_MAR_Body_dummy + } + + template (value) MAR_Body_AVP m_MAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + sIP_Method := m_sIP_Method_dummy, + destination_Host := omit, + user_Name := omit, + supported_Features := omit, //only TS129 229 + public_Identity := omit, //required only in TS129 229 + sIP_Server_URI := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + server_Name := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNR_MSG m_PNR_dummy := { + header := m_diameterHeaderReq_dummy(PNR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNR_Body := m_PNR_Body_dummy + } + + template (value) PNR_Body_AVP m_PNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPR_MSG m_PPR_dummy := { + header := m_diameterHeaderReq_dummy(PPR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPR_Body := m_PPR_Body_dummy + } + + template (value) PPR_Body_AVP m_PPR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := m_user_Name_dummy, + sIP_User_Data := omit, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + destination_Host := m_destinationHost_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + sIP_Auth_Data_Item := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUR_MSG m_PUR_dummy := { + header := m_diameterHeaderReq_dummy(PUR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUR_Body := m_PUR_Body_dummy + } + + template (value) PUR_Body_AVP m_PUR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + data_Reference := {m_data_Reference_dummy}, + user_Data := m_user_Data_dummy, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAR_MSG m_RAR_dummy := { + header := m_diameterHeaderReq_dummy(RAR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAR_Body := m_RAR_Body_dummy + } + + template (value) RAR_Body_AVP m_RAR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + destination_Host := m_destinationHost_dummy, + auth_Application_Id := m_authApplicationId_dummy, + specific_Action := omit, + re_Auth_Request_Type := m_re_Auth_Request_dummy, + user_Name := omit, + acc_nc_ident := omit, + acc_nc_addr := omit, + flows := omit, + subscription_Id := omit, + abort_Cause := omit, + ip_Can := omit, + rat_Type := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + class := omit, + session_Release_Cause := omit, + event_Trigger := omit, + event_Report_Indication := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + default_EPS_Bearer_QoS := omit, + qoS_Information := omit, + revalidation_Time := omit, + usage_Monitoring_Information := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + multiple_BBERF_Action := omit, + proxy_Info := omit, + route_Record := omit, + g_s_u_Pool_Identifier := omit, + service_Identifier := omit, + rating_Group := omit, + aVP_Type := omit + } + + template (value) RTR_MSG m_RTR_dummy := { + header := m_diameterHeaderReq_dummy(RTR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTR_Body := m_RTR_Body_dummy + } + + template (value) RTR_Body_AVP m_RTR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := m_destinationHost_dummy, + sIP_Deregistration_Reason := m_sIP_Deregistration_Reason_dummy, + destination_Realm := m_destinationRealm_dummy, + user_Name := omit, + sIP_AOR := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + public_Identity := omit, //only TS129 229 + deregistration_Reason := omit, //required only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAR_MSG m_SAR_dummy := { + header := m_diameterHeaderReq_dummy(SAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAR_Body := m_SAR_Body_dummy + } + + template (value) SAR_Body_AVP m_SAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_Server_Assignment_Type := m_sIP_Server_Assignment_Type_dummy, + sIP_User_Data_Already_Available := m_sIP_User_Data_Already_Available_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Server_URI := omit, + sIP_Supported_User_Data_Type := omit, + sIP_AOR := omit, + supported_Features := omit, //only in TS129 229 + public_Identity := omit, //only in TS129 229 + wildcarded_Public_Identity := omit, //only in TS129 229 + server_Name := omit, //required only in TS129 229 + server_Assignment_Type := omit, //required only in TS129 229 + user_Data_Already_Available := omit, //required only in TS129 229 + sCSCF_Restoration_Info := omit, //only in TS129 229 + multiple_Registration_Indication := omit,//only in TS129 229 + session_Priority := omit, //only in TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNR_MSG m_SNR_dummy := { + header := m_diameterHeaderReq_dummy(SNR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNR_Body := m_SNR_Body_dummy + } + + template (value) SNR_Body_AVP m_SNR_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + service_Indication := omit, + send_Data_Indication := omit, + server_Name := omit, + subs_Req_Type := m_subs_Req_Type_dummy, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + expiry_Time := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit, + user_Name := omit + } + + template (value) STR_MSG m_STR_dummy := + { + header := m_diameterHeaderReq_dummy(STR_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTR_Body := m_STR_Body_dummy + } + + template (value) STR_Body_AVP m_STR_Body_dummy := + { + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + termination_Cause := m_terminationCause_dummy, + user_Name := omit, + destination_Host := omit, + class := omit, + origin_State_Id := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UAR_MSG m_UAR_dummy := + { + header := m_diameterHeaderReq_dummy(UAR_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAR_Body := m_UAR_Body_dummy + } + + template (value) UAR_Body_AVP m_UAR_Body_dummy := + { + vendor_Specific_Application_Id := omit,//required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Realm := m_destinationRealm_dummy, + sIP_AOR := m_sIP_AOR_dummy, + destination_Host := omit, + user_Name := omit, + sIP_Visited_Network_Id := m_sIP_Visited_Network_Id_dummy, + sIP_User_Authorization_Type := m_sIP_User_Authorization_Type, + supported_Features := omit, + public_Identity := omit, + visited_Network_Identifier := omit, + user_Authorization_Type := omit, + uAR_Flags := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDR_MSG m_UDR_dummy := { + header := m_diameterHeaderReq_dummy(UDR_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDR_Body := m_UDR_Body_dummy + } + + template (value) UDR_Body_AVP m_UDR_Body_dummy := + { + vendor_Specific_Application_Id := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + destination_Host := omit, + destination_Realm := m_destinationRealm_dummy, + supported_Features := omit, + user_Identity := m_user_Identity_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + server_Name := omit, + service_Indication := omit, + data_Reference := {m_data_Reference_dummy}, + identity_Set := omit, + requested_Domain := omit, + current_Location := omit, + dSAI_Tag := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + }//end group dummy_request_templates_send + group dummy_request_templates_receive { + + template AAR_MSG mw_AAR_dummy := + { + header := mw_diameterHeaderReq_dummy(AAR_E, ?), + session_Id := ?, + aAR_Body := mw_AAR_Body_dummy + } + + template AAR_Body_AVP mw_AAR_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := *, + iP_Domain := *, + af_Application_Id := *, + media_Component_Description := *, + service_Info_Status := *, + af_Charging_Identifier := *, + sip_Forking_Indication := *, + specific_Action := *, + subscription_Id := *, + //oC_Supported_Features := *, + supported_Features := *, + reservation_Priority := *, + framed_IP_Address := *, + framed_IPv6_Address := *, + called_Station_Id := *, + service_URN := *, + sponsored_Connectivity_Data := *, + mps_Identifier := *, + gcs_Identifier := *, + mcptt_Identifier := *, + mCVideo_Identifier := *, + iMS_Content_Identifier := *, + iMS_Content_Type := *, + rx_Request_Type := *, + required_Access_Info := *, + aF_Requested_Data := *, + //reference_Id := omit, + pre_emption_Control_Info := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template ACR_MSG mw_ACR_dummy := { + header := mw_diameterHeaderReq_dummy(ACR_E, ?), + session_Id := ?, + aCR_Body := mw_ACR_Body_dummy + } + + template ACR_Body_AVP mw_ACR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + supported_Features := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + route_Record := *, + service_Context_Id := *, + service_Information := *, + aVP_Type := * + } + + template ASR_MSG mw_ASR_dummy := { + header := mw_diameterHeaderReq_dummy(ASR_E, ?), + session_Id := ?, + aSR_Body := mw_ASR_Body_dummy + } + + template ASR_Body_AVP mw_ASR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + abort_cause := *, + user_Name := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template CCR_MSG mw_CCR_dummy := { + header := mw_diameterHeaderReq_dummy(CCR_E, ?), + session_Id := ?, + cCR_Body := mw_CCR_Body_dummy + } + + template CCR_Body_AVP mw_CCR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + service_Context_Id := *, + cC_Request_Type := ?, + cC_Request_Number := ?, + destination_Host := *, + user_Name := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + subscription_Id := *, + service_Identifier := *, + termination_Cause := *, + requested_Service_Unit := *, + requested_Action := *, + used_Service_Unit := *, + aoc_Request_Type_AVP := *, + multiple_Services_Indicator := *, + multiple_Services_Credit_Control := *, + service_Parameter_Info := *, + cC_Correlation_Id := *, + supported_Features := *, + network_Request_Support := *, + packet_Filter_Information := *, + packet_Filter_Operation := *, + bearer_Identifier := *, + bearer_Operation := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + iP_CAN_Type := *, + threeGPP_RAT_Type := *, + rat_Type := *, + qoS_Information := *, + qoS_Negotiation := *, + qoS_Upgrade := *, + default_EPS_Bearer_QoS := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + called_Station_Id := *, + pDN_Connection_ID := *, + bearer_Usage := *, + online := *, + offline := *, + tFT_Packet_Filter_Information := *, + charging_Rule_Report := *, + event_Trigger := *, + event_Report_Indication := *, + access_Network_Charging_Address := *, + access_Network_Charging_Identifier_Gx := *, + coA_Information := *, + usage_Monitoring_Information := *, + routing_Rule_Install := *, + routing_Rule_Remove := *, + maximum_Bandwidth := *, + logical_Access_ID := *, + physical_Access_ID := *, + session_Linking_Indicator := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + threeGPP2_BSID := *, + multiple_BBERF_Action := *, + user_CSG_Information := *, + user_Equipment_Info := *, + proxy_Info := *, + route_Record := *, + service_Information := *, + aVP_Type := * + } + + template CER_MSG mw_CER_dummy := { + header := mw_diameterHeaderReq_dummy(CER_E, ?), + cER_Body := mw_CER_Body_dummy + } + + template CER_Body_AVP mw_CER_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWR_MSG mw_DWR_dummy := { + header := mw_diameterHeaderReq_dummy(DWR_E, ?), + dWR_Body := mw_DWR_Body_dummy + } + + template DWR_Body_AVP mw_DWR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + origin_State_Id := *, + aVP_Type := * + } + + template DPR_MSG mw_DPR_dummy := { + header := mw_diameterHeaderReq_dummy(DPR_E, ?), + dPR_Body := mw_DPR_Body_dummy + } + + template DPR_Body_AVP mw_DPR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + disconnect_Cause := ?, + aVP_Type := * + } + + template LIR_MSG mw_LIR_dummy := { + header := mw_diameterHeaderReq_dummy(LIR_E, ?), + session_Id := ?, + lIR_Body := mw_LIR_Body_dummy + } + + template LIR_Body_AVP mw_LIR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + originating_Request := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //required only in TS129 229 + user_Authorization_Type := *, //only TS129 229 + session_Priority := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAR_MSG mw_MAR_dummy := { + header := mw_diameterHeaderReq_dummy(MAR_E, ?), + session_Id := ?, + mAR_Body := mw_MAR_Body_dummy + } + + template MAR_Body_AVP mw_MAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + sIP_Method := ?, + destination_Host := *, + user_Name := *, + supported_Features := *,//only TS129 229 + public_Identity := *, //required only in TS129 229 + sIP_Server_URI := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + server_Name := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNR_MSG mw_PNR_dummy := { + header := mw_diameterHeaderReq_dummy(PNR_E, ?), + session_Id := ?, + pNR_Body := mw_PNR_Body_dummy + } + + template PNR_Body_AVP mw_PNR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPR_MSG mw_PPR_dummy := { + header := mw_diameterHeaderReq_dummy(PPR_E, ?), + session_Id := ?, + pPR_Body := mw_PPR_Body_dummy + } + + template PPR_Body_AVP mw_PPR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + user_Name := ?, + sIP_User_Data := *, + sIP_Accounting_Information := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + sIP_Auth_Data_Item := *, //only TS129 229 + proxy_Info := ?, + route_Record := ?, + aVP_Type := ? + } + + template PUR_MSG mw_PUR_dummy := { + header := mw_diameterHeaderReq_dummy(PUR_E, ?), + session_Id := ?, + pUR_Body := mw_PUR_Body_dummy + } + + template PUR_Body_AVP mw_PUR_Body_dummy := + { + vendor_Specific_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + data_Reference := ?, + user_Data := ?, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAR_MSG mw_RAR_dummy := { + header := mw_diameterHeaderReq_dummy(RAR_E, ?), + session_Id := ?, + rAR_Body := mw_RAR_Body_dummy + } + + template RAR_Body_AVP mw_RAR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + destination_Host := ?, + auth_Application_Id := ?, + specific_Action := *, + re_Auth_Request_Type := ?, + user_Name := *, + acc_nc_ident := *, + acc_nc_addr := *, + flows := *, + subscription_Id := *, + abort_Cause := *, + ip_Can := *, + rat_Type := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + class := *, + session_Release_Cause := *, + event_Trigger := *, + event_Report_Indication := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + default_EPS_Bearer_QoS := *, + qoS_Information := *, + revalidation_Time := *, + usage_Monitoring_Information := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + multiple_BBERF_Action := *, + proxy_Info := *, + route_Record := *, + g_s_u_Pool_Identifier := *, + service_Identifier := *, + rating_Group := *, + aVP_Type := * + } + + template RTR_MSG mw_RTR_dummy := { + header := mw_diameterHeaderReq_dummy(RTR_E, ?), + session_Id := ?, + rTR_Body := mw_RTR_Body_dummy + } + + template RTR_Body_AVP mw_RTR_Body_dummy := + { + vendor_Specific_Application_Id := *,//required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := ?, + destination_Realm := ?, + sIP_Deregistration_Reason := ?, + user_Name := *, + sIP_AOR := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + public_Identity := *, //only TS129 229 + deregistration_Reason := *, //required only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAR_MSG mw_SAR_dummy := { + header := mw_diameterHeaderReq_dummy(SAR_E, ?), + session_Id := ?, + sAR_Body := mw_SAR_Body_dummy + } + + template SAR_Body_AVP mw_SAR_Body_dummy := + { + vendor_Specific_Application_Id :=*, //required only in TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_Server_Assignment_Type := ?, + sIP_User_Data_Already_Available := ?, + destination_Host := *, + user_Name := *, + sIP_Server_URI := *, + sIP_Supported_User_Data_Type := *, + sIP_AOR := *, + supported_Features := *, //only in TS129 229 + public_Identity := *, //only in TS129 229 + wildcarded_Public_Identity := *, //only in TS129 229 + server_Name := *, //required only in TS129 229 + server_Assignment_Type := *, //required only in TS129 229 + user_Data_Already_Available := *, //required only in TS129 229 + sCSCF_Restoration_Info := *, //only in TS129 229 + multiple_Registration_Indication := *,//only in TS129 229 + session_Priority := *, //only in TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNR_MSG mw_SNR_dummy := { + header := mw_diameterHeaderReq_dummy(SNR_E, ?), + session_Id := ?, + sNR_Body := mw_SNR_Body_dummy + } + + template SNR_Body_AVP mw_SNR_Body_dummy := + { + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + service_Indication := *, + send_Data_Indication := *, + server_Name := *, + subs_Req_Type := ?, + data_Reference := ?, + identity_Set := *, + expiry_Time := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := *, + user_Name := * + } + + template STR_MSG mw_STR_dummy := + { + header := mw_diameterHeaderReq_dummy(STR_E, ?), + session_Id := ?, + sTR_Body := mw_STR_Body_dummy + } + + template STR_Body_AVP mw_STR_Body_dummy := + { + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + auth_Application_Id := ?, + termination_Cause := ?, + user_Name := *, + destination_Host := *, + class := *, + origin_State_Id := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UAR_MSG mw_UAR_dummy := { + header := mw_diameterHeaderReq_dummy(UAR_E, ?), + session_Id := ?, + uAR_Body := mw_UAR_Body_dummy + } + + template UAR_Body_AVP mw_UAR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Realm := ?, + sIP_AOR := ?, + destination_Host := *, + user_Name := *, + sIP_Visited_Network_Id := ?, + sIP_User_Authorization_Type := ?, + supported_Features := *, + public_Identity := *, + visited_Network_Identifier := *, + user_Authorization_Type := *, + uAR_Flags := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDR_MSG mw_UDR_dummy := { + header := mw_diameterHeaderReq_dummy(UDR_E, ?), + session_Id := ?, + uDR_Body := mw_UDR_Body_dummy + } + + template UDR_Body_AVP mw_UDR_Body_dummy := + { + vendor_Specific_Application_Id := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + destination_Host := *, + destination_Realm := ?, + supported_Features := *, + user_Identity := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + server_Name := *, + service_Indication := *, + data_Reference := ?, + identity_Set := *, + requested_Domain := *, + current_Location := *, + dSAI_Tag := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_request_templates_receive + group dummy_answer_templates_send { + + template (value) AAA_MSG m_AAA_dummy := + { + header := m_diameterHeaderAns_dummy(AAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aAA_Body := m_AAA_Body_dummy + } + + template (value) AAA_Body_AVP m_AAA_Body_dummy := + { + //dRMP := omit, + auth_Application_Id := m_authApplicationId_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := omit, + access_network_charging_Identifier := omit, + access_network_charging_address := omit, + acceptable_service_info := omit, + aN_GW_Address := omit, + //aN_Trusted := omit, + service_Authorization_Info := omit, + ip_Can_Type := omit, + //netLoc_Access_Support := omit, + rat_Type := omit, + flows := omit, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := omit, + subscription_Id_AVP := omit, + user_Equipment_Info := omit, + threeGPP_SGSN_MCC_MNC := omit, + class_ := omit, + user_Name := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + retry_Interval := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + // load:= omit, + aVP_Type := omit + } + + template (value) ACA_MSG m_ACA_dummy := { + header := m_diameterHeaderAns_dummy(ACA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aCA_Body := m_ACA_Body_dummy + } + + template (omit) ACA_Body_AVP m_ACA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + accounting_Record_Type := m_accounting_Record_Type_dummy, + accounting_Record_Number := m_accounting_Record_Number_dummy, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + user_Name := omit, + accounting_Sub_Session_Id := omit, + acct_Session_Id := omit, + acct_Multi_Session_Id := omit, + error_Reporting_Host := omit, + acct_Interim_Interval := omit, + accounting_Realtime_Required := omit, + origin_State_Id := omit, + event_Timestamp := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) ASA_MSG m_ASA_dummy := { + header := m_diameterHeaderAns_dummy(ASA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + aSA_Body := m_ASA_Body_dummy + } + + template (value) ASA_Body_AVP m_ASA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + origin_State_Id := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) CCA_MSG m_CCA_dummy := { + header := m_diameterHeaderAns_dummy(CCA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + cCA_Body := m_CCA_Body_dummy + } + + template (omit) CCA_Body_AVP m_CCA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + auth_Application_Id := m_authApplicationId_dummy, + cC_Request_Type := m_cC_Request_Type_dummy, + cC_Request_Number := m_cC_Request_Number_dummy, + user_Name := omit, + cC_Session_Failover := omit, + cC_Sub_Session_Id := omit, + acct_Multi_Session_Id := omit, + origin_State_Id := omit, + event_Timestamp := omit, + granted_Service_Unit := omit, + multiple_Services_Credit_Control := omit, + cost_Information := omit, + final_Unit_Indication := omit, + check_Balance_Result := omit, + low_Balance_Indication := omit, + remaining_Balance := omit, + credit_Control_Failure_Handling := omit, + direct_Debiting_Failure_Handling := omit, + validity_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit, + supported_Features := omit, + bearer_Control_Mode := omit, + event_Trigger := omit, + charging_Rule_Remove := omit, + charging_Rule_Install := omit, + charging_Information := omit, + online := omit, + offline := omit, + qoS_Information := omit, + revalidation_Time := omit, + default_EPS_Bearer_QoS := omit, + bearer_Usage := omit, + threeGPP_User_Location_Info := omit, + usage_Monitoring_Information := omit, + cSG_Information_Reporting := omit, + user_CSG_Information := omit, + error_Message := omit, + error_Reporting_Host := omit, + qoS_Rule_Install := omit, + qoS_Rule_Remove := omit, + subsession_Decision_Info := omit, + aN_GW_Address := omit, + proxy_Info := omit, + route_Record := omit, + failed := omit, + service_Information := omit, + aVP_Type := omit + } + + template (value) CEA_MSG m_CEA_dummy := { + header := m_diameterHeaderAns_dummy(CEA_E, c_applIdCommonMsg), + cEA_Body := m_CEA_Body_dummy + } + + template (value) CEA_Body_AVP m_CEA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + host_IP_Address := {m_hostIPAddress(c_address)}, // Address:{'0001'O, {ipv4 := {127, 0, 0,1}}})}, + vendor_Id := m_vendorId_dummy, + product_Name := m_productName_dummy, + origin_State_Id := omit, + error_Message := omit, + failed := omit, + supported_Vendor_Id := omit, + auth_Application_Id := omit, + inband_Security_Id := omit, + acct_Application_Id := omit, + vendor_Specific_Application_Id := omit, + firmware_Revision := omit, + aVP_Type := omit + } + + template (value) DWA_MSG m_DWA_dummy := { + header := m_diameterHeaderAns_dummy(DWA_E, c_applIdCommonMsg), + dWA_Body := m_DWA_Body_dummy + } + + template (value) DWA_Body_AVP m_DWA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + origin_State_Id := omit, + aVP_Type := omit + } + + template (value) DPA_MSG m_DPA_dummy := { + header := m_diameterHeaderAns_dummy(DPA_E, c_applIdCommonMsg), + dPA_Body := m_DPA_Body_dummy + } + + template (value) DPA_Body_AVP m_DPA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + error_Message := omit, + failed := omit, + aVP_Type := omit + } + + template (value) LIA_MSG m_LIA_dummy := { + header := m_diameterHeaderAns_dummy(LIA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + lIA_Body := m_LIA_Body_dummy + } + + template (value) LIA_Body_AVP m_LIA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + server_Capabilities := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) MAA_MSG m_MAA_dummy := { + header := m_diameterHeaderAns_dummy(MAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + mAA_Body := m_MAA_Body_dummy + } + + template (value) MAA_Body_AVP m_MAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + supported_Features := omit, //required only in TS129 229 + public_Identity := omit, //only in RFC4740 + sIP_AOR := omit, + sIP_Number_Auth_Items := omit, + sIP_Auth_Data_Item := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PNA_MSG m_PNA_dummy := { + header := m_diameterHeaderAns_dummy(PNA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pNA_Body := m_PNA_Body_dummy + } + + template (value) PNA_Body_AVP m_PNA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PPA_MSG m_PPA_dummy := { + header := m_diameterHeaderAns_dummy(PPA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + pPA_Body := m_PPA_Body_dummy + } + + template (value) PPA_Body_AVP m_PPA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) PUA_MSG m_PUA_dummy := { + header := m_diameterHeaderAns_dummy(PUA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + pUA_Body := m_PUA_Body_dummy + } + + template (value) PUA_Body_AVP m_PUA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := omit, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + repository_Data_Id := omit, + data_Reference := omit, + supported_Features := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) RAA_MSG m_RAA_dummy := { + header := m_diameterHeaderAns_dummy(RAA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + rAA_Body := m_RAA_Body_dummy + } + + template (value) RAA_Body_AVP m_RAA_Body_dummy := + { + result_Code := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + experimental_Result := omit, + user_Name := omit, + media_Component_Description := omit, + service_URN := omit, + origin_State_Id := omit, + class := omit, + iP_CAN_Type := omit, + rat_Type := omit, + aN_GW_Address := omit, + threeGPP_SGSN_MCC_MNC := omit, + threeGPP_SGSN_Address := omit, + threeGPP_SGSN_IPv6_Address := omit, + rAI := omit, + threeGPP_User_Location_Info := omit, + threeGPP_MS_TimeZone := omit, + charging_Rule_Report := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + framed_IP_Address := omit, + framed_IPv6_Prefix := omit, + threeGPP2_BSID := omit, + qoS_Information := omit, + qoS_Rule_Report := omit, + subsesion_Enforcement_Info := omit, + user_CSG_Information := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) RTA_MSG m_RTA_dummy := { + header := m_diameterHeaderAns_dummy(RTA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + rTA_Body := m_RTA_Body_dummy + } + + template (value) RTA_Body_AVP m_RTA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + associated_Identities := omit, //only TS129 229 + supported_Features := omit, //only TS129 229 + identity_with_Emergency_Registration := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SAA_MSG m_SAA_dummy := + { + header := m_diameterHeaderAns_dummy(SAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sAA_Body := m_SAA_Body_dummy + } + + template (value) SAA_Body_AVP m_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_User_Data := {m_sIP_User_Data_dummy}, + sIP_Accounting_Information := m_sIP_Accounting_Information_dummy, + sIP_Supported_User_Data_Type := omit, + user_Name := omit, + auth_Grace_Period := omit, + authorization_Lifetime := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + supported_Features := omit, //only TS129 229 + user_Data := omit, //only TS129 229 + charging_Information := omit, //only TS129 229 + associated_Identities := omit, //only TS129 229 + loose_Route_Indication := omit, //only TS129 229 + sCSCF_Restoration_Info := omit, //only TS129 229 + associated_Registered_Identities := omit, //only TS129 229 + server_Name := omit, //only TS129 229 + wildcarded_Public_Identity := omit, //only TS129 229 + priviledged_Sender_Indication := omit, //only TS129 229 + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) SNA_MSG m_SNA_dummy := + { + header := m_diameterHeaderAns_dummy(SNA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + sNA_Body := m_SNA_Body_dummy + } + + template (value) SNA_Body_AVP m_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy,//required only in TS129 229 + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + supported_Features := omit, + user_Data := omit, //only TS129 229 + expiry_Time := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + failed := omit, //only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) STA_MSG m_STA_dummy := + { + header := m_diameterHeaderAns_dummy(STA_E, c_applIdCommonMsg), + session_Id := m_sessionId_dummy, + sTA_Body := m_STA_Body_dummy + } + + template (value) STA_Body_AVP m_STA_Body_dummy := + { + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + user_Name := omit, + class := omit, + error_Message := omit, + error_Reporting_Host := omit, + failed := omit, + sponsored_Connectivity_Data := omit, + origin_State_Id := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + proxy_Info := omit, + aVP_Type := omit + } + + template (value) UAA_MSG m_UAA_dummy := { + header := m_diameterHeaderAns_dummy(UAA_E, c_applId3GPPCxDx), + session_Id := m_sessionId_dummy, + uAA_Body := m_UAA_Body_dummy + } + + template (value) UAA_Body_AVP m_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit, //required only in TS129 229 + auth_Application_Id := m_authApplicationId_dummy, + auth_Session_State := m_auth_Session_State_dummy, + result_Code := m_resultCode_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + sIP_Server_URI := omit, + sIP_Server_Capabilities := omit, + authorization_Lifetime := omit, + auth_Grace_Period := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := omit, + route_Record := omit, + aVP_Type := omit + } + + template (value) UDA_MSG m_UDA_dummy := { + header := m_diameterHeaderAns_dummy(UDA_E, c_applId3GPPShDh), + session_Id := m_sessionId_dummy, + uDA_Body := m_UDA_Body_dummy + } + + template (value) UDA_Body_AVP m_UDA_Body_dummy := + { + vendor_Specific_Application_Id := m_vendor_Specific_Appl_Id_dummy, + result_Code := m_resultCode_dummy, + experimental_Result := omit, + auth_Session_State := m_auth_Session_State_dummy, + origin_Host := m_originHost_dummy, + origin_Realm := m_originRealm_dummy, + supported_Features := omit, + wildcarded_PSI := omit, + wildcarded_IMPU := omit, + user_Data := omit, + redirect_Host := omit, + redirect_Host_Usage := omit, + redirect_Max_Cache_Time := omit, + aVP_Type := omit, + failed := omit, + proxy_Info := omit, + route_Record := omit + } + + }//end group dummy_answer_templates_send + group dummy_answer_templates_receive { + + template AAA_MSG mw_AAA_dummy := + { + header := mw_diameterHeaderAns_dummy(AAA_E, ?), + session_Id := ?, + aAA_Body := mw_AAA_Body_dummy + } + + template AAA_Body_AVP mw_AAA_Body_dummy := + { + //dRMP := *, + auth_Application_Id := ?, + origin_Host := ?, + origin_Realm := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State :=*, + access_network_charging_Identifier := *, + access_network_charging_address := *, + acceptable_service_info := *, + aN_GW_Address := *, + //aN_Trusted := *, + service_Authorization_Info := *, + ip_Can_Type := *, + //netLoc_Access_Support := *, + rat_Type := *, + flows := *, + //oC_Supported_Features := *, + //oC_OLR := *, + supported_Features := *, + subscription_Id_AVP := *, + user_Equipment_Info := *, + threeGPP_SGSN_MCC_MNC := *, + class_ := *, + user_Name := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + retry_Interval := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + // load:= *, + aVP_Type := * + } + + template ACA_MSG mw_ACA_dummy := { + header := mw_diameterHeaderAns_dummy(ACA_E, ?), + session_Id := ?, + aCA_Body := mw_ACA_Body_dummy + } + + template ACA_Body_AVP mw_ACA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + accounting_Record_Type := ?, + accounting_Record_Number := ?, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + user_Name := *, + accounting_Sub_Session_Id := *, + acct_Session_Id := *, + acct_Multi_Session_Id := *, + error_Reporting_Host := *, + acct_Interim_Interval := *, + accounting_Realtime_Required := *, + origin_State_Id := *, + event_Timestamp := *, + proxy_Info := *, + aVP_Type := * + } + + template ASA_MSG mw_ASA_dummy := { + header := mw_diameterHeaderAns_dummy(ASA_E, ?), + session_Id := ?, + aSA_Body := mw_ASA_Body_dummy + } + + template ASA_Body_AVP mw_ASA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + origin_State_Id := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template CCA_MSG mw_CCA_dummy := { + header := mw_diameterHeaderAns_dummy(CCA_E, ?), + session_Id := ?, + cCA_Body := mw_CCA_Body_dummy + } + + template CCA_Body_AVP mw_CCA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + auth_Application_Id := ?, + cC_Request_Type := ?, + cC_Request_Number := ?, + user_Name := *, + cC_Session_Failover := *, + cC_Sub_Session_Id := *, + acct_Multi_Session_Id := *, + origin_State_Id := *, + event_Timestamp := *, + granted_Service_Unit := *, + multiple_Services_Credit_Control := *, + cost_Information := *, + final_Unit_Indication := *, + check_Balance_Result := *, + low_Balance_Indication := *, + remaining_Balance := *, + credit_Control_Failure_Handling := *, + direct_Debiting_Failure_Handling := *, + validity_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := *, + supported_Features := *, + bearer_Control_Mode := *, + event_Trigger := *, + charging_Rule_Remove := *, + charging_Rule_Install := *, + charging_Information := *, + online := *, + offline := *, + qoS_Information := *, + revalidation_Time := *, + default_EPS_Bearer_QoS := *, + bearer_Usage := *, + threeGPP_User_Location_Info := *, + usage_Monitoring_Information := *, + cSG_Information_Reporting := *, + user_CSG_Information := *, + error_Message := *, + error_Reporting_Host := *, + qoS_Rule_Install := *, + qoS_Rule_Remove := *, + subsession_Decision_Info := *, + aN_GW_Address := *, + proxy_Info := *, + route_Record := *, + failed := *, + service_Information := *, + aVP_Type := * + } + + template CEA_MSG mw_CEA_dummy := { + header := mw_diameterHeaderAns_dummy(CEA_E, ?), + cEA_Body := mw_CEA_Body_dummy + } + + template CEA_Body_AVP mw_CEA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + host_IP_Address := ?, + vendor_Id := ?, + product_Name := ?, + origin_State_Id := *, + error_Message := *, + failed := *, + supported_Vendor_Id := *, + auth_Application_Id := *, + inband_Security_Id := *, + acct_Application_Id := *, + vendor_Specific_Application_Id := *, + firmware_Revision := *, + aVP_Type := * + } + + template DWA_MSG mw_DWA_dummy := { + header := mw_diameterHeaderAns_dummy(DWA_E, ?), + dWA_Body := mw_DWA_Body_dummy + } + + template DWA_Body_AVP mw_DWA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + origin_State_Id := *, + aVP_Type := * + } + + template DPA_MSG mw_DPA_dummy := { + header := mw_diameterHeaderAns_dummy(DPA_E, ?), + dPA_Body := mw_DPA_Body_dummy + } + + template DPA_Body_AVP mw_DPA_Body_dummy := + { + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + error_Message := *, + failed := *, + aVP_Type := * + } + + template LIA_MSG mw_LIA_dummy := { + header := mw_diameterHeaderAns_dummy(LIA_E, ?), + session_Id := ?, + lIA_Body := mw_LIA_Body_dummy + } + + template LIA_Body_AVP mw_LIA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + server_Name := *, //only TS129 229 + server_Capabilities := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template MAA_MSG mw_MAA_dummy := { + header := mw_diameterHeaderAns_dummy(MAA_E, ?), + session_Id := ?, + mAA_Body := mw_MAA_Body_dummy + } + + template MAA_Body_AVP mw_MAA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + supported_Features :=*, //required only in TS129 229 + public_Identity :=*, //only in RFC4740 + sIP_AOR := *, + sIP_Number_Auth_Items := *, + sIP_Auth_Data_Item := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PNA_MSG mw_PNA_dummy := { + header := mw_diameterHeaderAns_dummy(PNA_E, ?), + session_Id := ?, + pNA_Body := mw_PNA_Body_dummy + } + + template PNA_Body_AVP mw_PNA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PPA_MSG mw_PPA_dummy := { + header := mw_diameterHeaderAns_dummy(PPA_E, ?), + session_Id := ?, + pPA_Body := mw_PPA_Body_dummy + } + + template PPA_Body_AVP mw_PPA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result :=*, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, //only TS129 229 + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template PUA_MSG mw_PUA_dummy := { + header := mw_diameterHeaderAns_dummy(PUA_E, ?), + session_Id := ?, + pUA_Body := mw_PUA_Body_dummy + } + + template PUA_Body_AVP mw_PUA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + repository_Data_Id := *, + data_Reference := *, + supported_Features := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template RAA_MSG mw_RAA_dummy := { + header := mw_diameterHeaderAns_dummy(RAA_E, ?), + session_Id := ?, + rAA_Body := mw_RAA_Body_dummy + } + + template RAA_Body_AVP mw_RAA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + experimental_Result := *, + user_Name := *, + media_Component_Description := *, + service_URN := *, + origin_State_Id := *, + class := *, + iP_CAN_Type := *, + rat_Type := *, + aN_GW_Address := *, + threeGPP_SGSN_MCC_MNC := *, + threeGPP_SGSN_Address := *, + threeGPP_SGSN_IPv6_Address := *, + rAI := *, + threeGPP_User_Location_Info := *, + threeGPP_MS_TimeZone := *, + charging_Rule_Report := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + framed_IP_Address := *, + framed_IPv6_Prefix := *, + threeGPP2_BSID := *, + qoS_Information := *, + qoS_Rule_Report := *, + subsesion_Enforcement_Info := *, + user_CSG_Information := *, + proxy_Info := *, + aVP_Type := * + } + + template RTA_MSG mw_RTA_dummy := { + header := mw_diameterHeaderAns_dummy(RTA_E, ?), + session_Id := ?, + rTA_Body := mw_RTA_Body_dummy + } + + template RTA_Body_AVP mw_RTA_Body_dummy := + { + vendor_Specific_Application_Id := *,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + associated_Identities := *, //only TS129 229 + supported_Features := *, //only TS129 229 + identity_with_Emergency_Registration := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SAA_MSG mw_SAA_dummy := + { + header := mw_diameterHeaderAns_dummy(SAA_E, ?), + session_Id := ?, + sAA_Body := mw_SAA_Body_dummy + } + + template SAA_Body_AVP mw_SAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + result_Code := ?, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_User_Data := ?, + sIP_Accounting_Information := ?, + sIP_Supported_User_Data_Type := *, + user_Name := *, + auth_Grace_Period := *, + authorization_Lifetime := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + supported_Features := *, //only TS129 229 + user_Data := *, //only TS129 229 + charging_Information := *, //only TS129 229 + associated_Identities := *, //only TS129 229 + loose_Route_Indication := *, //only TS129 229 + sCSCF_Restoration_Info := *, //only TS129 229 + associated_Registered_Identities := *, //only TS129 229 + server_Name := *, //only TS129 229 + wildcarded_Public_Identity := *, //only TS129 229 + priviledged_Sender_Indication := *, //only TS129 229 + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template SNA_MSG mw_SNA_dummy := + { + header := mw_diameterHeaderAns_dummy(SNA_E, ?), + session_Id := ?, + sNA_Body := mw_SNA_Body_dummy + } + + template SNA_Body_AVP mw_SNA_Body_dummy := + { + + vendor_Specific_Application_Id := ?,//required only in TS129 229 + auth_Session_State := ?, + result_Code := ?, + experimental_Result := *, + origin_Host := ?, + origin_Realm := ?, + wildcarded_PSI := *, + wildcarded_IMPU := *, + supported_Features := *, + user_Data := *, //only TS129 229 + expiry_Time := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, //only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template STA_MSG mw_STA_dummy := + { + header := mw_diameterHeaderAns_dummy(STA_E, ?), + session_Id := ?, + sTA_Body := mw_STA_Body_dummy + } + + template STA_Body_AVP mw_STA_Body_dummy := + { + result_Code := *, + origin_Host := ?, + origin_Realm := ?, + user_Name := *, + class := *, + error_Message := *, + error_Reporting_Host := *, + failed := *, + sponsored_Connectivity_Data := *, + origin_State_Id := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + proxy_Info := *, + aVP_Type := * + } + + template UAA_MSG mw_UAA_dummy := { + header := mw_diameterHeaderAns_dummy(UAA_E, c_applIdCommonMsg), + session_Id := ?, + uAA_Body := mw_UAA_Body_dummy + } + + template UAA_Body_AVP mw_UAA_Body_dummy := + { + vendor_Specific_Application_Id := omit,//only TS129 229 + auth_Application_Id := ?, + auth_Session_State := ?, + result_Code := ?, + origin_Host := ?, + origin_Realm := ?, + sIP_Server_URI := *, + sIP_Server_Capabilities := *, + authorization_Lifetime := *, + auth_Grace_Period := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + experimental_Result := omit,//only TS129 229 + supported_Features := omit,//only TS129 229 + server_Name := omit,//only TS129 229 + server_Capabilities := omit,//only TS129 229 + failed := omit,//only TS129 229 + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + template UDA_MSG mw_UDA_dummy := { + header := mw_diameterHeaderAns_dummy(UDA_E, ?), + session_Id := ?, + uDA_Body := mw_UDA_Body_dummy + } + + template UDA_Body_AVP mw_UDA_Body_dummy := + { + vendor_Specific_Application_Id := ?, + result_Code := *, + experimental_Result := *, + auth_Session_State := ?, + origin_Host := ?, + origin_Realm := ?, + supported_Features := *, + wildcarded_PSI := *, + wildcarded_IMPU := *, + user_Data := *, + redirect_Host := *, + redirect_Host_Usage := *, + redirect_Max_Cache_Time := *, + failed := *, + proxy_Info := *, + route_Record := *, + aVP_Type := * + } + + }//end group dummy_answer_templates_receive + } //end group dummy_templates + group base_templates { + + group basic_request_templates_send { + + template (value) CER_MSG m_CER_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CER_dummy := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWR_MSG m_DWR_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DWR_dummy := { + dWR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) DPR_MSG m_DPR_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DPR_dummy := { + dPR_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + disconnect_Cause := m_disconnectCause(REBOOTING_E) + } + } + + } // end group basic_request_templates_send + + group basic_request_templates_receive { + + template CER_MSG mw_CER_basic( + template Auth_Application_Id_AVP p_authApplicationId) + modifies mw_CER_dummy := { + cER_Body := { + auth_Application_Id := {p_authApplicationId} + } + } + + }//end group basic_request_templates_receive + + group basic_answer_templates_send { + template (value) CEA_MSG m_CEA_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_dummy := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI") + } + } + + template (value) DWA_MSG m_DWA_basic( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm) + modifies m_DWA_dummy := { + dWA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + template (value) RAA_MSG m_RAA_basic( + template (value)Session_Id_AVP p_sessionId, + template (value)Origin_Host_AVP p_originHost, + template (value)Origin_Realm_AVP p_originRealm) + modifies m_RAA_dummy := { + session_Id := p_sessionId, + rAA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm + } + } + + }//end group basic_answer_templates_send + + group basic_answer_templates_receive { + }//end group basic_answer_templates_receive + + } //end group base_templates + group modified_templates { + + group modified_request_templates_send { + template (value) CER_MSG m_CER_AppId( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_authApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CER_MSG m_CER_AppId_acct_Application_Id( + in template (value) Origin_Host_AVP p_originHost, + in template (value) Origin_Realm_AVP p_originRealm, + in Address p_address, + in UInt32 p_acctApplicationId + ) modifies m_CER_basic := { + cER_Body := { + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI"), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Acct_Id(p_acctApplicationId)}, + acct_Application_Id := {m_acctApplicationId(p_acctApplicationId)} + } + } + + } //end group modified_request_templates_send + + group modified_request_templates_receive { + + template User_Data_AVP mw_user_Data_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_user_Data_AVP_Code), + aVP_Data := ? + } + + template SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := mw_sIPAuthenticationScheme_digest_RFC, + sIP_Item_Number := omit, + sIP_Authenticate := omit, + sIP_Authorization := omit, + sIP_Authentication_Info := omit, + aVP_Type := omit + } + + template (present) SIP_Auth_Data_Item_RFC_AVP mw_sIPAuthDataItem_RFC( + template (present) SIP_Authentication_Scheme_AVP p_sIP_Authentication_Scheme, + template (present) SIP_Item_Number_AVP p_sIP_Item_Number := ?, + template (present) SIP_Authenticate_AVP p_sIP_Authenticate := ?, + template SIP_Authorization_AVP p_sIP_Authorization := omit + ) modifies mw_sIPAuthDataItem_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Auth_Data_Item_AVP_Code_RFC), + sIP_Authentication_Scheme := p_sIP_Authentication_Scheme, + sIP_Item_Number := p_sIP_Item_Number, + sIP_Authenticate := p_sIP_Authenticate, + sIP_Authorization := p_sIP_Authorization + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := ? + } + } + + template SIP_Authentication_Scheme_AVP mw_sIPAuthenticationScheme_digest_aka_RFC := { + sIP_Authentication_Scheme_RFC_AVP := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authentication_Scheme_AVP_Code_RFC), + aVP_Data := DIGEST_AKAv1_MD5_E + } + } + + template SIP_Number_Auth_Items_AVP mw_sIPNumberAuthItems_RFC (template (present) UInt32 p_avpData := ?) := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Number_Auth_Items_AVP_Code_RFC), + aVP_Data := p_avpData + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_dummy := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authenticate_AVP_Code_RFC), + digest_Realm := ?, + digest_Nonce := ?, + digest_Domain := *, + digest_Opaque := *, + digest_Stale := *, + digest_Algorithm := *, + digest_QoP := *, + digest_HA1 := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authorization_RFC_AVP mw_sIPAuthorization_dummy_RFC := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_Authorization_AVP_Code_RFC), + digest_Username := ?, + digest_Realm := ?, + digest_Nonce := ?, + digest_URI := ?, + digest_Response := ?, + digest_Algorithm := *, + digest_CNonce := *, + digest_Opaque := *, + digest_QoP := *, + digest_Nonce_Count := *, + digest_Method := *, + digest_Entity_Body_Hash := *, + digest_Auth_Param := *, + aVP_Type := * + } + + template SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_dummy := { + digest_Realm := p_digest_Realm, + digest_QoP := p_digest_QoP, + digest_HA1 := p_digest_HA1 + } + + template (present) SIP_Authenticate_RFC_AVP mw_sIPAuthenticate_digest_aka ( + template (present) Digest_Realm_AVP p_digest_Realm := ?, + template (present) Digest_QoP_AVP p_digest_QoP := ?, + template (present) Digest_HA1_AVP p_digest_HA1 := ? + ) modifies mw_sIPAuthenticate_digest := { + digest_Opaque := ? + } + + template SIP_User_Data_AVP mw_sIP_User_Data_dummy := + { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_AVP_Code), + sIP_User_Data_Type := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Type_AVP_Code), + aVP_Data := ? + }, + sIP_User_Data_Contents := { + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_sIP_User_Data_Contents_AVP_Code), + aVP_Data := ? + }, + aVP_Type := * + } + + template Framed_IP_Address_AVP mw_framed_IP_Address_dummy := { + // Ref: RFC4005 6.11.1 Framed_IP_Address AVP + aVP_Header := mw_aVP_Header_Vbit0Mbit1(c_framed_IP_Address_AVP_Code), + aVP_Data := ? + } + + } //end group modified_request_templates_receive + + group modified_answer_templates_send { + template (value) CEA_MSG m_CEA_AppId( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address, + UInt32 p_authApplicationId) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(p_authApplicationId)}, + auth_Application_Id := {m_authApplicationId(p_authApplicationId)} + } + } + + template (value) CEA_MSG m_CEA_AppId_all( + template (value) Origin_Host_AVP p_originHost, + template (value) Origin_Realm_AVP p_originRealm, + Address p_address) + modifies m_CEA_basic := { + cEA_Body := { + result_Code := m_resultCode(m_resultCode_diameterSuccess), + origin_Host := p_originHost, + origin_Realm := p_originRealm, + host_IP_Address := {m_hostIPAddress(p_address)}, + vendor_Id := m_vendorId(c_vendId3gpp), + product_Name := m_productName("ETSI "), + supported_Vendor_Id := {m_supportedVendorId(c_vendId3gpp)}, + vendor_Specific_Application_Id := {m_vendor_Specific_Appl_Id(c_applIdRx), + m_vendor_Specific_Appl_Id(c_applIdGx), + m_vendor_Specific_Appl_Id(c_applId3GPPCxDx), + m_vendor_Specific_Appl_Id(c_applIdRf), + m_vendor_Specific_Appl_Id(c_applIdRo) + //add new if needed + }, + auth_Application_Id := {m_authApplicationId(c_applIdRx), + m_authApplicationId(c_applIdGx), + m_authApplicationId(c_applId3GPPCxDx), + m_authApplicationId(c_applIdRf), + m_authApplicationId(c_applIdRo) + //add new if needed + } + } + } + + } //end group modified_answer_templates_send + + group modified_answer_templates_receive { + } //end group modified_answer_templates_receive + + } //end group modified_templates + } //end group MessageTemplates + + /** Type convertion functions to reduce warnings due to type mismaches */ + group FunctionsForTemplates { + + /** @desc Calculates the IP address length in bytes + */ + function f_IPAdressLengthUInt24 () + return UInt24 + {if (PX_IPv6) + {return(16+2) } //+2 address family + else {return(4+2) } + } + + /** @desc Calculates the Diameter-Identity length in bytes + */ + function f_getDiameterIdentityAvpLength(in Diameter_Identity p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getDiameterIdentityAvpLength + + /** @desc Calculates the UTF8String AVP data length + */ + function f_getUTF8StringLength(in UTF8String p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getUTF8StringLength + + /** @desc Calculates the charstring AVP data length + */ + function f_getCharStringLength(in charstring p_avpData) return AVP_Length { + return lengthof(p_avpData); + } // End of function f_getCharStringLength + + /** @desc Calculates the octetstring AVP data length + */ + function f_getOctetStringLength(in octetstring p_octetstring) return AVP_Length { + return lengthof(p_octetstring); + } // End of function f_getOctetStringLength + + /** @desc Returns the enumerated AVP data length + */ + function f_getEnumLength() return AVP_Length { + return 4; + } // End of function f_getEnumLength + + /** @desc Calculates the encoded playload length + */ + function f_getEncvalueLength(in bitstring p_bitstring) return AVP_Length { + return lengthof(p_bitstring) / 8; + } // End of function f_getEncvalueLength + + + /** @desc Calculates leghth of AVP with padded bytes (padded bytes are added in TA) + */ + function f_addPaddedBytes2Length(integer p_currLength) return integer { + var integer v_currLength; + + select(p_currLength mod 4){ + case (0) {v_currLength := p_currLength} + case (1) {v_currLength := p_currLength+3} + case (2) {v_currLength := p_currLength+2} + case (3) {v_currLength := p_currLength+1} + } + return v_currLength; + + } // End of f_addPaddedBytes2Length + + + /** @desc Converts DiameterURI to UTF8String + */ + function f_DiameterURI_2_UTF8String(in template DiameterURI p_diameterURI) return UTF8String { + var UTF8String v_utf8String; + var template charstring v_scheme, v_diameterId_FQDN, v_port, v_transport, v_protocol; + var integer v_portField; + var template charstring v_tailString := ""; + + + v_scheme := p_diameterURI.scheme; + v_diameterId_FQDN := p_diameterURI.diameterId_FQDN; + if (ispresent(p_diameterURI.portField)) + { + v_portField := valueof (p_diameterURI.portField); + v_port := int2char( v_portField ); + v_tailString := ":" & v_port; + } + if (ispresent(p_diameterURI.transport)) + { + v_transport := p_diameterURI.transport; + v_tailString := ";transport=" & v_transport; + } + + if (ispresent(p_diameterURI.protocol)) + { + v_protocol := p_diameterURI.protocol; + v_tailString := ";protocol=" & v_protocol; + } + v_utf8String := valueof(v_scheme) & "://" & valueof(v_diameterId_FQDN) & valueof(v_tailString); + + return v_utf8String; + + } // End of f_addPaddedBytes2Length + + /* Function f_char_to_BCD + * @desc: Returns BCD code in a hexstring converted from + * address digits (p_char) in charstring format + * Filler character '0'H is added where necessary + * End-of-Pulsing charater is added, if p_eop is TRUE + * Works for address lengths starting from 0 (i.e. empty string) + */ + function f_char_to_BCD(in charstring p_char, in boolean p_eop := false) return octetstring { + var integer v_string_length := lengthof(p_char); + var charstring v_address_char := p_char; + var octetstring v_address_oct; + var hexstring v_address_hex_ASCII; + + var integer i; + var hexstring v_address_hex_NUM := ''H; + + if (p_eop) // End of Pulsing required + { + + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "O"; // instead of "?" + // add End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 1; + } + else // even number of digits + { + v_address_char := v_address_char & "O0"; // instead of "0?" + // add filler and End of Pulsing, ASCII code of "O" = '4F'H + v_string_length := v_string_length + 2; + } + } + else // End of Pulsing NOT required + { + if (v_string_length mod 2 == 1) // odd number of digits + { + v_address_char := v_address_char & "0"; + // add filler + v_string_length := v_string_length + 1; + } + } + + v_address_oct := (char2oct(v_address_char)); + v_address_hex_ASCII := oct2hex(v_address_oct); + /* Examples + "1234" -> '31323334'H + "12345O" -> '31323334353F' */ + + // fill hexstring with adequate number of hex digits + for (i := 0; i < v_string_length; i := i + 1) + { + v_address_hex_NUM := v_address_hex_NUM & '0'H; + } + // fill hexstring with address in BCD format + for (i := 0; i < v_string_length; i := i + 2) + { + v_address_hex_NUM[i] := v_address_hex_ASCII[2*i + 3]; + v_address_hex_NUM[i+1] := v_address_hex_ASCII[2*i + 1]; + } + + v_address_oct := hex2oct(v_address_hex_NUM); + return v_address_oct; + } // End function f_char_to_BCD + } // End group FunctionsForTemplates + +}//end module LibDiameter_Templates \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn new file mode 100644 index 0000000..69ddfca --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn @@ -0,0 +1,1162 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S6a AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S6a AVP types is ok; + */ +module LibDiameter_Types_S6a_AVPs { + + // LibCommon + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibCommon_DataStrings all; + + // LibDiameter + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + group AVPs { + + group TS129_272_AVPs { + type record Terminal_Information_AVP { //ref: 7.3.3 + AVP_Header aVP_Header, //Terminal Information ::= + IMEI_AVP imei optional, + ThreeGPP2_MEID_AVP meid optional, + Sofware_Version_AVP sofware_Version optional, + set of AVP_Type aVP_Type optional + } + + type UTF8String IMEI length (14..15); + type record IMEI_AVP { //ref: 7.3.4 + AVP_Header aVP_Header, //IMEI ::= + IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). + //It may also include a 15th digit + } + + type UTF8String SVN length (2); + type record Sofware_Version_AVP { //ref: 7.3.5 + AVP_Header aVP_Header, //Software-Version ::= + SVN aVP_Data //2-digit Software Version Number (SVN) + } + + type octetstring ThreeGPP2_MEID length (8); + type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 + AVP_Header aVP_Header, //3GPP2-MEID ::= + ThreeGPP2_MEID aVP_Data + } + + type record ULR_Flags_AVP { //ref: 7.3.7 + AVP_Header aVP_Header, //ULR-Flags ::= + UInt32 aVP_Data + } + + type record ULA_Flags_AVP { //ref: 7.3.8 + AVP_Header aVP_Header, //ULA-Flags ::= + UInt32 aVP_Data + } + + type record Visited_PLMN_Id_AVP { //ref: 7.3.9 + AVP_Header aVP_Header, //Visited-PLMN-Id ::= + Oct3 aVP_Data + } + + type enumerated UE_SRVCC_Capability_Type { + UE_SRVCC_NOT_SUPPORTED_E (0), + UE_SRVCC_SUPPORTED_E (1) + } + + type record UE_SRVCC_Capability_AVP { //ref: 7.3.130 + AVP_Header aVP_Header, //UE-SRVCC-Capability ::= + UE_SRVCC_Capability_Type aVP_Data + } + + type record SGSN_Number_AVP { //ref: 7.3.102 + AVP_Header aVP_Header, //SGSN-Number ::= + octetstring aVP_Data + } + + type enumerated Homogeneous_Support_Type { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record Homogeneous_Support_AVP { //ref: 7.3.107 + AVP_Header aVP_Header, //Homogeneous-Support-of-IMS-Voice-Over-PS-Sessions ::= + Homogeneous_Support_Type aVP_Data + } + + type record GMLC_Address_AVP { //ref: 7.3.109 - TS 129 173 6.4.7 + AVP_Header aVP_Header, //GMLC-Address ::= + Address aVP_Data + } + + type record Context_Identifier_AVP { //ref: 7.3.27 + AVP_Header aVP_Header, //Context-Identifier ::= + UInt32 aVP_Data + } + + type record Service_Selection_AVP { //ref: 7.3.36 - IETF RFC 5778 6.2 + AVP_Header aVP_Header, //Service-Selection ::= + UTF8String aVP_Data + } + + type record MIP_Home_Agent_Address_AVP { //ref: 7.3.42 - IETF RFC 4004 7.4 + AVP_Header aVP_Header, //MIP-Home-Agent-Address ::= + Address aVP_Data + } + + type record MIP_Home_Agent_Host_AVP { //ref: 7.3.43 - IETF RFC 4004 7.11 + AVP_Header aVP_Header, //MIP-Home-Agent-Host ::= + Destination_Realm_AVP destination_Realm, + Destination_Host_AVP destination_Host, + set of AVP_Type aVP_Type optional + } + + type record MIP6_Home_Link_Prefix_AVP { //ref:IETF RFC 5447 4.2.4 + AVP_Header aVP_Header, //MIP6-Home-Link-Prefix ::= + octetstring aVP_Data + } + + type record MIP6_Agent_Info_AVP { //ref: 7.3.45 + AVP_Header aVP_Header, //MIP6-Agent-Info ::= < AVP Header: 486 > + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address1 optional, + MIP_Home_Agent_Address_AVP mip_Home_Agent_Address2 optional, + MIP_Home_Agent_Host_AVP mip_Home_Agent_Host optional, + MIP6_Home_Link_Prefix_AVP mip6_Home_Link_Prefix optional, + set of AVP_Type aVP_Type optional + } + + type record Specific_APN_Info_AVP { //ref: 7.3.82 + AVP_Header aVP_Header, //Specific-APN-Info ::= + Service_Selection_AVP service_Selection, + MIP6_Agent_Info_AVP mip6_Agent_Info, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record Active_APN_AVP { //ref: 7.3.127 + AVP_Header aVP_Header, //Active-APN ::= + Context_Identifier_AVP context_Identifier, + Service_Selection_AVP service_Selection optional, + MIP6_Agent_Info_AVP mip6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + Specific_APN_Info_AVP specific_APN_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Error_Diagnostic_Code_Type { + GPRS_DATA_SUBSCRIBED_E (0), + NO_GPRS_DATA_SUBSCRIBED_E (1), + ODB_ALL_APN_E (2), + ODB_HPLMN_APN_E (3), + ODB_VPLMN_APN_E (4) + } + + type record Error_Diagnostic_AVP { //ref: 7.3.128 + AVP_Header aVP_Header, //Error-Diagnostic ::= + Error_Diagnostic_Code_Type error_Diagnostic_Code + } + + type enumerated Subscriber_Status_Code { + SERVICE_GRANTED_E (0), + OPERATOR_DETERMINED_BARRING_E (1) + } + + type record Subscriber_Status_AVP { //ref: 7.3.29 + AVP_Header aVP_Header, //Subscriber-Status ::= + Subscriber_Status_Code subscriber_Status_Code + } + + type record STN_SR_AVP { //ref: 7.3.39 + AVP_Header aVP_Header, //STN-SR ::= + octetstring sTN_SR + } + + type enumerated ICS_Indicator_Code { + FALSE_E (0), + TRUE_E (1) + } + + type record ICS_Indicator_AVP { //ref: 7.3.104 + AVP_Header aVP_Header, //ICS-Indicator ::= + ICS_Indicator_Code iCS_Indicator_Code + } + + type enumerated Network_Access_Mode_Code { + PACKET_AND_CIRCUIT_E (0), + Reserved_E (1), + ONLY_PACKET_E (2) + } + + type record Network_Access_Mode_AVP { //ref: 7.3.21 + AVP_Header aVP_Header, //Network-Access-Mode ::= + Network_Access_Mode_Code network_Access_Mode + } + + type record Operator_Determined_Barring_AVP { //ref: 7.3.30 + AVP_Header aVP_Header, //Operator-Determined-Barring ::= + UInt32 aVP_Data + } + + type record HPLMN_ODB_AVP { //ref: 7.3.22 + AVP_Header aVP_Header, //HPLMN-ODB ::= + UInt32 aVP_Data + } + + type record Regional_Subscription_Zone_Code_AVP { //ref: 7.3.52 + AVP_Header aVP_Header, //Regional-Subscription-Zone-Code ::= + octetstring aVP_Data + } + + type record Access_Restriction_Data_AVP { //ref: 7.3.31 + AVP_Header aVP_Header, //Access-Restriction-Data ::= + UInt32 aVP_Data + } + + type record APN_OI_Replacement_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //APN-OI-Replacement ::= + UTF8String aVP_Data + } + + type record GMLC_Number_AVP { //ref: 7.3.85 + AVP_Header aVP_Header, //GMLC-Number ::= + octetstring aVP_Data + } + + type record SS_Code_AVP { //ref: 7.3.87 + AVP_Header aVP_Header, //SS-Code ::= + octetstring aVP_Data + } + + type record SS_Status_AVP { //ref: 7.3.88 + AVP_Header aVP_Header, //SS-Status ::= + octetstring aVP_Data + } + + type enumerated Notification_To_UE_User_Code { + NOTIFY_LOCATION_ALLOWED_E (0), + NOTIFYANDVERIFY_LOCATION_ALLOWED_IF_NO_RESPONSE_E (1), + NOTIFYANDVERIFY_LOCATION_NOT_ALLOWED_IF_NO_RESPONSE_E (2), + LOCATION_NOT_ALLOWED_E (3) + } + + type record Notification_To_UE_User_AVP { //ref: 7.3.89 + AVP_Header aVP_Header, //Notification-To-UE-User ::= + Notification_To_UE_User_Code notification_To_UE_User_Code + } + + type record External_Client_AVP { //ref: 7.3.90 + AVP_Header aVP_Header, //External-Client ::= > + Client_Identity_AVP client_Identity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record Client_Identity_AVP { //ref: 7.3.91 + AVP_Header aVP_Header, //Client-Identity ::= + octetstring aVP_Data + } + + type enumerated GMLC_Restriction_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record GMLC_Restriction_AVP { //ref: 7.3.92 + AVP_Header aVP_Header, //GMLC-Restriction ::= + GMLC_Restriction_Code gMLC_Restriction_Code + } + + type enumerated PLMN_Client_Code { + GMLC_LIST_E (0), + HOME_COUNTRY_E (1) + } + + type record PLMN_Client_AVP { //ref: 7.3.93 + AVP_Header aVP_Header, //PLMN-Client ::= + PLMN_Client_Code pLMN_Client_Code + } + + type record ServiceTypeIdentity_AVP { //ref: 7.3.95 + AVP_Header aVP_Header, //ServiceTypeIdentity ::= + UInt32 aVP_Data + } + + type record Service_Type_AVP { //ref: 7.3.94 + AVP_Header aVP_Header, //Service-Type ::= + ServiceTypeIdentity_AVP serviceTypeIdentity, + GMLC_Restriction_AVP gMLC_Restriction optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_PrivacyException_AVP { //ref: 7.3.86 + AVP_Header aVP_Header, //LCS-PrivacyException ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + Notification_To_UE_User_AVP notification_To_UE_User optional, + set of External_Client_AVP external_Client optional, + set of PLMN_Client_AVP pLMN_Client optional, + set of Service_Type_AVP service_Type optional, + set of AVP_Type aVP_Type optional + } + + type record MO_LR_AVP { //ref: 7.3.96 + AVP_Header aVP_Header, //MO-LR ::= + SS_Code_AVP sS_Code optional, + SS_Status_AVP sS_Status optional, + set of AVP_Type aVP_Type optional + } + + type record LCS_Info_AVP { //ref: 7.3.32 + AVP_Header aVP_Header, //LCS-Info ::= + set of GMLC_Number_AVP gMLC_Number optional, + set of LCS_PrivacyException_AVP lCS_PrivacyException optional, + set of MO_LR_AVP mO_LR optional, + set of AVP_Type aVP_Type optional + } + + type record TS_Code_AVP { //ref: 7.3.100 + AVP_Header aVP_Header, //TS-Code ::= + octetstring aVP_Data + } + + type record Teleservice_List_AVP { //ref: 7.3.99 + AVP_Header aVP_Header, //Teleservice-List ::= + set length (1..infinity) of TS_Code_AVP tS_Code, + set of AVP_Type aVP_Type optional + } + + type record Call_Barring_Info_AVP { //ref: 7.3.101 + AVP_Header aVP_Header, //Call-Barring-Info ::= + SS_Code_AVP sS_Code, + SS_Status_AVP sS_Status, + set of AVP_Type aVP_Type optional + } + + type record AMBR_AVP { //ref: 7.3.41 + AVP_Header aVP_Header, //AMBR ::= + Max_Requested_Bandwidth_UL_AVP max_Requested_Bw_Ul,//max_Requested_Bandwidth_UL,//max_Requested_Bw_Ul + Max_Requested_Bandwidth_DL_AVP max_Requested_Bw_Dl,//max_Requested_Bandwidth_DL,//max_Requested_Bw_Dl + set of AVP_Type aVP_Type optional + } + + type record ThreeGPP_Charging_Char_AVP { //ref: TS 129 601 + AVP_Header aVP_Header, //3GPP-Charging-Characteristics ::= + octetstring aVP_Data + } + + type enumerated All_APN_Conf_Included_Id_Code { + All_APN_CONFIGURATIONS_INCLUDED_E (0), + MODIFIED_ADDED_APN_CONFIGURATIONS_INCLUDED_E (1) + } + + type record All_APN_Conf_Included_Id_AVP { //ref: 7.3.33 + AVP_Header aVP_Header, //All-APN-Configurations-Included-Indicator ::= + All_APN_Conf_Included_Id_Code all_APN_Conf_Included_Indicator + } + + type record APN_Configuration_Profile_AVP { //ref: 7.3.34 + AVP_Header aVP_Header, //APN-Configuration-Profile ::= + Context_Identifier_AVP context_Identifier, + All_APN_Conf_Included_Id_AVP all_APN_Conf_Included_Id, + set length (1 .. infinity) of APN_Configuration_AVP aPN_Configuration, + set of AVP_Type aVP_Type optional + } + + type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 + AVP_Header aVP_Header, //Served-Party-IP-Address ::= + Address aVP_Data + } + + type enumerated PDN_Type_Code { + IPv4_E (0), + IPv6_E (1), + IPv4v6_E (2), + IPv4_OR_IPv6_E (3) + } + + type record PDN_Type_AVP { //ref: 7.3.62 + AVP_Header aVP_Header, //PDN-Type ::= + PDN_Type_Code pDN_Type_Code + } + + type record EPS_Subscribed_QoS_Profile_AVP { //ref: 7.3.37 + AVP_Header aVP_Header, //EPS-Subscribed-QoS-Profile ::= + QoS_Class_Identifier_AVP qoS_Class_Identifier, + Allocation_Retention_Priority_AVP allocation_Retention_Priority, + set of AVP_Type aVP_Type optional + } + + type enumerated VPLMN_Dynamic_Address_Allowed_Code { + NOTALLOWED_E (0), + ALLOWED_E (1) + } + + type record VPLMN_Dynamic_Address_Allowed_AVP { //ref: 7.3.38 + AVP_Header aVP_Header, //VPLMN-Dynamic-Address-Allowed ::= + VPLMN_Dynamic_Address_Allowed_Code vPLMN_Dynamic_Address_Allowed + } + + type enumerated PDN_GW_Allocation_Type_Code { + STATIC_E (0), + DYNAMIC_E (1) + } + + type record PDN_GW_Allocation_Type_AVP { //ref: 7.3.44 + AVP_Header aVP_Header, //PDN-GW-Allocation-Type ::= + PDN_GW_Allocation_Type_Code pDN_GW_Allocation_Type + } + + type enumerated SIPTO_Permission_Code { + SIPTO_ALLOWED_E (0), + SIPTO_NOTALLOWED_E (1) + } + + type record SIPTO_Permission_AVP { //ref: 7.3.135 + AVP_Header aVP_Header, //SIPTO-Permission ::= + SIPTO_Permission_Code sIPTO_Permission + } + + type enumerated LIPA_Permission_Code { + LIPA_PROHIBITED_E (0), + LIPA_ONLY_E (1), + LIPA_CONDITIONAL_E (2) + } + + type record LIPA_Permission_AVP { //ref: 7.3.133 + AVP_Header aVP_Header, //LIPA-Permission ::= + LIPA_Permission_Code lIPA_Permission + } + + type record APN_Configuration_AVP { //ref: 7.3.35 + AVP_Header aVP_Header, //APN-Configuration ::= + Context_Identifier_AVP context_Identifier, + set length (2) of Served_Party_IP_Address_AVP served_Party optional, + PDN_Type_AVP pDN_Type, + Service_Selection_AVP service_Selection, + EPS_Subscribed_QoS_Profile_AVP ePS_Subscribed_QoS_Profile optional, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + MIP6_Agent_Info_AVP mIP6_Agent_Info optional, + Visited_Network_Identifier_AVP visited_Network_Identifier optional, + PDN_GW_Allocation_Type_AVP pDN_GW_Allocation_Type optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + set of Specific_APN_Info_AVP specific_APN_Info optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record RAT_Freq_Sel_Priority_ID_AVP { //ref: 7.3.46 + AVP_Header aVP_Header, //PRAT-Frequency-Selection-Priority-ID ::= + UInt32 aVP_Data + } + + type enumerated Trace_Depth_Code { + MINIMUM_E (0), + MEDIUM_E (1), + MAXIMUM_E (2), + MINIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (3), + MEDIUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (4), + MAXIMUM_WITHOUT_VENDOR_SPECIFIC_EXTENSION_E (5) + } + + type record Trace_Depth_AVP { //ref: 7.3.67 + AVP_Header aVP_Header, //Trace-Depth ::= + Trace_Depth_Code trace_Depth + } + + type record Trace_NE_Type_List_AVP { //ref: 7.3.68 + AVP_Header aVP_Header, //Trace-NE-Type-List ::= + octetstring aVP_Data + } + + type record Trace_Interface_List_AVP { //ref: 7.3.69 + AVP_Header aVP_Header, //Trace-Interface-List ::= + octetstring aVP_Data + } + + type record Trace_Event_List_AVP { //ref: 7.3.70 + AVP_Header aVP_Header, //Trace-Event-List ::= + octetstring aVP_Data + } + + type record OMC_Id_AVP { //ref: 7.3.71 + AVP_Header aVP_Header, //OMC-Id ::= + octetstring aVP_Data + } + + type record Trace_Collection_Entity_AVP { //ref: 7.3.98 + AVP_Header aVP_Header, //Trace-Collection-Entitys ::= + Address aVP_Data + } + + type enumerated Job_Type_Code { + IMMEDIATE_MDT_ONLY_E (0), + LOGGED_MDT_ONLY_E (1), + TRACE_ONLY_E (2), + IMMEDIATE_MDT_AND_TRACE_E (3), + RLF_REPORTS_ONLY_E (4), + RCEF_REPORTS_ONLY_E (5) + } + + type record Job_Type_AVP { //ref: 7.3.137 - TS 132 422 5.9a + AVP_Header aVP_Header, //Job-Type ::= + Job_Type_Code job_Type + } + + type record Cell_Global_Identity_AVP { //ref: 7.3.119 + AVP_Header aVP_Header, //Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record E_UTRAN_Cell_Gl_Identity_AVP { //ref: 7.3.117 + AVP_Header aVP_Header, //E-UTRAN-Cell-Global-Identity ::= + octetstring aVP_Data + } + + type record Routing_Area_Identity_AVP { //ref: 7.3.120 + AVP_Header aVP_Header, //Routing-Area-Identity ::= + octetstring aVP_Data + } + + type record Location_Area_Identity_AVP { //ref: 7.3.121 + AVP_Header aVP_Header, //Location-Area-Identity ::= + octetstring aVP_Data + } + + type record Tracking_Area_Identity_AVP { //ref: 7.3.118 + AVP_Header aVP_Header, //Tracking-Area-Identity::= + octetstring aVP_Data + } + + type record Area_Scope_AVP { //ref: 7.3.138 - TS 132 422 5.10.2 + AVP_Header aVP_Header, //Area-Scope ::= + set of Cell_Global_Identity_AVP cell_Global_Identity optional, + set of E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Global_Identity optional, + set of Routing_Area_Identity_AVP routing_Area_Identity optional, + set of Location_Area_Identity_AVP location_Area_Identity optional, + set of Tracking_Area_Identity_AVP tracking_Area_Identity optional, + set of AVP_Type aVP_Type optional + } + + type record List_Of_Measurements_AVP { //ref: 7.3.139 + AVP_Header aVP_Header, //List-Of-Measurements ::= + UInt32 aVP_Data + } + + type record Reporting_Trigger_AVP { //ref: 7.3.140 + AVP_Header aVP_Header, //Reporting-Trigger ::= + UInt32 aVP_Data + } + + type enumerated Report_Interval_Code { + T_250ms_E ( 0), + T_500ms_E ( 1), + T_1000ms_E ( 2), + T_2000ms_E ( 3), + T_3000ms_E ( 4), + T_4000ms_E ( 5), + T_6000ms_E ( 6), + T_8000ms_E ( 7), + T_12000ms_E ( 8), + T_16000ms_E ( 9), + T_20000ms_E (10), + T_24000ms_E (11), + T_28000ms_E (12), + T_32000ms_E (13), + T_64000ms_E (14), + T_120ms_E (15), + T_240ms_E (16), + T_480ms_E (17), + T_640ms_E (18), + T_1024ms_E (19), + T_2048ms_E (20), + T_5120ms_E (21), + T_10240ms_E (22), + T_60000ms_E (23), // 1 min + T_360000ms_E (24), // 6 min + T_720000ms_E (25), // 12 min + T_1800000ms_E (26), // 30 min + T_3600000ms_E (27) // 60 min + } + + type record Report_Interval_AVP { //ref: 7.3.141 - TS 132 422 5.10.5 + AVP_Header aVP_Header, //Report-Interval ::= + Report_Interval_Code report_Interval + } + + type enumerated Report_Amount_Code { + N_1_E (0), + N_2_E (1), + N_4_E (2), + N_8_E (3), + N_16_E (4), + N_32_E (5), + N_64_E (6), + N_INFINITY_E (7) + } + + type record Report_Amount_AVP { //ref: 7.3.142 - TS 132 422 5.10.6 + AVP_Header aVP_Header, //Report-Amount ::= + Report_Amount_Code report_Amount + } + + type record Event_Threshold_RSRP_AVP { //ref: 7.3.143 - TS 132 422 5.10.7 + AVP_Header aVP_Header, //Event-Threshold-RSRP ::= + UInt32 aVP_Data + } + + type record Event_Threshold_RSRQ_AVP { //ref: 7.3.144 - TS 132 422 5.10.7a + AVP_Header aVP_Header, //Event-Threshold-RSRQ ::= + UInt32 aVP_Data + } + + type enumerated Logging_Interval_Code { + T_1dot28_E (0), + T_2dot56_E (1), + T_5dot12_E (2), + T_10dot24_E (3), + T_20dot48_E (4), + T_30dot72_E (5), + T_40dot96_E (6), + T_61dot44_E (7) + } + + type record Logging_Interval_AVP { //ref: 7.3.145 - TS 132 422 5.10.8 + AVP_Header aVP_Header, //Logging-Interval ::= + Logging_Interval_Code logging_Interval + } + + type enumerated Logging_Duration_Code { + T_600sec_E (0), + T_1200sec_E (1), + T_2400sec_E (2), + T_3600sec_E (3), + T_5400sec_E (4), + T_7200sec_E (5) + } + + type record Logging_Duration_AVP { //ref: 7.3.146 - TS 132 422 5.10.9 + AVP_Header aVP_Header, //Logging-Duration ::= + Logging_Duration_Code logging_Duration + } + + type record MDT_Configuration_AVP { //ref: 7.3.136 + AVP_Header aVP_Header, //MDT-Configuration ::= + Job_Type_AVP job_Type, + Area_Scope_AVP area_Scope optional, + List_Of_Measurements_AVP list_Of_Measurements optional, + Reporting_Trigger_AVP reporting_Trigger optional, + Report_Interval_AVP report_Interval optional, + Report_Amount_AVP report_Amount optional, + Event_Threshold_RSRP_AVP event_Threshold_RSRP optional, + Event_Threshold_RSRQ_AVP event_Threshold_RSRQ optional, + Logging_Interval_AVP logging_Interval optional, + Logging_Duration_AVP logging_Duration optional, + set of AVP_Type aVP_Type optional + } + + type record Trace_Data_AVP { //ref: 7.3.63 + AVP_Header aVP_Header, //Trace-Data ::= + Trace_Reference_AVP trace_Reference, + Trace_Depth_AVP trace_Depth, + Trace_NE_Type_List_AVP trace_NE_Type_List, + Trace_Interface_List_AVP trace_Interface_List optional, + Trace_Event_List_AVP trace_Event_List, + OMC_Id_AVP oMC_Id optional, + Trace_Collection_Entity_AVP trace_Collection_Entity, + MDT_Configuration_AVP mDT_Configuration optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Complete_DL_Included_Indicator_Code { + All_PDP_CONTEXTS_INCLUDED_E (0), + MODIFIED_ADDED_PDP_CONTEXTS_INCLUDED_E (1) + } + + type record Complete_DL_Included_Indicator_AVP { //ref: 7.3.73 + AVP_Header aVP_Header, //Complete-Data-List-Included-Indicator ::= + Complete_DL_Included_Indicator_Code complete_DL_Included_Indicator + } + + type record PDP_Type_AVP { //ref: 7.3.75 + AVP_Header aVP_Header, //PDP-Type ::= + octetstring aVP_Data + } + + type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 + AVP_Header aVP_Header, //PDP-Address ::= + Address aVP_Data + } + + type record QoS_Subscribed_AVP { //ref: 7.3.77 + AVP_Header aVP_Header, //QoS-Subscribed ::= + octetstring aVP_Data + } + + type record Ext_PDP_Type_AVP { //ref: 7.3.75A + AVP_Header aVP_Header, //Ext-PDP-Type ::= + octetstring aVP_Data + } + + type record Ext_PDP_Address_AVP { //ref: 7.3.129 + AVP_Header aVP_Header, //Ext-PDP-Address ::= + Address aVP_Data + } + + type record PDP_Context_AVP { //ref: 7.3.74 + AVP_Header aVP_Header, //PDP-Context ::= + Context_Identifier_AVP context_Identifier, + PDP_Type_AVP pDP_Type, + PDP_Address_AVP pDP_Address optional, + QoS_Subscribed_AVP qoS_Subscribed, + VPLMN_Dynamic_Address_Allowed_AVP vPLMN_Dynamic_Address_Allowed optional, + Service_Selection_AVP service_Selection, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + Ext_PDP_Type_AVP ext_PDP_Type optional, + Ext_PDP_Address_AVP ext_PDP_Address optional, + AMBR_AVP aMBR optional, + SIPTO_Permission_AVP sIPTO_Permission optional, + LIPA_Permission_AVP lIPA_Permission optional, + set of AVP_Type aVP_Type optional + } + + type record GPRS_Subscription_Data_AVP { //ref: 7.3.72 + AVP_Header aVP_Header, //GPRS-Subscription-Data ::= + Complete_DL_Included_Indicator_AVP complete_Data_List_Included_Indicator, + set length (1..50) of PDP_Context_AVP pDP_Context, + set of AVP_Type aVP_Type optional + } + +// type record CSG_Id_AVP { //ref: 7.3.79 +// AVP_Header aVP_Header, //CSG-Id ::= +// UInt32 aVP_Data +// } + + type record Expiration_Date_AVP { //ref: 7.3.80 + AVP_Header aVP_Header, //Expiration-Date ::= + Time aVP_Data + } + + type record CSG_Subscription_Data_AVP { //ref: 7.3.78 + AVP_Header aVP_Header, //CSG-Subscription-Data ::= + CSG_Id_AVP cSG_Id, + Expiration_Date_AVP expiration_Date optional, + set of Service_Selection_AVP service_Selection optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Roaming_Rest_Unsupp_Feature_Code { + ROAMING_RESTRICTED_DUE_TO_UNSUPPORTED_FEATURE_E (0) + } + + type record Roaming_Rest_Unsupp_Feature_AVP { //ref: 7.3.81 + AVP_Header aVP_Header, //Roaming-Restricted-Due-To-Unsupported-Feature ::= + Roaming_Rest_Unsupp_Feature_Code roaming_Restricted_Due_To_Unsupported_Feature + } + + type record RAU_TAU_Timer_AVP { //ref: 7.3.134 + AVP_Header aVP_Header, //Subscribed-Periodic-RAU-TAU-Timer ::= + UInt32 aVP_Data + } + + type record MPS_Priority_AVP { //ref: 7.3.131 + AVP_Header aVP_Header, //MPS-Priority ::= + UInt32 aVP_Data + } + + type enumerated VPLMN_LIPA_Allowed_Code { + LIPA_NOTALLOWED_E (0), + LIPA_ALLOWED_E (1) + } + + type record VPLMN_LIPA_Allowed_AVP { //ref: 7.3.132 + AVP_Header aVP_Header, //VPLMN-LIPA-Allowed ::= + VPLMN_LIPA_Allowed_Code vPLMN_LIPA_Allowed + } + + type enumerated Relay_Node_Indicator_Code { + NOT_RELAY_NODE_E (0), + RELAY_NODE_E (1) + } + + type record Relay_Node_Indicator_AVP { //ref: 7.3.147 + AVP_Header aVP_Header, //Relay-Node-Indicator ::= + Relay_Node_Indicator_Code relay_Node_Indicator + } + + type enumerated MDT_User_Consent_Code { + CONSENT_NOT_GIVEN_E (0), + CONSENT_GIVEN_E (1) + } + + type record MDT_User_Consent_AVP { //ref: 7.3.148 + AVP_Header aVP_Header, //MDT-User-Consent ::= + MDT_User_Consent_Code mDT_User_Consent + } + + type record Subscription_Data_AVP { //ref: 7.3.2 + AVP_Header aVP_Header, //Subscription-Data ::= + Subscriber_Status_AVP subscriber_Status optional, + MSISDN_AVP mSISDN optional, + STN_SR_AVP sTN_SR optional, + ICS_Indicator_AVP iCS_Indicator optional, + Network_Access_Mode_AVP network_Access_Mode optional, + Operator_Determined_Barring_AVP operator_Determined_Barring optional, + HPLMN_ODB_AVP hPLMN_ODB optional, + set length (10) of Regional_Subscription_Zone_Code_AVP zone_Code optional, + Access_Restriction_Data_AVP access_Restriction_Data optional, + APN_OI_Replacement_AVP aPN_OI_Replacement optional, + LCS_Info_AVP lCS_Info optional, + Teleservice_List_AVP teleservice_List optional, + set of Call_Barring_Info_AVP call_Barring_Info optional, + ThreeGPP_Charging_Char_AVP threeGPP_Charging_Char optional, + AMBR_AVP aMBR optional, + APN_Configuration_Profile_AVP aPN_Configuration_Profile optional, + RAT_Freq_Sel_Priority_ID_AVP rAT_Freq_Sel_Priority_ID optional, + Trace_Data_AVP trace_Data optional, + GPRS_Subscription_Data_AVP gPRS_Subscription_Data optional, + CSG_Subscription_Data_AVP cSG_Subscription_Data optional, + Roaming_Rest_Unsupp_Feature_AVP roaming_Rest_Unsupp_Feature optional, + RAU_TAU_Timer_AVP subscribed_Perio_RAUTAU_Timer optional, + MPS_Priority_AVP mPS_Priority optional, + VPLMN_LIPA_Allowed_AVP vPLMN_LIPA_Allowed optional, + Relay_Node_Indicator_AVP relay_Node_Indicator optional, + MDT_User_Consent_AVP mDT_User_Consent optional, + set of AVP_Type aVP_Type optional + } + + type record Number_Of_Requested_Vectors_AVP { //ref: 7.3.14 + AVP_Header aVP_Header, //Number-Of-Requested-Vectors ::= + UInt32 aVP_Data + } + + type record Immediate_Response_Preferred_AVP { //ref: 7.3.16 + AVP_Header aVP_Header, //Immediate-Response-Preferred ::= + UInt32 aVP_Data + } + + type record Re_synchronization_Info_AVP { //ref: 7.3.15 + AVP_Header aVP_Header, //Re-synchronization-Info ::= + octetstring aVP_Data + } + + type record Req_EUTRAN_Auth_Info_AVP { //ref: 7.3.11 + AVP_Header aVP_Header, //Requested-EUTRAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Req_UTRAN_GERAN_Auth_Info_AVP { //ref: 7.3.12 + AVP_Header aVP_Header, //Requested-EUTRAN-GERAN-Authentication-Info ::= + Number_Of_Requested_Vectors_AVP number_Of_Requested_Vectors optional, + Immediate_Response_Preferred_AVP immediate_Response_Preferred optional, + Re_synchronization_Info_AVP re_synchronization_Info optional, + set of AVP_Type aVP_Type optional + } + + type record Item_Number_AVP { //ref: 7.3.23 + AVP_Header aVP_Header, //Item-Number ::= + UInt32 aVP_Data + } + + type record RAND_AVP { //ref: 7.3.53 + AVP_Header aVP_Header, //RAND ::= + octetstring aVP_Data + } + + type record XRES_AVP { //ref: 7.3.54 + AVP_Header aVP_Header, //XRES ::= + octetstring aVP_Data + } + + type record AUTN_AVP { //ref: 7.3.55 + AVP_Header aVP_Header, //AUTN ::= + octetstring aVP_Data + } + + type record KASME_AVP { //ref: 7.3.56 + AVP_Header aVP_Header, //KASME ::= + octetstring aVP_Data + } + + type record E_UTRAN_Vector_AVP { //ref: 7.3.18 + AVP_Header aVP_Header, //E-UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + KASME_AVP kASME, + set of AVP_Type aVP_Type optional + } + + type record Confidentiality_Key_AVP { //ref: 7.3.57 + AVP_Header aVP_Header, //Confidentiality-Key ::= + octetstring aVP_Data + } + + type record Integrity_Key_AVP { //ref: 7.3.58 + AVP_Header aVP_Header, //Integrity-Key ::= + octetstring aVP_Data + } + + type record UTRAN_Vector_AVP { //ref: 7.3.19 + AVP_Header aVP_Header, //UTRAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + XRES_AVP xRES, + AUTN_AVP aUTN, + Confidentiality_Key_AVP confidentiality_Key, + Integrity_Key_AVP integrity_Key, + set of AVP_Type aVP_Type optional + } + + type record SRES_AVP { //ref: 7.3.60 + AVP_Header aVP_Header, //SRES ::= + octetstring aVP_Data + } + + type record Kc_AVP { //ref: 7.3.59 + AVP_Header aVP_Header, //Kc ::= + octetstring aVP_Data + } + + type record GERAN_Vector_AVP { //ref: 7.3.20 + AVP_Header aVP_Header, //GERAN-Vector ::= + Item_Number_AVP item_Number optional, + RAND_AVP rAND, + SRES_AVP sRES, + Kc_AVP kc, + set of AVP_Type aVP_Type optional + } + + type record Authentication_Info_AVP { //ref: 7.3.17 + AVP_Header aVP_Header, //Authentication-Info ::= + set of E_UTRAN_Vector_AVP e_UTRAN_Vector optional, + set of UTRAN_Vector_AVP uTRAN_Vector optional, + set of GERAN_Vector_AVP gERAN_Vector optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Cancellation_Type_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Cancellation_Type_AVP { //ref: 7.3.24 + AVP_Header aVP_Header, //Cancellation-Type ::= + Cancellation_Type_Code cancellation_Type + } + + type record CLR_Flags_AVP { //ref: 7.3.152 + AVP_Header aVP_Header, //CLR-Flags ::= + UInt32 aVP_Data + } + + type record IDR_Flags_AVP { //ref: 7.3.103 + AVP_Header aVP_Header, //IDR-Flags ::= + UInt32 aVP_Data + } + + type record DSR_Flags_AVP { //ref: 7.3.25 + AVP_Header aVP_Header, //DSR-Flags ::= + UInt32 aVP_Data + } + + type record DSA_Flags_AVP { //ref: 7.3.26 + AVP_Header aVP_Header, //DSA-Flags ::= + UInt32 aVP_Data + } + + type record PUER_Flags_AVP { //ref: 7.3.149 + AVP_Header aVP_Header, //PUR-Flags ::= + UInt32 aVP_Data + } + + type record PUEA_Flags_AVP { //ref: 7.3.48 + AVP_Header aVP_Header, //PUA-Flags ::= + UInt32 aVP_Data + } + + type record IDA_Flags_AVP { //ref: 7.3.47 + AVP_Header aVP_Header, //IDA-Flags ::= + UInt32 aVP_Data + } + + type record NOR_Flags_AVP { //ref: 7.3.49 + AVP_Header aVP_Header, //NOR-Flags ::= + UInt32 aVP_Data + } + + type enumerated IMS_Voice_PS_Sessions_Support_Code { + NOT_SUPPORTED_E (0), + SUPPORTED_E (1) + } + + type record IMS_Voice_PS_Sessions_Support_AVP { //ref: 7.3.106 + AVP_Header aVP_Header, //IMS-Voice-Over-PS-Sessions-Supported ::= + IMS_Voice_PS_Sessions_Support_Code iMS_Voice_Over_PS_Sessions_Supported + } + + type record Last_UE_Activity_Time_AVP { //ref: 7.3.108 + AVP_Header aVP_Header, //Last-UE-Activity-Time ::= + Time aVP_Data + } + + type record EPS_User_State_AVP { //ref: 7.3.110 + AVP_Header aVP_Header, //EPS-User-State ::= + MME_User_State_AVP mME_User_State optional, + SGSN_User_State_AVP sGSN_User_State optional, + set of AVP_Type aVP_Type optional + } + + type record EPS_Location_Information_AVP { //ref: 7.3.111 + AVP_Header aVP_Header, //EPS-Location-Information ::= + MME_Location_Information_AVP mME_Location_Information optional, + SGSN_Location_Information_AVP sGSN_Location_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Service_Area_Identity_AVP { //ref: 7.3.122 + AVP_Header aVP_Header, //Service-Area-Identity ::= + octetstring aVP_Data + } + + type record Geographical_Information_AVP { //ref: 7.3.123 + AVP_Header aVP_Header, //Geographical-Information ::= + octetstring aVP_Data + } + + type record Geodetic_Information_AVP { //ref: 7.3.124 + AVP_Header aVP_Header, //Geodetic-Information ::= + octetstring aVP_Data + } + + type enumerated Current_Location_Retrieved_Code { + ACTIVE_LOCATION_RETRIEVAL_E (0) + } + + type record Current_Location_Retrieved_AVP { //ref: 7.3.125 + AVP_Header aVP_Header, //Current-Location-Retrieved ::= + Current_Location_Retrieved_Code current_Location_Retrieved + } + + type record Age_Of_Location_Informations_AVP { //ref: 7.3.126 + AVP_Header aVP_Header, //Age-Of-Location-Information ::= + UInt32 aVP_Data + } + + type enumerated CSG_Access_Mode_Code { + CLOSED_MODE_E (0), + HYBRID_MODE_E (1) + } + + type record CSG_Access_Mode_AVP { //ref: TS 132 299 7.2.46A + AVP_Header aVP_Header, //CSG-Access-Mode ::= + CSG_Access_Mode_Code cSG_Access_Mode + } + + type enumerated CSG_Membership_Indication_Code { + NOT_CSG_MEMBER_E (0), + CSG_MEMBER_E (1) + } + + type record CSG_Membership_Indication_AVP { //ref: TS 132 299 7.2.46B + AVP_Header aVP_Header, //CSG-Membership-Indication ::= + CSG_Membership_Indication_Code cSG_Membership_Indication + } + + type record MME_Location_Information_AVP { //ref: 7.3.115 + AVP_Header aVP_Header, //MME-Location-Information ::= + E_UTRAN_Cell_Gl_Identity_AVP e_UTRAN_Cell_Gl_Identity optional, + Tracking_Area_Identity_AVP tracking_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_Location_Information_AVP { //ref: 7.3.116 + AVP_Header aVP_Header, //SGSN-Location-Information ::= + Cell_Global_Identity_AVP cell_Global_Identity optional, + Location_Area_Identity_AVP location_Area_Identity optional, + Service_Area_Identity_AVP service_Area_Identity optional, + Routing_Area_Identity_AVP routing_Area_Identity optional, + Geographical_Information_AVP geographical_Information optional, + Geodetic_Information_AVP geodetic_Information optional, + Current_Location_Retrieved_AVP current_Location_Retrieved optional, + Age_Of_Location_Informations_AVP age_Of_Location_Informations optional, + User_CSG_Information_AVP user_CSG_Information optional, + set of AVP_Type aVP_Type optional + } + + type record MME_User_State_AVP { //ref: 7.3.112 + AVP_Header aVP_Header, //MME-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type record SGSN_User_State_AVP { //ref: 7.3.113 + AVP_Header aVP_Header, //SGSN-User-State ::= + User_State_AVP user_State optional, + set of AVP_Type aVP_Type optional + } + + type enumerated User_State_Code { + DETACHED_E (0), + ATTACHED_NOT_REACHABLE_FOR_PAGING_E (1), + ATTACHED_REACHABLE_FOR_PAGING_E (2), + CONNECTED_NOT_REACHABLE_FOR_PAGING_E (3), + CONNECTED_REACHABLE_FOR_PAGING_E (4), + NETWORK_DETERMINED_NOT_REACHABLE_E (5) + } + + type record User_State_AVP { //ref: 7.3.114 + AVP_Header aVP_Header, //User-State ::= + User_State_Code user_State + } + + type record User_Id_AVP { //ref: 7.3.50 + AVP_Header aVP_Header, //User-Id ::= + UTF8String aVP_Data + } + + type enumerated Alert_Reason_Code { + MME_UPDATE_PROCEDURE_E (0), + SGSN_UPDATE_PROCEDURE_E (1), + SUBSCRIPTION_WITHDRAWAL_E (2), + UPDATE_PROCEDURE_IWF_E (3), + INITIAL_ATTACH_PROCEDURE_E (4) + } + + type record Alert_Reason_AVP { //ref: 7.3.83 + AVP_Header aVP_Header, //Alert-Reason ::= + Alert_Reason_Code alert_Reason + } + + } // End of group TS129_272_AVPs + + } // End of group AVPs + +} with { + encode "DIAMETERCodec"; variant ""; +} // End of LibDiameter_Types_S6a_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn new file mode 100644 index 0000000..dca09eb --- /dev/null +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn @@ -0,0 +1,291 @@ +/** + * @author STF 466 + * @version $Id$ + * @desc This module defines Diameter S9 AVP types used by LibDiameter constructs.
      + * Note that any changes made to the definitions in this module + * may be overwritten by future releases of this library + * End users are encouraged to contact the distributers of this + * module regarding their modifications or additions + * @remark Adding of new S9 AVP types is ok; + */ +module LibDiameter_Types_S9_AVPs { + + import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; + import from LibDiameter_Types_RfRo_AVPs all; + + group AVPs{ + group TS129_215_AVPs { + type octetstring DiameterIdentity; // Alias + + type record TDF_Information_AVP { //ref: TS129 212 5.3.78 + AVP_Header aVP_Header, //TDF-Information ::= + TDF_Destination_Realm_AVP tDF_Destination_Realm optional, + TDF_Destination_Host_AVP tDF_Destination_Host optional, + TDF_IP_Address_AVP tDF_IP_Address optional + } + + type record TDF_Destination_Realm_AVP { //ref: TS129 212 5.3.79 + AVP_Header aVP_Header, //TDF-Destination-Realm ::= + DiameterIdentity aVP_Data + } + + type record TDF_Destination_Host_AVP { //ref: TS129 212 5.3.80 + AVP_Header aVP_Header, //TDF-Destination-Host ::= + DiameterIdentity aVP_Data + } + + type record TDF_IP_Address_AVP { //ref: TS129 212 5.3.81 + AVP_Header aVP_Header, //TDF-IP-Address ::= + Address aVP_Data + } + + type enumerated AN_GW_Status_Code { + AN_GW_FAILED_E (0) + } + + type record AN_GW_Status_AVP { //ref: TS129 212 5.3.100 + AVP_Header aVP_Header, //AN-GW-Statush ::= + AN_GW_Status_Code aN_GW_Status + } + + type record ThreeGPP_GGSN_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-Address ::= + octetstring aVP_Data + } + + type record ThreeGPP_GGSN_IPv6_Address_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //3GPP-GGSN-IPv6-Address ::= + octetstring aVP_Data + } + + type record TWAN_Identifier_AVP { //ref: TS129 061 table 9a + AVP_Header aVP_Header, //TWAN-Identifier ::= + octetstring aVP_Data + } + + type record QoS_Rule_Report_AVP { //ref: TS129 212 5a.3.5 + AVP_Header aVP_Header, //QoS-Rule-Report ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + PCC_Rule_Status_AVP pCC_Rule_Status optional, + Rule_Failure_Code_AVP rule_Failure_Code optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Name_AVP { //ref: TS129 212 5a.3.4 + AVP_Header aVP_Header, //QoS-Rule-Name ::= + octetstring aVP_Data + } + + type record QoS_Rule_Base_Name_AVP { //ref: TS129 212 5a.3.7 + AVP_Header aVP_Header, //QoS-Rule-Base-Name ::= + UTF8String aVP_Data + } + + type record Appl_Detection_Info_AVP { //ref: TS129 212 5.3.91 + AVP_Header aVP_Header, //Application-Detection-Information ::= + TDF_Application_Identifier_AVP tDF_Application_Identifier, + TDF_Application_Instance_Id_AVP tDF_Application_Instance_Id optional, + set of Flow_Information_AVP flow_Information optional, + set of AVP_Type aVP_Type optional + } + + type record TDF_Application_Identifier_AVP { //ref: TS129 212 5.3.77 + AVP_Header aVP_Header, //TDF-Application-Identifier ::= + octetstring aVP_Data + } + + type record TDF_Application_Instance_Id_AVP { //ref: TS129 212 5.3.92 + AVP_Header aVP_Header, //TDF-Application-Instance-Identifier ::= + octetstring aVP_Data + } + + type record HeNB_Local_IP_Address_AVP { //ref: TS129 212 5.3.95 + AVP_Header aVP_Header, //HeNB-Local-IP-Address ::= + Address aVP_Data + } + + type record UE_Local_IP_Address_AVP { //ref: TS129 212 5.3.96 + AVP_Header aVP_Header, //UE-Local-IP-Address ::= + Address aVP_Data + } + + type record UDP_Source_Port_AVP { //ref: TS129 212 5.3.97 + AVP_Header aVP_Header, //UDP-Source-Port ::= + UInt32 aVP_Data + } + + type enumerated Session_Linking_Indicator_Code { + SESSION_LINKING_IMMEDIATE_E (0), + SESSION_LINKING_DEFERRED_E (1) + } + + type record Session_Linking_Indicator_AVP { //ref: TS129 212 5a.3.6 + AVP_Header aVP_Header, //Session-Linking-Indicator ::= + Session_Linking_Indicator_Code session_Linking_Indicator + } + + type record Subses_Decision_Info_AVP { //ref: TS129 215 5.3.1 + AVP_Header aVP_Header, //Subsession-Decision-Info ::= + Subsession_Id_AVP subsession_Id, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Remove_AVP charging_Rule_Remove optional, + set of Charging_Rule_Install_AVP charging_Rule_Install optional, + set of QoS_Rule_Install_AVP qoS_Rule_Install optional, + set of QoS_Rule_Remove_AVP qoS_Rule_Remove optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Session_Release_Cause_AVP session_Release_Cause optional, + Bearer_Control_Mode_AVP bearer_Control_Mode optional, + set of Event_Trigger_AVP event_Trigger optional, + Revalidation_Time_AVP revalidation_Time optional, + Online_AVP online optional, + Offline_AVP offline optional, + QoS_Information_AVP qoS_Information optional, + set of AVP_Type aVP_Type optional + } + + type record Subses_Enforcement_Info_AVP { //ref: TS129 215 5.3.2 + AVP_Header aVP_Header, //Subsession-Enforcement-Info ::= + Subsession_Id_AVP subsession_Id, + Subsession_Operation_AVP subsession_Operation optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Bearer_Operation_AVP bearer_Operation optional, + set of Packet_Filter_Info_AVP packet_Filter_Information optional, + Packet_Filter_Operation_AVP packet_Filter_Operation optional, + QoS_Information_AVP qoS_Information optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + set of CoA_Information_AVP coA_Information optional, + Called_Station_Id_AVP called_Station_Id optional, + PDN_Connection_ID_AVP pDN_Connection_ID optional, + Bearer_Usage_AVP bearer_Usage optional, + set of TFT_Packet_Filter_Info_AVP tFT_Packet_Filter_Information optional, + Online_AVP online optional, + Offline_AVP offline optional, + Result_Code_AVP result_Code optional, + Experimental_Result_AVP experimental_Result optional, + set of Charging_Rule_Report_AVP charging_Rule_Report optional, + set of QoS_Rule_Report_AVP qoS_Rule_Report optional, + IP_CAN_Type_AVP iP_CAN_Type optional, + RAT_Type_AVP rat_Type optional, + ThreeGPP_SGSN_MCC_MNC_AVP threeGPP_SGSN_MCC_MNC optional, + ThreeGPP_SGSN_Address_AVP threeGPP_SGSN_Address optional, + ThreeGPP_SGSN_IPv6_Address_AVP threeGPP_SGSN_IPv6_Address optional, + RAI_AVP rAI optional, + ThreeGPP_User_Location_Info_AVP threeGPP_User_Location_Info optional, + ThreeGPP2_BSID_AVP threeGPP2_BSID optional, + User_CSG_Information_AVP user_CSG_Information optional, + Default_EPS_Bearer_QoS_AVP default_EPS_Bearer_QoS optional, + Network_Request_Support_AVP network_Request_Support optional, + Routing_Rule_Install_AVP routing_Rule_Install optional, + Routing_Rule_Remove_AVP routing_Rule_Remove optional, + Logical_Access_ID_AVP logical_Access_ID optional, + Physical_Access_ID_AVP physical_Access_ID optional, + set of Usage_Monitoring_Info_AVP usage_Monitoring_Information optional, + Multiple_BBERF_Action_AVP multiple_BBERF_Action optional, + set of Event_Trigger_AVP event_Trigger optional, + Access_Netw_Charging_Addr_AVP access_Network_Charging_Address optional, + set of Access_Netw_Charg_Id_Gx_AVP access_Network_Charging_Id_Gx optional, + Session_Linking_Indicator_AVP session_Linking_Indicator optional, + set of AVP_Type aVP_Type optional + } + + type record Subsession_Id_AVP { //ref: TS129 215 5.3.3 + AVP_Header aVP_Header, //Subsession-Id ::= + UInt32 aVP_Data + } + + type enumerated Subsession_Operation_Code { + TERMINATION_E (0), + ESTABLISHMENT_E (1), + MODIFICATION_E (2) + } + + type record Subsession_Operation_AVP { //ref: TS129 215 5.3.4 + AVP_Header aVP_Header, //Subsession-Operation ::= + Subsession_Operation_Code subsession_Operation + } + + type enumerated Multiple_BBERF_Action_Code { + ESTABLISHMENT_E (0), + TERMINATION_E (1) + } + + type record Multiple_BBERF_Action_AVP { //ref: TS129 215 5.3.6 + AVP_Header aVP_Header, //Multiple-BBERF-Action ::= + Multiple_BBERF_Action_Code multiple_BBERF_Action + } + + type Resource_Allocation_Notification_AVP + Resource_Alloc_Notification_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Value_AVP + ANw_Charging_Id_Value_AVP; // Shortened Name - Alias + type record QoS_Rule_Install_AVP { //ref: TS129 212 5a.3.1 + AVP_Header aVP_Header, //QoS-Rule-Install ::= + set of QoS_Rule_Definition_AVP qoS_Rule_Definition optional, + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + Tunnel_Information_AVP tunnel_Information optional, + ANw_Charging_Id_Value_AVP acc_Net_Charging_Id_Val optional, + Resource_Alloc_Notification_AVP resource_Alloc_Notification optional, + Rule_Activation_Time_AVP rule_Activation_Time optional, + Rule_DeActivation_Time_AVP rule_DeActivation_Time optional, + ThreeGPP_GGSN_Address_AVP threeGPP_GGSN_Address optional, + ThreeGPP_GGSN_IPv6_Address_AVP threeGPP_GGSN_IPv6_Address optional, + set length (0..2) of AN_GW_Addr_AVP aN_GW_Address optional, + UDP_Source_Port_AVP uDP_Source_Port optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Remove_AVP { //ref: TS129 212 5a.3.2 + AVP_Header aVP_Header, //QoS-Rule-Remove ::= + set of QoS_Rule_Name_AVP qoS_Rule_Name optional, + set of QoS_Rule_Base_Name_AVP qoS_Rule_Base_Name optional, + set of AVP_Type aVP_Type optional + } + + type record QoS_Rule_Definition_AVP { //ref: TS129 212 5a.3.3 + AVP_Header aVP_Header, //QoS-Rule-Definition ::= + QoS_Rule_Name_AVP qoS_Rule_Name, + set of Flow_Information_AVP flow_Information optional, + QoS_Information_AVP qoS_Information optional, + Precedence_AVP precedence optional, + set of Required_Access_Info_AVP required_Access_Info optional, + set of AVP_Type aVP_Type optional + } + + type enumerated Required_Access_Info_Code { + USER_LOCATION_E (0), + MS_TIME_ZONE_E (1) } + + type record Required_Access_Info_AVP { //ref: TS129 214 5.3.34 + AVP_Header aVP_Header, //Required-Access-Info ::= + Required_Access_Info_Code required_Access_Info + } + }//end of group TS129_215_AVPs + }//end group AVPs + + group ShorterNames { + type Packet_Filter_Information_AVP Packet_Filter_Info_AVP; // Shortened Name - Alias + type AN_GW_Address_AVP AN_GW_Addr_AVP; // Shortened Name - Alias + type TFT_Packet_Filter_Information_AVP TFT_Packet_Filter_Info_AVP; // Shortened Name - Alias + type Access_Network_Charging_Address_AVP + Access_Netw_Charging_Addr_AVP; // Shortened Name - Alias + type Access_Network_Charging_Identifier_Gx_AVP + Access_Netw_Charg_Id_Gx_AVP; // Shortened Name - Alias + type Multiple_Services_Credit_Control_AVP + Multiple_Services_CC_AVP; // Shortened Name - Alias + type Usage_Monitoring_Information_AVP Usage_Monitoring_Info_AVP; // Shortened Name - Alias + type CSG_Information_Reporting_AVP CSG_Info_Reporting_AVP; // Shortened Name - Alias + } + +} with { + encode "DIAMETERCodec"; variant ""; +} //end module LibDiameter_Types_S9_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn index 4200ebc..c3af534 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_SIPTypesAndValues.ttcn @@ -1699,7 +1699,7 @@ module LibSip_SIPTypesAndValues { SubscriptionState subscriptionState optional, // 3265/7.2 Supported supported optional, - Timestamp timestamp optional, + Timestamp timestamp_ optional, To toField, Unsupported unsupported optional, // only in responses diff --git a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn index 3e00e24..25dbe01 100644 --- a/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn +++ b/ttcn/patch_lib_sip_titan/LibSip_Templates.ttcn @@ -1442,7 +1442,7 @@ module LibSip_Templates { subject := omit, subscriptionState := omit, //* RFC3265 supported := omit, - timestamp := omit, + timestamp_ := omit, toField := c_empty_To, unsupported := omit, userToUser := omit, @@ -1550,7 +1550,7 @@ module LibSip_Templates { subject := *, subscriptionState := *, //* RFC3265 supported := *, - timestamp := *, + timestamp_ := *, toField := ?, unsupported := *, userToUser := *, -- GitLab From 95455d42d4501192ae0d62a7a99cef9381d49458 Mon Sep 17 00:00:00 2001 From: pintar Date: Fri, 18 Aug 2023 20:17:41 +0200 Subject: [PATCH 62/84] Tests added and minor changes --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 63 +++++++++------------------ 1 file changed, 20 insertions(+), 43 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index dc64b90..af50eee 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -29,8 +29,7 @@ Package TP_E_CSCF { TP Id TP_I4_ECSCF_ECO_INVITE_01 /* I4 interface at E-CSCF/EATF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the EATF." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the EATF." Reference "ETSI TS 124 229 [1], Clauses 5.11.2 1)" @@ -83,8 +82,7 @@ Package TP_E_CSCF { TP Id TP_ML_ECSCF_ECO_INVITE_01 /* MI interface at E-CSCF/LRF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the LRF." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the LRF." Reference "ETSI TS 124 229 [1], Clauses 5.11.3" @@ -133,8 +131,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_INVITE_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the PSAP in the IM CN subsystem of own network." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -182,9 +179,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_INVITE_02 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the PSAP in the IM CN subsystem of own network - and includes the LRF provided URI in the Route header." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." Reference "ETSI TS 124 229 [1], Clauses 5.11.2 and 5.11.3" @@ -228,8 +223,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_INVITE_01 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the IBCF for a PSAP in another network." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -280,9 +274,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_INVITE_02 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the IBCF for a PSAP in another network - and includes the LRF provided URI in the Route header." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -329,8 +321,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_INVITE_01 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the BGCF for a PSAP in the PSTN." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -381,9 +372,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_INVITE_02 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF - and routes the request to the BGCF for a PSAP in the PSTN - and includes the LRF provided URI in the Request-URI." + Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -430,8 +419,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_BYE_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency - Call and routes the request to the PSAP in the IM CN subsystem of own network." + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -473,8 +461,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_BYE_02 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency - Call and routes the request to the P-CSCF of home network." + Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -517,8 +504,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_BYE_01 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency - Call and routes the request to the IBCF for a PSAP in another network." + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -561,8 +547,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_BYE_02 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another - network for an Emergency Call and routes the request to the P-CSCF." + Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -605,8 +590,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_BYE_01 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency - Call and routes the request to the BGCF for a PSAP in the PSTN." + Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the BGCF for a PSAP in the PSTN." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -649,8 +633,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_BYE_02 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the - PSTN for an Emergency Call and routes the request to the P-CSCF." + Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the request to the P-CSCF." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -693,8 +676,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_CANCEL_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency - Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -737,8 +719,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_CANCEL_01 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency - Call under establishment and routes the request to the IBCF for a PSAP in another network." + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -781,8 +762,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_CANCEL_01 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency - Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." + Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -824,8 +804,7 @@ Package TP_E_CSCF { TP Id TP_MM_ECSCF_ECO_480INVITE_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ - Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency - Call and routes the response to the P-CSCF of home network." + Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -868,8 +847,7 @@ Package TP_E_CSCF { TP Id TP_MX_ECSCF_ECO_480INVITE_01 /* Mx interface at E-CSCF/IBCF */ - Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another - network for an Emergency Call and routes the response to the P-CSCF." + Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" @@ -912,8 +890,7 @@ Package TP_E_CSCF { TP Id TP_MI_ECSCF_ECO_480INVITE_01 /* Mx interface at E-CSCF/BGCF */ - Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the - PSTN for an Emergency Call and routes the response to the P-CSCF." + Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." Reference "ETSI TS 124 229 [1], Clauses 5.11.2" -- GitLab From 0d3a77d438326dc738fa536be5f205b0d9e58e47 Mon Sep 17 00:00:00 2001 From: pintar Date: Tue, 22 Aug 2023 10:52:24 +0200 Subject: [PATCH 63/84] New TPs added --- test_purposes/Gm/TP_GM.tplan2 | 90 ++++++++++++++++++++++++++++ test_purposes/Mw/TP_MW_PS.tplan2 | 100 +++++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index ec5b6f4..55cb9a5 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -495,6 +495,96 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_CANCEL_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_200OK_BYE_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_UE_B_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_B_CALLID, + Via indicating value PX_UE_B_VIA, + Route indicating value PX_UE_B_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_UE_B_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_UE_B_CALLID, + Via indicating value PX_UE_B_VIA, + Route indicating value PX_UE_B_SERVICE_ROUTE, + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_ECO_200OK_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_200OK_BYE_02 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.5 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_B_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_UE_B_SIP_URI, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_E_CSCF entity + } + } + + } // End of TP_GM_PCSCF_ECO_200OK_02 } // End of Package TP_GM diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 61e74cf..45b0645 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -447,6 +447,106 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_ECO_480INVITE_01 + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_380INVITE_01 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if the IMS is not capable or does not handle emergency sessions." + + Reference + "ETSI TS 124 229 [1], Clause 5.2.10.5" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_380INVITE_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_380INVITE_02 + + Test objective "Verify that the P-CSCF rejects an initial INVITE from an emergency registered UE + if received Request-URI is wrong - not in accordance with RFC 5031." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.4 and 5.2.10.5 + RFC 5031" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_WRONG_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE; + from the UE_A entity + } + then { + the IMS_P_CSCF_A entity sends a 380_AlternativeService containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Content_type, + Via indicating value PX_P_CSCF_A_VIA, + PAssertedIdentity, + MessageBody containing + XML containing + Version indicating value "1", + Type_child indicating value "emergency", + Reason_child, + Action_child;;; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_380INVITE_02 + Test Purpose { TP Id TP_MW_PCSCF_ECO_BYE_01 -- GitLab From f446e7cb4074a38df2951dccef96add6a7620228 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 30 Aug 2023 09:42:44 +0200 Subject: [PATCH 64/84] Review TD_VoLTE_ECO_INT_INI_010, TD_VoLTE_ECO_INT_REJ_01_xx; Add TD_VoLTE_ECO_INT_REJ_02/03 --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 186 +++++++++++++++--- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 96 +++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 48 ++++- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 75 ++++++- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 12 ++ 5 files changed, 381 insertions(+), 36 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 8004e35..2afa111 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -1175,7 +1175,6 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); @@ -1193,7 +1192,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 @@ -1380,7 +1379,6 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_10_01(); // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); @@ -1405,7 +1403,7 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_ueA); // Event 26 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19 f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 @@ -1484,7 +1482,7 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 21 + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 2 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip); f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 @@ -1510,7 +1508,7 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_ueA); // Event 26 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19 f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 21 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 22 @@ -1588,11 +1586,47 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 5 + f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_GM_PCSCF_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 9 + + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic); // Event 14 + + f_mtc_userCheckRinging(v_ueA); // Event 15 + f_mtc_userCheckPeerIsRinging(v_psap); // Event 15 + + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 + + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 19 + + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // Event 30 + + f_mtc_check_TP_MW_PCSCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 32 + + f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // Event 33 + f_mtc_check_TP_MW_PCSCF_ACK_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 35 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 36 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 37 + f_mtc_userCheckCallEstablished(v_psap); // Event 37 // Postamble f_mtc_EndCall(v_ueA); @@ -1753,7 +1787,6 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 @@ -1926,9 +1959,21 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 1 - // TODO + f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10 + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12 + + f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 15 f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 @@ -2001,9 +2046,24 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 3 + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 4 + + f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10 + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12 + + f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 17 f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 @@ -2076,9 +2136,24 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO + f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 + f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + + f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 9 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 10 + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 1 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 12 + + f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 14 + + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // Event 19 f_mtc_userCheckCallTerminated(v_ueA); // Event 21 f_mtc_userCheckCallCancelled(v_psap); // Event 20 @@ -2477,7 +2552,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 - f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 @@ -2584,7 +2659,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 - f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 @@ -2691,7 +2766,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 26 f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 27 - f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 @@ -2728,7 +2803,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected. - * @see ETSI TS 103 795-2 Clause 5.3.4.3 Emergency Session Reject + * @see ETSI TS 103 795-2 Clause 5.3.3.3 Emergency Session Reject - IMS not able to handle emergency sessions */ testcase TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2765,7 +2840,7 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 - f_mtc_check_TP_GM_PCSCF_480TEMPAV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 // Postamble @@ -2793,6 +2868,73 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_INT_REJ_02 + /** + * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected due to wrong urn + * @see ETSI TS 103 795-2 Clause 5.3.3.4 Emergency Session Reject – due to wrong urn + */ + testcase TD_VoLTE_ECO_INT_REJ_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_REJ_03 + + group f_TD_VoLTE_ECO_INT_REJ_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03 + + } // End of group f_TD_VoLTE_ECO_INT_REJ_03 + } // End of group EmergencySessionAbortOrReject } // End of group EmergencySessionEmergencyBearerOperations diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 7dcd6f0..a9f530b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -2958,6 +2958,44 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). * Initial conditions with { @@ -4149,6 +4187,64 @@ module AtsImsIot_TP_behavior_GM { } // End of group imsRequestTermination + group imsAlternateService { + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_01 + + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_02 + + } // End of group imsTemporaryUnavailable + group imsTemporaryUnavailable { function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 8b7b62e..b029915 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -491,10 +491,10 @@ module AtsImsIot_TP_behavior_MM { * } */ function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( @@ -517,7 +517,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_BYE_01 - Request", + "TP_MM_ECSCF_ECO_BYE_01 - Request", true, p_checkMessage ) @@ -528,6 +528,44 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 + function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MM_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02 + } // End of group imsBye group ims200OkBye { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 559f61d..e73f457 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -571,10 +571,10 @@ module AtsImsIot_TP_behavior_MW_EC { * } */ function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( @@ -589,7 +589,7 @@ module AtsImsIot_TP_behavior_MW_EC { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MW_ECSCF_BYE_01 - Request", + "TP_MW_ECSCF_ECO_BYE_01 - Request", true, p_checkMessage ) @@ -600,6 +600,36 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 + } // End of group imsBye group ims200OkBye { @@ -644,10 +674,10 @@ module AtsImsIot_TP_behavior_MW_EC { * } */ function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE p_monitorCompRef.start( @@ -670,6 +700,33 @@ module AtsImsIot_TP_behavior_MW_EC { } } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 + } // End of group ims200OkBye group imsCancel { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 32db8f6..2ee78db 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -2278,6 +2278,18 @@ module AtsImsIot_Templates { } } // End of template mw_200OK + template Response mw_380AlternateService( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template WwwAuthenticate p_wwwAuthenticate := * + ) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_380AlternateService + template Response mw_401Unauthorized( template (present) CSeq p_cSeq := ?, template (present) WwwAuthenticate p_wwwAuthenticate := ? -- GitLab From 27f55d8c9a398b989f253893cce26db768138830 Mon Sep 17 00:00:00 2001 From: garciay Date: Fri, 15 Sep 2023 11:05:50 +0200 Subject: [PATCH 65/84] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/Gm/TP_GM.tplan2 | 116 +++- test_purposes/Sip_Common.tplan2 | 2 + titan-test-system-framework | 2 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 130 ++-- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 5 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 619 +++++++++++++++--- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 91 ++- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 71 +- ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn | 2 +- 10 files changed, 869 insertions(+), 175 deletions(-) diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 55cb9a5..4696be0 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -54,7 +54,7 @@ Package TP_GM { not term_ioi, not SecurityClient, Contact indicating value "sos";; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a 401_Unauthorized containing @@ -71,7 +71,7 @@ Package TP_GM { Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "not empty", qop indicating value "auth";; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_01 @@ -163,7 +163,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization indicating value "Invalid credentials", Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_A entity sends a 403_Forbiden containing @@ -171,7 +171,7 @@ Package TP_GM { To indicating value PX_UE_A_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_03 @@ -204,7 +204,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization not indicating value GPRS_IMS_Bundled_authentication, Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a 403_Forbidden containing @@ -215,7 +215,7 @@ Package TP_GM { MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_04 @@ -248,7 +248,7 @@ Package TP_GM { Via indicating value PX_UE_A_VIA, Authorization not indicating value GPRS_IMS_Bundled_authentication, Contact indicating value "sos"; - to the UE_A entity + from the UE_A entity } then { the IMS_P_CSCF_B entity sends a 420_BadExtension containing @@ -260,7 +260,7 @@ Package TP_GM { MessageBody containing XML containing ims_3gpp_element indicating value anonymous_emergencycall;;; - from the UE_A entity + to the UE_A entity } } } // End of TP_GM_PCSCF_ECO_REGISTER_05 @@ -294,7 +294,7 @@ Package TP_GM { From indicating value "Anonymous", To indicating value PX_SIP_EMERGENCY_SERVICE_URN, CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7 Route indicating value PX_UE_A_SERVICE_ROUTE, MessageBody; from the UE_A entity @@ -461,7 +461,7 @@ Package TP_GM { Test Purpose { - TP Id TP_GM_PCSCF_ECO_CANCEL_01 + TP Id TP_GM_PCSCF_EMC_CANCEL_01 Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." @@ -494,7 +494,7 @@ Package TP_GM { } } - } // End of TP_GM_PCSCF_ECO_CANCEL_01 + } // End of TP_GM_PCSCF_EMC_CANCEL_01 Test Purpose { @@ -518,20 +518,20 @@ Package TP_GM { ensure that { when { the IMS_P_CSCF_A entity sends a 200_Ok containing - From indicating value PX_UE_B_SIP_URI, + From indicating value PX_PSAP_SIP_URI, To indicating value PX_UE_A_SIP_URI, - CallId indicating value PX_UE_B_CALLID, - Via indicating value PX_UE_B_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE; - from the IMS_E_CSCF entity + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the IMS_E_CSCF entity } then { the IMS_P_CSCF_A entity sends a 200_Ok containing - From indicating value PX_UE_B_SIP_URI, + From indicating value PX_PSAP_SIP_URI, To indicating value PX_UE_A_SIP_URI, - CallId indicating value PX_UE_B_CALLID, - Via indicating value PX_UE_B_VIA, - Route indicating value PX_UE_B_SERVICE_ROUTE, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, not PChargingVector, not PChargingFunctionAddresses, not PPreferredIdentity; @@ -564,7 +564,7 @@ Package TP_GM { when { the IMS_P_CSCF_A entity receives a 200_Ok containing From indicating value PX_UE_A_SIP_URI, - To indicating value PX_UE_B_SIP_URI, + To indicating value PX_PSAP_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, Route indicating value PX_UE_A_SERVICE_ROUTE, @@ -576,7 +576,7 @@ Package TP_GM { then { the IMS_P_CSCF_A entity sends a 200_Ok containing From indicating value PX_UE_A_SIP_URI, - To indicating value PX_UE_B_SIP_URI, + To indicating value PX_PSAP_SIP_URI, CallId indicating value PX_UE_A_CALLID, Via indicating value PX_UE_A_VIA, Route indicating value PX_UE_A_SERVICE_ROUTE; @@ -585,6 +585,78 @@ Package TP_GM { } } // End of TP_GM_PCSCF_ECO_200OK_02 + + Test Purpose { + + TP Id TP_GM_PCSCF_EMS_200OK_CANCEL_01 + // TP_GM_PCSCF_200OK_CANCEL_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend a CANCEL + } + then { + the IMS_P_CSCF_A entity receives a 200_Ok containing + not PChargingVector, + not PChargingFunctionAddresses, + not PPreferredIdentity; + from the IMS_E_CSCF entity + } + } + + } // End of TP_GM_PCSCF_EMS_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_EMC_487INVITE_01 + // TP_GM_PCSCF_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], Clauses 5.1.3 and 6.1" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToSend an CANCEL + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_GM_PCSCF_EMC_487INVITE_01 } // End of Package TP_GM diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index c593bf4..bf0f552 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -109,6 +109,8 @@ Package Sip_Common { - hasAchievedINVITE - hasSentINVITETo - supportsRoutingTo + - supportsCallbackTo + ; } // End of Domain section diff --git a/titan-test-system-framework b/titan-test-system-framework index 524df4e..c38a2f2 160000 --- a/titan-test-system-framework +++ b/titan-test-system-framework @@ -1 +1 @@ -Subproject commit 524df4ef9a2fed2c32c1d9166ebebdb51fa666ba +Subproject commit c38a2f267cb659c8180548bc82721d34dc71ef85 diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 2afa111..d11d47e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -256,7 +256,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03(vc_vxlte_monitor_components.mwPI); // Events 14, 21 f_mtc_check_TP_MW_ICSCF_REGISTER_03(vc_vxlte_monitor_components.mwIS, true); // Event 17, 20 - f_mtc_check_TP_CX_HSS_ECO_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 + f_mtc_check_TP_CX_HSS_ECO_UAA_02(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 15, 16 f_mtc_check_TP_CX_HSS_SAA_01(vc_vxlte_monitor_components.cxSH);// Event 18, 19 // postamble @@ -323,7 +323,11 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_01(); // Test body - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -669,9 +673,11 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + if (not(PX_ECALL)) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -792,7 +798,11 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + if (not(PX_ECALL)) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -922,7 +932,11 @@ module AtsImsIot_Emergency { // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + if (not(PX_ECALL)) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -1054,7 +1068,11 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + if (not(PX_ECALL)) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -1176,7 +1194,11 @@ module AtsImsIot_Emergency { // Test body - f_mtc_check_TP_GM_PCSCF_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + if (not(PX_ECALL)) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + } f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF @@ -1663,7 +1685,7 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 1: PSAP is in IMS A network */ - testcase TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -1696,7 +1718,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body @@ -1733,23 +1755,23 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_01 + } // End of TC TD_VoLTE_EMC_INT_REL_01_01 - group f_TD_VoLTE_ECO_INT_REL_01_01 { + group f_TD_VoLTE_EMC_INT_REL_01_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_01 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_01 - } // End of group f_TD_VoLTE_ECO_INT_REL_01_01 + } // End of group f_TD_VoLTE_EMC_INT_REL_01_01 /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 2: PSAP is not in IMS A network */ - testcase TD_VoLTE_ECO_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -1783,7 +1805,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body @@ -1820,22 +1842,22 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_02 + } // End of TC f_TD_VoLTE_EMC_INT_REL_01_01 - group f_TD_VoLTE_ECO_INT_REL_01_02 { + group f_TD_VoLTE_EMC_INT_REL_01_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_02 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_02 - } // End of f_TD_VoLTE_ECO_INT_REL_01_02 + } // End of f_TD_VoLTE_EMC_INT_REL_01_02 /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 3: PSAP is in PSTN network */ - testcase TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -1869,7 +1891,7 @@ module AtsImsIot_Emergency { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 - f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03(); // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -1905,16 +1927,16 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_REL_01_03 + } // End of TC TD_VoLTE_EMC_INT_REL_01_03 - group f_TD_VoLTE_ECO_INT_REL_01_03 { + group f_TD_VoLTE_EMC_INT_REL_01_03 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REL_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03 - } // End of group f_TD_VoLTE_ECO_INT_REL_01_03 + } // End of group f_TD_VoLTE_EMC_INT_REL_01_03 /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. @@ -2192,7 +2214,7 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is in IMS A network */ - testcase TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -2226,12 +2248,12 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 //Rx/Gx exchange after CANCEL was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 @@ -2269,23 +2291,23 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_01 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_01 - group f_TD_VoLTE_ECO_INT_ABT_01_01 { + group f_TD_VoLTE_EMC_INT_ABT_01_01 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_01 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_01 - } // End of group f_TD_VoLTE_ECO_INT_ABT_01_01 + } // End of group f_TD_VoLTE_EMC_INT_ABT_01_01 /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is not in IMS A network */ - testcase TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -2319,13 +2341,13 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 //Rx/Gx exchange after CANCEL was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 @@ -2369,23 +2391,23 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_02 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_02 - group f_TD_VoLTE_ECO_INT_ABT_01_02 { + group f_TD_VoLTE_EMC_INT_ABT_01_02 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_02 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_02 - } // End of group f_TD_VoLTE_ECO_INT_ABT_01_02 + } // End of group f_TD_VoLTE_EMC_INT_ABT_01_02 /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is in PSTN network */ - testcase TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { + testcase TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); @@ -2419,13 +2441,13 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03(); + f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 + f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 1 //Rx/Gx exchange after CANCEL was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 2 @@ -2468,16 +2490,16 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } f_cf_adapter_down ( ); - } // End of TC TD_VoLTE_ECO_INT_ABT_01_03 + } // End of TC TD_VoLTE_EMC_INT_ABT_01_03 - group f_TD_VoLTE_ECO_INT_ABT_01_03 { + group f_TD_VoLTE_EMC_INT_ABT_01_03 { - function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03() runs on ImsTestCoordinator { + function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); // TODO Add real code to check pre-conditions - } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_ABT_01_03 + } // End of function f_mtc_check_precond_TD_VoLTE_EMC_INT_ABT_01_03 - } // End of group f_TD_VoLTE_ECO_INT_ABT_01_03 + } // End of group f_TD_VoLTE_EMC_INT_ABT_01_03 /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index 02bda0b..b862a52 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -27,6 +27,11 @@ group SUT_CONF { * @desc Set to true of PSAP shall be registered to the IMS */ modulepar boolean PX_PSAP_REGISTERED := true; + + /** + * @desc Set to true if the emergency call is an issued by an eCall + */ + modulepar boolean PX_ECALL := false; } // end group SUT_CONF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index a9f530b..a58f008 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -224,33 +224,31 @@ module AtsImsIot_TP_behavior_GM { * @desc Verify that the P-CSCF successfully processes a first registration (Successful) * Initial conditions with { * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour * ensure that { * when { - * the UE_A entity isTriggeredToStart - * } - * then { - * the UE_A entity sends a REGISTER containing + * the IMS_P_CSCF_A entity receives a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_USERNAME, + * Path, + * Warning, + * WwwAuthenticate containing + * Digest,, * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "", * not term_ioi, - * not SecurityClient - * ;; - * to the IMS_P_CSCF_A entity - * and the UE_A entity receives an 401_Unauthorized containing + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, @@ -263,11 +261,9 @@ module AtsImsIot_TP_behavior_GM { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth" - * ;, - * Contact indicating value "sos" + * qop indicating value "auth";; * ; - * from the IMS_P_CSCF_A entity + * from the UE_A entity * } * } */ @@ -322,7 +318,7 @@ module AtsImsIot_TP_behavior_GM { )) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + "TP_GM_PCSCF_ECO_REGISTER_01 - 401 Unauthorized", false, p_checkMessage ) @@ -439,6 +435,54 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstRegistration + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false @@ -452,18 +496,20 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) + mw_TP_GM_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) ) }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_02 - Second request", + "TP_GM_PCSCF_ECO_REGISTER_02 - Second request", true, p_checkMessage ) @@ -595,11 +641,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 /** - * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -613,20 +658,14 @@ module AtsImsIot_TP_behavior_GM { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; + * Authorization indicating value "Invalid credentials", + * Contact indicating value "sos"; * from the UE_A entity - * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID - * ; + * CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; * to the UE_A entity * } * } @@ -647,7 +686,7 @@ module AtsImsIot_TP_behavior_GM { mw_TP_GM_PCSCF_ECO_REGISTER_03( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, + mw_Authorization_other, // FIXME indicating value "Invalid credentials" -, -, mw_contact(mw_ContactAddress) ) @@ -657,7 +696,7 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_REGISTER_03 - First request", + "TP_GM_PCSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -673,7 +712,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) }, { @@ -752,6 +791,98 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_B and + * the UE_A entity not isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value GPRS_IMS_Bundled_authentication, + * Contact indicating value "sos"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * MessageBody containing + * XML containing + * ims_3gpp_element indicating value anonymous_emergencycall;;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other // FIXME not indicating value GPRS_IMS_Bundled_authenticatio + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04 + function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false @@ -811,6 +942,68 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension( + v_sip.request.msgHeader.cSeq, + mw_WwwAuthenticate, + mw_MBody_MIME_Ims3gpp( + *, + ? // FIXME XML message body + ) + )), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05 + } // End of group imsRegistration group imsDeRegistration { @@ -1321,7 +1514,7 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 /** - * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. * Reference * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" * Config Id CF_VxLTE_INT @@ -1360,15 +1553,15 @@ module AtsImsIot_TP_behavior_GM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId - )) + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_SipUrl_Anonymous, + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_01 - Request", + "TP_GM_PCSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -1492,18 +1685,18 @@ module AtsImsIot_TP_behavior_GM { { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( -, // FIXME Set expected value ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) ), ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) ) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_02 - Request", + "TP_GM_PCSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -1546,7 +1739,36 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -1559,15 +1781,15 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_GM_PCSCF_INVITE_03 - Request", + "TP_GM_PCSCF_ECO_INVITE_03 - Request", true, p_checkMessage ) @@ -1578,6 +1800,34 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + /** + * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1591,11 +1841,15 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recevInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, @@ -1899,10 +2153,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 100 TRYING p_monitorCompRef.start( @@ -1915,7 +2169,7 @@ module AtsImsIot_TP_behavior_GM { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_GM_PCSCF_100Trying_01", + "TP_GM_PCSCF_ECO_100Trying_01", false, p_checkMessage ) @@ -2312,10 +2566,10 @@ module AtsImsIot_TP_behavior_GM { * } */ function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( @@ -2364,10 +2618,10 @@ module AtsImsIot_TP_behavior_GM { } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( @@ -2454,6 +2708,38 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -2863,6 +3149,30 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -3195,6 +3505,66 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). * Initial conditions with { @@ -3251,6 +3621,65 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -3420,7 +3849,31 @@ module AtsImsIot_TP_behavior_GM { } } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 - function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01( + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -3439,7 +3892,7 @@ module AtsImsIot_TP_behavior_GM { }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_GM_PCSCF_CANCEL_01", + "TP_GM_PCSCF_EMC_CANCEL_01", true, p_checkMessage ) @@ -3448,7 +3901,7 @@ module AtsImsIot_TP_behavior_GM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01 /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index ab66af6..8a2afee 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -260,10 +260,8 @@ module AtsImsIot_TP_behavior_MW_PS { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth" - * ;, - * Contact indicating value "sos" - * ; + * qop indicating value "auth";, + * Contact indicating value "sos"; * to the UE_A entity * } * } diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 2ee78db..3604831 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -1920,6 +1920,14 @@ module AtsImsIot_Templates { payload := * } + template Response mw_420BadExtension_Base modifies m_Response_Dummy := + { + statusLine := {c_sipNameVersion, 420, ?}, + msgHeader := ?, + messageBody := *, + payload := * + } + template Response mw_480TemporaryUnavailable_Base modifies m_Response_Dummy := { statusLine := c_statusLine480, @@ -2278,15 +2286,32 @@ module AtsImsIot_Templates { } } // End of template mw_200OK + template (present) Response mw_ECO_200OK( + template (present) CSeq p_cSeq := ?, + template (present) CallId p_callId := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_200OK := { + msgHeader := { + callId := p_callId, + cSeq := p_cSeq, + fromField := p_from, + toField := p_to, + pChargingVector := omit, + pChargingFunctionAddresses := omit, + pPreferredID := omit + } + } // End of template mw_200OK + template Response mw_380AlternateService( template (present) CSeq p_cSeq := ?, template (present) CallId p_callId := ?, template WwwAuthenticate p_wwwAuthenticate := * ) modifies mdw_3XX_Base := { msgHeader := { - cSeq := p_cSeq, - callId := p_callId, - wwwAuthenticate := p_wwwAuthenticate + cSeq := p_cSeq, + callId := p_callId, + wwwAuthenticate := p_wwwAuthenticate } } // End of template mw_380AlternateService @@ -2300,6 +2325,16 @@ module AtsImsIot_Templates { } } // End of template mw_401Unauthorized + template Response mw_403Forbidden( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ? + ) modifies mw_403Forbidden_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + } + } // End of template mw_403Forbidden + template Response mw_404NotFound( template (present) CSeq p_cSeq := ?, template (present) WwwAuthenticate p_wwwAuthenticate := ? @@ -2310,6 +2345,18 @@ module AtsImsIot_Templates { } } // End of template mw_404NotFound + template Response mw_420BadExtension( + template (present) CSeq p_cSeq := ?, + template (present) WwwAuthenticate p_wwwAuthenticate := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_420BadExtension_Base := { + msgHeader := { + cSeq := p_cSeq, + wwwAuthenticate := p_wwwAuthenticate + }, + messageBody := p_messageBody + } // End of template mw_420BadExtension + template Response mw_480TemporaryUnavailable( template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, @@ -2507,7 +2554,27 @@ module AtsImsIot_Templates { } } - + template (present) Accept mw_accept( + template (present) AcceptBody_List p_acceptArgs := ? + ) := { + fieldName := ACCEPT_E, + acceptArgs := p_acceptArgs + } + + template (present) RecvInfo mw_recvInfo( + template InfoPackage_List p_infoPackageList := ? + ) := { + fieldName := RECV_INFO_E, + infoPackageList := l_infoPackageList + } + + template(present) PPreferredID mw_PPreferredID( + template(present) PPreferredIDValue_List p_pPreferredIDValue_List := ? + ) := { + fieldName := P_PREFERRED_ID_E, + pPreferredIDValueList := p_pPreferredIDValue_List + } + } // end group HeaderTemplates group AuxiliaryInformationElementTemplates { @@ -2579,6 +2646,22 @@ module AtsImsIot_Templates { } } } + template (present) AcceptBody mw_acceptBody( + template (present) charstring p_mediaRange := ?, + template SemicolonParam_List p_acceptParam := * + ) :={ + mediaRange := p_mediaRange, + acceptParam := p_acceptParam + } + + template (present) InfoPackage_Type mw_infoPackage_Type( + template (present) charstring p_infoPackageName := ?, + template SemicolonParam_List p_infoPackageParams := * + ) := { + infoPackageName := p_infoPackageName, + infoPackageParams := p_infoPackageParams + } + } // End of group AuxiliaryInformationElementTemplates group adapterTemplates { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 106f465..3e91695 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -212,10 +212,14 @@ module AtsImsIot_Templates_GM { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { msgHeader := { - contact := p_contact + contact := p_contact, + path := p_path, + Warning := p_warning } } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 @@ -228,6 +232,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_03( template (present) From p_from := ?, template (present) To p_to := ?, @@ -243,7 +259,9 @@ module AtsImsIot_Templates_GM { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_03 @@ -256,6 +274,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_05( template (present) From p_from := ?, template (present) To p_to := ?, @@ -376,11 +406,13 @@ module AtsImsIot_Templates_GM { template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? ) modifies mw_TP_GM_PCSCF_INVITE_01 := { msgHeader := { contact := p_contact - } + }, + bessageBody := p_messageBody } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced @@ -394,7 +426,8 @@ module AtsImsIot_Templates_GM { template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_ECO_INVITE_02 @@ -405,6 +438,15 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_INVITE_03 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_03 + template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_04( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -412,6 +454,23 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_INVITE_04 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_04 + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_01( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn index 961f35c..7c0384e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TypesAndValues.ttcn @@ -9,7 +9,7 @@ module AtsImsIot_TypesAndValues { import from LibCommon_BasicTypesAndValues all; import from LibSip_SIPTypesAndValues all; import from LibMsrp_TypesAndValues all; - import from LibDiameter_TypesAndValues {type DIAMETER_MSG} + import from LibDiameter_TypesAndValues all; import from LibCommon_DataStrings all; group SIPmessageTypes { -- GitLab From dcbe529be6eceb1182c8f39feda90201a2cee624 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 18 Sep 2023 11:00:14 +0200 Subject: [PATCH 66/84] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 343 ++++++- test_purposes/Mw/TP_MW_PS.tplan2 | 136 ++- test_purposes/Sip_Common.tplan2 | 1 - .../AtsImsIot_Diameter_Templates.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn | 46 + ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 36 +- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 766 +------------- .../AtsImsIot_TP_behavior_MW_IS.ttcn | 260 ++++- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 967 ++++++++++++++++-- ttcn/AtsImsIot/AtsImsIot_Templates.ttcn | 26 +- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 17 +- ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 123 ++- ttcn/patch_lib_diameter_titan/module.mk | 2 +- 14 files changed, 1798 insertions(+), 941 deletions(-) diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index af50eee..8f99c15 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -218,6 +218,54 @@ Package TP_E_CSCF { } // End of TP_MM_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MM_ECSCF_ECO_INVITE_03 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + + Test objective "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + not PChargingFunctionAddresses, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MX_ECSCF_ECO_INVITE_01 @@ -316,6 +364,56 @@ Package TP_E_CSCF { } // End of TP_MX_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MX_ECSCF_ECO_INVITE_03 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_P_SCSF_SERVICE_ROUTE_IBCF, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MI_ECSCF_ECO_INVITE_01 @@ -414,6 +512,57 @@ Package TP_E_CSCF { } // End of TP_MI_ECSCF_ECO_INVITE_02 + Test Purpose { + + TP Id TP_MI_ECSCF_ECO_INVITE_03 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + + Reference + "ETSI TS 123 167 [1], Clause 4.1 item 12" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives an INVITE containing + From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_BGCF_VIA, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends an INVITE containing + RequestLine indicating value PX_UE_A_SIP_URI, + From indicating value PX_PSAP_TEL_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_E_CSCF_VIA, + Route indicating value PX_P_CSCD_SERVICE_ROUTE, + RecordRoute PX_E_CSCF_SERVICE_ROUTE, + PChargingVector containing + not term_ioi_parameter, + orig_ioi_parameter + indicating value "Operator Identifier Of ImsA";, + MessageBody; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_ECO_INVITE_03 + Test Purpose { TP Id TP_MM_ECSCF_ECO_BYE_01 @@ -479,20 +628,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; from the IM_CN entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; to the IMS_P_CSCF_A entity } } @@ -565,20 +712,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; from the IMS_IBCF_A entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; to the IMS_P_CSCF_A entity } } @@ -651,20 +796,18 @@ Package TP_E_CSCF { ensure that { when { the IMS_E_CSCF entity receives a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; from the IMS_BGCF_A entity } then { the IMS_E_CSCF entity sends a BYE containing - From indicating value PX_UE_A_SIP_URI, - To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA, - Route indicating value PX_UE_A_SERVICE_ROUTE; + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA; to the IMS_P_CSCF_A entity } } @@ -673,7 +816,7 @@ Package TP_E_CSCF { Test Purpose { - TP Id TP_MM_ECSCF_ECO_CANCEL_01 + TP Id TP_MM_ECSCF_EMC_CANCEL_01 /* Mm interface at E-CSCF/IM CN subsystem of own network */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." @@ -712,11 +855,11 @@ Package TP_E_CSCF { } } - } // End of TP_MM_ECSCF_ECO_CANCEL_01 + } // End of TP_MM_ECSCF_EMC_CANCEL_01 Test Purpose { - TP Id TP_MX_ECSCF_ECO_CANCEL_01 + TP Id TP_MX_ECSCF_EMC_CANCEL_01 /* Mx interface at E-CSCF/IBCF */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." @@ -755,11 +898,11 @@ Package TP_E_CSCF { } } - } // End of TP_MX_ECSCF_ECO_CANCEL_01 + } // End of TP_MX_ECSCF_EMC_CANCEL_01 Test Purpose { - TP Id TP_MI_ECSCF_ECO_CANCEL_01 + TP Id TP_MI_ECSCF_EMC_CANCEL_01 /* Mx interface at E-CSCF/BGCF */ Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." @@ -798,7 +941,7 @@ Package TP_E_CSCF { } } - } // End of TP_MI_ECSCF_ECO_CANCEL_01 + } // End of TP_MI_ECSCF_EMC_CANCEL_01 Test Purpose { @@ -927,6 +1070,134 @@ Package TP_E_CSCF { } } // End of TP_MI_ECSCF_ECO_480INVITE_01 + + Test Purpose { + + TP Id TP_MM_ECSCF_EMC_487INVITE_01 + /* Mm interface at E-CSCF/IM CN subsystem of own network */ + Test objective "Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VxLTE_INT + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IM_CN entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MM_ECSCF_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MX_ECSCF_EMC_487INVITE_01 + /* Mx interface at E-CSCF/IBCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_IBCF_A entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MX_ECSCF_EMC_487INVITE_01 + + Test Purpose { + + TP Id TP_MI_ECSCF_EMC_487INVITE_01 + /* Mx interface at E-CSCF/BGCF */ + + Test objective "Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.11.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the IMS_E_CSCF entity supportsRoutingTo the BGCF and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + } + + Expected behaviour + ensure that { + when { + the IMS_E_CSCF entity receives a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + from the IMS_BGCF_A entity + } + then { + the IMS_E_CSCF entity sends a 487INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE; + to the IMS_P_CSCF_A entity + } + } + + } // End of TP_MI_ECSCF_EMC_487INVITE_01 } // End of Package TP_E_CSCF diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index 45b0645..b049914 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -396,6 +396,52 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_ECO_INVITE_04 + Test Purpose { + + TP Id TP_MW_PCSCF_ECO_INVITE_05 + + Test objective "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + + Reference + "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_P_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + PAssertedIdentity, + MessageBody; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends an INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_P_CSCF_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_ECO_INVITE_05 + Test Purpose { TP Id TP_MW_PCSCF_ECO_480INVITE_01 @@ -593,7 +639,7 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_MW_PCSCF_ECO_CANCEL_01 + TP Id TP_MW_PCSCF_EMC_CANCEL_01 Test objective "Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment." @@ -633,7 +679,93 @@ Package TP_MW_PS { } } - } // End of TP_MW_PCSCF_ECO_CANCEL_01 + } // End of TP_MW_PCSCF_EMC_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_EMC_200OK_CANCEL_01 + + Test objective "Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 200_Ok containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_EMC_200OK_CANCEL_01 + + Test Purpose { + + TP Id TP_MW_PCSCF_EMC_487INVITE_01 + // TP_MW_PCSCF_487INVITE_01 from ETSI TS 103 653-1 + + Test objective "Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg)." + + Reference + "ETSI TS 124 229 [1], clauses 5.2.7 and 6.2" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isRequestedToSend a CANCEL + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a 487_INVITE containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_EMC_487INVITE_01 } // End of Package TP_MW_PS diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index bf0f552..e14773e 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -110,7 +110,6 @@ Package Sip_Common { - hasSentINVITETo - supportsRoutingTo - supportsCallbackTo - ; } // End of Domain section diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index b33c7b0..eaa449c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -405,7 +405,7 @@ module AtsImsIot_Diameter_Templates { template Subscription_Data_AVP mw_subscriptionData_emergencyInfo:= { aVP_Header := mw_aVP_Header_any_Code(c_subscription_Data_AVP_Code), - emergency_Info := ? + aVP_Type := ?//emergency_Info := ? FIXME To be reviewed } } //end group S6aHeaderFields diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index d11d47e..ccaa9b5 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -2261,13 +2261,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) - f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 @@ -2355,7 +2355,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) - f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic) @@ -2366,7 +2366,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20 f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 - f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 @@ -2455,7 +2455,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 4) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) - f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 @@ -2465,7 +2465,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 - f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 @@ -2992,7 +2992,7 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, false, true ); // test body // Check that user A starts initial network attachment - f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) + f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) //postamble diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn index 176d04c..3d58b2a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_CX.ttcn @@ -706,6 +706,52 @@ group g_HSS { } } // End of function f_mtc_check_TP_CX_HSS_UAA_02 + function f_mtc_check_TP_CX_HSS_ECO_UAA_02( // FIXME To be reviewed + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var charstring v_publicIdentity := "sip:"&v_userInfoA.publicId&"@"&v_userInfoA.domain; + var template DIAMETER_MSG mw_diameter_msg_pass := { uAR_MSG := mw_UAR(mw_publicIdentity(v_publicIdentity)) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { uAR_MSG := mw_UAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { uAA_MSG := mw_UAA_diamSuccess/*uAA_MSG := mw_UAA_diamSubsequentRegistration*/ }; //TODO:Check TP + mw_diameter_msg_fail := { uAA_MSG := mw_UAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_CX_HSS_UAA_02 - UAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_CX_HSS_ECO_UAA_02 + /** * Starts monitor component behavior for TP_CX_HSS_UAA_03 * @param p_monitorCompRef Reference to monitor component diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index a58f008..f8d01ae 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -272,7 +272,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -488,7 +488,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -675,7 +675,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -828,7 +828,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -947,7 +947,7 @@ module AtsImsIot_TP_behavior_GM { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -956,9 +956,9 @@ module AtsImsIot_TP_behavior_GM { { mw_SipRequest( mw_TP_GM_PCSCF_ECO_REGISTER_05( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other ) ) }, @@ -1548,15 +1548,15 @@ module AtsImsIot_TP_behavior_GM { ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_PSAP); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( -, // FIXME Set expected value - mw_SipUrl_Anonymous, - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, @@ -1774,8 +1774,8 @@ module AtsImsIot_TP_behavior_GM { out SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -1784,7 +1784,7 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, @@ -1834,8 +1834,8 @@ module AtsImsIot_TP_behavior_GM { out SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); // Check the INVITE p_monitorCompRef.start( @@ -1844,11 +1844,11 @@ module AtsImsIot_TP_behavior_GM { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), - mw_recevInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) )) }, { mw_SipRequest(mw_INVITE_Request_Base) }, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index e73f457..1ccc491 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -4,7 +4,7 @@ * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF */ -module AtsImsIot_TP_behavior_MW_EC { +module AtsImsIot_TP_behavior_MW_EC { // TODO: To be removed // LibIms import from LibIms_Templates all; @@ -30,768 +30,4 @@ module AtsImsIot_TP_behavior_MW_EC { import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; - group imsInvite { - - /** - * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity not isRegisteredTo the IMS_A and - * the UE_A entity not isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value "Anonymous", - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * MessageBody; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an INVITE containing - * From indicating value "Anonymous", - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, - * MessageBody; - * to the IMS_E_CSCF entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_ECSCF_INVITE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01 - - /** - * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an registered UE." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.2.10.3 and 5.2.6.3.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PPreferredIdentity, // one or two instances - * MessageBody; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an INVITE containing - * From indicating valuePX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed - * PAssertedIdentity, - * MessageBody; - * to the IMS_E_CSCF entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_PCSCF_INVITE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 - - function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_PCSCF_INVITE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03 - - } // End of group imsInvite - - group ims100Trying { - - /** - * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 100_Trying - * from the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 100_Trying - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_ECSCF_100Trying_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_MW_ECSCF_100Trying_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01 - - } // End of group ims100Trying - - group ims180Ringing { - - /** - * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_ECSCF_180Ringing_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - mw_To_NameAddr_TelUrl( - -, - p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber - ))) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_MW_ECSCF_180RINGING_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01 - - } // End of group ims180Ringing - - group ims183SessionProgress { - - /** - * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing - * From indicating value PX_SAP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_SAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 183_SessionProgress containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_ECSCF_183SessionProgress_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_MW_ECSCF_183SESSION_PROGRESS_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01 - - } // End of group ims183SessionProgress - - group ims200Ok { - - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_EUT_B); - - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), - p_sip.request.msgHeader.toField - ) - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_ECSCF_200OK_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01 - - } // End of group ims200Ok - - group imsAck { - - /** - * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the IMS_E_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_ACK_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_ACK_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01 - - } // End of group imsAck - - group imsBye { - - /** - * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the IMS_E_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_ECO_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 - - function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_ECO_BYE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 - - } // End of group imsBye - - group ims200OkBye { - - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_E_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_ECSCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 - - function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_ECSCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 - - } // End of group ims200OkBye - - group imsCancel { - - function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_MW_ECSCF_CANCEL_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_CANCEL_01 - - } // End of group imsCancel - - group imsTemporaryUnavailable { - - function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_MW_PCSCF_ECO_480TEMPAV_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 - - } // End of group imsTemporaryUnavailable - } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn index e72bdfa..d9ae0d3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_IS.ttcn @@ -193,9 +193,8 @@ module AtsImsIot_TP_behavior_MW_IS { /** * @desc Verify that the I-CSCF successfully processes a first registration (Successful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -206,7 +205,7 @@ module AtsImsIot_TP_behavior_MW_IS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * ; + * Contact indicating value "sos"; * from the IMS_P_CSCF_A entity * } * then { @@ -236,7 +235,7 @@ module AtsImsIot_TP_behavior_MW_IS { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -282,7 +281,7 @@ module AtsImsIot_TP_behavior_MW_IS { )) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_01 - 401 Unauthorized", + "TP_MW_ICSCF_ECO_REGISTER_01 - 401 Unauthorized", false, p_checkMessage ) @@ -400,12 +399,58 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_REGISTER_02 + /** + * @desc Verify that the I-CSCF successfully processes a full registration (Successful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";, + * Contact indicating value "sos"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB";, + * Path, + * ServiceRoute; + * to the IMS_S_CSCF_A entity + * } + * } + */ function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the first REGISTER @@ -559,9 +604,9 @@ module AtsImsIot_TP_behavior_MW_IS { /** * @desc Verify that the I-CSCF successfully processes a invalid first registration (Unsuccessful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyAttachedTo the EPC_A and * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity hasAchievedFirstREGISTER * } * * Expected behaviour @@ -572,20 +617,11 @@ module AtsImsIot_TP_behavior_MW_IS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth", - * not SecurityClient - * ;; + * Authorization indicating value "invalid credentials"; * from the IMS_P_CSCF_A entity * } * then { - * the IMS_I_CSCF_A entity sends an 404_NotFound containing + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID @@ -599,7 +635,7 @@ module AtsImsIot_TP_behavior_MW_IS { in boolean p_checkMessage := true ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -610,7 +646,7 @@ module AtsImsIot_TP_behavior_MW_IS { mw_TP_MW_ICSCF_ECO_REGISTER_03( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" ) ) }, @@ -618,7 +654,7 @@ module AtsImsIot_TP_behavior_MW_IS { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_03 - First request", + "TP_MW_ICSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -629,11 +665,11 @@ module AtsImsIot_TP_behavior_MW_IS { if (not(isbound(v_sip))) { return; } - // Check REGISTER 404 Not Found response + // Check REGISTER 403 Forbidden response p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) }, { @@ -643,7 +679,7 @@ module AtsImsIot_TP_behavior_MW_IS { )) }, {0, omit}, - "TP_MW_ICSCF_REGISTER_03 - 404 Not Found", + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", false, p_checkMessage ) @@ -652,6 +688,178 @@ module AtsImsIot_TP_behavior_MW_IS { } } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_03 + /** + * @desc Verify that the I-CSCF processes an invalid first registration in visited network and sends 403 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 402 Forbidden response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04 + + /** + * @desc Verify that the I-CSCF processes an invalid first registration without SecurityClient header in visited network(GIBA supported) and sends 420 response (Unsuccessful). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_I_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "invalid credentials"; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_I_CSCF_A entity sends an 420_BadExtension containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; + + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_MW_ICSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ // FIXME indicating value "Invalid credentials" + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_MW_ICSCF_ECO_REGISTER_05 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 420 Bad Extension response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_MW_ICSCF_REGISTER_04 - 403 Firbidden", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05 + function f_mtc_check_TP_MW_ICSCF_REGISTER_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := true diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index 8a2afee..8416a9a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -216,11 +216,10 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_01 /** - * @desc Verify that the P-CSCF successfully processes a first registration (Successful). + * @desc Verify that the P-CSCF successfully processes a first emergency registration (Successful) * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A * } * * Expected behaviour @@ -231,7 +230,7 @@ module AtsImsIot_TP_behavior_MW_PS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * ; + * Contact indicating value "sos";; * from the UE_A entity * } * then { @@ -240,13 +239,14 @@ module AtsImsIot_TP_behavior_MW_PS { * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, + * Path, * PChargingVector containing * icid indicating value PX_TO_BE_DEFINED, - * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, - * Require_HDR indicating value "path", - * Supported indicating value "path" - * ;; - * to the IMS_I_CSCF_A entity + * PVisitedNetworkID indicating value PX_TO_BE_DEFINED, + * Require indicating value "path", + * Supported indicating value "path", + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity * and the IMS_P_CSCF_A entity sends an 401_Unauthorized containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, @@ -260,8 +260,7 @@ module AtsImsIot_TP_behavior_MW_PS { * Realm indicating value PX_UE_A_REALM, * Algorithm indicating value PX_UE_A_AUTH_ALG, * Nonce indicating value "not empty", - * qop indicating value "auth";, - * Contact indicating value "sos"; + * qop indicating value "auth";; * to the UE_A entity * } * } @@ -271,7 +270,7 @@ module AtsImsIot_TP_behavior_MW_PS { in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check first REGISTER request @@ -292,7 +291,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_01 - First request", + "TP_MW_PCSCF_ECO_REGISTER_01 - First request", true, p_checkMessage ) @@ -451,12 +450,75 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_02 + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstREGISTER + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Scheme indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * PChargingVector, + * Contact indicating value "sos";; + * to the IMS_I_CSCF_A entity + * and the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); var SipMessage v_sip; // Check the second REGISTER @@ -464,18 +526,18 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipRequest( - mw_TP_MW_PCSCF_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) + mw_TP_MW_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) ) }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_02 - Second request", + "TP_MW_PCSCF_ECO_REGISTER_02 - Second request", true, p_checkMessage ) @@ -618,62 +680,49 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function f_mtc_check_TP_MW_PCSCF_REGISTER_03 /** - * @desc Verify that the P-CSCF successfully processes a invalid first registration (Unsuccessful). + * @desc Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful). * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isNotRegisteredTo the IMS_B and + * the UE_B entity isNotRegisteredTo the IMS_B and + * the UE_A entity hasAchievedFirstREGISTER * } * * Expected behaviour * ensure that { * when { - * the IMS_P_CSCF_A entity receives a REGISTER containing + * the IMS_P_CSCF_B entity receives a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; + * Authorization indicating value "invalid credentials"; * from the UE_A entity * } * then { - * the IMS_P_CSCF_A entity sends a REGISTER containing + * the IMS_P_CSCF_B entity sends a REGISTER containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; - * to the IMS_I_CSCF_A entity - * and the IMS_I_CSCF_A entity sends an 404_NotFound containing + * Authorization indicating value "invalid credentials", + * PChargingVector, + * PVisitedNetwork; + * to the IMS_I_CSCF_B entity + * and the IMS_P_CSCF_B entity sends an 403_Forbidden containing * From indicating value PX_UE_A_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * ; - * to the IMS_P_CSCF_A entity + * CallId indicating value PX_UE_A_CALLID; + * to the UE_A entity * } * } */ function f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS var SipMessage v_sip; // Check the first REGISTER @@ -684,7 +733,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_TP_MW_PCSCF_ECO_REGISTER_01( mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, + mw_Authorization_other, // FIXME indicating value "invalid credentials" -, -, mw_contact(mw_ContactAddress) ) @@ -692,7 +741,7 @@ module AtsImsIot_TP_behavior_MW_PS { }, { mw_SipRequest(mw_REGISTER_Request_Base) }, {0, omit}, - "TP_MW_PCSCF_REGISTER_03 - First request", + "TP_MW_PCSCF_ECO_REGISTER_03 - First request", true, p_checkMessage ) @@ -703,11 +752,11 @@ module AtsImsIot_TP_behavior_MW_PS { if (not(isbound(v_sip))) { return; } - // Check REGISTER 404 Not Found response + // Check REGISTER 403 Forbidden response p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) }, { @@ -1436,6 +1485,73 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_01 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an unregistered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_01 + /** * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). * Initial conditions with { @@ -1517,6 +1633,80 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_02 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_psap.publicId}, v_psap.publicId, v_psap.domain), + mw_From_AddrUnion_TelUrl(v_psap.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02 + function f_mtc_check_TP_MW_PCSCF_INVITE_03( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1550,6 +1740,76 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_03 + /** + * @desc "Verify that the P-CSCF successfully processes an initial INVITE from a registered but not emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03 + function f_mtc_check_TP_MW_PCSCF_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -1583,6 +1843,154 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_INVITE_04 + /** + * @desc "Verify that the P-CSCF rejects an initial INVITE from a not emergency registered UE + * if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody containing + * XML containing + * Version indicating value "1", + * Type_child indicating value "emergency", + * Reason_child, + * Action_child;;; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + mw_MBody_MIME_Ims3gpp( + *, + mw_Ims_Eco_3gpp_CW + ))) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_04 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP towards P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.2.10.2 and 5.2.6.3.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_ECO_INVITE_05( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_INVITE_ECO_05 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_INVITE_05 + /** * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). * Initial conditions with { @@ -1847,6 +2255,32 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_100Trying_01 + function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01 + /** * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2011,6 +2445,34 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_180RINGING_01 + function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01 + /** * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg).. * Initial conditions with { @@ -2189,6 +2651,32 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_183SESSION_PROGRESS_01 + function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MW_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01 + /** * @desc Verify that the P-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Terminating Leg).. * Initial conditions with { @@ -2371,7 +2859,41 @@ module AtsImsIot_TP_behavior_MW_PS { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MW_PCSCF_200OK_01", + "TP_MW_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=v_psapInfo.publicId}), + mw_To_AddrUnion_TelUrl(v_psapInfo.publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_01", false, p_checkMessage ) @@ -2379,7 +2901,7 @@ module AtsImsIot_TP_behavior_MW_PS { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MW_PCSCF_200OK_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_01 /** * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). @@ -2566,6 +3088,34 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_ACK_01 + function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_ACK_01 + /** * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Terminating Leg). * Initial conditions with { @@ -2751,6 +3301,98 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_E_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). * Initial conditions with { @@ -3029,6 +3671,60 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_200OK_BYE_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_01 + + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_ECSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_BYE_02 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). * Initial conditions with { @@ -3258,6 +3954,67 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MW_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MW_PCSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). * Initial conditions with { @@ -3443,6 +4200,33 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_200OK_CANCEL_01 + function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MW_PCSCF_ECO_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_200OK_CANCEL_01 + /** * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). * Initial conditions with { @@ -3862,7 +4646,37 @@ module AtsImsIot_TP_behavior_MW_PS { } } // End of function f_mtc_check_TP_MW_PCSCF_487INVITE_01 - function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01( + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity isRequestedToSend a CANCEL + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -3895,7 +4709,7 @@ module AtsImsIot_TP_behavior_MW_PS { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_487INVITE_01 + } // End of function f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01 /** * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) to reject call (Terminating Leg). @@ -4036,4 +4850,35 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of group imsRequestTermination + group imsTemporaryUnavailable { + + function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MW_PCSCF_ECO_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + + } // End of group imsTemporaryUnavailable + } // End of module AtsImsIot_TP_behavior_MW_PS diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn index 3604831..f7ad97b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates.ttcn @@ -11,11 +11,20 @@ module AtsImsIot_Templates { import from LibIot_TypesAndValues all; import from AtsImsIot_TypesAndValues all; import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_XMLTypes all; import from LibSip_Templates all; import from LibSip_Common all; import from LibMsrp_TypesAndValues all; + import from LibIms_Templates all; import from LibIot_PIXITS all; import from AtsImsIot_PIXITS all; + + import from XSD all; + import from NoTargetNamespace language "XSD" all + with { + extension "File:../xsd/Ims3gpp.xsd"; + } group adapterMsgTemplates { template SetFilterReq m_SetFilterReq(ProtocolFilter p_protocol, InterfaceInfoList p_iterfaces) := { @@ -2565,7 +2574,7 @@ module AtsImsIot_Templates { template InfoPackage_List p_infoPackageList := ? ) := { fieldName := RECV_INFO_E, - infoPackageList := l_infoPackageList + infoPackageList := p_infoPackageList } template(present) PPreferredID mw_PPreferredID( @@ -2664,6 +2673,21 @@ module AtsImsIot_Templates { } // End of group AuxiliaryInformationElementTemplates + group messageBody_XML { + + template(present) TIMS3GPP mw_Ims_Eco_3gpp_CW modifies mw_Ims_3gpp_CW := { + choice := { + alternative_service := { + type_ := { + attr := { "emergency" }, + elem_list := ? + } + } + } + } + + } // End of group messageBody_XML + group adapterTemplates { template GeneralConfigurationReq m_generalConfigurationReq_offline := { diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 3e91695..cb0acdb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_GM { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -219,7 +220,7 @@ module AtsImsIot_Templates_GM { msgHeader := { contact := p_contact, path := p_path, - Warning := p_warning + warning := p_warning } } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_01 @@ -295,6 +296,18 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_REGISTER_01 := { } // End of template mw_TP_GM_PCSCF_REGISTER_04 + template(present) REGISTER_Request mw_TP_GM_PCSCF_ECO_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_GM_PCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_GM_PCSCF_ECO_REGISTER_05 + template(present) REGISTER_Request mw_TP_GM_PCSCF_REGISTER_07( template (present) From p_from := ?, template (present) To p_to := ?, @@ -412,7 +425,7 @@ module AtsImsIot_Templates_GM { msgHeader := { contact := p_contact }, - bessageBody := p_messageBody + messageBody := p_messageBody } // End of template mw_TP_GM_PCSCF_ECO_INVITE_01 template (present) INVITE_Request mw_TP_GM_PCSCF_INVITE_02( // TODO To be enforced diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index 05dd774..ad1de23 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_MW { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -54,12 +55,18 @@ module AtsImsIot_Templates_MW { template (present) Authorization p_authorization := ?, template PChargingVector p_pChargingVector := *, template PVisitedNetworkID p_pVisitedNetworkID := *, - template (present) Contact p_contact := ? + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ? ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { msgHeader := { - contact := p_contact + contact := p_contact, + path := p_path, + warning := p_warning, + pAccessNetworkInfo := p_pAccessNetworkInfo } - } // End of template mw_TP_MW_PCSCF_REGISTER_01 + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_01 template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_02( template (present) From p_from := ?, @@ -70,6 +77,23 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_REGISTER_01 := { } // End of template mw_TP_MW_PCSCF_REGISTER_02 + template(present) REGISTER_Request mw_TP_MW_PCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template (present) Path p_path := ?, + template (present) Warning p_warning := ?, + template (present) PAccessNetworkInfo p_pAccessNetworkInfo := ?, + template (present) ServiceRoute p_serviceRoute := ? + ) modifies mw_TP_MW_PCSCF_ECO_REGISTER_01 := { + msgHeader := { + serviceRoute := p_serviceRoute + } + } // End of template mw_TP_MW_PCSCF_ECO_REGISTER_02 + template(present) REGISTER_Request mw_TP_MW_PCSCF_REGISTER_04( template (present) From p_from := ?, template (present) To p_to := ?, @@ -228,12 +252,38 @@ module AtsImsIot_Templates_MW { } } // End of template mw_TP_MW_PCSCF_INVITE_01 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_MW_PCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_02( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ? ) modifies mw_TP_MW_PCSCF_INVITE_01 := { - } // End of template mw_TP_MW_PCSCF_INVITE_03 + } // End of template mw_TP_MW_PCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pAssertedID := p_pAssertedID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_02 template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_03( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, @@ -242,6 +292,16 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_INVITE_01 := { } // End of template mw_TP_MW_PCSCF_INVITE_03 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_03 + template (present) INVITE_Request mw_TP_MW_PCSCF_INVITE_04( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -249,6 +309,29 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_PCSCF_INVITE_01 := { } // End of template mw_TP_MW_PCSCF_INVITE_04 + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_02 := { + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_MW_PCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ? + ) modifies mw_TP_MW_PCSCF_ECO_INVITE_01 := { + msgHeader := { + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_MW_PCSCF_ECO_INVITE_04 + template (present) INVITE_Request mw_TP_MW_PCSCF_RE_INVITE_01( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, @@ -344,10 +427,10 @@ module AtsImsIot_Templates_MW { } // End of template mw_TP_MW_PCSCF_180Ringing_04 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_01( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_183SessionProgress_Base := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { msgHeader := { cSeq := p_cSeq, fromField := p_from, @@ -356,24 +439,24 @@ module AtsImsIot_Templates_MW { } // End of template mw_TP_MW_PCSCF_183SessionProgress_01 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_02( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_02 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_03( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_03 template (present) Response mw_TP_MW_PCSCF_183SessionProgress_04( - template (present) CSeq p_cSeq := ?, - template (present) From p_from := ?, - template (present) To p_to := ? - ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MW_PCSCF_183SessionProgress_01 := { } // End of template mw_TP_MW_PCSCF_183SessionProgress_04 template (present) ACK_Request mw_TP_MW_PCSCF_ACK_01( // TODO To be enforced diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index b63584c..d0b1229 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -2,6 +2,7 @@ sources := \ ttcn/LibDiameter_PIXITS.ttcn \ ttcn/LibDiameter_Interface.ttcn \ ttcn/LibDiameter_Steps.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ @@ -9,7 +10,6 @@ sources := \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ -- GitLab From 6f3ebbeec90d4bb6f819070e63167e11ee0729cc Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Sep 2023 09:56:19 +0200 Subject: [PATCH 67/84] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 48 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 655 ++++++++++-------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn | 38 - ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 560 +++++++-------- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 18 +- ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 56 +- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 74 +- ttcn/patch_lib_diameter_titan/module.mk | 2 +- 8 files changed, 773 insertions(+), 678 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ccaa9b5..0211034 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -691,7 +691,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 f_mtc_check_TP_ML_ECSCF_ECO_3xx_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 @@ -1086,13 +1086,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 - f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 // 183 Session Progress f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 - f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -1103,7 +1103,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 - f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -1112,13 +1112,13 @@ module AtsImsIot_Emergency { f_mtc_userAnswerCall(v_psap); f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK – Event 26 - f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 @@ -1402,7 +1402,7 @@ module AtsImsIot_Emergency { // Test body - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // INVITE Event 1 f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 @@ -1898,7 +1898,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MI_BGCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 + f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 //Rx/Gx exchange after BYE was received at P-CSCF f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 10 @@ -1906,7 +1906,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 20 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 21 @@ -2456,21 +2456,21 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 - f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 - f_mtc_check_TP_MI_BGCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 - f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 - f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 22 + f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 + f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 31 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 32 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 @@ -2566,8 +2566,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 // 480 Temporary Unvailable - f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 - f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 @@ -2674,7 +2674,7 @@ module AtsImsIot_Emergency { // 480 Temporary Unavailable f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) - f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 @@ -2774,14 +2774,14 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MI_BGCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19 - f_mtc_check_TP_MI_BGCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 19 + f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 20 // 480 Temporary Unavailable - f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 - f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 - f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 + f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 25 @@ -2792,7 +2792,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 - f_mtc_check_TP_MI_BGCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MI_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 35 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn index 44d7029..8669444 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -15,6 +15,7 @@ module AtsImsIot_TP_behavior_MI { import from LibIot_PIXITS all; // LibSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; import from LibSip_SDPTypes all; @@ -24,7 +25,6 @@ module AtsImsIot_TP_behavior_MI { import from LibMsrp_Templates all; // AtsImsIot import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; import from AtsImsIot_Templates_MI all; import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; @@ -32,7 +32,45 @@ module AtsImsIot_TP_behavior_MI { group imsInvite { - function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01( + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -44,7 +82,7 @@ module AtsImsIot_TP_behavior_MI { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_01( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -52,7 +90,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MI_BGCF_INVITE_01 - Request", + "TP_MI_ECSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -62,9 +100,43 @@ module AtsImsIot_TP_behavior_MI { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_01 - function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02( + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the BGCF + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_LRF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, out SipMessage p_sip @@ -76,7 +148,7 @@ module AtsImsIot_TP_behavior_MI { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_INVITE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_02( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -84,7 +156,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MI_BGCF_INVITE_01 - Request", + "TP_MI_ECSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -94,34 +166,84 @@ module AtsImsIot_TP_behavior_MI { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); log("##### p_sip: ", p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_INVITE_02 - - } // End of group imsInvite + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_02 - group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from PSAP in the PSTN over BGCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clause 4.1 item 12" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B + * the IMS_E_CSCF entity supportsRoutingTo the BGCF * } - * * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 100_Trying - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 100_Trying - * to the IMS_P_CSCF_A entity + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_PSAP_TEL_URI,// see 5.11.2 6) b) + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_BGCF_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_P_CSCD_SERVICE_ROUTE, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01( + function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -130,7 +252,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 100 TRYING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_100Trying_01( + { mw_SipResponse(mw_TP_MI_ECSCF_100Trying_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -138,53 +260,20 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_100Trying_Base) }, { 0, omit }, - "TP_MI_BGCF_100Trying_01", + "TP_MI_ECSCF_ECO_100Trying_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_100Trying_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_100Trying_01 } // End of group ims100Trying group ims180Ringing { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01( + function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -193,7 +282,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 180 RINGING p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_180Ringing_01( + { mw_SipResponse(mw_TP_MI_ECSCF_180Ringing_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, mw_To_NameAddr_TelUrl( @@ -203,53 +292,20 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_180Ringing_Base) }, { 0, omit }, - "TP_MI_BGCF_180RINGING_01", + "TP_MI_ECSCF_ECO_180RINGING_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_180RINGING_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_180RINGING_01 } // End of group ims180Ringing group ims183SessionProgress { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing - * From indicating value PX_SAP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_SAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01( + function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, in SipMessage p_sip @@ -258,7 +314,7 @@ module AtsImsIot_TP_behavior_MI { // Check the 183 SESSION_PROGRESS p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MI_BGCF_183SessionProgress_01( + { mw_SipResponse(mw_TP_MI_ECSCF_183SessionProgress_01( p_sip.request.msgHeader.cSeq, p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField @@ -266,63 +322,24 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_183SessionProgress_Base) }, { 0, omit }, - "TP_MI_BGCF_183SESSION_PROGRESS_01", + "TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_183SESSION_PROGRESS_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01 } // End of group ims183SessionProgress group ims200Ok { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MI_BGCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); @@ -342,7 +359,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MI_BGCF_200OK_01", + "TP_MI_ECSCF_ECO_200OK_01", false, p_checkMessage ) @@ -350,121 +367,141 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_01 } // End of group ims200Ok group imsAck { + function f_mtc_check_TP_MI_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MI_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MI_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { - * the IMS_E_CSCF_A entity receives an ACK containing + * the IMS_E_CSCF_A entity receives a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; + * Route indicating value PX_UE_A_SERVICE_ROUTE; * from the IMS_P_CSCF_A entity * } * then { - * the IMS_E_CSCF_A entity sends an ACK containing + * the IMS_E_CSCF_A entity sends a BYE containing * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, * CallId indicating value PX_UE_A_CALLID, * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the PSAP entity + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { - // Check the ACK + // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_ACK_01( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, + -, // New CSeq, -, // FIXME To be set p_sip.request.msgHeader.fromField, p_sip.request.msgHeader.toField )) }, - { mw_SipRequest(mw_ACK_Request_Base) }, + { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_ACK_01 - Request", - false, + "TP_MI_ECSCF_ECO_BYE_01 - Request", + true, p_checkMessage ) ); p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_ACK_01 - - } // End of group imsAck - - group imsBye { - + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_01 + /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, + * From indicating value PX_PSAP_SIP_URI, * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity + * CallId indicating value PX_PSAP_CALLID, + * Via indicating value PX_PSAP_CALLID; + * from the IM_CN entity * } * then { * the IMS_E_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the PSAP entity + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity * } * } */ - function f_mtc_check_TP_MI_BGCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_BYE_01( + { mw_SipRequest(mw_TP_MI_ECSCF_BYE_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -482,7 +519,7 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipRequest(mw_BYE_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_BYE_01 - Request", + "TP_MI_ECSCF_ECO_BYE_02 - Request", true, p_checkMessage ) @@ -491,54 +528,17 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_BYE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_BYE_02 } // End of group imsBye group ims200OkBye { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE p_monitorCompRef.start( @@ -552,20 +552,49 @@ module AtsImsIot_TP_behavior_MI { }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, - "TP_MI_BGCF_200OK_BYE_01", + "TP_MI_ECSCF_ECO_200OK_BYE_01", false, p_checkMessage ) ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_200OK_BYE_01 + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_200OK_BYE_01 } // End of group ims200OkBye group imsCancel { - function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01( + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity hasAchievedInitialEmergencyINVITE the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -574,25 +603,17 @@ module AtsImsIot_TP_behavior_MI { // Check the CANCEL p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MI_BGCF_CANCEL_01( + { mw_SipRequest(mw_TP_MI_ECSCF_CANCEL_01( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MI_BGCF_CANCEL_01 - Request", + "TP_MI_ECSCF_ECO_CANCEL_01 - Request", true, p_checkMessage ) @@ -601,13 +622,42 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01 } // End of group imsCancel - group imsRequestTermination { + group imsTemporaryUnavailable { - function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01( + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -617,21 +667,13 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) }, { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MI_BGCF_487INVITE_01", + "TP_MI_ECSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -640,13 +682,42 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_487INVITE_01 - - } // End of group imsRequestTermination + } // End of function f_mtc_check_TP_MI_ECSCF_ECO_480INVITE_01 - group imsTemporaryUnavailable { + } // End of group imsTemporaryUnavailable + + group imsRequestTermination { - function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01( + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the BGCF and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_BGCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_BGCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -656,13 +727,21 @@ module AtsImsIot_TP_behavior_MI { p_monitorCompRef.start( f_Iot_Sip_receive( { - mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) }, { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MI_BGCF_480TEMPAV_01", + "TP_MI_ECSCF_EMC_487INVITE_01", true, p_checkMessage ) @@ -671,8 +750,8 @@ module AtsImsIot_TP_behavior_MI { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MI_BGCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MI_ECSCF_EMC_487INVITE_01 - } // End of group imsTemporaryUnavailable + } // End of group imsRequestTermination } // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn index 911d621..2cc6b3a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ML.ttcn @@ -108,44 +108,6 @@ module AtsImsIot_TP_behavior_ML { } } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01 - function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); - - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_ML_ECSCF_INVITE_01( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_psapInfo.publicId}, v_psapInfo.publicId, v_psapInfo.domain), - mw_From_AddrUnion_TelUrl(v_psapInfo.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_ML_ECSCF_ECO_INVITE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_ML_ECSCF_ECO_INVITE_02 - } // End of group imsInvite group ims3xxx { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index b029915..34c018c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -33,40 +33,40 @@ module AtsImsIot_TP_behavior_MM { /** * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.11.2" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the IMS_E_CSCF entity supportsRoutingTo the IM_CN - * } - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_P_CSCF_A_VIA, - * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed - * PAssertedIdentity, - * MessageBody; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF entity sends an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_E_CSCF_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, - * RecordRoute PX_E_CSCF_SERVICE_ROUTE, - * PChargingVector, - * MessageBody; - * to the IM_CN entity - * } - * } - */ + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -87,7 +87,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_ECSCF_INVITE_01 - Request", + "TP_MM_ECSCF_ECO_INVITE_01 - Request", true, p_checkMessage ) @@ -99,6 +99,39 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01 + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -111,7 +144,7 @@ module AtsImsIot_TP_behavior_MM { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_02( -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId @@ -119,7 +152,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_INVITE_Request_Base) }, {0, omit}, - "TP_MM_ECSCF_INVITE_01 - Request", + "TP_MM_ECSCF_ECO_INVITE_02 - Request", true, p_checkMessage ) @@ -131,31 +164,79 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_02 - } // End of group imsInvite - - group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * @desc "Verify that the E-CSCF successfully processes an callback INVITE from PSAP over the IM CN subsystem of own network and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN * } - * * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 100_Trying - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 100_Trying - * to the IMS_P_CSCF_A entity + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * not PChargingFunctionAddresses, + * PChargingVector, + * MessageBody; + * to the IMS_P_CSCF_A entity * } * } - */ + */ + function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MM_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + function f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -186,39 +267,6 @@ module AtsImsIot_TP_behavior_MM { group ims180Ringing { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -251,39 +299,6 @@ module AtsImsIot_TP_behavior_MM { group ims183SessionProgress { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing - * From indicating value PX_SAP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_SAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -314,45 +329,6 @@ module AtsImsIot_TP_behavior_MM { group ims200Ok { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_200OK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -391,39 +367,6 @@ module AtsImsIot_TP_behavior_MM { group imsAck { - /** - * @desc Verify that the IMS_E_CSCF_A successfully processes a ACK provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the PSAP entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -457,36 +400,32 @@ module AtsImsIot_TP_behavior_MM { group imsBye { /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP * } * * Expected behaviour * ensure that { * when { * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE * ; * from the IMS_P_CSCF_A entity * } * then { * the IMS_E_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the PSAP entity + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity * } * } */ @@ -503,16 +442,8 @@ module AtsImsIot_TP_behavior_MM { p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField )) }, { mw_SipRequest(mw_BYE_Request_Base) }, @@ -528,6 +459,33 @@ module AtsImsIot_TP_behavior_MM { } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_BYE_01 + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_BYE_02( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -537,7 +495,7 @@ module AtsImsIot_TP_behavior_MM { // Check the BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MM_ECSCF_BYE_01( + { mw_SipRequest(mw_TP_MM_ECSCF_BYE_02( p_sip.request.msgHeader.callId, -, // New CSeq, -, // FIXME To be set @@ -570,58 +528,21 @@ module AtsImsIot_TP_behavior_MM { group ims200OkBye { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the PSAP entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity - * } - * } - */ function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the 200 OK BYE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, { mw_SipResponse(mw_200OK_Base) }, { 0, omit }, @@ -638,6 +559,35 @@ module AtsImsIot_TP_behavior_MM { group imsCancel { + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, @@ -680,7 +630,36 @@ module AtsImsIot_TP_behavior_MM { group imsRequestTermination { - function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01( + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -704,7 +683,7 @@ module AtsImsIot_TP_behavior_MM { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MM_ECSCF_487INVITE_01", + "TP_MM_ECSCF_EMC_487INVITE_01", true, p_checkMessage ) @@ -713,13 +692,42 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_487INVITE_01 + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_487INVITE_01 } // End of group imsRequestTermination group imsTemporaryUnavailable { - function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01( + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IM_CN entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -735,7 +743,7 @@ module AtsImsIot_TP_behavior_MM { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MM_ECSCF_480TEMPAV_01", + "TP_MM_ECSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -744,7 +752,7 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01 } // End of group imsTemporaryUnavailable diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index 8416a9a..de07262 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -4825,12 +4825,12 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) ) }, { @@ -4852,7 +4852,7 @@ module AtsImsIot_TP_behavior_MW_PS { group imsTemporaryUnavailable { - function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01( + function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -4868,7 +4868,7 @@ module AtsImsIot_TP_behavior_MW_PS { mw_SipResponse(mdw_4XX_Base) }, { 0, omit }, - "TP_MW_PCSCF_ECO_480TEMPAV_01", + "TP_MW_PCSCF_ECO_480INVITE_01", true, p_checkMessage ) @@ -4877,7 +4877,7 @@ module AtsImsIot_TP_behavior_MW_PS { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480TEMPAV_01 + } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01 } // End of group imsTemporaryUnavailable diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn index 448ec57..3a4b5fa 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -29,12 +29,12 @@ module AtsImsIot_Templates_MI { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MI_BGCF_INVITE_01 - */ - template(present) INVITE_Request mw_TP_MI_BGCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, - template (present) From p_from := ?, - template (present) To p_to := ?) - modifies mw_INVITE_Request_Base := { + * @desc INVITE Request checking TP_MI_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_INVITE_Request_Base := { msgHeader := { fromField := p_from, toField := p_to, @@ -42,13 +42,13 @@ module AtsImsIot_Templates_MI { fieldName := ROUTE_E, routeBody := { *, - complement(mw_routeBody(p_IBCF_SIP_URI)), + complement(mw_routeBody(p_invite_uri)), * } }, omit), recordRoute := { fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} + routeBody := {mw_routeBody(p_invite_uri), *} }, pChargingVector := { fieldName := P_CHARGING_VECTOR_E, @@ -68,7 +68,25 @@ module AtsImsIot_Templates_MI { } } - template (present) Response mw_TP_MI_BGCF_100Trying_01( + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + } + + template(present) INVITE_Request mw_TP_MI_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?) + modifies mw_TP_MI_ECSCF_INVITE_01 := { + msgHeader := { + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + } + } + } + + template (present) Response mw_TP_MI_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -78,9 +96,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_100Trying_01 + } // End of template mw_TP_MI_ECSCF_100Trying_01 - template (present) Response mw_TP_MI_BGCF_180Ringing_01( + template (present) Response mw_TP_MI_ECSCF_180Ringing_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -90,9 +108,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_180Ringing_01 + } // End of template mw_TP_MI_ECSCF_180Ringing_01 - template (present) Response mw_TP_MI_BGCF_183SessionProgress_01( + template (present) Response mw_TP_MI_ECSCF_183SessionProgress_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, template (present) To p_to := ? @@ -102,9 +120,9 @@ module AtsImsIot_Templates_MI { fromField := p_from, toField := p_to } - } // End of template mw_TP_MI_BGCF_183SessionProgress_01 + } // End of template mw_TP_MI_ECSCF_183SessionProgress_01 - template (present) ACK_Request mw_TP_MI_BGCF_ACK_01( // TODO To be enforced + template (present) ACK_Request mw_TP_MI_ECSCF_ACK_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_ack_uri := ?, @@ -129,9 +147,9 @@ module AtsImsIot_Templates_MI { } } } - } // End of template mw_TP_MI_BGCF_ACK_01 + } // End of template mw_TP_MI_ECSCF_ACK_01 - template (present) BYE_Request mw_TP_MI_BGCF_BYE_01( // TODO To be enforced + template (present) BYE_Request mw_TP_MI_ECSCF_BYE_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -158,7 +176,7 @@ module AtsImsIot_Templates_MI { } } // End of template mw_TP_MW_PCSCF_BYE_01 - template (present) CANCEL_Request mw_TP_MI_BGCF_CANCEL_01( // TODO To be enforced + template (present) CANCEL_Request mw_TP_MI_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, template (present) SipUrl p_bye_uri := ?, @@ -183,6 +201,6 @@ module AtsImsIot_Templates_MI { } } } - } // End of template mw_TP_MI_BGCF_CANCEL_01 + } // End of template mw_TP_MI_ECSCF_CANCEL_01 } // End of module AtsImsIot_Templates_MI diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index 0a37e1e..bcfd154 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_MM { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -29,11 +30,15 @@ module AtsImsIot_Templates_MM { import from AtsImsIot_Templates all; /** - * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 - */ - template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_IBCF_SIP_URI := ?, - template (present) From p_from := ?, - template (present) To p_to := ?) + * @desc INVITE Request checking TP_MM_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) modifies mw_INVITE_Request_Base := { msgHeader := { fromField := p_from, @@ -42,32 +47,43 @@ module AtsImsIot_Templates_MM { fieldName := ROUTE_E, routeBody := { *, - complement(mw_routeBody(p_IBCF_SIP_URI)), + complement(mw_routeBody(p_invite_uri)), * } }, omit), recordRoute := { fieldName := RECORD_ROUTE_E, - routeBody := {mw_routeBody(p_IBCF_SIP_URI), *} - }, - pChargingVector := { - fieldName := P_CHARGING_VECTOR_E, - chargeParams := { - *, -// {id := "icid-value", paramValue := ?}, - *, - {id := "orig-ioi", paramValue := ?}, - *, -// complement({id := "term-ioi", paramValue := ?}), - *, - complement({id := "access-network-charging-info", paramValue := ?}), - * - } + routeBody := {mw_routeBody(p_invite_uri), *} }, - pAccessNetworkInfo := omit + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit } } + template(present) INVITE_Request mw_TP_MM_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, @@ -156,7 +172,19 @@ module AtsImsIot_Templates_MM { } } } - } // End of template mw_TP_MW_PCSCF_BYE_01 + } // End of template mw_TP_MM_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MM_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MM_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MM_ECSCF_BYE_02 template (present) CANCEL_Request mw_TP_MM_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, diff --git a/ttcn/patch_lib_diameter_titan/module.mk b/ttcn/patch_lib_diameter_titan/module.mk index d0b1229..110c113 100644 --- a/ttcn/patch_lib_diameter_titan/module.mk +++ b/ttcn/patch_lib_diameter_titan/module.mk @@ -6,11 +6,11 @@ sources := \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Templates.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn \ - ../patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_TypesAndValues.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn \ ../patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn \ + ../patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn \ -- GitLab From fdeb971be8f2960558560ea660ee24e7fc77db62 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 19 Sep 2023 11:04:58 +0200 Subject: [PATCH 68/84] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 8 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 74 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 36 +- .../AtsImsIot_TP_behavior_MW_EB.ttcn | 1603 +++++++++-------- .../AtsImsIot_TP_behavior_MW_EC.ttcn | 60 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn | 823 +++++++++ .../AtsImsIot_TP_behavior_Mx_LRF.ttcn | 98 - ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn | 9 - ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn | 225 +++ ttcn/AtsImsIot/module.mk | 5 +- 10 files changed, 1936 insertions(+), 1005 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn delete mode 100644 ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 8f99c15..7e5f51a 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -662,7 +662,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -705,7 +705,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -1001,7 +1001,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour @@ -1129,7 +1129,7 @@ Package TP_E_CSCF { Initial conditions with { the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and - the UE_A entity previouslyEstablishedEmergencyCallWith the PSA via IMS_IBCF_A + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A } Expected behaviour diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 0211034..02c6b72 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -28,9 +28,7 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_MW_PS all; import from AtsImsIot_TP_behavior_MW_SI all; import from AtsImsIot_TP_behavior_MW_IS all; - import from AtsImsIot_TP_behavior_MW_EC all; - import from AtsImsIot_TP_behavior_MW_EB all; - import from AtsImsIot_TP_behavior_Mx_LRF all; // FIXME Rename into MX_ + import from AtsImsIot_TP_behavior_MX all; import from AtsImsIot_TP_behavior_MM all; import from AtsImsIot_TP_behavior_MI all; import from AtsImsIot_TP_behavior_ML all; @@ -816,8 +814,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) @@ -825,7 +823,7 @@ module AtsImsIot_Emergency { // 183 Session Progress f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic, -); // 183 Event 13 - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 + f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 14 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 20 @@ -836,7 +834,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 19 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic); // 180 Ringing – Event 22 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 + f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 23 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 @@ -848,13 +846,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 26 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 26 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 27 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 28 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 29 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 30 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 31 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 32 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 33 f_mtc_userCheckCallEstablished(v_ueA); // Event 34 @@ -952,11 +950,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // FIXME f_mtc_check_TP_MW_IBCF_xxx <--> f_mtc_check_TP_ML_EBCF_xxx - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mlE_LRF); // Event 11 + f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MW_IBCF_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 @@ -964,7 +962,7 @@ module AtsImsIot_Emergency { // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 @@ -975,7 +973,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 @@ -987,13 +985,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 f_mtc_userCheckCallEstablished(v_ueA); // Event 36 @@ -1217,15 +1215,15 @@ module AtsImsIot_Emergency { f_mtc_check_TP_ML_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 11 f_mtc_check_TP_MX_LRF_3xxAny_01(vc_vxlte_monitor_components.mlE_LRF, -, v_sip); // Event 12 - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 13 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic, true); // INVITE Event 14 f_mtc_check_TP_IC_IBCF_183RESP_01(vc_vxlte_monitor_components.ic,-); // 183 Event 15 // 183 Session Progress - f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 24 @@ -1236,7 +1234,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 21 f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.ic, true); // 180 Ringing – Event 24 - f_mtc_check_TP_MW_IBCF_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 + f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 25 f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 26 f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 27 @@ -1248,13 +1246,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_2XXRESP_02(vc_vxlte_monitor_components.ic, true); // 200 OK – Event 28 f_mtc_check_TP_IC_IBCF_2XXRESP_03(vc_vxlte_monitor_components.ic); // 200 OK – Event 28 - f_mtc_check_TP_MW_IBCF_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 29 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 30 f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 31 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 32 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 33 - f_mtc_check_TP_MW_IBCF_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 34 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic); // ACK – Event 35 f_mtc_userCheckCallEstablished(v_ueA); // Event 36 @@ -1507,8 +1505,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // Event 2 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.ic, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 3 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 3 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); @@ -1610,8 +1608,8 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_IC_IBCF_INVITE_02(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 5 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); @@ -1734,7 +1732,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 @@ -1812,7 +1810,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 - f_mtc_check_TP_MW_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 6 //Rx/Gx exchange after BYE was received at P-CSCF @@ -1821,7 +1819,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 12) f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 13) - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 f_mtc_check_TP_GM_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 @@ -2160,7 +2158,7 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_check_TP_MW_IBCF_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 @@ -2262,7 +2260,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 - f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 + f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -2356,22 +2354,22 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 - f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 + f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // 200 CANCEL – Event 11 - f_mtc_check_TP_MW_IBCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 f_mtc_check_TP_IC_IBCF_487INVITE_01(vc_vxlte_monitor_components.ic); // Event 20 - f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 + f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 21 f_mtc_check_TP_MW_PCSCF_EMC_487INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 f_mtc_check_TP_GM_PCSCF_487INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 26 f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 - f_mtc_check_TP_MW_IBCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 29 f_mtc_check_TP_IC_IBCF_ACK_01(vc_vxlte_monitor_components.ic, true); // Event 30 f_mtc_userCheckCallTerminated(v_ueA); // Event 33 @@ -2457,7 +2455,7 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 - f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 + f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 @@ -2667,8 +2665,8 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MW_IBCF_INVITE_01(vc_vxlte_monitor_components.mwEB); // Event 11 - f_mtc_check_TP_MW_IBSCF_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); + f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 34c018c..c052257 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -368,10 +368,10 @@ module AtsImsIot_TP_behavior_MM { group imsAck { function f_mtc_check_TP_MM_ECSCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)) { // Check the ACK p_monitorCompRef.start( @@ -386,7 +386,7 @@ module AtsImsIot_TP_behavior_MM { }, { mw_SipRequest(mw_ACK_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_ACK_01 - Request", + "TP_MM_ECSCF_ECO_ACK_01 - Request", false, p_checkMessage ) @@ -588,7 +588,7 @@ module AtsImsIot_TP_behavior_MM { * } * } */ - function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01( + function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01( in SipInterfaceMonitor p_monitorCompRef, in boolean p_checkMessage := false, inout SipMessage p_sip @@ -598,24 +598,16 @@ module AtsImsIot_TP_behavior_MM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MM_ECSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) }, { mw_SipRequest(mw_CANCEL_Request_Base) }, { 0, omit }, - "TP_MM_ECSCF_CANCEL_01 - Request", + "TP_MM_ECSCF_EMC_CANCEL_01 - Request", true, p_checkMessage ) @@ -624,7 +616,7 @@ module AtsImsIot_TP_behavior_MM { // Retrieve messge f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } - } // End of function f_mtc_check_TP_MM_ECSCF_ECO_CANCEL_01 + } // End of function f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01 } // End of group imsCancel diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn index eaf605c..4d1c3fb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EB.ttcn @@ -1,841 +1,842 @@ -/** - * @author TTF T010 - * @version $Id$ - * @desc This module provides the TP behaviour functions at Mw interface at E-CSCF/IBCF - */ +// TODO To be removed +// /** +// * @author TTF T010 +// * @version $Id$ +// * @desc This module provides the TP behaviour functions at Mw interface at E-CSCF/IBCF +// */ -module AtsImsIot_TP_behavior_MW_EB { +// module AtsImsIot_TP_behavior_MW_EB { - // LibIms - import from LibIms_Templates all; - import from LibIms_UpperTester all; - // LibIot - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; - import from LibIot_TestInterface all; - import from LibIot_PIXITS all; - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Common all; - import from LibSip_SDPTypes all; - // LibMsrp - import from LibMsrp_TypesAndValues all; - import from LibMsrp_Functions all; - import from LibMsrp_Templates all; - // AtsImsIot - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; - import from AtsImsIot_Templates all; - import from AtsImsIot_TypesAndValues all; - import from AtsImsIot_Functions all; +// // LibIms +// import from LibIms_Templates all; +// import from LibIms_UpperTester all; +// // LibIot +// import from LibIot_TypesAndValues all; +// import from LibIot_Functions all; +// import from LibIot_TestInterface all; +// import from LibIot_PIXITS all; +// // LibSip +// import from LibSip_SIPTypesAndValues all; +// import from LibSip_Templates all; +// import from LibSip_Common all; +// import from LibSip_SDPTypes all; +// // LibMsrp +// import from LibMsrp_TypesAndValues all; +// import from LibMsrp_Functions all; +// import from LibMsrp_Templates all; +// // AtsImsIot +// import from AtsImsIot_TestSystem all; +// import from AtsImsIot_Templates_MW all; +// import from AtsImsIot_Templates all; +// import from AtsImsIot_TypesAndValues all; +// import from AtsImsIot_Functions all; - group imsInvite { +// group imsInvite { - /** - * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * to the IMS_IBCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mdw_TP_MW_IBCF_INVITE_01( - ( - mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_IBCF_INVITE_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 +// /** +// * @desc Verify that the E-CSCF successfully processes an initial INVITE (Originating Leg).. +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives an INVITE containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_PSAP_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE, +// * PAccessNetworkInfo, +// * MessageBody containing +// * SDP containing +// * Version indicating value "0" +// * ; +// * ;; +// * from the IMS_P_CSCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends an INVITE containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_PSAP_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE, +// * PAccessNetworkInfo, +// * MessageBody containing +// * SDP containing +// * Version indicating value "0" +// * ; +// * ;; +// * to the IMS_IBCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_INVITE_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { +// mw_SipRequest( +// mdw_TP_MW_IBCF_INVITE_01( +// ( +// mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) +// ) +// )) +// }, +// { mw_SipRequest(mw_INVITE_Request_Base) }, +// {0, omit}, +// "TP_MW_IBCF_INVITE_01 - Request", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_INVITE_01 - function f_mtc_check_TP_MW_IBCF_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mdw_TP_MW_IBCF_INVITE_01( - ( - mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_MW_IBCF_INVITE_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_INVITE_02 +// function f_mtc_check_TP_MW_IBCF_INVITE_02( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { +// mw_SipRequest( +// mdw_TP_MW_IBCF_INVITE_01( +// ( +// mw_SipUrl_Host(v_EUT_A_Addr) //f_GetEUTScscfIpAddress(PX_EUT_A) +// ) +// )) +// }, +// { mw_SipRequest(mw_INVITE_Request_Base) }, +// {0, omit}, +// "TP_MW_IBCF_INVITE_01 - Request", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_INVITE_02 - } // End of group imsInvite +// } // End of group imsInvite - group ims100Trying { +// group ims100Trying { - /** - * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 100_Trying - * from the IMS_IBCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 100_Trying - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBSCF_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_MW_IBCF_100Trying_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a 100_Trying +// * from the IMS_IBCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 100_Trying +// * to the IMS_P_CSCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBSCF_100Trying_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 100 TRYING +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_TP_MW_IBCF_100Trying_01( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipResponse(mw_100Trying_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_100Trying_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBSCF_100Trying_01 - } // End of group ims100Trying +// } // End of group ims100Trying - group ims180Ringing { +// group ims180Ringing { - /** - * @desc Verify that the E-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the IMS_IBCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 180_Ringing containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_180RINGING_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_IBCF_180Ringing_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - mw_To_NameAddr_TelUrl( - -, - p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber - ))) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_MW_IBCF_180RINGING_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_180RINGING_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a 180_Ringing containing +// * From indicating value PX_PSAP_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_PSAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE +// * ; +// * from the IMS_IBCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 180_Ringing containing +// * From indicating value PX_PSAP_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_PSAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE +// * ; +// * to the IMS_P_CSCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_180RINGING_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 180 RINGING +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_TP_MW_IBCF_180Ringing_01( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.fromField, +// mw_To_NameAddr_TelUrl( +// -, +// p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber +// ))) +// }, +// { mw_SipResponse(mw_180Ringing_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_180RINGING_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_180RINGING_01 - } // End of group ims180Ringing +// } // End of group ims180Ringing - group ims183SessionProgress { +// group ims183SessionProgress { - /** - * @desc Verify that the E-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing - * From indicating value PX_SAP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_SAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * from the IMS_IBCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_MW_IBCF_183SessionProgress_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_MW_IBCF_183SESSION_PROGRESS_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a 183 (Ringing) provisional response on initial INVITE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a 183_SessionProgress containing +// * From indicating value PX_SAP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_SAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE +// * ; +// * from the IMS_IBCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 183_SessionProgress containing +// * From indicating value PX_PSAP_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_PSAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE +// * ; +// * to the IMS_P_CSCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 183 SESSION_PROGRESS +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_TP_MW_IBCF_183SessionProgress_01( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipResponse(mw_183SessionProgress_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_183SESSION_PROGRESS_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_183SESSION_PROGRESS_01 - } // End of group ims183SessionProgress +// } // End of group ims183SessionProgress - group ims200Ok { +// group ims200Ok { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the IMS_IBCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_PSAP_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_PSAP_CALLID, - * Via indicating value PX_PSAP_VIA, - * Route indicating value PX_PSAP_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), - p_sip.request.msgHeader.toField - ) - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_IBCF_200OK_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; +// /** +// * @desc Verify that the E-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a 200_Ok containing +// * From indicating value PX_PSAP_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_PSAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE, +// * not PChargingVector, +// * not PChargingFunctionAddresses, +// * not PPreferredIdentity +// * ; +// * from the IMS_IBCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 200_Ok containing +// * From indicating value PX_PSAP_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_PSAP_CALLID, +// * Via indicating value PX_PSAP_VIA, +// * Route indicating value PX_PSAP_SERVICE_ROUTE, +// * PChargingVector, +// * PChargingFunctionAddresses, +// * PPreferredIdentity +// * ; +// * to the IMS_P_CSCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_200OK_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 200 OK +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_200OK( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.fromField, +// ( +// mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), +// mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), +// p_sip.request.msgHeader.toField +// ) +// )) +// }, +// { mw_SipResponse(mw_200OK_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_200OK_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 +// } +// } // End of function f_mtc_check_TP_MW_IBCF_200OK_01 - function f_mtc_check_TP_MW_IBCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_PSAP).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_PSAP).publicId), - p_sip.request.msgHeader.toField - ) - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_IBCF_200OK_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; +// function f_mtc_check_TP_MW_IBCF_ECO_200OK_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 200 OK +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_200OK( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.fromField, +// ( +// mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_PSAP).publicId}), +// mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_PSAP).publicId), +// p_sip.request.msgHeader.toField +// ) +// )) +// }, +// { mw_SipResponse(mw_200OK_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_200OK_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_200OK_01 +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ECO_200OK_01 - /** - * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * PChargingVector, - * PChargingFunctionAddresses, - * PPreferredIdentity - * ; - * from the UE_B entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the IMS_P_CSCF_B entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_200OK_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_IBCF_200OK_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_02 +// /** +// * @desc Verify that the E-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the UE_B entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the UE_B entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a 200_Ok containing +// * From indicating value PX_UE_B_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_UE_B_CALLID, +// * Via indicating value PX_UE_B_VIA, +// * Route indicating value PX_UE_B_SERVICE_ROUTE, +// * PChargingVector, +// * PChargingFunctionAddresses, +// * PPreferredIdentity +// * ; +// * from the UE_B entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 200_Ok containing +// * From indicating value PX_UE_B_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_UE_B_CALLID, +// * Via indicating value PX_UE_B_VIA, +// * Route indicating value PX_UE_B_SERVICE_ROUTE, +// * not PChargingVector, +// * not PChargingFunctionAddresses, +// * not PPreferredIdentity +// * ; +// * from the IMS_P_CSCF_B entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_200OK_02( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 200 OK +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_200OK( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipResponse(mw_200OK_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_200OK_02", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_200OK_02 - } // End of group ims200Ok +// } // End of group ims200Ok - group imsAck { +// group imsAck { - /** - * @desc Verify that the E-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the PSAP entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the PSAP entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_PSAP_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the IMS_IBCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_MW_IBCF_ACK_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the PSAP entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the PSAP entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives an ACK containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_PSAP_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE +// * ; +// * from the IMS_P_CSCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends an ACK containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_PSAP_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE +// * ; +// * from the IMS_IBCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_ACK_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the ACK +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.cSeq, +// -, // FIXME To be set +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipRequest(mw_ACK_Request_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_ACK_01 - Request", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 - function f_mtc_check_TP_MW_IBCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_MW_IBCF_ACK_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 +// function f_mtc_check_TP_MW_IBCF_ECO_ACK_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the ACK +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipRequest(mw_TP_MW_IBCF_ACK_01( +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.cSeq, +// -, // FIXME To be set +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipRequest(mw_ACK_Request_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_ACK_01 - Request", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ACK_01 - } // End of group imsAck +// } // End of group imsAck - group imsBye { +// group imsBye { - /** - * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_IBCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_IBCF_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a BYE (Terminating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the UE_B entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the UE_B entity isRegisteredTo the IMS_B and +// * the UE_A entity previouslyEstablishedCallWith the UE_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity receives a BYE containing +// * From indicating value PX_UE_B_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_UE_B_CALLID, +// * Via indicating value PX_UE_B_VIA, +// * Route indicating value PX_UE_B_SERVICE_ROUTE +// * ; +// * from the IMS_P_CSCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a BYE containing +// * From indicating value PX_UE_B_SIP_URI, +// * To indicating value PX_UE_A_SIP_URI, +// * CallId indicating value PX_UE_B_CALLID, +// * Via indicating value PX_UE_B_VIA, +// * Route indicating value PX_UE_B_SERVICE_ROUTE +// * ; +// * from the IMS_IBCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_BYE_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// inout SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the BYE +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( +// p_sip.request.msgHeader.callId, +// -, // New CSeq, +// -, // FIXME To be set +// { +// fieldName := FROM_E, +// addressField := p_sip.request.msgHeader.toField.addressField, +// fromParams := * +// }, //p_sip.request.msgHeader.fromField, +// { +// fieldName := TO_E, +// addressField := p_sip.request.msgHeader.fromField.addressField, +// toParams := * +// } //p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipRequest(mw_BYE_Request_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_BYE_01 - Request", +// true, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// // Retrieve messge +// f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); +// } +// } // End of function f_mtc_check_TP_MW_IBCF_BYE_01 - function f_mtc_check_TP_MW_IBCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_MW_IBCF_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_BYE_01 +// function f_mtc_check_TP_MW_IBCF_ECO_BYE_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// inout SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the BYE +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipRequest(mw_TP_MW_IBCF_BYE_01( +// p_sip.request.msgHeader.callId, +// -, // New CSeq, +// -, // FIXME To be set +// { +// fieldName := FROM_E, +// addressField := p_sip.request.msgHeader.toField.addressField, +// fromParams := * +// }, //p_sip.request.msgHeader.fromField, +// { +// fieldName := TO_E, +// addressField := p_sip.request.msgHeader.fromField.addressField, +// toParams := * +// } //p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipRequest(mw_BYE_Request_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_BYE_01 - Request", +// true, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// // Retrieve messge +// f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ECO_BYE_01 - } // End of group imsBye +// } // End of group imsBye - group ims200OkBye { +// group ims200OkBye { - /** - * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_IBCF_A entity - * } - * then { - * the IMS_E_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_MW_IBCF_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_MW_IBCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_200OK_BYE_01 +// /** +// * @desc Verify that the E-CSCF successfully processes a 200 (OK) BYE (Originating Leg). +// * Initial conditions with { +// * the UE_A entity isAttachedTo the EPC_A and +// * the UE_B entity isAttachedTo the EPC_B and +// * the UE_A entity isRegisteredTo the IMS_A and +// * the UE_B entity isRegisteredTo the IMS_B +// * } +// * +// * Expected behaviour +// * ensure that { +// * when { +// * the IMS_E_CSCF_A entity sends a 200_Ok containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_UE_B_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE, +// * not PChargingVector, +// * not PChargingFunctionAddresses, +// * not PPreferredIdentity +// * to the IMS_IBCF_A entity +// * } +// * then { +// * the IMS_E_CSCF_A entity sends a 200_Ok containing +// * From indicating value PX_UE_A_SIP_URI, +// * To indicating value PX_UE_B_SIP_URI, +// * CallId indicating value PX_UE_A_CALLID, +// * Via indicating value PX_UE_A_VIA, +// * Route indicating value PX_UE_A_SERVICE_ROUTE, +// * not PChargingVector, +// * not PChargingFunctionAddresses, +// * not PPreferredIdentity +// * to the IMS_P_CSCF_A entity +// * } +// * } +// */ +// function f_mtc_check_TP_MW_IBCF_200OK_BYE_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// in SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the 200 OK BYE +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipResponse(mw_200OK( +// p_sip.request.msgHeader.cSeq, +// p_sip.request.msgHeader.callId, +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipResponse(mw_200OK_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_200OK_BYE_01", +// false, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_200OK_BYE_01 - } // End of group ims200OkBye +// } // End of group ims200OkBye - group imsCancel { +// group imsCancel { - function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_IBCF_CANCEL_01( - p_sip.request.msgHeader.callId, - -, // New CSeq, - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_MW_IBCF_CANCEL_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01 +// function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// inout SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// // Check the CANCEL +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { mw_SipRequest(mw_TP_MW_IBCF_CANCEL_01( +// p_sip.request.msgHeader.callId, +// -, // New CSeq, +// -, // FIXME To be set +// { +// fieldName := FROM_E, +// addressField := p_sip.request.msgHeader.toField.addressField, +// fromParams := * +// }, //p_sip.request.msgHeader.fromField, +// { +// fieldName := TO_E, +// addressField := p_sip.request.msgHeader.fromField.addressField, +// toParams := * +// } //p_sip.request.msgHeader.toField +// )) +// }, +// { mw_SipRequest(mw_CANCEL_Request_Base) }, +// { 0, omit }, +// "TP_MW_IBCF_CANCEL_01 - Request", +// true, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// // Retrieve messge +// f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ECO_CANCEL_01 - } // End of group imsCancel +// } // End of group imsCancel - group ims487Invite { +// group ims487Invite { - function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_MW_IBCF_487INVITE_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01 +// function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01( +// in SipInterfaceMonitor p_monitorCompRef, +// in boolean p_checkMessage := false, +// inout SipMessage p_sip +// ) runs on ImsTestCoordinator { +// if (isvalue(p_monitorCompRef)) { +// var charstring v_EUT_A_Addr := f_GetEUTScscfAddress_1();//f_GetEUTScscfAddress(PX_EUT_A); +// p_monitorCompRef.start( +// f_Iot_Sip_receive( +// { +// mw_SipResponse( +// mw_487RequestTerminated( // TODO Enforce template +// p_sip.request.msgHeader.callId, +// -, // New CSeq +// p_sip.request.msgHeader.fromField, +// p_sip.request.msgHeader.toField, +// omit +// ) +// ) +// }, +// { +// mw_SipResponse(mdw_4XX_Base) +// }, +// { 0, omit }, +// "TP_MW_IBCF_487INVITE_01", +// true, +// p_checkMessage +// ) +// ); +// p_monitorCompRef.done; +// } +// } // End of function f_mtc_check_TP_MW_IBCF_ECO_487INVITE_01 - } // End of group ims487Invite +// } // End of group ims487Invite -} // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file +// } // End of module AtsImsIot_TP_behavior_MW_EB \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn index 1ccc491..df2e55c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_EC.ttcn @@ -1,33 +1,33 @@ -/** - * @author TTF T010 - * @version $Id$ - * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF - */ +// /** +// * @author TTF T010 +// * @version $Id$ +// * @desc This module provides the TP behaviour functions at Mw interface at P-CSCF/E-CSCF +// */ -module AtsImsIot_TP_behavior_MW_EC { // TODO: To be removed +// module AtsImsIot_TP_behavior_MW_EC { // TODO: To be removed - // LibIms - import from LibIms_Templates all; - import from LibIms_UpperTester all; - // LibIot - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; - import from LibIot_TestInterface all; - import from LibIot_PIXITS all; - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Common all; - import from LibSip_SDPTypes all; - // LibMsrp - import from LibMsrp_TypesAndValues all; - import from LibMsrp_Functions all; - import from LibMsrp_Templates all; - // AtsImsIot - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates_MW all; - import from AtsImsIot_Templates all; - import from AtsImsIot_TypesAndValues all; - import from AtsImsIot_Functions all; +// // LibIms +// import from LibIms_Templates all; +// import from LibIms_UpperTester all; +// // LibIot +// import from LibIot_TypesAndValues all; +// import from LibIot_Functions all; +// import from LibIot_TestInterface all; +// import from LibIot_PIXITS all; +// // LibSip +// import from LibSip_SIPTypesAndValues all; +// import from LibSip_Templates all; +// import from LibSip_Common all; +// import from LibSip_SDPTypes all; +// // LibMsrp +// import from LibMsrp_TypesAndValues all; +// import from LibMsrp_Functions all; +// import from LibMsrp_Templates all; +// // AtsImsIot +// import from AtsImsIot_TestSystem all; +// import from AtsImsIot_Templates_MW all; +// import from AtsImsIot_Templates all; +// import from AtsImsIot_TypesAndValues all; +// import from AtsImsIot_Functions all; -} // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file +// } // End of module AtsImsIot_TP_behavior_MW_EC \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn new file mode 100644 index 0000000..1e7fbde --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn @@ -0,0 +1,823 @@ +/** + * @author STF 574 + * @version $Id$ + * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF + */ + +module AtsImsIot_TP_behavior_MX { + + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_MX all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; + + group imsInvite { + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01 + + /** + * @desc "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_LRF and + * the IMS_E_CSCF entity hasSentINVITETo the IMS_LRF and + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an r_3xx_Any containing + * Contact indicating value LRF_provided_SIP_URI; + * from the IMS_LRF entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_02 + + /** + * @desc "Verify that the E-CSCF successfully processes a callback INVITE from the PSAP in another network over the IBCF and routes the request to the P-CSCF." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.11.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A + * } + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_P_CSCF_A_VIA, + * Route indicating value PX_E_CSCF_SERVICE_ROUTE, // 5.2.10.3 1B) option is assumed + * PAssertedIdentity, + * MessageBody; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF entity sends an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_E_CSCF_VIA, + * Route indicating value PX_PSAP_SERVICE_ROUTE_IM_CN, + * RecordRoute PX_E_CSCF_SERVICE_ROUTE, + * PChargingVector containing + * not term_ioi_parameter, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA";, + * MessageBody; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psapInfo := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_psapInfo.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_INVITE_03 + + } // End of group imsInvite + + group ims100Trying { + + function f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_MX_ECSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01 + + } // End of group ims100Trying + + group ims180Ringing { + + function f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_MX_ECSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims183SessionProgress { + + function f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_MX_ECSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_MX_ECSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress + + group ims200Ok { + + function f_mtc_check_TP_MX_ECSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MX_ECSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_ACK_01 + + } // End of group imsAck + + group imsBye { + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_IBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_01 + + /** + * @desc Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IM_CN and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a BYE containing + * From indicating value PX_PSAP_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_PSAP_SIP_URI, + * Via indicating value PX_PSAP_VIA; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_BYE_02 + + } // End of group imsBye + + group ims200OkBye { + + function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_MX_ECSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_200OK_BYE_01 + + } // End of group ims200OkBye + + group imsCancel { + + /** + * @desc Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE via the IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_P_CSCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IM_CN entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_MX_ECSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + -, // New CSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_MX_ECSCF_EMC_CANCEL_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01 + + } // End of group imsCancel + + group imsRequestTermination { + + /** + * @desc Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 487INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MX_ECSCF_EMC_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_EMC_487INVITE_01 + + } // End of group imsRequestTermination + + group imsTemporaryUnavailable { + + /** + * @desc Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF + * Initial conditions with { + * the IMS_E_CSCF entity supportsRoutingTo the IMS_IBCF_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP via IMS_IBCF_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_E_CSCF_A entity receives a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the IMS_IBCF_A entity + * } + * then { + * the IMS_E_CSCF_A entity sends a 480INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_MX_ECSCF_ECO_480INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_ECO_480INVITE_01 + + } // End of group imsTemporaryUnavailable + + group ims3xxAny { + + /** + * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_LRF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * from the IMS_EBCF_A entity + * } + * then { + * the IMS_LRF_A entity sends a 3xx Any containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * Contact indicating value V_CONTACT + * ; + * to the IMS_EBCF_A entity + * } + * } + */ + function f_mtc_check_TP_MX_LRF_3xxAny_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 3xx Any + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_3xxContact( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.accept + )) + }, + { mw_SipResponse(mdw_3XX_Base) }, + { 0, omit }, + "TP_MX_3xxAny_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 + + } // End of group ims3xxAny + +} // End of module AtsImsIot_TP_behavior_MX diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn deleted file mode 100644 index f38a038..0000000 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_Mx_LRF.ttcn +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @author STF 574 - * @version $Id$ - * @desc This module provides the TP behaviour functions at Mw interface at S-CSCF/IBCF - */ - -module AtsImsIot_TP_behavior_Mx_LRF { - - // LibIms - import from LibIms_Templates all; - import from LibIms_UpperTester all; - // LibIot - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; - import from LibIot_TestInterface all; - import from LibIot_PIXITS all; - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Common all; - import from LibSip_SDPTypes all; - // LibMsrp - import from LibMsrp_TypesAndValues all; - import from LibMsrp_Functions all; - import from LibMsrp_Templates all; - // AtsImsIot - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates all; - import from AtsImsIot_Templates_MW all; - import from AtsImsIot_Templates_ML all; - import from AtsImsIot_TypesAndValues all; - import from AtsImsIot_Functions all; - - group ims3xxAny { - - /** - * @desc Verify that the LRF successfully processes a 3xx Any response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_LRF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * Contact indicating value V_CONTACT - * ; - * from the IMS_EBCF_A entity - * } - * then { - * the IMS_LRF_A entity sends a 3xx Any containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * Contact indicating value V_CONTACT - * ; - * to the IMS_EBCF_A entity - * } - * } - */ - function f_mtc_check_TP_MX_LRF_3xxAny_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 3xx Any - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_3xxContact( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.accept - )) - }, - { mw_SipResponse(mdw_3XX_Base) }, - { 0, omit }, - "TP_Mx_LRF_3xxAny_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_MX_LRF_3xxAny_01 - - } // End of group ims3xxAny - -} // End of module AtsImsIot_TP_behavior_Mx_LRF diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn index 47259fc..073ab4a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ML.ttcn @@ -80,13 +80,4 @@ module AtsImsIot_Templates_ML { } } // End of template mw_TP_ML_ECSCF_3XX_Base_01 - template (present) Response mw_3xxContact( - template (present) CSeq p_cSeq := ?, - Accept p_accept) modifies mdw_3XX_Base := { - msgHeader := { - cSeq := p_cSeq, - accept := p_accept - } - } // End of template mw_3xxContact - } // End of module AtsImsIot_Templates_ML diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn new file mode 100644 index 0000000..f2696c6 --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn @@ -0,0 +1,225 @@ +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides TP related templates used at MM interface + */ +module AtsImsIot_Templates_MX { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + /** + * @desc INVITE Request checking TP_MX_ECSCF_INVITE_01 + */ + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_INVITE_Request_Base := { + msgHeader := { + fromField := p_from, + toField := p_to, + route := ({ + fieldName := ROUTE_E, + routeBody := { + *, + complement(mw_routeBody(p_invite_uri)), + * + } + }, omit), + recordRoute := { + fieldName := RECORD_ROUTE_E, + routeBody := {mw_routeBody(p_invite_uri), *} + }, + contact := p_contact, + pAssertedID := p_pAssertedID + }, + messageBody := p_messageBody + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_02 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_01 := { + msgHeader := { + pChargingFunctionAddresses := omit + } + } + + template(present) INVITE_Request mw_TP_MX_ECSCF_INVITE_03 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_02 := { + } + + template (present) Response mw_TP_MX_ECSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_100Trying_01 + + template (present) Response mw_TP_MX_ECSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_180Ringing_01 + + template (present) Response mw_TP_MX_ECSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_MX_ECSCF_183SessionProgress_01 + + template (present) ACK_Request mw_TP_MX_ECSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_ACK_01 + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_BYE_01 + + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_MX_ECSCF_BYE_01 := { + msgHeader := { + route := * + } + } // End of template mw_TP_MX_ECSCF_BYE_02 + + template (present) CANCEL_Request mw_TP_MX_ECSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_MX_ECSCF_CANCEL_01 + + template (present) Response mw_3xxContact( + template (present) CSeq p_cSeq := ?, + Accept p_accept) modifies mdw_3XX_Base := { + msgHeader := { + cSeq := p_cSeq, + accept := p_accept + } + } // End of template mw_3xxContact + +} // End of module AtsImsIot_Templates_MX diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index ebed44d..4dfd575 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -9,6 +9,7 @@ sources := \ AtsImsIot_Templates_MW.ttcn \ AtsImsIot_Templates_MI.ttcn \ AtsImsIot_Templates_MM.ttcn \ + AtsImsIot_Templates_MX.ttcn \ AtsImsIot_Templates_ML.ttcn \ AtsImsIot_TestConfiguration.ttcn \ AtsImsIot_TP_behavior_CX.ttcn \ @@ -19,12 +20,10 @@ sources := \ AtsImsIot_TP_behavior_RX.ttcn \ AtsImsIot_TP_behavior_GX.ttcn \ AtsImsIot_TP_behavior_MW_PS.ttcn \ - AtsImsIot_TP_behavior_MW_EC.ttcn \ - AtsImsIot_TP_behavior_MW_EB.ttcn \ AtsImsIot_TP_behavior_MM.ttcn \ AtsImsIot_TP_behavior_ML.ttcn \ AtsImsIot_TP_behavior_MI.ttcn \ - AtsImsIot_TP_behavior_Mx_LRF.ttcn \ + AtsImsIot_TP_behavior_MX.ttcn \ AtsImsIot_TP_behavior_S6A.ttcn \ AtsImsIot_TD_ATT.ttcn \ AtsImsIot_TD_REG.ttcn \ -- GitLab From 6f480f05ef616bf05c48b468eabf85ea8b818160 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 26 Sep 2023 11:50:21 +0200 Subject: [PATCH 69/84] Review of TTCN-3 implementation & templates of all emergency TPs for the SIP part --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 617 ++++++++++++------ ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn | 46 +- .../ttcn/LibDiameter_EncdecDeclarations.ttcn | 7 - .../ttcn/LibDiameter_Types_Base_AVPs.ttcn | 8 +- .../ttcn/LibDiameter_Types_CxDx_AVPs.ttcn | 5 +- .../ttcn/LibDiameter_Types_Gx_AVPs.ttcn | 4 + .../ttcn/LibDiameter_Types_RfRo_AVPs.ttcn | 4 +- .../ttcn/LibDiameter_Types_Rx_AVPs.ttcn | 2 + .../ttcn/LibDiameter_Types_S6a_AVPs.ttcn | 8 +- .../ttcn/LibDiameter_Types_S9_AVPs.ttcn | 1 + .../ttcn/LibDiameter_Types_ShDh_AVPs.ttcn | 17 +- 11 files changed, 494 insertions(+), 225 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 02c6b72..1adb1c1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -43,121 +43,121 @@ module AtsImsIot_Emergency { import from AtsImsIot_PIXITS all; /** - * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) + * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) */ group Interoperability { /** - * @see ETSI TS 103 795-2 Clause 5.1 Network Attachment + * @see ETSI TS 103 795-2 Clause 5.1 Network Attachment */ group NetworkAttachment { group UENetworkAttachmentWithUSIM { - /** - * @desc Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. - * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. - * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF - * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; - * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) - * - */ - testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_VxLteMonitor_Up(); - - // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - - // test body - // Check that user A starts initial network attachment - f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) - f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) - f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) - - // postamble - f_mtc_userRadioEnabled ( v_ueA, false, true ); - - //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - f_cf_adapter_down ( ); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - } // End of TC TC_VoLTE_ECO_INT_ATT_01 + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_ECO_INT_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_ATT_01 } // End of group UENetworkAttachmentWithUSIM group UENetworkAttachmentWithoutUSIM { - /** - * @desc Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. - * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. - * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF - * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; - * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) - * - */ - testcase TC_VoLTE_EMC_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_VxLteMonitor_Up(); - - // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - - // test body - // Check that user A starts initial network attachment - f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) - f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) - f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) - - // postamble - f_mtc_userRadioEnabled ( v_ueA, false, true ); - - //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - f_cf_adapter_down ( ); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - } // End of TC TC_VoLTE_ECO_INT_ATT_02 + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_EMC_INT_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_ATT_02 } // End of group UENetworkAttachmentWithoutUSIM } // End of group NetworkAttachment /** - * @see ETSI TS 103 795-2 Clause 5.2 IMS Emergency Registration + * @see ETSI TS 103 795-2 Clause 5.2 IMS Emergency Registration */ group EmergencyRegistration { /** * @desc To perform emergency registration via the established emergency bearer. Note that some UEs perform emergency registration automatically on attachment - in which case this test becomes merged with the previous ones. - * @see ETSI TS 103 795-2 Clause 5.2.1 IMS Emergency Registration - Successful + * @see ETSI TS 103 795-2 Clause 5.2.1 IMS Emergency Registration - Successful */ testcase TD_VoLTE_ECO_INT_REG_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -215,7 +215,7 @@ module AtsImsIot_Emergency { /** * @desc To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration. - * @see ETSI TS 103 795-2 Clause 5.2.2 IMS Emergency Registration - Unsuccessful + * @see ETSI TS 103 795-2 Clause 5.2.2 IMS Emergency Registration - Unsuccessful */ testcase TD_VoLTE_ECO_INT_REG_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -274,7 +274,7 @@ module AtsImsIot_Emergency { } // End of group EmergencyRegistration /** - * @see ETSI TS 103 795-2 Clause 5.3 Emergency Session and Emergency Bearer Operations + * @see ETSI TS 103 795-2 Clause 5.3 Emergency Session and Emergency Bearer Operations */ group EmergencySessionEmergencyBearerOperations { @@ -283,7 +283,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the IM CN subsystem of IMS A - * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration + * @see ETSI TS 103 795-2 Clause 5.3.1.2 UE calling PSAP with emergency registration */ testcase TD_VoLTE_ECO_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -401,7 +401,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session session establishment within non-emergency registration. * PSAP is located in the IM CN subsystem of IMS A. - * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration + * @see ETSI TS 103 795-2 Clause 5.3.1.3 UE calling PSAP with non-emergency registration * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ testcase TD_VoLTE_ECO_INT_INI_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -518,7 +518,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of emergency bearers at the originating EPC due to SIP emergency session establishment without any registration. * PSAP is located in the IM CN subsystem of IMS A. - * @see ETSI TS 103 795-2 Clause 5.3.1.4 UE calling PSAP without any registration + * @see ETSI TS 103 795-2 Clause 5.3.1.4 UE calling PSAP without any registration */ testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -754,7 +754,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the IM CN subsystem of another network connected via IBCF. - * @see ETSI TS 103 795-2 Clause 5.3.1.6 UE calling PSAP in other network via IBCF + * @see ETSI TS 103 795-2 Clause 5.3.1.6 UE calling PSAP in other network via IBCF */ testcase TD_VoLTE_ECO_INT_INI_05 ( ) runs on ImsTestCoordinator system IotSystemInterface { @@ -886,7 +886,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the IM CN subsystem of another network vonnected via IBCF. The PSAP URI is delivered by the LRF. - * @see ETSI TS 103 795-2 Clause 5.3.1.7 UE calling PSAP in other network via IBCF, LRF derived PSAP URI + * @see ETSI TS 103 795-2 Clause 5.3.1.7 UE calling PSAP in other network via IBCF, LRF derived PSAP URI * @remark This is option2: IBCF is connected to the PSAP, the interface IBCF and the PSAP is the Mm interface */ testcase TD_VoLTE_ECO_INT_INI_06() runs on ImsTestCoordinator system IotSystemInterface { @@ -1026,7 +1026,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the PSTN connected via BGCF. - * @see ETSI TS 103 795-2 Clause 5.3.1.8 UE calling PSAP in PSTN via BGCF + * @see ETSI TS 103 795-2 Clause 5.3.1.8 UE calling PSAP in PSTN via BGCF */ testcase TD_VoLTE_ECO_INT_INI_07() runs on ImsTestCoordinator system IotSystemInterface { @@ -1151,7 +1151,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment within an emergency registration. * PSAP is located in the PSTN connected via BGCF. The PSAP URI is delivered by the LRF - * @see ETSI TS 103 795-2 Clause 5.3.1.9 UE calling PSAP in PSTN via BGCF, LRF derived PSAP URI + * @see ETSI TS 103 795-2 Clause 5.3.1.9 UE calling PSAP in PSTN via BGCF, LRF derived PSAP URI */ testcase TD_VoLTE_ECO_INT_INI_08() runs on ImsTestCoordinator system IotSystemInterface { @@ -1287,7 +1287,7 @@ module AtsImsIot_Emergency { /** * @desc - * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration + * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration */ testcase TD_VoLTE_ECO_INT_INI_09() runs on ImsTestCoordinator system IotSystemInterface { @@ -1361,7 +1361,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP * @remark Ipetion 1: PSAP in IMS A */ testcase TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -1461,7 +1461,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP * @remark Ipetion 1: PSAP NOT in IMS A */ testcase TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -1566,7 +1566,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. - * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP + * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP * @remark Ipetion 1: PSAP in PSTN A */ testcase TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -1680,7 +1680,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -1720,8 +1720,6 @@ module AtsImsIot_Emergency { f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 4 @@ -1766,7 +1764,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 2: PSAP is not in IMS A network */ testcase TD_VoLTE_EMC_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { @@ -1852,7 +1850,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release * @remark This is option 3: PSAP is in PSTN network */ testcase TD_VoLTE_EMC_INT_REL_01_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -1938,7 +1936,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2025,7 +2023,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release * @remark This is option2: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2116,7 +2114,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. * On call release initiated bye PSAP, the P-CSCF A should trigger the removal of all relevant previously created bearers - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release * @remark This is option2: PSAP is in the same network */ testcase TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2209,7 +2207,7 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2302,7 +2300,7 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2402,7 +2400,7 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort * @remark This is option 1: PSAP is in PSTN network */ testcase TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2501,7 +2499,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. - * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2608,7 +2606,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. - * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject * @remark This is option 1: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2715,7 +2713,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. - * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject * @remark This is option 1: PSAP is in PSTN network */ testcase TD_VoLTE_ECO_INT_REJ_01_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2823,7 +2821,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected. - * @see ETSI TS 103 795-2 Clause 5.3.3.3 Emergency Session Reject - IMS not able to handle emergency sessions + * @see ETSI TS 103 795-2 Clause 5.3.3.3 Emergency Session Reject - IMS not able to handle emergency sessions */ testcase TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2890,7 +2888,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and P-CSCF when an emergency session is rejected due to wrong urn - * @see ETSI TS 103 795-2 Clause 5.3.3.4 Emergency Session Reject – due to wrong urn + * @see ETSI TS 103 795-2 Clause 5.3.3.4 Emergency Session Reject – due to wrong urn */ testcase TD_VoLTE_ECO_INT_REJ_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2960,86 +2958,303 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionEmergencyBearerOperations /** - * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment + * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment */ group EmergencyNetworkDetachment { group EmergencySessionDetachment { - /** - * @desc To demonstrate UE initiated network emergency detachment (IP-CAN session termination) for a UE that has not yet emergency registered to the IMS or for UE that has been emergency registered to the IMS - * @see ETSI TS 103 795-2 Clause 5.5.1 UE Emergency Network Detachment (with/without Emergency Registration) - */ - testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_VxLteMonitor_Up(); - - //preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - f_mtc_userRadioEnabled ( v_ueA, false, true ); - // test body - // Check that user A starts initial network attachment - f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) - - //postamble - - //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - f_cf_adapter_down ( ); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - } // End of TC TC_VoLTE_ECO_INT_DTC_01 - - /** - * @desc To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session - * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session - */ - testcase TC_VoLTE_ECO_INT_DTC_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); - - f_setVxLteMonIterfacesAvailability(); - //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ - f_cf_createVxLteMonitor(); - - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_VxLteMonitor_Up(); - - //preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile - f_mtc_userRadioEnabled ( v_ueA, false, true ); - // test body - // TODO - - //postamble - - //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); - f_cf_VxLteMonitor_Down(); - f_cf_adapter_down ( ); - }else{ - //log... - setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") - } - } // End of TC TC_VoLTE_ECO_INT_DTC_02 + /** + * @desc To demonstrate UE initiated network emergency detachment (IP-CAN session termination) for a UE that has not yet emergency registered to the IMS or for UE that has been emergency registered to the IMS + * @see ETSI TS 103 795-2 Clause 5.5.1 UE Emergency Network Detachment (with/without Emergency Registration) + */ + testcase TC_VoLTE_ECO_INT_DTC_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + //preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) + + //postamble + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_01 + + /** + * @desc To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session + * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session + * @remark This is option 1: PSAP is in IMS A network + */ + testcase TC_VoLTE_ECO_INT_DTC_02_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })){ + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 3 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // Event 4 + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // Event 5 + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // Event 6 + + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + + f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8 + + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 13 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + + f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20) + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_02_01 + + group f_TC_VoLTE_ECO_INT_DTC_02_01 { + + function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_01 + + } // End of f_TC_VoLTE_ECO_INT_DTC_02_01 + + /** + * @desc To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session + * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session + * @remark This is option 2: PSAP is not in IMS A network + */ + testcase TC_VoLTE_ECO_INT_DTC_02_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS_B -> PSAP + })){ + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6) + + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + + f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 9 + f_mtc_check_TP_IC_IBCF_ECO_BYE_01(vc_vxlte_monitor_components.ic); // Event 10 + + f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 15 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + + f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20) + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_02_02 + + group f_TC_VoLTE_ECO_INT_DTC_02_02 { + + function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_02 + + } // End of f_TC_VoLTE_ECO_INT_DTC_02_02 + + /** + * @desc To demonstrate UE initiated emergency network detachment (emergency IP-CAN session termination) for a UE that is emergency registered to IMS and also has active emergency session + * @see ETSI TS 103 795-2 Clause 5.5.2 UE Emergency Network Detachment with Previously Established Emergency Registration & Emergency Session + * @remark This is option 3: PSAP is in PSTN network + */ + testcase TC_VoLTE_ECO_INT_DTC_02_03 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, // E-CSCF -> IBCF + PX_SIP_IC_INTERFACENAME // IBCF -> IMS -> PSAP + })){ + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03(); + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 + + //Rx/Gx exchange after BYE was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // (STR – Event 3 + f_mtc_check_TP_GX_PCRF_RAR_02(vc_vxlte_monitor_components.gx, true); // (RAR – Event 4) + f_mtc_check_TP_GX_PGW_RAA_03(vc_vxlte_monitor_components.gx); // (RAA – Event 5) + f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 6) + + f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 + + f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 + + f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 17 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 18 + f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 19 + + f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 20) + + f_mtc_userCheckCallTerminated(v_ueA); // Event 22 + f_mtc_userCheckCallCancelled(v_psap); // Event 23 + + // Postamble + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_INT_DTC_02_03 + + group f_TC_VoLTE_ECO_INT_DTC_02_03 { + + function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + } // End of function f_mtc_check_precond_TC_VoLTE_ECO_INT_DTC_02_03 + + } // End of f_TC_VoLTE_ECO_INT_DTC_02_03 } // End of group EmergencySessionDetachment @@ -3048,19 +3263,19 @@ module AtsImsIot_Emergency { } // End of group Interoperability /** - * @see ETSI TS 103 795-2 Clause 6 Test Descriptions (Roaming) + * @see ETSI TS 103 795-2 Clause 6 Test Descriptions (Roaming) */ group Roaming { /** - * @see ETSI TS 103 795-2 6.1 Network Attachment + * @see ETSI TS 103 795-2 6.1 Network Attachment */ group NetworkAttachment { } // End of group NetworkAttachment /** - * @see ETSI TS 103 795-2 Clause 6.2 IMS Emergency Registration in a visited network + * @see ETSI TS 103 795-2 Clause 6.2 IMS Emergency Registration in a visited network */ group IMSEmergencyRegistration { diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn index d9a9528..c62ebfb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GX.ttcn @@ -1248,6 +1248,50 @@ group g_PCRF { } } // End of function f_mtc_check_TP_GX_PCRF_ECO_CCA_01 + function f_mtc_check_TP_GX_PCRF_ECO_CCA_02( // FIXME To be reviewd + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { cCR_MSG := mw_CCR_SubscriberIMSI_qosInformation_class5_ES(INITIAL_REQUEST_E) }; + var template DIAMETER_MSG mw_diameter_msg_fail := { cCR_MSG := mw_CCR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_02 - CCR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { cCA_MSG := mw_CCA_resultCode }; + mw_diameter_msg_fail := { cCA_MSG := mw_CCA_basic}; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_CCA_01 - CCA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GX_PCRF_ECO_CCA_02 + /** * Starts monitor component behavior for TP_GX_PCRF_ECO_CCA_02 * @param p_monitorCompRef Reference to monitor component @@ -1341,7 +1385,7 @@ group g_PCRF { ); p_monitorCompRef.done; } - } // End of function f_mtc_check_TP_GX_PCRF_ECO_CCA_02 + } // End of function f_mtc_check_TP_GX_PCRF_EMC_CCA_01 } //end group ES } // end group g_PCRF diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn index d0e7b6a..e53d0a4 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_EncdecDeclarations.ttcn @@ -2,13 +2,6 @@ module LibDiameter_EncdecDeclarations { //LibDiameter import from LibDiameter_TypesAndValues all; - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_S6a_AVPs all; - import from LibDiameter_Types_S9_AVPs all; - import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; external function fx_enc_CER_MSG(in CER_MSG p_CER_MSG) return bitstring with {extension "prototype(convert) encode(DIAMETERCodec)"} diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn index bad0f43..a65de88 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn @@ -15,9 +15,9 @@ module LibDiameter_Types_Base_AVPs { import from LibCommon_DataStrings all; // LibDiameter - import from LibDiameter_Types_RfRo_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_CxDx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; group AVPTypes{ group AVP_Base_Types{ @@ -3191,4 +3191,6 @@ module LibDiameter_Types_Base_AVPs { }// end group NumberTypes +} with { + encode "DIAMETERCodec"; variant ""; } //end module LibDiameter_Types_Base_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn index f6f222c..e77e073 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn @@ -11,8 +11,9 @@ module LibDiameter_Types_CxDx_AVPs { import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_Types_Base_AVPs all; + import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; group AVPCodeConstants { @@ -510,4 +511,6 @@ module LibDiameter_Types_CxDx_AVPs { }//end group AVPs +} with { + encode "DIAMETERCodec"; variant ""; } //end module LibDiameter_Types_Cx_Dx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn index 57a9137..f2746c2 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn @@ -11,6 +11,8 @@ module LibDiameter_Types_Gx_AVPs { import from LibCommon_BasicTypesAndValues all; + + import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_RfRo_AVPs all; @@ -1204,4 +1206,6 @@ module LibDiameter_Types_Gx_AVPs { }//end group AVPs +} with { + encode "DIAMETERCodec"; variant ""; } //end module LibDiameter_Types_Gx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn index 8e1225f..cd4a164 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn @@ -13,8 +13,8 @@ module LibDiameter_Types_RfRo_AVPs { import from LibCommon_BasicTypesAndValues all; // LibDiameter - import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_S6a_AVPs all; import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; @@ -4257,4 +4257,6 @@ module LibDiameter_Types_RfRo_AVPs { } // End of group AVPTypes +} with { + encode "DIAMETERCodec"; variant ""; } // End of module LibDiameter_Types_RfRo_AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn index 464bec1..79e2f8b 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn @@ -619,4 +619,6 @@ module LibDiameter_Types_Rx_AVPs { }//end group AVPs +} with { + encode "DIAMETERCodec"; variant ""; } //end module LibDiameter_Types_Rx_AVPs \ No newline at end of file diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn index 69ddfca..8ba6689 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn @@ -12,16 +12,16 @@ module LibDiameter_Types_S6a_AVPs { // LibCommon import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; import from LibCommon_DataStrings all; // LibDiameter - import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_RfRo_AVPs all; + import from LibDiameter_Types_CxDx_AVPs all; + import from LibDiameter_Types_Gx_AVPs all; + import from LibDiameter_Types_Rx_AVPs all; group AVPs { diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn index dca09eb..8913f19 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn @@ -11,6 +11,7 @@ module LibDiameter_Types_S9_AVPs { import from LibCommon_BasicTypesAndValues all; + import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn index 416958c..bdfc52f 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_ShDh_AVPs.ttcn @@ -15,12 +15,15 @@ module LibDiameter_Types_ShDh_AVPs { import from LibCommon_DataStrings all; // LibDiameter - import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_S6a_AVPs all; - import from LibDiameter_Types_S9_AVPs all; - import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; + //import from LibDiameter_TypesAndValues all; + //import from LibDiameter_Types_Base_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_S6a_AVPs all; + // import from LibDiameter_Types_S9_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; +} with { + encode "DIAMETERCodec"; variant ""; } // End of LibDiameter_Types_ShDh_AVPs \ No newline at end of file -- GitLab From 770659f92a6ff6468186fcd3efb6cf3120ea2b38 Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 28 Sep 2023 21:55:27 +0200 Subject: [PATCH 70/84] Add missing protocol ports and layers; Add UpperTesterPort & AdapterConfigPort --- ccsrc/Ports/Data/DataPort.cc | 73 ++ ccsrc/Ports/Data/DataPort.hh | 45 + ccsrc/Ports/Data/module.mk | 3 + ccsrc/Ports/LibDiameter/DiameterPort.cc | 145 +-- ccsrc/Ports/LibDiameter/DiameterPort.hh | 25 +- ccsrc/Ports/LibDiameter/LowerLayerPPort.cc | 113 ++ ccsrc/Ports/LibDiameter/LowerLayerPPort.hh | 43 + ccsrc/Ports/LibDiameter/module.mk | 2 +- ccsrc/Ports/LibIot/AdapterConfigPort.cc | 128 +++ ccsrc/Ports/LibIot/AdapterConfigPort.hh | 42 + ccsrc/Ports/LibIot/EquipmentAccessPort.cc | 113 ++ ccsrc/Ports/LibIot/EquipmentAccessPort.hh | 43 + ccsrc/Ports/LibIot/module.mk | 3 + ccsrc/Ports/LibSip/SipPort.hh | 8 +- ccsrc/Ports/Naptr/NaptrPort.cc | 113 ++ ccsrc/Ports/Naptr/NaptrPort.hh | 43 + ccsrc/Ports/Naptr/module.mk | 3 + ccsrc/Ports/Sgi/SgiPort.cc | 73 ++ ccsrc/Ports/Sgi/SgiPort.hh | 42 + ccsrc/Ports/Sgi/module.mk | 3 + ccsrc/Protocols/Diameter/avp.cc | 7 + ccsrc/Protocols/Diameter/avp.hh | 5 + ccsrc/Protocols/Diameter/diameter_codec.cc | 51 + ccsrc/Protocols/Diameter/diameter_codec.hh | 35 + .../Diameter/diameter_layer_factory.hh | 2 +- .../lower_layer_pport_layer.cc | 39 + .../lower_layer_pport_layer.hh | 73 ++ .../lower_layer_pport_layer_factory.hh | 45 + ccsrc/Protocols/LowerLayerPPort/module.mk | 5 + ccsrc/Protocols/Naptr/module.mk | 5 + ccsrc/Protocols/Naptr/naptr_layer.cc | 39 + ccsrc/Protocols/Naptr/naptr_layer.hh | 73 ++ ccsrc/Protocols/Naptr/naptr_layer_factory.hh | 45 + ccsrc/Protocols/UpperTester/module.mk | 5 + .../UpperTester/upper_tester_layer.cc | 39 + .../UpperTester/upper_tester_layer.hh | 73 ++ .../UpperTester/upper_tester_layer_factory.hh | 45 + .../AtsImsIot_Diameter_Templates.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 2 + ttcn/AtsImsIot/module.mk | 11 +- ttcn/LibIot/LibIot_TestInterface.ttcn | 2 + .../ttcn/LibDiameter_Types_Base_AVPs.ttcn | 983 ++++++++++++++++++ .../ttcn/LibDiameter_Types_CxDx_AVPs.ttcn | 129 +-- .../ttcn/LibDiameter_Types_Gx_AVPs.ttcn | 204 +--- .../ttcn/LibDiameter_Types_RfRo_AVPs.ttcn | 478 +-------- .../ttcn/LibDiameter_Types_Rx_AVPs.ttcn | 154 +-- .../ttcn/LibDiameter_Types_S6a_AVPs.ttcn | 56 +- .../ttcn/LibDiameter_Types_S9_AVPs.ttcn | 4 +- 48 files changed, 2508 insertions(+), 1166 deletions(-) create mode 100644 ccsrc/Ports/Data/DataPort.cc create mode 100644 ccsrc/Ports/Data/DataPort.hh create mode 100644 ccsrc/Ports/Data/module.mk create mode 100644 ccsrc/Ports/LibDiameter/LowerLayerPPort.cc create mode 100644 ccsrc/Ports/LibDiameter/LowerLayerPPort.hh create mode 100644 ccsrc/Ports/LibIot/AdapterConfigPort.cc create mode 100644 ccsrc/Ports/LibIot/AdapterConfigPort.hh create mode 100644 ccsrc/Ports/LibIot/EquipmentAccessPort.cc create mode 100644 ccsrc/Ports/LibIot/EquipmentAccessPort.hh create mode 100644 ccsrc/Ports/LibIot/module.mk create mode 100644 ccsrc/Ports/Naptr/NaptrPort.cc create mode 100644 ccsrc/Ports/Naptr/NaptrPort.hh create mode 100644 ccsrc/Ports/Naptr/module.mk create mode 100644 ccsrc/Ports/Sgi/SgiPort.cc create mode 100644 ccsrc/Ports/Sgi/SgiPort.hh create mode 100644 ccsrc/Ports/Sgi/module.mk create mode 100644 ccsrc/Protocols/Diameter/avp.cc create mode 100644 ccsrc/Protocols/Diameter/avp.hh create mode 100644 ccsrc/Protocols/Diameter/diameter_codec.cc create mode 100644 ccsrc/Protocols/Diameter/diameter_codec.hh create mode 100644 ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc create mode 100644 ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh create mode 100644 ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh create mode 100644 ccsrc/Protocols/LowerLayerPPort/module.mk create mode 100644 ccsrc/Protocols/Naptr/module.mk create mode 100644 ccsrc/Protocols/Naptr/naptr_layer.cc create mode 100644 ccsrc/Protocols/Naptr/naptr_layer.hh create mode 100644 ccsrc/Protocols/Naptr/naptr_layer_factory.hh create mode 100644 ccsrc/Protocols/UpperTester/module.mk create mode 100644 ccsrc/Protocols/UpperTester/upper_tester_layer.cc create mode 100644 ccsrc/Protocols/UpperTester/upper_tester_layer.hh create mode 100644 ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh diff --git a/ccsrc/Ports/Data/DataPort.cc b/ccsrc/Ports/Data/DataPort.cc new file mode 100644 index 0000000..9a26e57 --- /dev/null +++ b/ccsrc/Ports/Data/DataPort.cc @@ -0,0 +1,73 @@ +#include "DataPort.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + DataPort::DataPort(const char *par_port_name): DataPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("DataPort::outgoing_send") { + // Nothing to do + } // End of constructor + + DataPort::~DataPort() { + loggers::get_instance().log(">>> DataPort::~DataPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void DataPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("DataPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void DataPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void DataPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void DataPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void DataPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void DataPort::Handle_Timeout(double time_since_last_call) {}*/ + + void DataPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> DataPort::user_map: %s", system_port); + } // End of user_map method + + void DataPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> DataPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void DataPort::user_start() + { + loggers::get_instance().log(">>> DataPort::user_start"); + + } // End of user_start method + + void DataPort::user_stop() + { + loggers::get_instance().log(">>> DataPort::user_stop"); + + } // End of user_stop method + +} + diff --git a/ccsrc/Ports/Data/DataPort.hh b/ccsrc/Ports/Data/DataPort.hh new file mode 100644 index 0000000..c9809b1 --- /dev/null +++ b/ccsrc/Ports/Data/DataPort.hh @@ -0,0 +1,45 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class DataPort : public DataPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + DataPort(const char *par_port_name); + ~DataPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) {}; + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) {}; + void receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params) {}; + void receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params) {}; + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + }; // End of class DataPort + +} + diff --git a/ccsrc/Ports/Data/module.mk b/ccsrc/Ports/Data/module.mk new file mode 100644 index 0000000..b6ee799 --- /dev/null +++ b/ccsrc/Ports/Data/module.mk @@ -0,0 +1,3 @@ +sources := DataPort.cc +includes := . + diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.cc b/ccsrc/Ports/LibDiameter/DiameterPort.cc index 787f480..7900fb4 100644 --- a/ccsrc/Ports/LibDiameter/DiameterPort.cc +++ b/ccsrc/Ports/LibDiameter/DiameterPort.cc @@ -1,5 +1,5 @@ #include "DiameterPort.hh" -#include "sip_layer_factory.hh" +#include "diameter_layer_factory.hh" #include "loggers.hh" namespace LibDiameter__Interface { @@ -53,10 +53,10 @@ namespace LibDiameter__Interface { params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless // Create layer _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); - if (static_cast(_layer) == nullptr) { + if (static_cast(_layer) == nullptr) { loggers::get_instance().error("DiameterPort::user_map: Invalid stack configuration: %s", it->second.c_str()); } - static_cast(_layer)->add_upper_port(this); + static_cast(_layer)->add_upper_port(this); } else { loggers::get_instance().error("DiameterPort::user_map: No layers defined in configuration file"); @@ -86,7 +86,7 @@ namespace LibDiameter__Interface { } // End of user_stop method - void DiameterPort::receiveMsg (const LibDiameter__SIPTypesAndValues::Request& p_ind, const params& p_params) { + void DiameterPort::receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params) { loggers::get_instance().log_msg(">>> DiameterPort::receive_msg: ", p_ind); // Sanity check @@ -94,153 +94,20 @@ namespace LibDiameter__Interface { return; } - if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::REGISTER__E) { - incoming_message(LibDiameter__SIPTypesAndValues::REGISTER__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::INVITE__E) { - incoming_message(LibDiameter__SIPTypesAndValues::INVITE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::SUBSCRIBE__E) { - incoming_message(LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::NOTIFY__E) { - incoming_message(LibDiameter__SIPTypesAndValues::NOTIFY__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::BYE__E) { - incoming_message(LibDiameter__SIPTypesAndValues::BYE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::INFO__E) { - incoming_message(LibDiameter__SIPTypesAndValues::INFO__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::OPTIONS__E) { - incoming_message(LibDiameter__SIPTypesAndValues::OPTIONS__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::MESSAGE__E) { - incoming_message(LibDiameter__SIPTypesAndValues::MESSAGE__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::CANCEL__E) { - incoming_message(LibDiameter__SIPTypesAndValues::CANCEL__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else if (p_ind.requestLine().method() == LibDiameter__SIPTypesAndValues::Method::ACK__E) { - incoming_message(LibDiameter__SIPTypesAndValues::ACK__Request(p_ind.requestLine(), p_ind.msgHeader(), p_ind.messageBody(), p_ind.payload())); - } else { incoming_message(p_ind); - } - } // End of method receiveMsg - - void DiameterPort::receiveMsg (const LibDiameter__SIPTypesAndValues::Response& p_ind, const params& p_params) { - loggers::get_instance().log_msg(">>> DiameterPort::receive_msg: ", p_ind); - - // Sanity check - if (!p_ind.is_bound()) { - return; - } - incoming_message(p_ind); } // End of method receiveMsg - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address) + void DiameterPort::outgoing_send(const LibDiameter__TypesAndValues::DIAMETER__MSG& send_par) { loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); float duration; loggers::get_instance().set_start_time(_time_key); params params; - static_cast(_layer)->sendMsg(send_par, params); + static_cast(_layer)->sendMsg(send_par, params); loggers::get_instance().set_stop_time(_time_key, duration); } // End of outgoing_send - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address) - { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } // End of outgoing_send - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - - void DiameterPort::outgoing_send(const LibDiameter__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address) { - loggers::get_instance().log_msg(">>> DiameterPort::outgoing_send: ", send_par); - - float duration; - loggers::get_instance().set_start_time(_time_key); - params params; - static_cast(_layer)->sendMsg(send_par, params); - loggers::get_instance().set_stop_time(_time_key, duration); - } - } diff --git a/ccsrc/Ports/LibDiameter/DiameterPort.hh b/ccsrc/Ports/LibDiameter/DiameterPort.hh index 354d7b6..523b9d9 100644 --- a/ccsrc/Ports/LibDiameter/DiameterPort.hh +++ b/ccsrc/Ports/LibDiameter/DiameterPort.hh @@ -5,10 +5,6 @@ #include "layer.hh" #include "params.hh" -namespace LibDiameter__SIPTypesAndValues { - class REGISTER__Request; -} - namespace LibDiameter__Interface { class DiameterPort : public DiameterPort_BASE { @@ -22,8 +18,7 @@ namespace LibDiameter__Interface { void set_parameter(const char *parameter_name, const char *parameter_value); - void receiveMsg (const LibDiameter__SIPTypesAndValues::Request& p_ind, const params& p_params); - void receiveMsg (const LibDiameter__SIPTypesAndValues::Response& p_ind, const params& p_params); + void receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params); private: /* void Handle_Fd_Event(int fd, boolean is_readable, @@ -41,23 +36,7 @@ namespace LibDiameter__Interface { void user_stop(); protected: - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::Request& send_par, const Address4SIP *destination_address) { }; - void outgoing_send(const LibDiameter__SIPTypesAndValues::REGISTER__Request& send_par, const Address4SIP *destination_address); - void outgoing_send(const LibDiameter__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address); - void outgoing_send(const LibDiameter__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address); - void outgoing_send(const LibDiameter__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); - void outgoing_send(const LibDiameter__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::PRACK__Request& send_par, const Address4SIP *destination_address) { }; - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); - void outgoing_send(const LibDiameter__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::PUBLISH__Request& send_par, const Address4SIP *destination_address) { }; - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::UPDATE__Request& send_par, const Address4SIP *destination_address) { }; - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::REFER__Request& send_par, const Address4SIP *destination_address) { }; - void outgoing_send(const LibDiameter__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibDiameter__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const CHARSTRING& send_par, const Address4SIP *destination_address) { }; + virtual void outgoing_send(const LibDiameter__TypesAndValues::DIAMETER__MSG& send_par); }; // End of class DiameterPort } diff --git a/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc b/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc new file mode 100644 index 0000000..8978f6d --- /dev/null +++ b/ccsrc/Ports/LibDiameter/LowerLayerPPort.cc @@ -0,0 +1,113 @@ +#include "LowerLayerPPort.hh" +#include "lower_layer_pport_layer_factory.hh" +#include "loggers.hh" + +namespace LibDiameter__Interface { + + LowerLayerPPort::LowerLayerPPort(const char *par_port_name): LowerLayerPPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("LowerLayerPPort::outgoing_send") { + // Nothing to do + } // End of constructor + + LowerLayerPPort::~LowerLayerPPort() { + loggers::get_instance().log(">>> LowerLayerPPort::~LowerLayerPPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void LowerLayerPPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("LowerLayerPPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void LowerLayerPPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void LowerLayerPPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void LowerLayerPPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void LowerLayerPPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void LowerLayerPPort::Handle_Timeout(double time_since_last_call) {}*/ + + void LowerLayerPPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> LowerLayerPPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("LowerLayerPPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("LowerLayerPPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("LowerLayerPPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void LowerLayerPPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> LowerLayerPPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void LowerLayerPPort::user_start() + { + loggers::get_instance().log(">>> LowerLayerPPort::user_start"); + + } // End of user_start method + + void LowerLayerPPort::user_stop() + { + loggers::get_instance().log(">>> LowerLayerPPort::user_stop"); + + } // End of user_stop method + + void LowerLayerPPort::receiveMsg (const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> LowerLayerPPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void LowerLayerPPort::outgoing_send(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& send_par) + { + loggers::get_instance().log_msg(">>> LowerLayerPPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh b/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh new file mode 100644 index 0000000..4f517f5 --- /dev/null +++ b/ccsrc/Ports/LibDiameter/LowerLayerPPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "LibDiameter_Interface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibDiameter__Interface { + + class LowerLayerPPort : public LowerLayerPPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + LowerLayerPPort(const char *par_port_name); + ~LowerLayerPPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + virtual void outgoing_send(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& send_par); + }; // End of class LowerLayerPPort + +} + diff --git a/ccsrc/Ports/LibDiameter/module.mk b/ccsrc/Ports/LibDiameter/module.mk index f7f5df3..3d9debd 100644 --- a/ccsrc/Ports/LibDiameter/module.mk +++ b/ccsrc/Ports/LibDiameter/module.mk @@ -1,3 +1,3 @@ -sources := DiameterPort.cc +sources := DiameterPort.cc LowerLayerPPort.cc includes := . diff --git a/ccsrc/Ports/LibIot/AdapterConfigPort.cc b/ccsrc/Ports/LibIot/AdapterConfigPort.cc new file mode 100644 index 0000000..fe82d8b --- /dev/null +++ b/ccsrc/Ports/LibIot/AdapterConfigPort.cc @@ -0,0 +1,128 @@ +#include + +#include "loggers.hh" +#include "registration.hh" + +#include "AdapterConfigPort.hh" + +//============================================================================= +namespace LibIot__TestInterface { + + AdapterConfigPort::AdapterConfigPort(const char *par_port_name) : AdapterConfigPort_BASE(par_port_name), _params() { + loggers::get_instance().log("AdapterConfigPort::AdapterConfigPort"); + } + + AdapterConfigPort::~AdapterConfigPort() {} + + void AdapterConfigPort::set_parameter(const char *parameter_name, const char *parameter_value) { + loggers::get_instance().log("AdapterConfigPort::set_parameter: %s=%s", parameter_name, parameter_value); + } + + /*void AdapterConfigPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void AdapterConfigPort::Handle_Fd_Event_Error(int /*fd*/) {} + + void AdapterConfigPort::Handle_Fd_Event_Writable(int /*fd*/) {} + + void AdapterConfigPort::Handle_Fd_Event_Readable(int /*fd*/) {} + + /*void AdapterConfigPort::Handle_Timeout(double time_since_last_call) {}*/ + + void AdapterConfigPort::user_map(const char *system_port) { loggers::get_instance().log(">>> AdapterConfigPort::user_map: %s", system_port); } + + void AdapterConfigPort::user_unmap(const char *system_port) { loggers::get_instance().log(">>> AdapterConfigPort::user_unmap: %s", system_port); } + + void AdapterConfigPort::user_start() {} + + void AdapterConfigPort::user_stop() {} + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::GeneralConfigurationReq &send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + + // Register this object for AdapterConfigPort +/* geonetworking_layer *p = registration::get_instance().get_item(std::string("GN")); + if (p != NULL) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Got GN layer %p", p); + LibIot__TypesAndValues::AcGnResponse response; + response.failure() = LibIot__TypesAndValues::AcGnResponseFailure(BOOLEAN(false)); + if (send_par.ischosen(LibIot__TypesAndValues::AcGnPrimitive::ALT_startBeaconing)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Start beaconing"); + p->start_beaconing(send_par.startBeaconing().beaconPacket()); + // No response + return; + } else if (send_par.ischosen(LibIot__TypesAndValues::AcGnPrimitive::ALT_stopBeaconing)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Stop beaconing"); + p->stop_beaconing(); + // No response + return; + } else if (send_par.ischosen(LibIot__TypesAndValues::AcGnPrimitive::ALT_getLongPosVector)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Get LongPosVector"); + const LibIot__TypesAndValues::LongPosVector *lpv = p->get_lpv(send_par.getLongPosVector().gnAddress()); + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Return value: %p", lpv); + if (lpv == nullptr) { + response.failure() = LibIot__TypesAndValues::AcGnResponseFailure(BOOLEAN(true)); + } else { + response.getLongPosVector() = *lpv; + } + } else if (send_par.ischosen(LibIot__TypesAndValues::AcGnPrimitive::ALT_startPassBeaconing)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Start pass beaconing"); + p->start_pass_beaconing(send_par.startPassBeaconing().beaconHeader()); + // No response + return; + } else if (send_par.ischosen(LibIot__TypesAndValues::AcGnPrimitive::ALT_stopPassBeaconing)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Stop pass beaconing"); + p->stop_pass_beaconing(); + // No response + return; + } else { + response.failure() = LibIot__TypesAndValues::AcGnResponseFailure(BOOLEAN(true)); + } + // Send response + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } else {*/ + loggers::get_instance().error("AdapterConfigPort::outgoing_send: %s not registered", "geoNetworkingPort"); + /*}*/ + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::SetFilterReq & /*send_par*/) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq & /*send_par*/) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + } + + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq &send_par) { + loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); + + // Register this object for AdapterConfigPort + /*geonetworking_layer *p = registration::get_instance().get_item(std::string("GN")); + if (p != NULL) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Got GN layer %p", p); + LibItsCommon__TypesAndValues::AdapterControlResults response; + response.acSecResponse() = BOOLEAN(true); + if (send_par.ischosen(LibItsCommon__TypesAndValues::AcSecPrimitive::ALT_acEnableSecurity)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Enable secured mode"); + std::string str(static_cast(send_par.acEnableSecurity().certificateId())); + if (p->enable_secured_mode(str, send_par.acEnableSecurity().enforceSecurity()) == -1) { + response.acSecResponse() = BOOLEAN(false); + } + } else if (send_par.ischosen(LibItsCommon__TypesAndValues::AcSecPrimitive::ALT_acDisableSecurity)) { + loggers::get_instance().log("AdapterConfigPort::outgoing_send: Disable secured mode"); + if (p->disable_secured_mode() == -1) { + response.acSecResponse() = BOOLEAN(false); + } + } else { + response.acSecResponse() = BOOLEAN(false); + } + // Send response + loggers::get_instance().log_msg("AdapterConfigPort::outgoing_send: Send response: ", response); + incoming_message(response); + } else {*/ + loggers::get_instance().error("AdapterConfigPort::outgoing_send: %s not registered", "geoNetworkingPort"); + /*}*/ + } + +} // namespace LibIot__TestInterface diff --git a/ccsrc/Ports/LibIot/AdapterConfigPort.hh b/ccsrc/Ports/LibIot/AdapterConfigPort.hh new file mode 100644 index 0000000..2143db5 --- /dev/null +++ b/ccsrc/Ports/LibIot/AdapterConfigPort.hh @@ -0,0 +1,42 @@ +#pragma once + +#include "LibIot_TestInterface.hh" + +#include "params.hh" + +namespace LibIot__TestInterface { + + class AdapterConfigPort : public AdapterConfigPort_BASE { + params _params; + + public: + AdapterConfigPort(const char *par_port_name = NULL); + ~AdapterConfigPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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 LibIot__TypesAndValues::GeneralConfigurationReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::SetFilterReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq &send_par); + + void outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq &send_par); + }; + +} // namespace LibIot__TestInterface + diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.cc b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc new file mode 100644 index 0000000..d6ec051 --- /dev/null +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc @@ -0,0 +1,113 @@ +#include "EquipmentAccessPort.hh" +#include "upper_tester_layer_factory.hh" +#include "loggers.hh" + +namespace LibIot__TestInterface { + + EquipmentAccessPort::EquipmentAccessPort(const char *par_port_name): EquipmentAccessPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("EquipmentAccessPort::outgoing_send") { + // Nothing to do + } // End of constructor + + EquipmentAccessPort::~EquipmentAccessPort() { + loggers::get_instance().log(">>> EquipmentAccessPort::~EquipmentAccessPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void EquipmentAccessPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("EquipmentAccessPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void EquipmentAccessPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void EquipmentAccessPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void EquipmentAccessPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void EquipmentAccessPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void EquipmentAccessPort::Handle_Timeout(double time_since_last_call) {}*/ + + void EquipmentAccessPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("EquipmentAccessPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("EquipmentAccessPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("EquipmentAccessPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void EquipmentAccessPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void EquipmentAccessPort::user_start() + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_start"); + + } // End of user_start method + + void EquipmentAccessPort::user_stop() + { + loggers::get_instance().log(">>> EquipmentAccessPort::user_stop"); + + } // End of user_stop method + + void EquipmentAccessPort::receiveMsg (const LibUpperTester::EquipmentOperationReq& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> EquipmentAccessPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void EquipmentAccessPort::outgoing_send(const LibUpperTester::EquipmentOperationReq& send_par) + { + loggers::get_instance().log_msg(">>> EquipmentAccessPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.hh b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh new file mode 100644 index 0000000..6ebbc1e --- /dev/null +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "LibIot_TestInterface.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibIot__TestInterface { + + class EquipmentAccessPort : public EquipmentAccessPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + EquipmentAccessPort(const char *par_port_name); + ~EquipmentAccessPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibUpperTester::EquipmentOperationReq& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + virtual void outgoing_send(const LibUpperTester::EquipmentOperationReq& send_par); + }; // End of class EquipmentAccessPort + +} + diff --git a/ccsrc/Ports/LibIot/module.mk b/ccsrc/Ports/LibIot/module.mk new file mode 100644 index 0000000..8c24c4b --- /dev/null +++ b/ccsrc/Ports/LibIot/module.mk @@ -0,0 +1,3 @@ +sources := EquipmentAccessPort.cc AdapterConfigPort.cc +includes := . + diff --git a/ccsrc/Ports/LibSip/SipPort.hh b/ccsrc/Ports/LibSip/SipPort.hh index cc39af5..fc2edfa 100644 --- a/ccsrc/Ports/LibSip/SipPort.hh +++ b/ccsrc/Ports/LibSip/SipPort.hh @@ -46,17 +46,17 @@ namespace LibSip__Interface { void outgoing_send(const LibSip__SIPTypesAndValues::INVITE__Request& send_par, const Address4SIP *destination_address); void outgoing_send(const LibSip__SIPTypesAndValues::OPTIONS__Request& send_par, const Address4SIP *destination_address); void outgoing_send(const LibSip__SIPTypesAndValues::BYE__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::CANCEL__Request& send_par, const Address4SIP *destination_address); void outgoing_send(const LibSip__SIPTypesAndValues::ACK__Request& send_par, const Address4SIP *destination_address); virtual void outgoing_send(const LibSip__SIPTypesAndValues::PRACK__Request& send_par, const Address4SIP *destination_address) { }; - virtual void outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::NOTIFY__Request& send_par, const Address4SIP *destination_address); void outgoing_send(const LibSip__SIPTypesAndValues::SUBSCRIBE__Request& send_par, const Address4SIP *destination_address); virtual void outgoing_send(const LibSip__SIPTypesAndValues::PUBLISH__Request& send_par, const Address4SIP *destination_address) { }; virtual void outgoing_send(const LibSip__SIPTypesAndValues::UPDATE__Request& send_par, const Address4SIP *destination_address) { }; virtual void outgoing_send(const LibSip__SIPTypesAndValues::REFER__Request& send_par, const Address4SIP *destination_address) { }; void outgoing_send(const LibSip__SIPTypesAndValues::MESSAGE__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); - virtual void outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::INFO__Request& send_par, const Address4SIP *destination_address); + void outgoing_send(const LibSip__SIPTypesAndValues::Response& send_par, const Address4SIP *destination_address); virtual void outgoing_send(const CHARSTRING& send_par, const Address4SIP *destination_address) { }; }; // End of class SipPort diff --git a/ccsrc/Ports/Naptr/NaptrPort.cc b/ccsrc/Ports/Naptr/NaptrPort.cc new file mode 100644 index 0000000..987b88c --- /dev/null +++ b/ccsrc/Ports/Naptr/NaptrPort.cc @@ -0,0 +1,113 @@ +#include "NaptrPort.hh" +#include "naptrPort_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + NaptrPort::NaptrPort(const char *par_port_name): NaptrPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("NaptrPort::outgoing_send") { + // Nothing to do + } // End of constructor + + NaptrPort::~NaptrPort() { + loggers::get_instance().log(">>> NaptrPort::~NaptrPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void NaptrPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("NaptrPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void NaptrPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void NaptrPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void NaptrPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void NaptrPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void NaptrPort::Handle_Timeout(double time_since_last_call) {}*/ + + void NaptrPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> NaptrPort::user_map: %s", system_port); + // Build layer stack + params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("NaptrPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("NaptrPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else { + loggers::get_instance().error("NaptrPort::user_map: No layers defined in configuration file"); + } + } // End of user_map method + + void NaptrPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> NaptrPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void NaptrPort::user_start() + { + loggers::get_instance().log(">>> NaptrPort::user_start"); + + } // End of user_start method + + void NaptrPort::user_stop() + { + loggers::get_instance().log(">>> NaptrPort::user_stop"); + + } // End of user_stop method + + void NaptrPort::receiveMsg (const AtsImsIot__TypesAndValues::NAPTRmessage& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> NaptrPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + + void NaptrPort::outgoing_send(const AtsImsIot__TypesAndValues::NAPTRmessage& send_par) + { + loggers::get_instance().log_msg(">>> NaptrPort::outgoing_send: ", send_par); + + float duration; + loggers::get_instance().set_start_time(_time_key); + params params; + static_cast(_layer)->sendMsg(send_par, params); + loggers::get_instance().set_stop_time(_time_key, duration); + } // End of outgoing_send + +} + diff --git a/ccsrc/Ports/Naptr/NaptrPort.hh b/ccsrc/Ports/Naptr/NaptrPort.hh new file mode 100644 index 0000000..b573737 --- /dev/null +++ b/ccsrc/Ports/Naptr/NaptrPort.hh @@ -0,0 +1,43 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class NaptrPort : public NaptrPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + NaptrPort(const char *par_port_name); + ~NaptrPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const AtsImsIot__TypesAndValues::NAPTRmessage& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + virtual void outgoing_send(const AtsImsIot__TypesAndValues::NAPTRmessage& send_par); + }; // End of class NaptrPort + +} + diff --git a/ccsrc/Ports/Naptr/module.mk b/ccsrc/Ports/Naptr/module.mk new file mode 100644 index 0000000..aeb30de --- /dev/null +++ b/ccsrc/Ports/Naptr/module.mk @@ -0,0 +1,3 @@ +sources := NaptrPort.cc +includes := . + diff --git a/ccsrc/Ports/Sgi/SgiPort.cc b/ccsrc/Ports/Sgi/SgiPort.cc new file mode 100644 index 0000000..8d766fd --- /dev/null +++ b/ccsrc/Ports/Sgi/SgiPort.cc @@ -0,0 +1,73 @@ +#include "SgiPort.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + SgiPort::SgiPort(const char *par_port_name): SgiPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("SgiPort::outgoing_send") { + // Nothing to do + } // End of constructor + + SgiPort::~SgiPort() { + loggers::get_instance().log(">>> SgiPort::~SgiPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void SgiPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("SgiPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void SgiPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void SgiPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void SgiPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void SgiPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void SgiPort::Handle_Timeout(double time_since_last_call) {}*/ + + void SgiPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> SgiPort::user_map: %s", system_port); + } // End of user_map method + + void SgiPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> SgiPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void SgiPort::user_start() + { + loggers::get_instance().log(">>> SgiPort::user_start"); + + } // End of user_start method + + void SgiPort::user_stop() + { + loggers::get_instance().log(">>> SgiPort::user_stop"); + + } // End of user_stop method + +} + diff --git a/ccsrc/Ports/Sgi/SgiPort.hh b/ccsrc/Ports/Sgi/SgiPort.hh new file mode 100644 index 0000000..7403739 --- /dev/null +++ b/ccsrc/Ports/Sgi/SgiPort.hh @@ -0,0 +1,42 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class SgiPort : public SgiPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + SgiPort(const char *par_port_name); + ~SgiPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const CHARSTRING& p_ind, const params& p_params) {}; + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + protected: + }; // End of class SgiPort + +} + diff --git a/ccsrc/Ports/Sgi/module.mk b/ccsrc/Ports/Sgi/module.mk new file mode 100644 index 0000000..58a9d0b --- /dev/null +++ b/ccsrc/Ports/Sgi/module.mk @@ -0,0 +1,3 @@ +sources := SgiPort.cc +includes := . + diff --git a/ccsrc/Protocols/Diameter/avp.cc b/ccsrc/Protocols/Diameter/avp.cc new file mode 100644 index 0000000..94bc5b7 --- /dev/null +++ b/ccsrc/Protocols/Diameter/avp.cc @@ -0,0 +1,7 @@ +#include + +#include "avp.hh" + +#include "loggers.hh" +#include "converter.hh" + diff --git a/ccsrc/Protocols/Diameter/avp.hh b/ccsrc/Protocols/Diameter/avp.hh new file mode 100644 index 0000000..7113b90 --- /dev/null +++ b/ccsrc/Protocols/Diameter/avp.hh @@ -0,0 +1,5 @@ +#pragma once + +class avp { + +}; // End of class avp \ No newline at end of file diff --git a/ccsrc/Protocols/Diameter/diameter_codec.cc b/ccsrc/Protocols/Diameter/diameter_codec.cc new file mode 100644 index 0000000..06a6e07 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_codec.cc @@ -0,0 +1,51 @@ +#include + +#include "diameter_codec.hh" + +#include "loggers.hh" +#include "converter.hh" + +template class OPTIONAL; +class TTCN_EncDec; + +int diameter_codec::encode(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, OCTETSTRING& p_data) { + loggers::get_instance().log_msg(">>> diameter_codec::encode", (const Base_Type &)p_diameter_msg); + + TTCN_EncDec::clear_error(); + TTCN_Buffer encoding_buffer; + + encode_header(p_diameter_msg.header(), encoding_buffer); // len field is set to 0 + + if (p_diameter_msg.ischosen()) { + } + + return 0; +} + +int diameter_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params = NULL) { + loggers::get_instance().log_msg(">>> diameter_codec::decode: ", (const Base_Type &)p_data); + + TTCN_EncDec::clear_error(); + TTCN_Buffer decoding_buffer; + + if (decode_header(decoding_buffer, p_diameter_msg.header()) == 0) { + loggers::get_instance().log_warning("diameter_codec::decode: Failed to decode header"); + return -1; + } + + return 0; +} + +int diameter_codec::encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_header: ", (const Base_Type &)p_header); + +} + +int diameter_codec::decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header) { + loggers::get_instance().log(">>> diameter_codec::decode_header"); + +} + +int diameter_codec::padding(TTCN_Buffer& p_encoding_buffer) { //padding = (4 - (size & 3)) & 3; + +} diff --git a/ccsrc/Protocols/Diameter/diameter_codec.hh b/ccsrc/Protocols/Diameter/diameter_codec.hh new file mode 100644 index 0000000..34b9a60 --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_codec.hh @@ -0,0 +1,35 @@ +#pragma once + +#include + +#include "codec_gen.hh" +#include "params.hh" + +#include "avp.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibDiameter__TypesAndValues { + class DIAMETER__MSG; //! Forward declaration of TITAN class + class DiameterHeader; +} + +class diameter_codec: public codec_gen < + LibDiameter__TypesAndValues::DIAMETER__MSG, + LibDiameter__TypesAndValues::DIAMETER__MSG> +{ + std::vector avps; +public: + explicit diameter_codec() : codec_gen(), avps() { }; + virtual ~diameter_codec() { }; + + virtual int encode (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, OCTETSTRING& p_data); + virtual int decode (const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params = NULL); + +private: + int encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer); + int decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header); + int padding(TTCN_Buffer& p_encoding_buffer); //padding = (4 - (size & 3)) & 3; +}; // End of class diameter_codec diff --git a/ccsrc/Protocols/Diameter/diameter_layer_factory.hh b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh index ca541ec..f43182f 100644 --- a/ccsrc/Protocols/Diameter/diameter_layer_factory.hh +++ b/ccsrc/Protocols/Diameter/diameter_layer_factory.hh @@ -1,6 +1,6 @@ /*! * \file diameter_layer_factory.hh - * \brief Header file for ITS Diameter protocol layer factory. + * \brief Header file for Diameter protocol layer factory. * \author ETSI TTF T010 * \copyright ETSI Copyright Notification * No part may be reproduced except as authorized by written permission. diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc new file mode 100644 index 0000000..2c7cc27 --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc @@ -0,0 +1,39 @@ +#include "LibDiameter_Interface.hh" +#include "LibDiameter_TypesAndValues.hh" + +#include "diameter_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +lower_layer_pp_layer::lower_layer_pp_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> lower_layer_pp_layer::lower_layer_pp_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void lower_layer_pp_layer::sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> lower_layer_pp_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + _codec_register.encode(p_diameter_message, data); + send_data(data, _params); +} + +void lower_layer_pp_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> lower_layer_pp_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void lower_layer_pp_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> lower_layer_pp_layer::receive_data: ", data); + + // Decode Diameter message +} + +lower_layer_pp_layer_factory lower_layer_pp_layer_factory::_f; + diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh new file mode 100644 index 0000000..17c73b1 --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file lower_layer_pport_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibDiameter__Interface { + class LowerLayerPPort; //! Forward declaration of TITAN class +} + +namespace LibDiameter__TypesAndValues { + class Lower__Layer__Primitive; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class lower_layer_pport_layer + * \brief This class provides a factory class to create an lower_layer_pport_layer class instance + */ +class lower_layer_pport_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the lower_layer_pport_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + lower_layer_pport_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the lower_layer_pport_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + lower_layer_pport_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~lower_layer_pport_layer() { }; + + void sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class lower_layer_pport_layer + diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh new file mode 100644 index 0000000..af84b8a --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file lower_layer_pport_layer_factory.hh + * \brief Header file for Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "lower_layer_pport_layer.hh" + +/*! + * \class lower_layer_pport_layer_factory + * \brief This class provides a factory class to create an lower_layer_pport_layer class instance + */ +class lower_layer_pport_layer_factory : public layer_factory { + static lower_layer_pport_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + lower_layer_pport_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("LLPP", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new lower_layer_pport_layer(p_type, p_param); + }; +}; // End of class lower_layer_pport_layer_factory + diff --git a/ccsrc/Protocols/LowerLayerPPort/module.mk b/ccsrc/Protocols/LowerLayerPPort/module.mk new file mode 100644 index 0000000..c6a6e47 --- /dev/null +++ b/ccsrc/Protocols/LowerLayerPPort/module.mk @@ -0,0 +1,5 @@ +sources := \ + lower_layer_pport_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/Naptr/module.mk b/ccsrc/Protocols/Naptr/module.mk new file mode 100644 index 0000000..04484d2 --- /dev/null +++ b/ccsrc/Protocols/Naptr/module.mk @@ -0,0 +1,5 @@ +sources := \ + naptr_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/Naptr/naptr_layer.cc b/ccsrc/Protocols/Naptr/naptr_layer.cc new file mode 100644 index 0000000..83f982a --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptr_layer.cc @@ -0,0 +1,39 @@ +#include "AtsImsIot_TypesAndValues.hh" +#include "AtsImsIot_TypesAndValues.hh" + +#include "naptr_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +naptr_layer::naptr_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> naptr_layer::naptr_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void naptr_layer::sendMsg(const AtsImsIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> naptr_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + _codec_register.encode(p_diameter_message, data); + send_data(data, _params); +} + +void naptr_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> naptr_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void naptr_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> naptr_layer::receive_data: ", data); + + // Decode Diameter message +} + +naptr_layer_factory naptr_layer_factory::_f; + diff --git a/ccsrc/Protocols/Naptr/naptr_layer.hh b/ccsrc/Protocols/Naptr/naptr_layer.hh new file mode 100644 index 0000000..db265ce --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptr_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file naptr_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace AtsImsIot__TestSystem { + class NaptrPort; //! Forward declaration of TITAN class +} + +namespace LibIot__TypesAndValues { + class NAPTRmessage; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class naptr_layer + * \brief This class provides a factory class to create an naptr_layer class instance + */ +class naptr_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the naptr_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + naptr_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the naptr_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + naptr_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~naptr_layer() { }; + + void sendMsg(const LibIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class naptr_layer + diff --git a/ccsrc/Protocols/Naptr/naptr_layer_factory.hh b/ccsrc/Protocols/Naptr/naptr_layer_factory.hh new file mode 100644 index 0000000..595fee7 --- /dev/null +++ b/ccsrc/Protocols/Naptr/naptr_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file naptr_layer_factory.hh + * \brief Header file for Diameter protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "naptr_layer.hh" + +/*! + * \class naptr_layer_factory + * \brief This class provides a factory class to create an naptr_layer class instance + */ +class naptr_layer_factory : public layer_factory { + static naptr_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + naptr_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("NAPTR", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new naptr_layer(p_type, p_param); + }; +}; // End of class naptr_layer_factory + diff --git a/ccsrc/Protocols/UpperTester/module.mk b/ccsrc/Protocols/UpperTester/module.mk new file mode 100644 index 0000000..b704706 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/module.mk @@ -0,0 +1,5 @@ +sources := \ + upper_tester_layer.cc \ + + +includes := . diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc new file mode 100644 index 0000000..d19a21b --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc @@ -0,0 +1,39 @@ +#include "LibIot__TestInterface.hh" +#include "LibUpperTester.hh" + +#include "upper_tester_layer_factory.hh" + +#include "loggers.hh" + +#include "converter.hh" + +upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { + loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} + +void upper_tester_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_diameter_message); + + // Encode DiameterMessage + OCTETSTRING data; + _codec_register.encode(p_diameter_message, data); + send_data(data, _params); +} + +void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); + + send_to_all_layers(data, p_params); +} + +void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); + + // Decode Diameter message +} + +upper_tester_layer_factory upper_tester_layer_factory::_f; + diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh new file mode 100644 index 0000000..995bc80 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh @@ -0,0 +1,73 @@ +/*! + * \file upper_tester_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include + +#include "t_layer.hh" + +namespace LibIot__TestInterface { + class EquipmentAccessPort; //! Forward declaration of TITAN class +} + +namespace LibUpperTester { + class EquipmentOperationReq; //! Forward declaration of TITAN class +} + +class OCTETSTRING; //! Forward declaration of TITAN class + +/*! + * \class upper_tester_layer + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer : public t_layer { + params _params; + +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~upper_tester_layer() { }; + + void sendMsg(const LibUpperTester::EquipmentOperationReq& p_diameter_message, params& p_param); + + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class upper_tester_layer + diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh new file mode 100644 index 0000000..558dfa8 --- /dev/null +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh @@ -0,0 +1,45 @@ +/*! + * \file upper_tester_layer_factory.hh + * \brief Header file for INT LibIot protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once + +#include "layer_stack_builder.hh" + +#include "upper_tester_layer.hh" + +/*! + * \class upper_tester_layer_factory + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer_factory : public layer_factory { + static upper_tester_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + upper_tester_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("UT", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new upper_tester_layer(p_type, p_param); + }; +}; // End of class upper_tester_layer_factory + diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index eaa449c..2ac19f5 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -15,9 +15,9 @@ module AtsImsIot_Diameter_Templates { //LibDiameter import from LibDiameter_TypesAndValues all; + import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Templates all; import from LibDiameter_Steps all; - import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index 890c4af..d69a207 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -64,6 +64,8 @@ module AtsImsIot_TestSystem { group portDefinitions { type port ImsCoordinationPort message { inout SipMessage, DIAMETER_MSG; + } with { + extension "internal" } type port DataPort message { in Request, Response, SEND_request, RECEIVE_response; // SIP diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 4dfd575..7c8c8fe 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -55,7 +55,16 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/Protocols/ETH \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ ../../titan-test-system-framework/ccsrc/Protocols/UDP \ - ../../ccsrc/EncDec/LibSip \ ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Ports/LibDiameter \ + ../../ccsrc/Ports/Naptr \ + ../../ccsrc/Ports/Data \ + ../../ccsrc/Ports/Sgi \ + ../../ccsrc/Ports/LibIot \ + ../../ccsrc/Protocols/Diameter \ + ../../ccsrc/Protocols/LowerLayerPPort \ ../../ccsrc/Protocols/Sip \ + ../../ccsrc/Protocols/Naptr \ + ../../ccsrc/Protocols/UpperTester \ + ../../ccsrc/EncDec/LibSip \ ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ diff --git a/ttcn/LibIot/LibIot_TestInterface.ttcn b/ttcn/LibIot/LibIot_TestInterface.ttcn index 083dba5..275d435 100644 --- a/ttcn/LibIot/LibIot_TestInterface.ttcn +++ b/ttcn/LibIot/LibIot_TestInterface.ttcn @@ -101,6 +101,8 @@ module LibIot_TestInterface { } type port VerdictPort message { inout IotVerdict; + } with { + extension "internal" } type port AdapterConfigPort message { diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn index a65de88..4a9bef3 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Base_AVPs.ttcn @@ -729,6 +729,16 @@ module LibDiameter_Types_Base_AVPs { // variant "length=32" // } + type record Sponsor_Identity_AVP{ + //Ref: ETSI TS 129 214 Sponsor_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + }//end group AVP_GxFrom132_422_Types }//end group AVP_Types @@ -1346,6 +1356,52 @@ module LibDiameter_Types_Base_AVPs { SIP_Auth_Data_Item_RFC_AVP sIP_Auth_Data_Item_RFC_AVP, //RFC type definition SIP_Auth_Data_Item_3GPP_AVP sIP_Auth_Data_Item_3GPP_AVP //3GPP type definition } + + /** + * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + */ + type record SIP_Auth_Data_Item_3GPP_AVP { + AVP_Header aVP_Header, //SIP-Auth-Data-Item ::= < AVP Header: 612 > + SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme optional, + SIP_Item_Number_AVP sIP_Item_Number optional, + SIP_Authenticate_AVP sIP_Authenticate optional, + SIP_Authorization_AVP sIP_Authorization optional, + SIP_Authentication_Context_AVP sIP_Authentication_Context optional, + SIP_Digest_Authenticate_AVP sIP_Digest_Authenticate optional, + Confidentiality_Key_AVP confidentiality_Key optional, + Integrity_Key_AVP integrity_Key optional, + Framed_IP_Address_AVP framed_IP_Address optional, + Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, + Framed_Interface_Id_AVP framed_Interface_Id optional, + Line_Identifier_AVP line_Identifier optional, + set of AVP_Type aVP_Type optional + } + + type record Integrity_Key_AVP { //ref: 7.3.58 + AVP_Header aVP_Header, //Integrity-Key ::= + octetstring aVP_Data + } + + type record Confidentiality_Key_AVP { //ref: 7.3.57 + AVP_Header aVP_Header, //Confidentiality-Key ::= + octetstring aVP_Data + } + + type record SIP_Digest_Authenticate_AVP{ + //Ref: RFC4740 9.5.3. SIP-Digest-Authenticate AVP + AVP_Header aVP_Header,//SIP-Digest-Authenticate ::= < AVP Header: 635 > + Digest_Realm_AVP digest_Realm,//requ. + Digest_Algorithm_AVP digest_Algorithm optional, + Digest_QoP_AVP digest_QoP optional, + Digest_HA1_AVP digest_HA1 optional, + set of AVP_Type aVP_Type optional + } + + type record Line_Identifier_AVP { //ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.42 + AVP_Header aVP_Header, //Line_Identifier-Key ::= + octetstring aVP_Data + } + type record SIP_Auth_Data_Item_RFC_AVP{ //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP AVP_Header aVP_Header,//SIP-Auth-Data-Item ::= < AVP Header: 376 > @@ -1386,11 +1442,32 @@ module LibDiameter_Types_Base_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } + type record SIP_Authenticate_3GPP_AVP{ + // Ref: 129 229 6.3.10. SIP-Authenticate AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + type union SIP_Authenticate_AVP { SIP_Authenticate_RFC_AVP sIP_Authenticate_RFC_AVP, //RFC type definition SIP_Authenticate_3GPP_AVP sIP_Authenticate_3GPP_AVP //3GPP type definition } + /** + * ETSI TS 129 229 Clause 6.3.9 SIP-Authentication-Scheme AVP + */ + type record SIP_Authentication_Scheme_3GPP_AVP{ + //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + + type record SIP_Authorization_3GPP_AVP{ + // Ref: 129 229 6.3.11. SIP-Authorization AVP + AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 610 > + octetstring aVP_Data + } + type record SIP_Authenticate_RFC_AVP{ //Ref: RFC4740 9.5.3. SIP-Authenticate AVP AVP_Header aVP_Header,//SIP-Authenticate ::= < AVP Header: 379 > @@ -2230,6 +2307,39 @@ module LibDiameter_Types_Base_AVPs { // variant "present=bytes(4, 452);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } + /** + * @desc The Quota-Holding-Time AVP (AVP code 872) + * @member aVP_Header Header AVP + * @member aVP_Data Specifies the reason for usage reporting for one or more types of quota for a particular category + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Reporting_Reason_AVP { + AVP_Header aVP_Header,// + Reporting_Reason aVP_Data + } // End of type Reporting_Reason_AVP + + /** + * @desc The Reporting_Reason enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Reporting_Reason { + THRESHOLD_E (0), + QHT_E (1), + FINAL_E (2), + QUOTA_EXHAUSTED_E (3), + VALIDITY_TIME_E (4), + OTHER_QUOTA_TYPE_E (5), + RATING_CONDITION_CHANGE_E (6), + FORCED_REAUTHORISATION_E (7), + POOL_EXHAUSTED_E (8) +// } with { +// variant "length=32" + } // End of type Reporting_Reason + type set Used_Service_Unit_AVP{ // Ref: RFC4006 8.19. Used-Service-Unit AVP AVP_Header aVP_Header,//< AVP Header: 446 > @@ -2249,6 +2359,19 @@ module LibDiameter_Types_Base_AVPs { // variant (cC_Money) "fieldPresent=bytes(4, 413);decode=CodecHelper.decodeCC_Money_AVP()" // variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" // } + + /** + * @desc Event-Charging-TimeStamp_AVP (AVP code 1258) + * @member aVP_Header Header AVP + * @member Time Holds the type Time - timestamp of the event reported in the CC-Service-Specific-Units AVP + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.64 Event-Charging-TimeStamp_AVP + */ + type record Event_Charging_TimeStamp_AVP{ + AVP_Header aVP_Header,//< AVP Header: 1258 > + Time aVP_Data + } + type record Multiple_Services_Indicator_AVP{ // Ref: RFC4006 8.40. Multiple-Services-Indicator AVP AVP_Header aVP_Header,//< AVP Header: 455 > @@ -2443,6 +2566,675 @@ module LibDiameter_Types_Base_AVPs { // variant (g_S_U_Pool_Reference) "fieldPresent=bytes(4, 457)&&CodecHelper.isAvailable()" // variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" // } + + /** + * @desc The Time-Quota-Mechanism AVP (AVP code 1270) + * @member aVP_Header Header AVP + * @member aVP_Data_Quota_Type TODO + * @member base_Time_Interval TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.228 Time-Quota-Mechanism + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Mechanism_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type_AVP time_Quota_Type optional, + Base_Time_Interval_AVP base_Time_Interval optional + } // End of type Time_Quota_Mechanism_AVP + + /** + * @desc Base-Time-Interval AVP (AVP code 1265) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the length of the base time interval, for controlling the consumption of time quota, in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.29 Base-Time-Interval AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Base_Time_Interval_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Base_Time_Interval_AVP + + /** + * @desc The Time-Quota-Type AVP (AVP code 1271) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate which time quota consumption mechanism shall be used for the associated Rating Group + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Type_AVP { + AVP_Header aVP_Header,// + Time_Quota_Type aVP_Data + } // End of type Time_Quota_Type_AVP + + /** + * @desc The Time-Quota-Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Time_Quota_Type { + DISCRETE_TIME_PERIOD_E (0), + CONTINUOUS_TIME_PERIOD_E (1) +// } with { +// variant "length=32" + } // End of type Time_Quota_Type + + /** + * @desc The AF-Correlation-Information AVP (AVP code 1276) + * @member aVP_Header Header AVP + * @member af_Charging_Identifier TODO + * @member flows Flow identifiers generated by the AF and received by P-GW over Rx/Gx as defined in TS 29.214 [214] and TS 29.212 [215] + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.11 AF-Correlation-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record AF_Correlation_Information_AVP { + AVP_Header aVP_Header,// + AF_Charging_Identifier_AVP af_Charging_Identifier optional, + set of Flows_AVP flows optional + } // End of type AF_Correlation_Information_AVP + + type record AF_Signalling_Protocol_AVP{ + //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP + AVP_Header aVP_Header,// + AF_Signalling_Protocol_Type aVP_Data + } +// with { +// variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated AF_Signalling_Protocol_Type{ + // Ref: ETSI TS 129 214 5.3.26 + NO_INFORMATION_E (0), + SIP_E (1) + } +// with { +// variant "length=32" +// } + + type record Flows_AVP{ + //Ref: ETSI TS 129 214 Flows_AVP + AVP_Header aVP_Header,// + Media_Component_Number_AVP media_component_number, + set of Flow_Number_AVP flow_Number optional, + Final_Unit_Action_AVP final_unit_action optional + } + // with { +// variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" +// variant (final_unit_action) "condition=CodecHelper.leaveScope()" +// } + + type record Flow_Status_AVP{ + //Ref: ETSI TS 129 214 Flow_Status AVP + AVP_Header aVP_Header,// + Flow_Status_Type aVP_Data + } +// with { +// variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Flow_Description_AVP{ + //Ref: ETSI TS 129 214 Flow_Description AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } + // with { + // variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type record Flow_Number_AVP{ + //Ref: ETSI TS 129 214 Flow_Number AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated Flow_Status_Type{ + // Ref: ETSI TS 129 214 5.3.11 + ENABLED_UPLINK_E (0), + ENABLED_DOWNLINK_E (1), + ENABLED_E (2), + DISABLED_E (3), + REMOVED_E (4) + } +// with { +// variant "length=32" +// } + + type record Media_Component_Number_AVP{ + //Ref: ETSI TS 129 214 Media_Component_Number_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record AF_Charging_Identifier_AVP{ + //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + /** + * @desc Envelope AVP (AVP code 1266) + * @member aVP_Header Header AVP + * @member envelope_Start_Time TODO + * @member envelope_End_Time TODO + * @member cC_Total_Octets TODO + * @member cC_Input_Octets TODO + * @member cC_Output_Octets TODO + * @member cC_Service_Specific_Units TODO + * @member aVP_Type TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.59 Envelope AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Envelope_AVP { + AVP_Header aVP_Header,// + Envelope_Start_Time_AVP envelope_Start_Time, + Envelope_End_Time_AVP envelope_End_Time optional, + CC_Total_Octets_AVP cC_Total_Octets optional, + CC_Input_Octets_AVP cC_Input_Octets optional, + CC_Output_Octets_AVP cC_Output_Octets optional, + CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, + set of AVP_Type aVP_Type optional + } // End of type Envelope_AVP + + /** + * @desc The Envelope-End-Time AVP (AVP code 1267) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the end of the time envelope + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-End-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_End_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_End_Time_AVP + + /** + * @desc The Envelope-Start-Time AVP (AVP code 1269) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate the time of the packet of user data which caused the time envelope to start + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-Start-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Start_Time_AVP { + AVP_Header aVP_Header,// + Time aVP_Data + } // End of type Envelope_Start_Time_AVP + + /** + * @desc The Refund-Information AVP (AVP code 2022) + * @member aVP_Header Header AVP + * @member aVP_Data Conveys relevant information for the OCS application relative to refund mechanism + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.171 Refund-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Refund_Information_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type Refund_Information_AVP + + /** + * @desc The Trigger AVP (AVP code 1264) + * @member aVP_Header Header AVP + * @member trigger_Type Holds the trigger types + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Trigger_AVP { + AVP_Header aVP_Header,// + set of Trigger_Type_AVP trigger_Type + } // End of type Trigger_AVP + + /** + * @desc The Trigger-Type AVP (AVP code 870) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates a single re-authorisation event type + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.236 Trigger-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Trigger_Type_AVP { + AVP_Header aVP_Header,// + Trigger_Type aVP_Data + } // End of type Trigger_Type_AVP + + /** + * @desc The Trigger_Type enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Trigger_Type { + CHANGE_IN_SGSN_IP_ADDRESS_E (1), + CHANGE_IN_QOS_E (2), + CHANGE_IN_LOCATION_E (3), + CHANGE_IN_RAT_E (4), + CHANGE_IN_UE_TIMEZONE_E (5), + CHANGEINQOS_TRAFFIC_CLASS_E (10), + CHANGEINQOS_RELIABILITY_CLASS_E (11), + CHANGEINQOS_DELAY_CLASS_E (12), + CHANGEINQOS_PEAK_THROUGHPUT_E (13), + CHANGEINQOS_PRECEDENCE_CLASS_E (14), + CHANGEINQOS_MEAN_THROUGHPUT_E (15), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_UPLINK_E (16), + CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_DOWNLINK_E (17), + CHANGEINQOS_RESIDUAL_BER_E (18), + CHANGEINQOS_SDU_ERROR_RATIO_E (19), + CHANGEINQOS_TRANSFER_DELAY_E (20), + CHANGEINQOS_TRAFFIC_HANDLING_PRIORITY_E (21), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_UPLINK_E (22), + CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_DOWNLINK_E (23), + CHANGEINLOCATION_MCC_E (30), + CHANGEINLOCATION_MNC_E (31), + CHANGEINLOCATION_RAC_E (32), + CHANGEINLOCATION_LAC_E (33), + CHANGEINLOCATION_CellId_E (34), + CHANGEINLOCATION_TAC_E (35), + CHANGEINLOCATION_ECGI_E (36), + CHANGE_IN_MEDIA_COMPOSITION_E (40), + CHANGE_IN_PARTICIPANTS_NMB_E (50), + CHANGE_IN_THRSHLD_OF_PARTICIPANTS_NMB_E (51), + CHANGE_IN_USER_PARTICIPATING_TYPE_E (52), + CHANGE_IN_SERVICE_CONDITION_E (60), + CHANGE_IN_SERVING_NODE_E (61), + CHANGE_IN_USER_CSG_INFORMATION_E (70), + CHANGE_IN_HYBRID_SUBSCRIBED_USER_CSG_INFORMATION_E (71), + CHANGE_IN_HYBRID_UNSUBSCRIBED_USER_CSG_INFORMATION_E (72) +// } with { +// variant "length=32" + } // End of type Trigger_Type + + /** + * @desc The Envelope-Reporting AVP (AVP code 1268) + * @member aVP_Header Header AVP + * @member aVP_Data Indicate whether the client shall report the start and end of each time envelope, in those cases in which quota is consumed in envelopes + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Envelope_Reporting_AVP { + AVP_Header aVP_Header,// + Envelope_Reporting aVP_Data + } // End of type Envelope_Reporting_AVP + + /** + * @desc The Envelope-Reporting enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated Envelope_Reporting { + DO_NOT_REPORT_ENVELOPES_E (0), + REPORT_ENVELOPES_E (1), + REPORT_ENVELOPES_WITH_VOLUME_E (2), + REPORT_ENVELOPES_WITH_EVENTS_E (3), + REPORT_ENVELOPES_WITH_VOLUME_AND_EVENTS_E (4) +// } with { +// variant "length=32" + } // End of type Envelope_Reporting + + /** + * @desc The Service-Specific-Info AVP (AVP code 1249) + * @member aVP_Header Header AVP + * @member reason Contains the reason for closing a container and the addition of a new container + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.195 Service-Specific-Info AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Info_AVP { + AVP_Header aVP_Header,// + Service_Specific_Data_AVP service_Specific_Data, + Service_Specific_Type_AVP service_Specific_Type + } // End of type Service_Specific_Info_AVP + + /** + * @desc Service-Specific-Type AVP (AVP code 1257) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the type of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.196 Service-Specific-Type AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Type_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Service_Specific_Type_AVP + + /** + * @desc The Service-Specific-Data AVP (AVP code 863) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the value of the Service-Specific-Data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.194 Service-Specific-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Service_Specific_Data_AVP { + AVP_Header aVP_Header,// + UTF8String aVP_Data + } // End of type Service_Specific_Data_AVP + + type record QoS_Information_AVP{ + //Ref: ETSI TS 129 212 QoS_Information_AVP + AVP_Header aVP_Header, // + QoS_Class_Identifier_AVP qoS_Class_Identifier optional, + Max_Requested_Bandwidth_UL_AVP max_Requested_Bandwidth_UL optional, + Max_Requested_Bandwidth_DL_AVP max_Requested_Bandwidth_DL optional, + Guaranteed_Bitrate_UL_AVP guaranteed_Bitrate_UL optional, + Guaranteed_Bitrate_DL_AVP guaranteed_Bitrate_DL optional, + Bearer_Identifier_AVP bearer_Identifier optional, + Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, + APN_Aggregate_Max_Bitrate_UL_AVP aPN_Aggregate_Max_Bitrate_UL optional, + APN_Aggregate_Max_Bitrate_DL_AVP aPN_Aggregate_Max_Bitrate_DL optional, + set of AVP_Type aVP_Type optional + } +// with { +// variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" +// } + + type record Allocation_Retention_Priority_AVP{ + //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP + AVP_Header aVP_Header, // + Priority_Level_AVP priority_Level, + Pre_emption_Capability_AVP pre_emption_Capability optional, + Pre_emption_Vulnerability_AVP pre_emption_Vulnerability optional + } +// with { +// variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" +// } + + type record Pre_emption_Capability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP + AVP_Header aVP_Header,// + Pre_emption_Capability aVP_Data + } +// with { +// variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated Pre_emption_Capability{ + // Ref: ETSI TS 129 212 5.3.46 + PRE_EMPTION_CAPABILITY_ENABLED_E (0), + PRE_EMPTION_CAPABILITY_DISABLED_E (1) + } +// with { +// variant "length=32" +// } + + type record Pre_emption_Vulnerability_AVP{ + //Ref: ETSI TS 129 212 Pre_emption_Vulnerabilitye_AVP + AVP_Header aVP_Header,// + Pre_emption_Vulnerability aVP_Data + } + // with { + // variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type enumerated Pre_emption_Vulnerability{ + // Ref: ETSI TS 129 212 5.3.47 + PRE_EMPTION_VULNERABILITY_ENABLED_E (0), + PRE_EMPTION_VULNERABILITY_DISABLED_E (1) + } +// with { +// variant "length=32" +// } + + type record Priority_Level_AVP{ + //Ref: ETSI TS 129 212 Priority_Level_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Bearer_Identifier_AVP{ + //Ref: ETSI TS 129 212 Bearer_Identifier_AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record Guaranteed_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Guaranteed_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Max_Requested_Bandwidth_UL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Max_Requested_Bandwidth_DL_AVP{ + //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record QoS_Class_Identifier_AVP{ + //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP + AVP_Header aVP_Header,// + QoS_Class_Identifier aVP_Data + } +// with { +// variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated QoS_Class_Identifier{ + // Ref: ETSI TS 129 212 5.3.17 + Reserved1_E ( 0), + QCI_1_E (1),//examle service=conversational voice + QCI_2_E (2),//examle service=conversational video + QCI_3_E (3),//examle service=real time gaming + QCI_4_E (4),//examle service=non-conversational video + QCI_5_E (5),//examle service=IMS signalling + QCI_6_E (6),//examle service=video(TCP based) + QCI_7_E (7),//examle service=voice,video(life streaming) + QCI_8_E (8),//examle service=video(buffered streaming) + QCI_9_E (9),//examle service=video(buffered streaming) + Reserved2_E ( 10), // .. 127 + OperatorSpecific_E (128), // .. 254 + Reserved3_E (255) + } +// with { +// variant "length=32" +// } + + type record APN_Aggregate_Max_Bitrate_UL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_UL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record APN_Aggregate_Max_Bitrate_DL_AVP{ + //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data + } +// with { +// variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 865) + * @member aVP_Header Header AVP + * @member threeGPP_Charging_Id TODO + * @member ps_Free_Format_Data TODO + * @member ps_Append_Free_Format_Data TODO + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.157 PS-Furnish-Charging-Information AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Furnish_Charging_Information_AVP { + AVP_Header aVP_Header,// + ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id, + PS_Free_Format_Data_AVP ps_Free_Format_Data, + PS_Append_Free_Format_Data_AVP ps_Append_Free_Format_Data optional + } // End of type PS_Furnish_Charging_Information_AVP + + /** + * @desc The PS-Append-Free-Format-Data AVP (AVP code 867) + * @member aVP_Header Header AVP + * @member aVP_Data Indicates if the information sent in the PS-Free-Format-Data AVP must be appended to the PS-free-format-data stored for the online-session + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Append_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + PS_Append_Free_Format_Data aVP_Data + } // End of type PS_Append_Free_Format_Data_AVP + + /** + * @desc The PS-Append-Free-Format-Data enumerated values + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type enumerated PS_Append_Free_Format_Data { + APPEND_E (0), + OVERWRITE_E (1) +// } with { +// variant "length=32" + } // End of type PS_Append_Free_Format_Data + + /** + * @desc The PS-Furnish-Charging-Information AVP (AVP code 866) + * @member aVP_Header Header AVP + * @member aVP_Data Holds online charging session specific data + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.156 PS-Free-Format-Data AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record PS_Free_Format_Data_AVP { + AVP_Header aVP_Header,// + octetstring aVP_Data + } // End of type PS_Free_Format_Data_AVP + + /** + * @desc The Quota-Holding-Time AVP (AVP code 871) + * @member aVP_Header Header AVP + * @member aVP_Data Contains the quota holding time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.160 Quota-Holding-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Holding_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Holding_Time_AVP + + /** + * @desc The Quota-Consumption-Time AVP (AVP code 881) + * @member aVP_Header Header AVP + * @member aVP_Data Contains an idle traffic aVP_Data time in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.159 Quota-Consumption-Time AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Quota_Consumption_Time_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Quota_Consumption_Time_AVP + + /** + * @desc The Time-Quota-Threshold AVP (AVP code 868) + * @member aVP_Header Header AVP + * @member aVP_Data Contains a threshold value in seconds + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.229 Time-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Time_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Time_Quota_Threshold_AVP + + /** + * @desc The Volume-Quota-Threshold AVP (AVP code 869) + * @member aVP_Header Header AVP + * @member aVP_Data Holds the session identifier + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.243 Volume-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs + */ + type record Volume_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Volume_Quota_Threshold_AVP + + /** + * @desc The Unit-Quota-Threshold AVP (AVP code 1226) + * @member aVP_Header Header AVP + * @member aVP_Data Threshold value in service specific units + * + * @see ETSI TS 132 299 V10.15.0 Clause 7.2.240 Unit-Quota-Threshold AVP + * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs + */ + type record Unit_Quota_Threshold_AVP { + AVP_Header aVP_Header,// + UInt32 aVP_Data + } // End of type Unit_Quota_Threshold_AVP + type record Service_Parameter_Type_AVP{ // Ref: RFC4006 8.44. Service-Parameter-Type AVP AVP_Header aVP_Header,//< AVP Header: 441 > @@ -2827,6 +3619,33 @@ module LibDiameter_Types_Base_AVPs { group TS129_272_AVPs{ + type UTF8String IMEI length (14..15); + type record IMEI_AVP { //ref: 7.3.4 + AVP_Header aVP_Header, //IMEI ::= + IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). + //It may also include a 15th digit + } + + type UTF8String SVN length (2); + type record Sofware_Version_AVP { //ref: 7.3.5 + AVP_Header aVP_Header, //Software-Version ::= + SVN aVP_Data //2-digit Software Version Number (SVN) + } + + type record Terminal_Information_AVP { //ref: 7.3.3 + AVP_Header aVP_Header, //Terminal Information ::= + IMEI_AVP imei optional, + ThreeGPP2_MEID_AVP meid optional, + Sofware_Version_AVP sofware_Version optional, + set of AVP_Type aVP_Type optional + } + + type octetstring ThreeGPP2_MEID length (8); + type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 + AVP_Header aVP_Header, //3GPP2-MEID ::= + ThreeGPP2_MEID aVP_Data + } + type record Trace_Data_AVP{ //Ref: ETSI TS 129 272 Trace_Data_AVP AVP_Header aVP_Header, // @@ -3172,6 +3991,170 @@ module LibDiameter_Types_Base_AVPs { // } }//end of group TS283_034_AVPs + type record Application_Service_Provider_Identity_AVP{ + //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } + // with { + // variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" + // variant (aVP_Data) "condition=CodecHelper.leaveScope()" + // } + + type record Access_Network_Charging_Identifier_Value_AVP{ + //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } +// with { +// variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" +// } + + type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 + AVP_Header aVP_Header, //PDP-Address ::= + Address aVP_Data + } + + type record Charging_Rule_Base_Name_AVP { + //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP AVP + AVP_Header aVP_Header,// + UTF8String aVP_Data + } +// with { +// variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type record Session_Priority_AVP{ + //Ref: ETSI TS 129 229 6.3.56 Multiple_Registration_Indication AVP + AVP_Header aVP_Header,// + Session_Prio_Code aVP_Data +// } +// with { +// variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type enumerated Session_Prio_Code{ + PRIORITY_0 (0), + PRIORITY_1 (1), + PRIORITY_2 (2), + PRIORITY_3 (3), + PRIORITY_4 (4) +// } +// with { +// variant "length=32" + } + + type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 + AVP_Header aVP_Header, //Served-Party-IP-Address ::= + Address aVP_Data + } + + type record User_CSG_Information_AVP{ + //Ref: ETSI TS 132 299 User_CSG_Information_AVP + AVP_Header aVP_Header, // + CSG_Id_AVP cSG_Id, + CSG_Access_Mode_AVP cSG_Access_Mode, + CSG_Membership_Indication_AVP CSG_Membership_Indication_AVP optional + } + + type record CSG_Id_AVP{ + //Ref: ETSI TS 132 299 & TS129 272 CSG_Id_AVP + AVP_Header aVP_Header, // + UInt32 aVP_Data + } + + type record CSG_Access_Mode_AVP{ + //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP + AVP_Header aVP_Header, // + CSG_Access_Mode aVP_Data + } + + type record CSG_Membership_Indication_AVP{ + //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + AVP_Header aVP_Header, // + CSG_Membership_Indication aVP_Data + } + + group TS129_229Cx_Dx_AVPS{ + type record SIP_Authentication_Context_AVP{ + // Ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.13 SIP-Authentication-Context AVP + AVP_Header aVP_Header,// + octetstring aVP_Data + } + + type record Server_Capabilities_AVP{ + // Ref: ETSI TS 129 229 6.3.4 Server-Capabilities AVP + AVP_Header aVP_Header,// + set of MandatoryCapability_AVP mandatoryCapability optional, + set of OptionalCapability_AVP optionalCapability optional, + set of Server_Name_AVP server_Name optional, + set of AVP_Type aVP_Type optional +// } +// with { +// variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" +// variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" +// variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" +// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" + } + + type record MandatoryCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.5. Mandatory-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data +// } +// with { +// variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + type record OptionalCapability_AVP{ + //Ref: ETSI TS 129 229 6.3.6. Optional-Capability AVP + AVP_Header aVP_Header,// + UInt32 aVP_Data +// } +// with { +// variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" + } + + }//end group TS129_229Cx_Dx_AVPS + + group TS129_212Gx_AVPs{ + + type record RAT_Type_AVP{ + //Ref: ETSI TS 129 212 RAT Type AVP + AVP_Header aVP_Header,// + RAT_Type aVP_Data + } +// with { +// variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + + type enumerated RAT_Type{ + // Ref: ETSI TS 129 212 5.3.31 + WLAN_E (0), + VIRTUAL_E (1), + UTRAN_E (1000), + GERAN_E (1001), + GAN_E (1002), + HSPA_EVOLUTION_E (1003), + EUTRAN_E (1004), + CDMA2000_IX_E (2000), + HRPD_E(2001), + UMB_E(2002), + EHRPD_E(2003) + } +// with { +// variant "length=32" +// } + + }//end group TS129_212Gx_AVPs + }//end group AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn index e77e073..72652b7 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_CxDx_AVPs.ttcn @@ -12,7 +12,7 @@ module LibDiameter_Types_CxDx_AVPs { import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_TypesAndValues all; + //import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; group AVPCodeConstants { @@ -71,17 +71,6 @@ module LibDiameter_Types_CxDx_AVPs { MULTIPLE_REGISTRATION (1) // } // with { -// variant "length=32" - } - - type enumerated Session_Prio_Code{ - PRIORITY_0 (0), - PRIORITY_1 (1), - PRIORITY_2 (2), - PRIORITY_3 (3), - PRIORITY_4 (4) -// } -// with { // variant "length=32" } @@ -123,41 +112,6 @@ module LibDiameter_Types_CxDx_AVPs { }//end group AVP_Types group AVPs{ group TS129_229Cx_Dx_AVPS{ - type record Server_Capabilities_AVP{ - // Ref: ETSI TS 129 229 6.3.4 Server-Capabilities AVP - AVP_Header aVP_Header,// - set of MandatoryCapability_AVP mandatoryCapability optional, - set of OptionalCapability_AVP optionalCapability optional, - set of Server_Name_AVP server_Name optional, - set of AVP_Type aVP_Type optional -// } -// with { -// variant "present=bytes(4, 603);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (mandatoryCapability) "fieldPresent=bytes(4, 604)&&CodecHelper.isAvailable()" -// variant (optionalCapability) "fieldPresent=bytes(4, 605)&&CodecHelper.isAvailable()" -// variant (server_Name) "fieldPresent=bytes(4, 602)&&CodecHelper.isAvailable()" -// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" - } - - type record MandatoryCapability_AVP{ - //Ref: ETSI TS 129 229 6.3.5. Mandatory-Capability AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data -// } -// with { -// variant "present=bytes(4, 604);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } - - type record OptionalCapability_AVP{ - //Ref: ETSI TS 129 229 6.3.6. Optional-Capability AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data -// } -// with { -// variant "present=bytes(4, 605);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } type record Visited_Network_Identifier_AVP{ // Ref: ETSI TS 129 229 6.3.1 Visited-Network-Id AVP @@ -169,12 +123,6 @@ module LibDiameter_Types_CxDx_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" } - type record SIP_Authentication_Context_AVP{ - // Ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.13 SIP-Authentication-Context AVP - AVP_Header aVP_Header,// - octetstring aVP_Data - } - type record UAR_Flags_AVP{ //Ref: ETSI TS 129 229 6.3.44 UAR_Flags_AVP AVP_Header aVP_Header,// @@ -225,16 +173,6 @@ module LibDiameter_Types_CxDx_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" } - type record SIP_Digest_Authenticate_AVP{ - //Ref: RFC4740 9.5.3. SIP-Digest-Authenticate AVP - AVP_Header aVP_Header,//SIP-Digest-Authenticate ::= < AVP Header: 635 > - Digest_Realm_AVP digest_Realm,//requ. - Digest_Algorithm_AVP digest_Algorithm optional, - Digest_QoP_AVP digest_QoP optional, - Digest_HA1_AVP digest_HA1 optional, - set of AVP_Type aVP_Type optional - } - type record SCSCF_Restoration_Info_AVP{ //Ref: ETSI TS 129 229 6.3.46 SCSCF_Restoration_Info AVP AVP_Header aVP_Header,// < AVP Header: 639 > @@ -345,16 +283,6 @@ module LibDiameter_Types_CxDx_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" } - type record Session_Priority_AVP{ - //Ref: ETSI TS 129 229 6.3.56 Multiple_Registration_Indication AVP - AVP_Header aVP_Header,// - Session_Prio_Code aVP_Data -// } -// with { -// variant "present=bytes(4,650);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" - } - type record Associated_Identities_AVP{ //Ref: ETSI TS 129 229 6.3.33 Subscription_Info AVP AVP_Header aVP_Header,// < AVP Header: 632 > @@ -439,46 +367,6 @@ module LibDiameter_Types_CxDx_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" } - /** - * ETSI TS 129 229 Clause 6.3.9 SIP-Authentication-Scheme AVP - */ - type record SIP_Authentication_Scheme_3GPP_AVP{ - //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP - AVP_Header aVP_Header,// - UTF8String aVP_Data - } - - /** - * ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP - */ - type record SIP_Auth_Data_Item_3GPP_AVP { - AVP_Header aVP_Header, //SIP-Auth-Data-Item ::= < AVP Header: 612 > - SIP_Authentication_Scheme_AVP sIP_Authentication_Scheme optional, - SIP_Item_Number_AVP sIP_Item_Number optional, - SIP_Authenticate_AVP sIP_Authenticate optional, - SIP_Authorization_AVP sIP_Authorization optional, - SIP_Authentication_Context_AVP sIP_Authentication_Context optional, - SIP_Digest_Authenticate_AVP sIP_Digest_Authenticate optional, - Confidentiality_Key_AVP confidentiality_Key optional, - Integrity_Key_AVP integrity_Key optional, - Framed_IP_Address_AVP framed_IP_Address optional, - Framed_IPv6_Prefix_AVP framed_IPv6_Prefix optional, - Framed_Interface_Id_AVP framed_Interface_Id optional, - Line_Identifier_AVP line_Identifier optional, - set of AVP_Type aVP_Type optional - } - - type record SIP_Authenticate_3GPP_AVP{ - // Ref: 129 229 6.3.10. SIP-Authenticate AVP - AVP_Header aVP_Header,// - octetstring aVP_Data - } - type record SIP_Authorization_3GPP_AVP{ - // Ref: 129 229 6.3.11. SIP-Authorization AVP - AVP_Header aVP_Header,//SIP-Authorization ::= < AVP Header: 610 > - octetstring aVP_Data - } - type record Identity_with_Emergency_Registration_AVP{ //Ref: ETSI TS 129 229 6.3.57 Identity_with_Emergency_Registration AVP AVP_Header aVP_Header,//SIP-Deregistration-Reason ::= < AVP Header: 651 > @@ -491,21 +379,6 @@ module LibDiameter_Types_CxDx_AVPs { // variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" } - type record Confidentiality_Key_AVP { //ref: 7.3.57 - AVP_Header aVP_Header, //Confidentiality-Key ::= - octetstring aVP_Data - } - - type record Integrity_Key_AVP { //ref: 7.3.58 - AVP_Header aVP_Header, //Integrity-Key ::= - octetstring aVP_Data - } - - type record Line_Identifier_AVP { //ref: ETSI TS 129 229 V10.5.0 (2013-04) 6.3.42 - AVP_Header aVP_Header, //Line_Identifier-Key ::= - octetstring aVP_Data - } - }//end of group TS129_229Cx_Dx_AVPs }//end group AVPs diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn index f2746c2..b194f54 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Gx_AVPs.ttcn @@ -12,10 +12,10 @@ module LibDiameter_Types_Gx_AVPs { import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_TypesAndValues all; + //import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; + //import from LibDiameter_Types_Rx_AVPs all; + //mport from LibDiameter_Types_RfRo_AVPs all; group AVPTypes{ group AVP_Gx_Types{ @@ -34,23 +34,6 @@ module LibDiameter_Types_Gx_AVPs { // variant "length=32" // } - type enumerated RAT_Type{ - // Ref: ETSI TS 129 212 5.3.31 - WLAN_E (0), - VIRTUAL_E (1), - UTRAN_E (1000), - GERAN_E (1001), - GAN_E (1002), - HSPA_EVOLUTION_E (1003), - EUTRAN_E (1004), - CDMA2000_IX_E (2000), - HRPD_E(2001), - UMB_E(2002), - EHRPD_E(2003) - } -// with { -// variant "length=32" -// } type enumerated Bearer_Control_Mode{ // Ref: ETSI TS 129 212 5.3.23 UE_ONLY_E (0), @@ -194,24 +177,6 @@ module LibDiameter_Types_Gx_AVPs { } // with { // variant "length=32" -// } - - type enumerated Pre_emption_Capability{ - // Ref: ETSI TS 129 212 5.3.46 - PRE_EMPTION_CAPABILITY_ENABLED_E (0), - PRE_EMPTION_CAPABILITY_DISABLED_E (1) - } -// with { -// variant "length=32" -// } - - type enumerated Pre_emption_Vulnerability{ - // Ref: ETSI TS 129 212 5.3.47 - PRE_EMPTION_VULNERABILITY_ENABLED_E (0), - PRE_EMPTION_VULNERABILITY_DISABLED_E (1) - } -// with { -// variant "length=32" // } type enumerated Reporting_Level{ @@ -239,26 +204,6 @@ module LibDiameter_Types_Gx_AVPs { } // with { // variant "length=32" -// } - - type enumerated QoS_Class_Identifier{ - // Ref: ETSI TS 129 212 5.3.17 - Reserved1_E ( 0), - QCI_1_E (1),//examle service=conversational voice - QCI_2_E (2),//examle service=conversational video - QCI_3_E (3),//examle service=real time gaming - QCI_4_E (4),//examle service=non-conversational video - QCI_5_E (5),//examle service=IMS signalling - QCI_6_E (6),//examle service=video(TCP based) - QCI_7_E (7),//examle service=voice,video(life streaming) - QCI_8_E (8),//examle service=video(buffered streaming) - QCI_9_E (9),//examle service=video(buffered streaming) - Reserved2_E ( 10), // .. 127 - OperatorSpecific_E (128), // .. 254 - Reserved3_E (255) - } -// with { -// variant "length=32" // } type enumerated QoS_Negotiation{ @@ -344,16 +289,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1027);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record RAT_Type_AVP{ - //Ref: ETSI TS 129 212 RAT Type AVP - AVP_Header aVP_Header,// - RAT_Type aVP_Data - } -// with { -// variant "present=bytes(4, 1032);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Bearer_Control_Mode_AVP{ @@ -486,28 +421,8 @@ module LibDiameter_Types_Gx_AVPs { // variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } - type record Pre_emption_Capability_AVP{ - //Ref: ETSI TS 129 212 Pre_emption_Capability_AVP - AVP_Header aVP_Header,// - Pre_emption_Capability aVP_Data - } -// with { -// variant "present=bytes(4, 1047);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Pre_emption_Vulnerability_AVP{ - //Ref: ETSI TS 129 212 Pre_emption_Vulnerabilitye_AVP - AVP_Header aVP_Header,// - Pre_emption_Vulnerability aVP_Data - } -// with { -// variant "present=bytes(4, 1048);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Reporting_Level_AVP{ //Ref: ETSI TS 129 212 Reporting_Levele_AVP + type record Reporting_Level_AVP{ AVP_Header aVP_Header,// Reporting_Level aVP_Data } @@ -530,16 +445,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1045);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record QoS_Class_Identifier_AVP{ - //Ref: ETSI TS 129 212 QoS_Class_Identifier_AVP - AVP_Header aVP_Header,// - QoS_Class_Identifier aVP_Data - } -// with { -// variant "present=bytes(4, 1028);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record QoS_Negotiation_AVP{ @@ -606,16 +511,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1070);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Bearer_Identifier_AVP{ - //Ref: ETSI TS 129 212 Bearer_Identifier_AVP - AVP_Header aVP_Header,// - octetstring aVP_Data - } -// with { -// variant "present=bytes(4, 1020);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" // } type record Charging_Rule_Name_AVP{ @@ -695,46 +590,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1014);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" -// } - - type record APN_Aggregate_Max_Bitrate_DL_AVP{ - //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_DL_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 1040);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record APN_Aggregate_Max_Bitrate_UL_AVP{ - //Ref: ETSI TS 129 212 APN_Aggregate_Max_Bitrate_UL_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 1041);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Guaranteed_Bitrate_DL_AVP{ - //Ref: ETSI TS 129 212 Guaranteed_Bitrate_DL_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 1025);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Guaranteed_Bitrate_UL_AVP{ - //Ref: ETSI TS 129 212 Guaranteed_Bitrate_UL_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 1026);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Max_Supported_Bandwidth_DL_AVP{ @@ -765,16 +620,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1010);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Priority_Level_AVP{ - //Ref: ETSI TS 129 212 Priority_Level_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 1046);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Tunnel_Header_Length_AVP{ @@ -785,16 +630,6 @@ module LibDiameter_Types_Gx_AVPs { // with { // variant "present=bytes(4, 1037);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Charging_Rule_Base_Name_AVP { - //Ref: ETSI TS 129 212 Charging_Rule_Base_Name_AVP AVP - AVP_Header aVP_Header,// - UTF8String aVP_Data - } -// with { -// variant "present=bytes(4, 1004);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record AN_GW_Address_AVP{ @@ -898,18 +733,6 @@ module LibDiameter_Types_Gx_AVPs { // variant "present=bytes(4, 1022);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (charging_Rule_Base_Name) "fieldPresent=bytes(4, 1004)&&CodecHelper.isAvailable()" // variant (charging_Rule_Name) "fieldPresent=bytes(4, 1005)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" -// } - - type record Allocation_Retention_Priority_AVP{ - //Ref: ETSI TS 129 212 Allocation_Retention_Priority_AVP - AVP_Header aVP_Header, // - Priority_Level_AVP priority_Level, - Pre_emption_Capability_AVP pre_emption_Capability optional, - Pre_emption_Vulnerability_AVP pre_emption_Vulnerability optional - } -// with { -// variant "present=bytes(4, 1034);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (pre_emption_Vulnerability) "condition=CodecHelper.leaveScope()" // } type record Charging_Rule_Install_AVP{ @@ -1007,25 +830,6 @@ module LibDiameter_Types_Gx_AVPs { set of AVP_Type aVP_Type optional } - type record QoS_Information_AVP{ - //Ref: ETSI TS 129 212 QoS_Information_AVP - AVP_Header aVP_Header, // - QoS_Class_Identifier_AVP qoS_Class_Identifier optional, - Max_Requested_Bandwidth_UL_AVP max_Requested_Bandwidth_UL optional, - Max_Requested_Bandwidth_DL_AVP max_Requested_Bandwidth_DL optional, - Guaranteed_Bitrate_UL_AVP guaranteed_Bitrate_UL optional, - Guaranteed_Bitrate_DL_AVP guaranteed_Bitrate_DL optional, - Bearer_Identifier_AVP bearer_Identifier optional, - Allocation_Retention_Priority_AVP allocation_Retention_Priority optional, - APN_Aggregate_Max_Bitrate_UL_AVP aPN_Aggregate_Max_Bitrate_UL optional, - APN_Aggregate_Max_Bitrate_DL_AVP aPN_Aggregate_Max_Bitrate_DL optional, - set of AVP_Type aVP_Type optional - } -// with { -// variant "present=bytes(4, 1016);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" -// } - type record CoA_Information_AVP{ //Ref: ETSI TS 129 212 CoA_Information_AVP AVP_Header aVP_Header, // diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn index cd4a164..866f9e5 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_RfRo_AVPs.ttcn @@ -13,12 +13,12 @@ module LibDiameter_Types_RfRo_AVPs { import from LibCommon_BasicTypesAndValues all; // LibDiameter - import from LibDiameter_TypesAndValues all; + //import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_S6a_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_CxDx_AVPs all; + // import from LibDiameter_Types_S6a_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_CxDx_AVPs all; group AVPTypes { @@ -173,48 +173,6 @@ module LibDiameter_Types_RfRo_AVPs { // variant "length=32" } // End of type Low_Priority_Indicator - /** - * @desc The PS-Append-Free-Format-Data enumerated values - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type enumerated PS_Append_Free_Format_Data { - APPEND_E (0), - OVERWRITE_E (1) -// } with { -// variant "length=32" - } // End of type PS_Append_Free_Format_Data - - /** - * @desc The Envelope-Reporting enumerated values - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type enumerated Envelope_Reporting { - DO_NOT_REPORT_ENVELOPES_E (0), - REPORT_ENVELOPES_E (1), - REPORT_ENVELOPES_WITH_VOLUME_E (2), - REPORT_ENVELOPES_WITH_EVENTS_E (3), - REPORT_ENVELOPES_WITH_VOLUME_AND_EVENTS_E (4) -// } with { -// variant "length=32" - } // End of type Envelope_Reporting - - /** - * @desc The Time-Quota-Type enumerated values - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type enumerated Time_Quota_Type { - DISCRETE_TIME_PERIOD_E (0), - CONTINUOUS_TIME_PERIOD_E (1) -// } with { -// variant "length=32" - } // End of type Time_Quota_Type - /** * @desc The AoC-Service-Obligatory-Type enumerated values * @@ -447,72 +405,6 @@ module LibDiameter_Types_RfRo_AVPs { // variant "length=32" } // End of type Application_Service_Type - /** - * @desc The Reporting_Reason enumerated values - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type enumerated Reporting_Reason { - THRESHOLD_E (0), - QHT_E (1), - FINAL_E (2), - QUOTA_EXHAUSTED_E (3), - VALIDITY_TIME_E (4), - OTHER_QUOTA_TYPE_E (5), - RATING_CONDITION_CHANGE_E (6), - FORCED_REAUTHORISATION_E (7), - POOL_EXHAUSTED_E (8) -// } with { -// variant "length=32" - } // End of type Reporting_Reason - - /** - * @desc The Trigger_Type enumerated values - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type enumerated Trigger_Type { - CHANGE_IN_SGSN_IP_ADDRESS_E (1), - CHANGE_IN_QOS_E (2), - CHANGE_IN_LOCATION_E (3), - CHANGE_IN_RAT_E (4), - CHANGE_IN_UE_TIMEZONE_E (5), - CHANGEINQOS_TRAFFIC_CLASS_E (10), - CHANGEINQOS_RELIABILITY_CLASS_E (11), - CHANGEINQOS_DELAY_CLASS_E (12), - CHANGEINQOS_PEAK_THROUGHPUT_E (13), - CHANGEINQOS_PRECEDENCE_CLASS_E (14), - CHANGEINQOS_MEAN_THROUGHPUT_E (15), - CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_UPLINK_E (16), - CHANGEINQOS_MAXIMUM_BIT_RATE_FOR_DOWNLINK_E (17), - CHANGEINQOS_RESIDUAL_BER_E (18), - CHANGEINQOS_SDU_ERROR_RATIO_E (19), - CHANGEINQOS_TRANSFER_DELAY_E (20), - CHANGEINQOS_TRAFFIC_HANDLING_PRIORITY_E (21), - CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_UPLINK_E (22), - CHANGEINQOS_GUARANTEED_BIT_RATE_FOR_DOWNLINK_E (23), - CHANGEINLOCATION_MCC_E (30), - CHANGEINLOCATION_MNC_E (31), - CHANGEINLOCATION_RAC_E (32), - CHANGEINLOCATION_LAC_E (33), - CHANGEINLOCATION_CellId_E (34), - CHANGEINLOCATION_TAC_E (35), - CHANGEINLOCATION_ECGI_E (36), - CHANGE_IN_MEDIA_COMPOSITION_E (40), - CHANGE_IN_PARTICIPANTS_NMB_E (50), - CHANGE_IN_THRSHLD_OF_PARTICIPANTS_NMB_E (51), - CHANGE_IN_USER_PARTICIPATING_TYPE_E (52), - CHANGE_IN_SERVICE_CONDITION_E (60), - CHANGE_IN_SERVING_NODE_E (61), - CHANGE_IN_USER_CSG_INFORMATION_E (70), - CHANGE_IN_HYBRID_SUBSCRIBED_USER_CSG_INFORMATION_E (71), - CHANGE_IN_HYBRID_UNSUBSCRIBED_USER_CSG_INFORMATION_E (72) -// } with { -// variant "length=32" - } // End of type Trigger_Type - /** * @desc The Address_Type enumerated values * @@ -1383,19 +1275,6 @@ module LibDiameter_Types_RfRo_AVPs { Node_Functionality aVP_Data } // End of type Node_Functionality_AVP - /** - * @desc The Service-Specific-Data AVP (AVP code 863) - * @member aVP_Header Header AVP - * @member aVP_Data Holds the value of the Service-Specific-Data - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.194 Service-Specific-Data AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Service_Specific_Data_AVP { - AVP_Header aVP_Header,// - UTF8String aVP_Data - } // End of type Service_Specific_Data_AVP - /** * @desc The Originator AVP (AVP code 863) * @member aVP_Header Header AVP @@ -1409,114 +1288,6 @@ module LibDiameter_Types_RfRo_AVPs { Originator aVP_Data } // End of type Originator_AVP - /** - * @desc The PS-Furnish-Charging-Information AVP (AVP code 865) - * @member aVP_Header Header AVP - * @member threeGPP_Charging_Id TODO - * @member ps_Free_Format_Data TODO - * @member ps_Append_Free_Format_Data TODO - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.157 PS-Furnish-Charging-Information AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record PS_Furnish_Charging_Information_AVP { - AVP_Header aVP_Header,// - ThreeGPP_Charging_Id_AVP threeGPP_Charging_Id, - PS_Free_Format_Data_AVP ps_Free_Format_Data, - PS_Append_Free_Format_Data_AVP ps_Append_Free_Format_Data optional - } // End of type PS_Furnish_Charging_Information_AVP - - /** - * @desc The PS-Furnish-Charging-Information AVP (AVP code 866) - * @member aVP_Header Header AVP - * @member aVP_Data Holds online charging session specific data - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.156 PS-Free-Format-Data AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record PS_Free_Format_Data_AVP { - AVP_Header aVP_Header,// - octetstring aVP_Data - } // End of type PS_Free_Format_Data_AVP - - /** - * @desc The PS-Append-Free-Format-Data AVP (AVP code 867) - * @member aVP_Header Header AVP - * @member aVP_Data Indicates if the information sent in the PS-Free-Format-Data AVP must be appended to the PS-free-format-data stored for the online-session - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.155 PS-Append-Free-Format-Data AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record PS_Append_Free_Format_Data_AVP { - AVP_Header aVP_Header,// - PS_Append_Free_Format_Data aVP_Data - } // End of type PS_Append_Free_Format_Data_AVP - - /** - * @desc The Time-Quota-Threshold AVP (AVP code 868) - * @member aVP_Header Header AVP - * @member aVP_Data Contains a threshold value in seconds - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.229 Time-Quota-Threshold AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Time_Quota_Threshold_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Time_Quota_Threshold_AVP - - /** - * @desc The Volume-Quota-Threshold AVP (AVP code 869) - * @member aVP_Header Header AVP - * @member aVP_Data Holds the session identifier - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.243 Volume-Quota-Threshold AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Volume_Quota_Threshold_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Volume_Quota_Threshold_AVP - - /** - * @desc The Trigger-Type AVP (AVP code 870) - * @member aVP_Header Header AVP - * @member aVP_Data Indicates a single re-authorisation event type - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.236 Trigger-Type AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Trigger_Type_AVP { - AVP_Header aVP_Header,// - Trigger_Type aVP_Data - } // End of type Trigger_Type_AVP - - /** - * @desc The Quota-Holding-Time AVP (AVP code 871) - * @member aVP_Header Header AVP - * @member aVP_Data Contains the quota holding time in seconds - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.160 Quota-Holding-Time AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Quota_Holding_Time_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Quota_Holding_Time_AVP - - /** - * @desc The Quota-Holding-Time AVP (AVP code 872) - * @member aVP_Header Header AVP - * @member aVP_Data Specifies the reason for usage reporting for one or more types of quota for a particular category - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.175 Reporting-Reason AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Reporting_Reason_AVP { - AVP_Header aVP_Header,// - Reporting_Reason aVP_Data - } // End of type Reporting_Reason_AVP - /** * @desc The Service-Information AVP (AVP code 873) * @member aVP_Header Header AVP @@ -1800,19 +1571,6 @@ module LibDiameter_Types_RfRo_AVPs { } // End of type MBMS_Information_AVP - /** - * @desc The Quota-Consumption-Time AVP (AVP code 881) - * @member aVP_Header Header AVP - * @member aVP_Data Contains an idle traffic aVP_Data time in seconds - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.159 Quota-Consumption-Time AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Quota_Consumption_Time_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Quota_Consumption_Time_AVP - /** * @desc The Media-Initiator-Flag AVP (AVP code 882) * @member aVP_Header Header AVP @@ -2422,19 +2180,6 @@ module LibDiameter_Types_RfRo_AVPs { UTF8String aVP_Data } // End of type Reply_Applic_ID_AVP - /** - * @desc The Unit-Quota-Threshold AVP (AVP code 1226) - * @member aVP_Header Header AVP - * @member aVP_Data Threshold value in service specific units - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.240 Unit-Quota-Threshold AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Unit_Quota_Threshold_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Unit_Quota_Threshold_AVP - /** * @desc The SGSN-Address AVP (AVP code 1228) * @member aVP_Header Header AVP @@ -2724,20 +2469,6 @@ module LibDiameter_Types_RfRo_AVPs { MMBox_Storage_Requested aVP_Data } // End of type MMBox_Storage_Requested_AVP - /** - * @desc The Service-Specific-Info AVP (AVP code 1249) - * @member aVP_Header Header AVP - * @member reason Contains the reason for closing a container and the addition of a new container - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.195 Service-Specific-Info AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Service_Specific_Info_AVP { - AVP_Header aVP_Header,// - Service_Specific_Data_AVP service_Specific_Data, - Service_Specific_Type_AVP service_Specific_Type - } // End of type Service_Specific_Info_AVP - /** * @desc The Called-Asserted-Identity AVP (AVP code 1250) * @member aVP_Header Header AVP @@ -2846,31 +2577,6 @@ module LibDiameter_Types_RfRo_AVPs { Delivery_Status_AVP delivery_Status optional } // End of type Service_Generic_Information_AVP - /** - * @desc Service-Specific-Type AVP (AVP code 1257) - * @member aVP_Header Header AVP - * @member aVP_Data Holds the type of the Service-Specific-Data - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.196 Service-Specific-Type AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Service_Specific_Type_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Service_Specific_Type_AVP - - /** - * @desc Event-Charging-TimeStamp_AVP (AVP code 1258) - * @member aVP_Header Header AVP - * @member Time Holds the type Time - timestamp of the event reported in the CC-Service-Specific-Units AVP - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.64 Event-Charging-TimeStamp_AVP - */ - type record Event_Charging_TimeStamp_AVP{ - AVP_Header aVP_Header,//< AVP Header: 1258 > - Time aVP_Data - } - /** * @desc Participant-Access-Priority AVP (AVP code 1259) * @member aVP_Header Header AVP @@ -2940,124 +2646,6 @@ module LibDiameter_Types_RfRo_AVPs { octetstring aVP_Data } // End of type Access_Network_Information_AVP - /** - * @desc The Trigger AVP (AVP code 1264) - * @member aVP_Header Header AVP - * @member trigger_Type Holds the trigger types - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.235 Trigger AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Trigger_AVP { - AVP_Header aVP_Header,// - set of Trigger_Type_AVP trigger_Type - } // End of type Trigger_AVP - - /** - * @desc Base-Time-Interval AVP (AVP code 1265) - * @member aVP_Header Header AVP - * @member aVP_Data Contains the length of the base time interval, for controlling the consumption of time quota, in seconds - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.29 Base-Time-Interval AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Base_Time_Interval_AVP { - AVP_Header aVP_Header,// - UInt32 aVP_Data - } // End of type Base_Time_Interval_AVP - - /** - * @desc Envelope AVP (AVP code 1266) - * @member aVP_Header Header AVP - * @member envelope_Start_Time TODO - * @member envelope_End_Time TODO - * @member cC_Total_Octets TODO - * @member cC_Input_Octets TODO - * @member cC_Output_Octets TODO - * @member cC_Service_Specific_Units TODO - * @member aVP_Type TODO - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.59 Envelope AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Envelope_AVP { - AVP_Header aVP_Header,// - Envelope_Start_Time_AVP envelope_Start_Time, - Envelope_End_Time_AVP envelope_End_Time optional, - CC_Total_Octets_AVP cC_Total_Octets optional, - CC_Input_Octets_AVP cC_Input_Octets optional, - CC_Output_Octets_AVP cC_Output_Octets optional, - CC_Service_Specific_Units_AVP cC_Service_Specific_Units optional, - set of AVP_Type aVP_Type optional - } // End of type Envelope_AVP - - /** - * @desc The Envelope-End-Time AVP (AVP code 1267) - * @member aVP_Header Header AVP - * @member aVP_Data Indicate the time of the end of the time envelope - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-End-Time AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Envelope_End_Time_AVP { - AVP_Header aVP_Header,// - Time aVP_Data - } // End of type Envelope_End_Time_AVP - - /** - * @desc The Envelope-Reporting AVP (AVP code 1268) - * @member aVP_Header Header AVP - * @member aVP_Data Indicate whether the client shall report the start and end of each time envelope, in those cases in which quota is consumed in envelopes - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.61 Envelope-Reporting AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Envelope_Reporting_AVP { - AVP_Header aVP_Header,// - Envelope_Reporting aVP_Data - } // End of type Envelope_Reporting_AVP - - /** - * @desc The Envelope-Start-Time AVP (AVP code 1269) - * @member aVP_Header Header AVP - * @member aVP_Data Indicate the time of the packet of user data which caused the time envelope to start - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.62 Envelope-Start-Time AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Envelope_Start_Time_AVP { - AVP_Header aVP_Header,// - Time aVP_Data - } // End of type Envelope_Start_Time_AVP - - /** - * @desc The Time-Quota-Mechanism AVP (AVP code 1270) - * @member aVP_Header Header AVP - * @member aVP_Data_Quota_Type TODO - * @member base_Time_Interval TODO - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.228 Time-Quota-Mechanism - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Time_Quota_Mechanism_AVP { - AVP_Header aVP_Header,// - Time_Quota_Type_AVP time_Quota_Type optional, - Base_Time_Interval_AVP base_Time_Interval optional - } // End of type Time_Quota_Mechanism_AVP - - /** - * @desc The Time-Quota-Type AVP (AVP code 1271) - * @member aVP_Header Header AVP - * @member aVP_Data Indicate which time quota consumption mechanism shall be used for the associated Rating Group - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.230 Time-Quota-Type AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.1: Use Of IETF Diameter AVPs - */ - type record Time_Quota_Type_AVP { - AVP_Header aVP_Header,// - Time_Quota_Type aVP_Data - } // End of type Time_Quota_Type_AVP - /** * @desc The Early-Media-Description AVP (AVP code 1272) * @member aVP_Header Header AVP @@ -3116,21 +2704,6 @@ module LibDiameter_Types_RfRo_AVPs { Time aVP_Data } // End of type SDP_Answer_Timestamp_AVP - /** - * @desc The AF-Correlation-Information AVP (AVP code 1276) - * @member aVP_Header Header AVP - * @member af_Charging_Identifier TODO - * @member flows Flow identifiers generated by the AF and received by P-GW over Rx/Gx as defined in TS 29.214 [214] and TS 29.212 [215] - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.11 AF-Correlation-Information AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record AF_Correlation_Information_AVP { - AVP_Header aVP_Header,// - AF_Charging_Identifier_AVP af_Charging_Identifier optional, - set of Flows_AVP flows optional - } // End of type AF_Correlation_Information_AVP - /** * @desc The PoC-Session-Initiation-Type AVP (AVP code 1277) * @member aVP_Data Specifies the type of the PoC session initiation @@ -3327,19 +2900,6 @@ module LibDiameter_Types_RfRo_AVPs { Currency_Code_AVP currency_Code } // End of type Remaining_Balance_AVP - /** - * @desc The Refund-Information AVP (AVP code 2022) - * @member aVP_Header Header AVP - * @member aVP_Data Conveys relevant information for the OCS application relative to refund mechanism - * - * @see ETSI TS 132 299 V10.15.0 Clause 7.2.171 Refund-Information AVP - * @see ETSI TS 132 299 V10.15.0 Table 7.2: 3GPP specific AVPs - */ - type record Refund_Information_AVP { - AVP_Header aVP_Header,// - octetstring aVP_Data - } // End of type Refund_Information_AVP - /** * @desc The Carrier-Select-Routing-Information AVP (AVP code 2023) * @member aVP_Header Header AVP @@ -4224,35 +3784,9 @@ module LibDiameter_Types_RfRo_AVPs { AVP_Header aVP_Header,// UInt32 aVP_Data } // End of type PDP_Address_Prefix_Length_AVP - - type record User_CSG_Information_AVP{ - //Ref: ETSI TS 132 299 User_CSG_Information_AVP - AVP_Header aVP_Header, // - CSG_Id_AVP cSG_Id, - CSG_Access_Mode_AVP cSG_Access_Mode, - CSG_Membership_Indication_AVP CSG_Membership_Indication_AVP optional - } - - type record CSG_Id_AVP{ - //Ref: ETSI TS 132 299 & TS129 272 CSG_Id_AVP - AVP_Header aVP_Header, // - UInt32 aVP_Data - } - - type record CSG_Access_Mode_AVP{ - //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP - AVP_Header aVP_Header, // - CSG_Access_Mode aVP_Data - } - - type record CSG_Membership_Indication_AVP{ - //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP - AVP_Header aVP_Header, // - CSG_Membership_Indication aVP_Data - } } // End of group TS132_299Rf_Ro_AVPS - + } // End of group Avp_Rf_Ro_Types } // End of group AVPTypes diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn index 79e2f8b..6e00d18 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_Rx_AVPs.ttcn @@ -30,18 +30,6 @@ module LibDiameter_Types_Rx_AVPs { } // with { // variant "length=32" -// } - - type enumerated Flow_Status_Type{ - // Ref: ETSI TS 129 214 5.3.11 - ENABLED_UPLINK_E (0), - ENABLED_DOWNLINK_E (1), - ENABLED_E (2), - DISABLED_E (3), - REMOVED_E (4) - } -// with { -// variant "length=32" // } type enumerated Flow_Usage_Type{ @@ -127,15 +115,6 @@ module LibDiameter_Types_Rx_AVPs { // variant "length=32" // } - type enumerated AF_Signalling_Protocol_Type{ - // Ref: ETSI TS 129 214 5.3.26 - NO_INFORMATION_E (0), - SIP_E (1) - } -// with { -// variant "length=32" -// } - type enumerated Reservation_Priority_Type{ // Ref: ETSI TS 183 017 7.3.9 PRIORITY_ONE_E (1), @@ -190,16 +169,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 502);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (flows) "condition=CodecHelper.leaveScope()" -// } - - type record Access_Network_Charging_Identifier_Value_AVP{ - //Ref: ETSI TS 129 214 Access_Network_Charging_Identifier_Value AVP - AVP_Header aVP_Header,// - octetstring aVP_Data - } -// with { -// variant "present=bytes(4, 503);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" // } type record Acceptable_Service_Info_AVP{ @@ -224,16 +193,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 504);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" -// } - - type record AF_Charging_Identifier_AVP{ - //Ref: ETSI TS 129 214 AF_Charging_Identifier AVP - AVP_Header aVP_Header,// - octetstring aVP_Data - } -// with { -// variant "present=bytes(4, 505);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" // } type record AF_Requested_Data_AVP{ @@ -244,16 +203,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 551);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Application_Service_Provider_Identity_AVP{ - //Ref: ETSI TS 129 214 Application_Service_Provider_Identity AVP - AVP_Header aVP_Header,// - UTF8String aVP_Data - } -// with { -// variant "present=bytes(4, 532);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Codec_Data_AVP{ @@ -266,49 +215,6 @@ module LibDiameter_Types_Rx_AVPs { // variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope();condition=CodecHelper.leaveScope()" // } - type record Flow_Description_AVP{ - //Ref: ETSI TS 129 214 Flow_Description AVP - AVP_Header aVP_Header,// - IPFilterRule_Type aVP_Data - } -// with { -// variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Flow_Number_AVP{ - //Ref: ETSI TS 129 214 Flow_Number AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 509);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Flows_AVP{ - //Ref: ETSI TS 129 214 Flows_AVP - AVP_Header aVP_Header,// - Media_Component_Number_AVP media_component_number, - set of Flow_Number_AVP flow_Number optional, - Final_Unit_Action_AVP final_unit_action optional - } - // with { -// variant "present=bytes(4, 510);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (flow_Number) "fieldPresent=bytes(4, 509)&&CodecHelper.isAvailable()" -// variant (final_unit_action) "condition=CodecHelper.leaveScope()" -// } - - type record Flow_Status_AVP{ - //Ref: ETSI TS 129 214 Flow_Status AVP - AVP_Header aVP_Header,// - Flow_Status_Type aVP_Data - } -// with { -// variant "present=bytes(4, 511);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - type record Flow_Usage_AVP{ //Ref: ETSI TS 129 214 Flow_Usage AVP AVP_Header aVP_Header,// @@ -382,16 +288,6 @@ module LibDiameter_Types_Rx_AVPs { type set of Specific_Action_AVP Setof_Specific_Action_AVP // with { // variant "present=bytes(4, 513)" -// } - - type record Max_Requested_Bandwidth_DL_AVP{ - //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_DL AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 515);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record MCPTT_Identifier_AVP{ @@ -412,16 +308,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 562);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "encode=CodecHelper.encodeOctetstringWithPadding();decode=CodecHelper.decodeOctetstringWithPadding();condition=CodecHelper.leaveScope()" -// } - - type record Max_Requested_Bandwidth_UL_AVP{ - //Ref: ETSI TS 129 214 FMax_Requested_Bandwidth_UL AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 516);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Media_Component_Description_AVP{ @@ -445,15 +331,6 @@ module LibDiameter_Types_Rx_AVPs { // variant (codec_data) "fieldPresent=bytes(4, 524)&&CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" // } - type record Media_Component_Number_AVP{ - //Ref: ETSI TS 129 214 Media_Component_Number_AVP - AVP_Header aVP_Header,// - UInt32 aVP_Data - } -// with { -// variant "present=bytes(4, 518);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } type record Media_Sub_Component_AVP{ //Ref: ETSI TS 129 214 Media_Sub_Component_AVP AVP_Header aVP_Header,// @@ -471,6 +348,17 @@ module LibDiameter_Types_Rx_AVPs { // variant (flow_Description) "fieldPresent=bytes(4, 507)&&CodecHelper.isAvailable()" // variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" // } + + type record Flow_Description_AVP{ + //Ref: ETSI TS 129 214 Flow_Description AVP + AVP_Header aVP_Header,// + IPFilterRule_Type aVP_Data + } +// with { +// variant "present=bytes(4, 507);use=com.testingtech.ttcn.tci.codec.CodecHelper" +// variant (aVP_Data) "condition=CodecHelper.leaveScope()" +// } + type record Media_Type_AVP{ //Ref: ETSI TS 129 214 Media_Type AVP AVP_Header aVP_Header,// @@ -568,16 +456,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 523);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Data) "condition=CodecHelper.leaveScope()" -// } - - type record Sponsor_Identity_AVP{ - //Ref: ETSI TS 129 214 Sponsor_Identity AVP - AVP_Header aVP_Header,// - UTF8String aVP_Data - } -// with { -// variant "present=bytes(4, 531);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Sponsored_Connectivity_Data_AVP{ @@ -592,16 +470,6 @@ module LibDiameter_Types_Rx_AVPs { // with { // variant "present=bytes(4, 530);use=com.testingtech.ttcn.tci.codec.CodecHelper" // variant (aVP_Type) "fieldPresent=CodecHelper.isAvailable();condition=CodecHelper.leaveScope()" -// } - - type record AF_Signalling_Protocol_AVP{ - //Ref: ETSI TS 129 214 AF_Signalling_Protocol AVP - AVP_Header aVP_Header,// - AF_Signalling_Protocol_Type aVP_Data - } -// with { -// variant "present=bytes(4, 529);use=com.testingtech.ttcn.tci.codec.CodecHelper" -// variant (aVP_Data) "condition=CodecHelper.leaveScope()" // } type record Reservation_Priority_AVP{ diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn index 8ba6689..d2a52b1 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S6a_AVPs.ttcn @@ -15,43 +15,17 @@ module LibDiameter_Types_S6a_AVPs { import from LibCommon_DataStrings all; // LibDiameter - import from LibDiameter_TypesAndValues all; + //import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; + //import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; import from LibDiameter_Types_CxDx_AVPs all; - import from LibDiameter_Types_Gx_AVPs all; - import from LibDiameter_Types_Rx_AVPs all; + // import from LibDiameter_Types_Gx_AVPs all; + // import from LibDiameter_Types_Rx_AVPs all; group AVPs { group TS129_272_AVPs { - type record Terminal_Information_AVP { //ref: 7.3.3 - AVP_Header aVP_Header, //Terminal Information ::= - IMEI_AVP imei optional, - ThreeGPP2_MEID_AVP meid optional, - Sofware_Version_AVP sofware_Version optional, - set of AVP_Type aVP_Type optional - } - - type UTF8String IMEI length (14..15); - type record IMEI_AVP { //ref: 7.3.4 - AVP_Header aVP_Header, //IMEI ::= - IMEI aVP_Data //14 digits, 8-digit Type Allocation Code (TAC) + 6-digit Serial Number (SNR). - //It may also include a 15th digit - } - - type UTF8String SVN length (2); - type record Sofware_Version_AVP { //ref: 7.3.5 - AVP_Header aVP_Header, //Software-Version ::= - SVN aVP_Data //2-digit Software Version Number (SVN) - } - - type octetstring ThreeGPP2_MEID length (8); - type record ThreeGPP2_MEID_AVP { //ref: 7.3.6 - AVP_Header aVP_Header, //3GPP2-MEID ::= - ThreeGPP2_MEID aVP_Data - } type record ULR_Flags_AVP { //ref: 7.3.7 AVP_Header aVP_Header, //ULR-Flags ::= @@ -373,11 +347,6 @@ module LibDiameter_Types_S6a_AVPs { set of AVP_Type aVP_Type optional } - type record Served_Party_IP_Address_AVP { //ref: TS 132 299 7.2.187 - AVP_Header aVP_Header, //Served-Party-IP-Address ::= - Address aVP_Data - } - type enumerated PDN_Type_Code { IPv4_E (0), IPv6_E (1), @@ -696,11 +665,6 @@ module LibDiameter_Types_S6a_AVPs { octetstring aVP_Data } - type record PDP_Address_AVP { //ref: TS 132 299 7.2.137 - AVP_Header aVP_Header, //PDP-Address ::= - Address aVP_Data - } - type record QoS_Subscribed_AVP { //ref: 7.3.77 AVP_Header aVP_Header, //QoS-Subscribed ::= octetstring aVP_Data @@ -904,16 +868,6 @@ module LibDiameter_Types_S6a_AVPs { set of AVP_Type aVP_Type optional } - type record Confidentiality_Key_AVP { //ref: 7.3.57 - AVP_Header aVP_Header, //Confidentiality-Key ::= - octetstring aVP_Data - } - - type record Integrity_Key_AVP { //ref: 7.3.58 - AVP_Header aVP_Header, //Integrity-Key ::= - octetstring aVP_Data - } - type record UTRAN_Vector_AVP { //ref: 7.3.19 AVP_Header aVP_Header, //UTRAN-Vector ::= Item_Number_AVP item_Number optional, diff --git a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn index 8913f19..4b5a1de 100644 --- a/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn +++ b/ttcn/patch_lib_diameter_titan/ttcn/LibDiameter_Types_S9_AVPs.ttcn @@ -11,11 +11,11 @@ module LibDiameter_Types_S9_AVPs { import from LibCommon_BasicTypesAndValues all; - import from LibDiameter_TypesAndValues all; + //import from LibDiameter_TypesAndValues all; import from LibDiameter_Types_Base_AVPs all; import from LibDiameter_Types_Gx_AVPs all; import from LibDiameter_Types_Rx_AVPs all; - import from LibDiameter_Types_RfRo_AVPs all; + // import from LibDiameter_Types_RfRo_AVPs all; group AVPs{ group TS129_215_AVPs { -- GitLab From 099086e81cb53b87aed844e051bde16f561f372d Mon Sep 17 00:00:00 2001 From: garciay Date: Thu, 28 Sep 2023 21:55:27 +0200 Subject: [PATCH 71/84] Add skeletons for missing protocol ports and layers; Add skeletons for UpperTesterPort & AdapterConfigPort --- .../UpperTester/upper_tester_layer.cc | 54 ++++---- .../UpperTester/upper_tester_layer.hh | 126 +++++++++--------- .../UpperTester/upper_tester_layer_factory.hh | 82 ++++++------ ttcn/AtsImsIot/module.mk | 5 +- 4 files changed, 133 insertions(+), 134 deletions(-) diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc index d19a21b..6dfb39f 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc @@ -1,39 +1,39 @@ -#include "LibIot__TestInterface.hh" -#include "LibUpperTester.hh" +// #include "LibIot__TestInterface.hh" +// #include "LibUpperTester.hh" -#include "upper_tester_layer_factory.hh" +// #include "upper_tester_layer_factory.hh" -#include "loggers.hh" +// #include "loggers.hh" -#include "converter.hh" +// #include "converter.hh" -upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { - loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); - // Setup parameters - params::convert(_params, p_param); -} +// upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { +// loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); +// // Setup parameters +// params::convert(_params, p_param); +// } -void upper_tester_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_diameter_message); +// void upper_tester_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { +// loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_diameter_message); - // Encode DiameterMessage - OCTETSTRING data; - _codec_register.encode(p_diameter_message, data); - send_data(data, _params); -} +// // Encode DiameterMessage +// OCTETSTRING data; +// _codec_register.encode(p_diameter_message, data); +// send_data(data, _params); +// } -void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { - loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); +// void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { +// loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); - send_to_all_layers(data, p_params); -} +// send_to_all_layers(data, p_params); +// } -void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) -{ - loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); +// void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) +// { +// loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); - // Decode Diameter message -} +// // Decode Diameter message +// } -upper_tester_layer_factory upper_tester_layer_factory::_f; +// upper_tester_layer_factory upper_tester_layer_factory::_f; diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh index 995bc80..51f977f 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh @@ -1,73 +1,73 @@ -/*! - * \file upper_tester_layer.hh - * \brief Header file for ITS HTTP protocol layer. - * \author ETSI STF549 - * \copyright ETSI Copyright Notification - * No part may be reproduced except as authorized by written permission. - * The copyright and the foregoing restriction extend to reproduction in all media. - * All rights reserved. - * \version 0.1 - */ -#pragma once +// /*! +// * \file upper_tester_layer.hh +// * \brief Header file for ITS HTTP protocol layer. +// * \author ETSI STF549 +// * \copyright ETSI Copyright Notification +// * No part may be reproduced except as authorized by written permission. +// * The copyright and the foregoing restriction extend to reproduction in all media. +// * All rights reserved. +// * \version 0.1 +// */ +// #pragma once -#include +// #include -#include "t_layer.hh" +// #include "t_layer.hh" -namespace LibIot__TestInterface { - class EquipmentAccessPort; //! Forward declaration of TITAN class -} +// namespace LibIot__TestInterface { +// class EquipmentAccessPort; //! Forward declaration of TITAN class +// } -namespace LibUpperTester { - class EquipmentOperationReq; //! Forward declaration of TITAN class -} +// namespace LibUpperTester { +// class EquipmentOperationReq; //! Forward declaration of TITAN class +// } -class OCTETSTRING; //! Forward declaration of TITAN class +// class OCTETSTRING; //! Forward declaration of TITAN class -/*! - * \class upper_tester_layer - * \brief This class provides a factory class to create an upper_tester_layer class instance - */ -class upper_tester_layer : public t_layer { - params _params; +// /*! +// * \class upper_tester_layer +// * \brief This class provides a factory class to create an upper_tester_layer class instance +// */ +// class upper_tester_layer : public t_layer { +// params _params; -public: //! \publicsection - /*! - * \brief Specialised constructor - * Create a new instance of the upper_tester_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - upper_tester_layer() : t_layer(), _params() {}; - /*! - * \brief Specialised constructor - * Create a new instance of the upper_tester_layer class - * \param[in] p_type \todo - * \param[in] p_param \todo - */ - upper_tester_layer(const std::string& p_type, const std::string& p_param); - /*! - * \brief Default destructor - */ - virtual ~upper_tester_layer() { }; +// public: //! \publicsection +// /*! +// * \brief Specialised constructor +// * Create a new instance of the upper_tester_layer class +// * \param[in] p_type \todo +// * \param[in] p_param \todo +// */ +// upper_tester_layer() : t_layer(), _params() {}; +// /*! +// * \brief Specialised constructor +// * Create a new instance of the upper_tester_layer class +// * \param[in] p_type \todo +// * \param[in] p_param \todo +// */ +// upper_tester_layer(const std::string& p_type, const std::string& p_param); +// /*! +// * \brief Default destructor +// */ +// virtual ~upper_tester_layer() { }; - void sendMsg(const LibUpperTester::EquipmentOperationReq& p_diameter_message, params& p_param); +// void sendMsg(const LibUpperTester::EquipmentOperationReq& p_diameter_message, params& p_param); - /*! - * \virtual - * \fn void send_data(OCTETSTRING& data, params& p_params); - * \brief Send bytes formated data to the lower layers - * \param[in] p_data The data to be sent - * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters - */ - virtual void send_data(OCTETSTRING& data, params& p_params); - /*! - * \virtual - * \fn void receive_data(OCTETSTRING& data, params& p_params); - * \brief Receive bytes formated data from the lower layers - * \param[in] p_data The bytes formated data received - * \param[in] p_params Some lower layers parameters values when data was received - */ - virtual void receive_data(OCTETSTRING& data, params& info); -}; // End of class upper_tester_layer +// /*! +// * \virtual +// * \fn void send_data(OCTETSTRING& data, params& p_params); +// * \brief Send bytes formated data to the lower layers +// * \param[in] p_data The data to be sent +// * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters +// */ +// virtual void send_data(OCTETSTRING& data, params& p_params); +// /*! +// * \virtual +// * \fn void receive_data(OCTETSTRING& data, params& p_params); +// * \brief Receive bytes formated data from the lower layers +// * \param[in] p_data The bytes formated data received +// * \param[in] p_params Some lower layers parameters values when data was received +// */ +// virtual void receive_data(OCTETSTRING& data, params& info); +// }; // End of class upper_tester_layer diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh index 558dfa8..8cd4356 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh @@ -1,45 +1,45 @@ -/*! - * \file upper_tester_layer_factory.hh - * \brief Header file for INT LibIot protocol layer factory. - * \author ETSI TTF T010 - * \copyright ETSI Copyright Notification - * No part may be reproduced except as authorized by written permission. - * The copyright and the foregoing restriction extend to reproduction in all media. - * All rights reserved. - * \version 0.1 - */ -#pragma once +// /*! +// * \file upper_tester_layer_factory.hh +// * \brief Header file for INT LibIot protocol layer factory. +// * \author ETSI TTF T010 +// * \copyright ETSI Copyright Notification +// * No part may be reproduced except as authorized by written permission. +// * The copyright and the foregoing restriction extend to reproduction in all media. +// * All rights reserved. +// * \version 0.1 +// */ +// #pragma once -#include "layer_stack_builder.hh" +// #include "layer_stack_builder.hh" -#include "upper_tester_layer.hh" +// #include "upper_tester_layer.hh" -/*! - * \class upper_tester_layer_factory - * \brief This class provides a factory class to create an upper_tester_layer class instance - */ -class upper_tester_layer_factory : public layer_factory { - static upper_tester_layer_factory _f; //! Reference to the unique instance of this class -public: //! \publicsection - /*! - * \brief Default constructor - * Create a new instance of the udp_layer_factory class - * \remark The HTTP layer identifier is HTTP - */ - upper_tester_layer_factory() { - // Register factory - layer_stack_builder::register_layer_factory("UT", this); - }; - /*! - * \fn layer* create_layer(const std::string & type, const std::string & param); - * \brief Create the layers stack based on the provided layers stack description - * \param[in] p_type The provided layers stack description - * \param[in] p_params Optional parameters - * \return 0 on success, -1 otherwise - * \inline - */ - inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ - return new upper_tester_layer(p_type, p_param); - }; -}; // End of class upper_tester_layer_factory +// /*! +// * \class upper_tester_layer_factory +// * \brief This class provides a factory class to create an upper_tester_layer class instance +// */ +// class upper_tester_layer_factory : public layer_factory { +// static upper_tester_layer_factory _f; //! Reference to the unique instance of this class +// public: //! \publicsection +// /*! +// * \brief Default constructor +// * Create a new instance of the udp_layer_factory class +// * \remark The HTTP layer identifier is HTTP +// */ +// upper_tester_layer_factory() { +// // Register factory +// layer_stack_builder::register_layer_factory("UT", this); +// }; +// /*! +// * \fn layer* create_layer(const std::string & type, const std::string & param); +// * \brief Create the layers stack based on the provided layers stack description +// * \param[in] p_type The provided layers stack description +// * \param[in] p_params Optional parameters +// * \return 0 on success, -1 otherwise +// * \inline +// */ +// inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ +// return new upper_tester_layer(p_type, p_param); +// }; +// }; // End of class upper_tester_layer_factory diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 7c8c8fe..5218f5e 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -1,4 +1,4 @@ -suite := AtsImsIot_Emergency +suite := AtsImsIot sources := \ AtsImsIot_TypesAndValues.ttcn \ @@ -61,10 +61,9 @@ modules := ../LibCommon \ ../../ccsrc/Ports/Data \ ../../ccsrc/Ports/Sgi \ ../../ccsrc/Ports/LibIot \ + ../../ccsrc/EncDec/LibSip \ ../../ccsrc/Protocols/Diameter \ ../../ccsrc/Protocols/LowerLayerPPort \ ../../ccsrc/Protocols/Sip \ ../../ccsrc/Protocols/Naptr \ - ../../ccsrc/Protocols/UpperTester \ - ../../ccsrc/EncDec/LibSip \ ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ -- GitLab From b9d5778b2eae5428f12c0bb9bc21001a8fe5bba1 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 4 Oct 2023 09:15:18 +0200 Subject: [PATCH 72/84] Finalyze build of AtsImsIot ATS + Test System skeletons --- .../EncDec/LibDiameter/LibDiameter_EncDec.cc | 888 ++++++++++++++++++ ccsrc/EncDec/LibDiameter/module.mk | 2 + ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc | 24 + ccsrc/EncDec/LibMsrp/module.mk | 2 + .../ImsMonitorDiameterPort.cc | 102 ++ .../ImsMonitorDiameterPort.hh | 41 + ccsrc/Ports/ImsMonitorDiameterPort/module.mk | 3 + .../ImsMonitorSipPort/ImsMonitorSipPort.cc | 134 +++ .../ImsMonitorSipPort/ImsMonitorSipPort.hh | 50 + ccsrc/Ports/ImsMonitorSipPort/module.mk | 3 + ccsrc/Ports/LibIot/AdapterConfigPort.cc | 8 +- ccsrc/Ports/LibIot/EquipmentAccessPort.cc | 2 +- ccsrc/Ports/LibIot/EquipmentAccessPort.hh | 2 +- ccsrc/Ports/Naptr/NaptrPort.cc | 6 +- ccsrc/Protocols/Diameter/diameter_codec.cc | 21 +- ccsrc/Protocols/Diameter/diameter_layer.cc | 6 +- .../lower_layer_pport_layer.cc | 24 +- ..._factory.hh => naptrPort_layer_factory.hh} | 12 +- ccsrc/Protocols/Naptr/naptr_layer.cc | 11 +- ccsrc/Protocols/Naptr/naptr_layer.hh | 4 +- .../UpperTester/upper_tester_layer.cc | 54 +- .../UpperTester/upper_tester_layer.hh | 126 +-- .../UpperTester/upper_tester_layer_factory.hh | 82 +- emergency-iop.code-workspace | 8 +- etc/AtsImsIot/AtsImsIot.cfg | 61 ++ install.sh | 7 +- ttcn/AtsImsIot/module.mk | 8 +- ttcn/patch_ats_ims_iot/module.mk | 75 ++ .../ttcn/AtsImsIot_TestSystem.ttcn | 174 ++++ 29 files changed, 1758 insertions(+), 182 deletions(-) create mode 100644 ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc create mode 100644 ccsrc/EncDec/LibDiameter/module.mk create mode 100644 ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc create mode 100644 ccsrc/EncDec/LibMsrp/module.mk create mode 100644 ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc create mode 100644 ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh create mode 100644 ccsrc/Ports/ImsMonitorDiameterPort/module.mk create mode 100644 ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc create mode 100644 ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh create mode 100644 ccsrc/Ports/ImsMonitorSipPort/module.mk rename ccsrc/Protocols/Naptr/{naptr_layer_factory.hh => naptrPort_layer_factory.hh} (81%) create mode 100644 etc/AtsImsIot/AtsImsIot.cfg create mode 100644 ttcn/patch_ats_ims_iot/module.mk create mode 100644 ttcn/patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn diff --git a/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc new file mode 100644 index 0000000..508dfe2 --- /dev/null +++ b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc @@ -0,0 +1,888 @@ + +#include "LibDiameter_EncdecDeclarations.hh" + +#include "loggers.hh" + +namespace LibDiameter__EncdecDeclarations { + + BITSTRING fx__enc__CER__MSG(const LibDiameter__TypesAndValues::CER__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CER__MSG(BITSTRING&, LibDiameter__TypesAndValues::CER__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__CEA__MSG(const LibDiameter__TypesAndValues::CEA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CEA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CEA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RAR__MSG(const LibDiameter__TypesAndValues::RAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RAR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RAA__MSG(const LibDiameter__TypesAndValues::RAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RAA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ACR__MSG(const LibDiameter__TypesAndValues::ACR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ACR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ACR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ACA__MSG(const LibDiameter__TypesAndValues::ACA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ACA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ACA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ASR__MSG(const LibDiameter__TypesAndValues::ASR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ASR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ASR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ASA__MSG(const LibDiameter__TypesAndValues::ASA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ASA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ASA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__STR__MSG(const LibDiameter__TypesAndValues::STR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__STR__MSG(BITSTRING&, LibDiameter__TypesAndValues::STR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__STA__MSG(const LibDiameter__TypesAndValues::STA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__STA__MSG(BITSTRING&, LibDiameter__TypesAndValues::STA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DWR__MSG(const LibDiameter__TypesAndValues::DWR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DWR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DWR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DWA__MSG(const LibDiameter__TypesAndValues::DWA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DWA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DWA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DPR__MSG(const LibDiameter__TypesAndValues::DPR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DPR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DPA__MSG(const LibDiameter__TypesAndValues::DPA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__UAR__MSG(const LibDiameter__TypesAndValues::UAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__UAA__MSG(const LibDiameter__TypesAndValues::UAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__SAR__MSG(const LibDiameter__TypesAndValues::SAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::SAR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__SAA__MSG(const LibDiameter__TypesAndValues::SAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::SAA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__LIR__MSG(const LibDiameter__TypesAndValues::LIR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__LIR__MSG(BITSTRING&, LibDiameter__TypesAndValues::LIR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__LIA__MSG(const LibDiameter__TypesAndValues::LIA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__LIA__MSG(BITSTRING&, LibDiameter__TypesAndValues::LIA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__MAR__MSG(const LibDiameter__TypesAndValues::MAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::MAR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__MAA__MSG(const LibDiameter__TypesAndValues::MAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::MAA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RTR__MSG(const LibDiameter__TypesAndValues::RTR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RTR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RTR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RTA__MSG(const LibDiameter__TypesAndValues::RTA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RTA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RTA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PPR__MSG(const LibDiameter__TypesAndValues::PPR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PPR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PPR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PPA__MSG(const LibDiameter__TypesAndValues::PPA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PPA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__UDR__MSG(const LibDiameter__TypesAndValues::UDR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UDR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UDR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__UDA__MSG(const LibDiameter__TypesAndValues::UDA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UDA__MSG(BITSTRING&, LibDiameter__TypesAndValues::UDA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PUR__MSG(const LibDiameter__TypesAndValues::PUR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PUA__MSG(const LibDiameter__TypesAndValues::PUA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__SNR__MSG(const LibDiameter__TypesAndValues::SNR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SNR__MSG(BITSTRING&, LibDiameter__TypesAndValues::SNR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__SNA__MSG(const LibDiameter__TypesAndValues::SNA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__SNA__MSG(BITSTRING&, LibDiameter__TypesAndValues::SNA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PNR__MSG(const LibDiameter__TypesAndValues::PNR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PNR__MSG(BITSTRING&, LibDiameter__TypesAndValues::PNR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PNA__MSG(const LibDiameter__TypesAndValues::PNA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PNA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PNA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__CCR__MSG(const LibDiameter__TypesAndValues::CCR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CCR__MSG(BITSTRING&, LibDiameter__TypesAndValues::CCR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__CCA__MSG(const LibDiameter__TypesAndValues::CCA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CCA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CCA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__AAR__MSG(const LibDiameter__TypesAndValues::AAR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::AAR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__AAA__MSG(const LibDiameter__TypesAndValues::AAA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AAA__MSG(BITSTRING&, LibDiameter__TypesAndValues::AAA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ULR__MSG(const LibDiameter__TypesAndValues::ULR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ULR__MSG(BITSTRING&, LibDiameter__TypesAndValues::ULR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__ULA__MSG(const LibDiameter__TypesAndValues::ULA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__ULA__MSG(BITSTRING&, LibDiameter__TypesAndValues::ULA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__AIR__MSG(const LibDiameter__TypesAndValues::AIR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AIR__MSG(BITSTRING&, LibDiameter__TypesAndValues::AIR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__AIA__MSG(const LibDiameter__TypesAndValues::AIA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__AIA__MSG(BITSTRING&, LibDiameter__TypesAndValues::AIA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__CLR__MSG(const LibDiameter__TypesAndValues::CLR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CLR__MSG(BITSTRING&, LibDiameter__TypesAndValues::CLR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__CLA__MSG(const LibDiameter__TypesAndValues::CLA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__CLA__MSG(BITSTRING&, LibDiameter__TypesAndValues::CLA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__IDR__MSG(const LibDiameter__TypesAndValues::IDR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__IDR__MSG(BITSTRING&, LibDiameter__TypesAndValues::IDR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__IDA__MSG(const LibDiameter__TypesAndValues::IDA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__IDA__MSG(BITSTRING&, LibDiameter__TypesAndValues::IDA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DSR__MSG(const LibDiameter__TypesAndValues::DSR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DSR__MSG(BITSTRING&, LibDiameter__TypesAndValues::DSR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__DSA__MSG(const LibDiameter__TypesAndValues::DSA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__DSA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DSA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RSR__MSG(const LibDiameter__TypesAndValues::RSR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RSR__MSG(BITSTRING&, LibDiameter__TypesAndValues::RSR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__RSA__MSG(const LibDiameter__TypesAndValues::RSA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__RSA__MSG(BITSTRING&, LibDiameter__TypesAndValues::RSA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__NOR__MSG(const LibDiameter__TypesAndValues::NOR__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__NOR__MSG(BITSTRING&, LibDiameter__TypesAndValues::NOR__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__NOA__MSG(const LibDiameter__TypesAndValues::NOA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__NOA__MSG(BITSTRING&, LibDiameter__TypesAndValues::NOA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PUER__MSG(const LibDiameter__TypesAndValues::PUER__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUER__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUER__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__PUEA__MSG(const LibDiameter__TypesAndValues::PUEA__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__PUEA__MSG(BITSTRING&, LibDiameter__TypesAndValues::PUEA__MSG& p) { return INTEGER(0); } + + BITSTRING fx__enc__UNKNOWN__MSG(const LibDiameter__TypesAndValues::UNKNOWN__MSG& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__Request"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__UNKNOWN__MSG(BITSTRING&, LibDiameter__TypesAndValues::UNKNOWN__MSG& p) { return INTEGER(0); } + +} // End of namespace LibDiameter__EncdecDeclarations diff --git a/ccsrc/EncDec/LibDiameter/module.mk b/ccsrc/EncDec/LibDiameter/module.mk new file mode 100644 index 0000000..5f362ce --- /dev/null +++ b/ccsrc/EncDec/LibDiameter/module.mk @@ -0,0 +1,2 @@ +sources := \ + LibDiameter_EncDec.cc diff --git a/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc b/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc new file mode 100644 index 0000000..9786ab5 --- /dev/null +++ b/ccsrc/EncDec/LibMsrp/LibMsrp_EncDec.cc @@ -0,0 +1,24 @@ + +#include "LibMsrp_EncDecDeclarations.hh" + +#include "loggers.hh" + +namespace LibMsrp__EncDecDeclarations { + + BITSTRING fx__enc__MsrpURI(const LibMsrp__TypesAndValues::MsrpURI& p) { + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__MsrpURI: ", p); + + float duration; + std::string tag(" BITSTRING fx__enc__MsrpURI"); + loggers::get_instance().set_start_time(tag); + + OCTETSTRING os; + // TODO + loggers::get_instance().set_stop_time(tag, duration); + + return oct2bit(os); + } + + INTEGER fx__dec__MsrpURI(BITSTRING&, LibMsrp__TypesAndValues::MsrpURI& p) { return INTEGER(0); } + +} // End of module LibMsrp__EncDecDeclarations \ No newline at end of file diff --git a/ccsrc/EncDec/LibMsrp/module.mk b/ccsrc/EncDec/LibMsrp/module.mk new file mode 100644 index 0000000..52b9914 --- /dev/null +++ b/ccsrc/EncDec/LibMsrp/module.mk @@ -0,0 +1,2 @@ +sources := \ + LibMsrp_EncDec.cc diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc new file mode 100644 index 0000000..50c6f35 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.cc @@ -0,0 +1,102 @@ +#include "ImsMonitorDiameterPort.hh" +#include "diameter_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + ImsMonitorDiameterPort::ImsMonitorDiameterPort(const char *par_port_name): ImsMonitorDiameterPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorDiameterPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorDiameterPort::~ImsMonitorDiameterPort() { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::~ImsMonitorDiameterPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorDiameterPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorDiameterPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorDiameterPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorDiameterPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorDiameterPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorDiameterPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorDiameterPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorDiameterPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_map: %s", system_port); + // Build layer stack + /*params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("ImsMonitorDiameterPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("ImsMonitorDiameterPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else {*/ + loggers::get_instance().error("ImsMonitorDiameterPort::user_map: No layers defined in configuration file"); + /*}*/ + } // End of user_map method + + void ImsMonitorDiameterPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorDiameterPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_start"); + + } // End of user_start method + + void ImsMonitorDiameterPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorDiameterPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorDiameterPort::receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorDiameterPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh new file mode 100644 index 0000000..78759ee --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/ImsMonitorDiameterPort.hh @@ -0,0 +1,41 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" +#include "LibDiameter_TypesAndValues.hh" + +#include "layer.hh" +#include "params.hh" + +namespace AtsImsIot__TestSystem { + + class ImsMonitorDiameterPort : public ImsMonitorDiameterPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorDiameterPort(const char *par_port_name); + ~ImsMonitorDiameterPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + }; // End of class ImsMonitorDiameterPort + +} + diff --git a/ccsrc/Ports/ImsMonitorDiameterPort/module.mk b/ccsrc/Ports/ImsMonitorDiameterPort/module.mk new file mode 100644 index 0000000..c189618 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorDiameterPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorDiameterPort.cc +includes := . + diff --git a/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc new file mode 100644 index 0000000..7776a1e --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.cc @@ -0,0 +1,134 @@ +#include "ImsMonitorSipPort.hh" +#include "sip_layer_factory.hh" +#include "loggers.hh" + +namespace AtsImsIot__TestSystem { + + ImsMonitorSipPort::ImsMonitorSipPort(const char *par_port_name): ImsMonitorSipPort_BASE(par_port_name), _cfg_params(), _layer_params(), _layer(nullptr), _time_key("ImsMonitorSipPort::outgoing_send") { + // Nothing to do + } // End of constructor + + ImsMonitorSipPort::~ImsMonitorSipPort() { + loggers::get_instance().log(">>> ImsMonitorSipPort::~ImsMonitorSipPort"); + + if (_layer != nullptr) { + delete _layer; + } + } // End of destructor + + void ImsMonitorSipPort::set_parameter(const char * parameter_name, const char * parameter_value) + { + loggers::get_instance().log("ImsMonitorSipPort::set_parameter: %s=%s", parameter_name, parameter_value); + _cfg_params.insert(std::pair(std::string(parameter_name), std::string(parameter_value))); + } + + /*void ImsMonitorSipPort::Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error) {}*/ + + void ImsMonitorSipPort::Handle_Fd_Event_Error(int /*fd*/) + { + + } + + void ImsMonitorSipPort::Handle_Fd_Event_Writable(int /*fd*/) + { + + } + + void ImsMonitorSipPort::Handle_Fd_Event_Readable(int /*fd*/) + { + + } + + /*void ImsMonitorSipPort::Handle_Timeout(double time_since_last_call) {}*/ + + void ImsMonitorSipPort::user_map(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_map: %s", system_port); + // Build layer stack + /*params::iterator it = _cfg_params.find(std::string("params")); + if (it != _cfg_params.end()) { + loggers::get_instance().log("ImsMonitorSipPort::user_map: %s", it->second.c_str()); + // Setup parameters + params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless + // Create layer + _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); + if (static_cast(_layer) == nullptr) { + loggers::get_instance().error("ImsMonitorSipPort::user_map: Invalid stack configuration: %s", it->second.c_str()); + } + static_cast(_layer)->add_upper_port(this); + + } else {*/ + loggers::get_instance().error("ImsMonitorSipPort::user_map: No layers defined in configuration file"); + /*}*/ + } // End of user_map method + + void ImsMonitorSipPort::user_unmap(const char * system_port) + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_unmap: %s", system_port); + + // Reset layers + if (_layer != nullptr) { + delete _layer; + _layer = nullptr; + } + } // End of user_unmap method + + void ImsMonitorSipPort::user_start() + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_start"); + + } // End of user_start method + + void ImsMonitorSipPort::user_stop() + { + loggers::get_instance().log(">>> ImsMonitorSipPort::user_stop"); + + } // End of user_stop method + + void ImsMonitorSipPort::receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + + void ImsMonitorSipPort::receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params) { + loggers::get_instance().log_msg(">>> ImsMonitorSipPort::receive_msg: ", p_ind); + + // Sanity check + if (!p_ind.is_bound()) { + return; + } + + incoming_message(p_ind); + } // End of method receiveMsg + +} + diff --git a/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh new file mode 100644 index 0000000..93f6d57 --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/ImsMonitorSipPort.hh @@ -0,0 +1,50 @@ +#pragma once + +#include "AtsImsIot_TestSystem.hh" +#include "LibSip_Interface.hh" +#include "LibMsrp_TypesAndValues.hh" + +#include "layer.hh" +#include "params.hh" + +namespace LibSip__SIPTypesAndValues { + class REGISTER__Request; +} + +namespace AtsImsIot__TestSystem { + + class ImsMonitorSipPort : public ImsMonitorSipPort_BASE { + params _cfg_params; + params _layer_params; + layer* _layer; + std::string _time_key; + public: + ImsMonitorSipPort(const char *par_port_name); + ~ImsMonitorSipPort(); + + void set_parameter(const char *parameter_name, const char *parameter_value); + + void receiveMsg (const LibSip__SIPTypesAndValues::Request& p_ind, const params& p_params); + void receiveMsg (const LibSip__SIPTypesAndValues::Response& p_ind, const params& p_params); + void receiveMsg (const LibMsrp__TypesAndValues::SEND__request& p_ind, const params& p_params); + void receiveMsg (const LibMsrp__TypesAndValues::RECEIVE__response& p_ind, const params& p_params); + + private: + /* void Handle_Fd_Event(int fd, boolean is_readable, + boolean is_writable, boolean is_error); */ + void Handle_Fd_Event_Error(int fd); + void Handle_Fd_Event_Writable(int fd); + void Handle_Fd_Event_Readable(int fd); + /* void Handle_Timeout(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(); + + }; // End of class ImsMonitorSipPort + +} + diff --git a/ccsrc/Ports/ImsMonitorSipPort/module.mk b/ccsrc/Ports/ImsMonitorSipPort/module.mk new file mode 100644 index 0000000..e65eb1e --- /dev/null +++ b/ccsrc/Ports/ImsMonitorSipPort/module.mk @@ -0,0 +1,3 @@ +sources := ImsMonitorSipPort.cc +includes := . + diff --git a/ccsrc/Ports/LibIot/AdapterConfigPort.cc b/ccsrc/Ports/LibIot/AdapterConfigPort.cc index fe82d8b..f9f2f7b 100644 --- a/ccsrc/Ports/LibIot/AdapterConfigPort.cc +++ b/ccsrc/Ports/LibIot/AdapterConfigPort.cc @@ -37,7 +37,7 @@ namespace LibIot__TestInterface { void AdapterConfigPort::user_stop() {} - void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::GeneralConfigurationReq &send_par) { + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::GeneralConfigurationReq& send_par) { loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); // Register this object for AdapterConfigPort @@ -86,15 +86,15 @@ namespace LibIot__TestInterface { /*}*/ } - void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::SetFilterReq & /*send_par*/) { + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::SetFilterReq& send_par) { loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); } - void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq & /*send_par*/) { + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StartTrafficCaptureReq& send_par) { loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); } - void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq &send_par) { + void AdapterConfigPort::outgoing_send(const LibIot__TypesAndValues::StopTrafficCaptureReq& send_par) { loggers::get_instance().log_msg(">>> AdapterConfigPort::outgoing_send: ", send_par); // Register this object for AdapterConfigPort diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.cc b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc index d6ec051..78e945b 100644 --- a/ccsrc/Ports/LibIot/EquipmentAccessPort.cc +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.cc @@ -86,7 +86,7 @@ namespace LibIot__TestInterface { } // End of user_stop method - void EquipmentAccessPort::receiveMsg (const LibUpperTester::EquipmentOperationReq& p_ind, const params& p_params) { + void EquipmentAccessPort::receiveMsg (const LibUpperTester::EquipmentOperationRsp& p_ind, const params& p_params) { loggers::get_instance().log_msg(">>> EquipmentAccessPort::receive_msg: ", p_ind); // Sanity check diff --git a/ccsrc/Ports/LibIot/EquipmentAccessPort.hh b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh index 6ebbc1e..297ae4f 100644 --- a/ccsrc/Ports/LibIot/EquipmentAccessPort.hh +++ b/ccsrc/Ports/LibIot/EquipmentAccessPort.hh @@ -18,7 +18,7 @@ namespace LibIot__TestInterface { void set_parameter(const char *parameter_name, const char *parameter_value); - void receiveMsg (const LibUpperTester::EquipmentOperationReq& p_ind, const params& p_params); + void receiveMsg (const LibUpperTester::EquipmentOperationRsp& p_ind, const params& p_params); private: /* void Handle_Fd_Event(int fd, boolean is_readable, diff --git a/ccsrc/Ports/Naptr/NaptrPort.cc b/ccsrc/Ports/Naptr/NaptrPort.cc index 987b88c..ee3b9bf 100644 --- a/ccsrc/Ports/Naptr/NaptrPort.cc +++ b/ccsrc/Ports/Naptr/NaptrPort.cc @@ -53,10 +53,10 @@ namespace AtsImsIot__TestSystem { params::convert(_layer_params, it->second); // TODO This _layer_params seems to be useless // Create layer _layer = layer_stack_builder::get_instance()->create_layer_stack(it->second.c_str()); - if (static_cast(_layer) == nullptr) { + if (static_cast(_layer) == nullptr) { loggers::get_instance().error("NaptrPort::user_map: Invalid stack configuration: %s", it->second.c_str()); } - static_cast(_layer)->add_upper_port(this); + static_cast(_layer)->add_upper_port(this); } else { loggers::get_instance().error("NaptrPort::user_map: No layers defined in configuration file"); @@ -105,7 +105,7 @@ namespace AtsImsIot__TestSystem { float duration; loggers::get_instance().set_start_time(_time_key); params params; - static_cast(_layer)->sendMsg(send_par, params); + static_cast(_layer)->sendMsg(send_par, params); loggers::get_instance().set_stop_time(_time_key, duration); } // End of outgoing_send diff --git a/ccsrc/Protocols/Diameter/diameter_codec.cc b/ccsrc/Protocols/Diameter/diameter_codec.cc index 06a6e07..ca825f3 100644 --- a/ccsrc/Protocols/Diameter/diameter_codec.cc +++ b/ccsrc/Protocols/Diameter/diameter_codec.cc @@ -1,5 +1,7 @@ #include +#include "LibDiameter_TypesAndValues.hh" + #include "diameter_codec.hh" #include "loggers.hh" @@ -14,24 +16,24 @@ int diameter_codec::encode(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_d TTCN_EncDec::clear_error(); TTCN_Buffer encoding_buffer; - encode_header(p_diameter_msg.header(), encoding_buffer); // len field is set to 0 + //encode_header(p_diameter_msg.header(), encoding_buffer); // len field is set to 0 - if (p_diameter_msg.ischosen()) { - } + // if (p_diameter_msg.ischosen()) { + // } return 0; } -int diameter_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params = NULL) { +int diameter_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params) { loggers::get_instance().log_msg(">>> diameter_codec::decode: ", (const Base_Type &)p_data); TTCN_EncDec::clear_error(); TTCN_Buffer decoding_buffer; - if (decode_header(decoding_buffer, p_diameter_msg.header()) == 0) { - loggers::get_instance().log_warning("diameter_codec::decode: Failed to decode header"); - return -1; - } + // if (decode_header(decoding_buffer, p_diameter_msg.header()) == 0) { + // loggers::get_instance().log_warning("diameter_codec::decode: Failed to decode header"); + // return -1; + // } return 0; } @@ -44,8 +46,11 @@ int diameter_codec::encode_header(const LibDiameter__TypesAndValues::DiameterHea int diameter_codec::decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header) { loggers::get_instance().log(">>> diameter_codec::decode_header"); + return -1; } int diameter_codec::padding(TTCN_Buffer& p_encoding_buffer) { //padding = (4 - (size & 3)) & 3; + loggers::get_instance().log(">>> diameter_codec::padding"); + return -1; } diff --git a/ccsrc/Protocols/Diameter/diameter_layer.cc b/ccsrc/Protocols/Diameter/diameter_layer.cc index 2f9f5d3..da022b2 100644 --- a/ccsrc/Protocols/Diameter/diameter_layer.cc +++ b/ccsrc/Protocols/Diameter/diameter_layer.cc @@ -7,7 +7,7 @@ #include "converter.hh" -diameter_layer::diameter_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { +diameter_layer::diameter_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { loggers::get_instance().log(">>> diameter_layer::diameter_layer: %s, %s", to_string().c_str(), p_param.c_str()); // Setup parameters params::convert(_params, p_param); @@ -18,8 +18,8 @@ void diameter_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p // Encode DiameterMessage OCTETSTRING data; - _codec_register.encode(p_diameter_message, data); - send_data(data, _params); + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); } void diameter_layer::send_data(OCTETSTRING& data, params& p_params) { diff --git a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc index 2c7cc27..ab5bfa0 100644 --- a/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc +++ b/ccsrc/Protocols/LowerLayerPPort/lower_layer_pport_layer.cc @@ -1,39 +1,39 @@ #include "LibDiameter_Interface.hh" #include "LibDiameter_TypesAndValues.hh" -#include "diameter_layer_factory.hh" +#include "lower_layer_pport_layer_factory.hh" #include "loggers.hh" #include "converter.hh" -lower_layer_pp_layer::lower_layer_pp_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { - loggers::get_instance().log(">>> lower_layer_pp_layer::lower_layer_pp_layer: %s, %s", to_string().c_str(), p_param.c_str()); +lower_layer_pport_layer::lower_layer_pport_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> lower_layer_pport_layer::lower_layer_pport_layer: %s, %s", to_string().c_str(), p_param.c_str()); // Setup parameters params::convert(_params, p_param); } -void lower_layer_pp_layer::sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param) { - loggers::get_instance().log_msg(">>> lower_layer_pp_layer::sendMsg: ", p_diameter_message); +void lower_layer_pport_layer::sendMsg(const LibDiameter__TypesAndValues::Lower__Layer__Primitive& p_diameter_message, params& p_param) { + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::sendMsg: ", p_diameter_message); // Encode DiameterMessage OCTETSTRING data; - _codec_register.encode(p_diameter_message, data); - send_data(data, _params); + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); } -void lower_layer_pp_layer::send_data(OCTETSTRING& data, params& p_params) { - loggers::get_instance().log_msg(">>> lower_layer_pp_layer::send_data: ", data); +void lower_layer_pport_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::send_data: ", data); send_to_all_layers(data, p_params); } -void lower_layer_pp_layer::receive_data(OCTETSTRING& data, params& p_params) +void lower_layer_pport_layer::receive_data(OCTETSTRING& data, params& p_params) { - loggers::get_instance().log_msg(">>> lower_layer_pp_layer::receive_data: ", data); + loggers::get_instance().log_msg(">>> lower_layer_pport_layer::receive_data: ", data); // Decode Diameter message } -lower_layer_pp_layer_factory lower_layer_pp_layer_factory::_f; +lower_layer_pport_layer_factory lower_layer_pport_layer_factory::_f; diff --git a/ccsrc/Protocols/Naptr/naptr_layer_factory.hh b/ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh similarity index 81% rename from ccsrc/Protocols/Naptr/naptr_layer_factory.hh rename to ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh index 595fee7..e8b460c 100644 --- a/ccsrc/Protocols/Naptr/naptr_layer_factory.hh +++ b/ccsrc/Protocols/Naptr/naptrPort_layer_factory.hh @@ -1,5 +1,5 @@ /*! - * \file naptr_layer_factory.hh + * \file naptrPort_layer_factory.hh * \brief Header file for Diameter protocol layer factory. * \author ETSI TTF T010 * \copyright ETSI Copyright Notification @@ -15,18 +15,18 @@ #include "naptr_layer.hh" /*! - * \class naptr_layer_factory + * \class naptrPort_layer_factory * \brief This class provides a factory class to create an naptr_layer class instance */ -class naptr_layer_factory : public layer_factory { - static naptr_layer_factory _f; //! Reference to the unique instance of this class +class naptrPort_layer_factory : public layer_factory { + static naptrPort_layer_factory _f; //! Reference to the unique instance of this class public: //! \publicsection /*! * \brief Default constructor * Create a new instance of the udp_layer_factory class * \remark The HTTP layer identifier is HTTP */ - naptr_layer_factory() { + naptrPort_layer_factory() { // Register factory layer_stack_builder::register_layer_factory("NAPTR", this); }; @@ -41,5 +41,5 @@ public: //! \publicsection inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ return new naptr_layer(p_type, p_param); }; -}; // End of class naptr_layer_factory +}; // End of class naptrPort_layer_factory diff --git a/ccsrc/Protocols/Naptr/naptr_layer.cc b/ccsrc/Protocols/Naptr/naptr_layer.cc index 83f982a..8e9bf1e 100644 --- a/ccsrc/Protocols/Naptr/naptr_layer.cc +++ b/ccsrc/Protocols/Naptr/naptr_layer.cc @@ -1,13 +1,12 @@ #include "AtsImsIot_TypesAndValues.hh" -#include "AtsImsIot_TypesAndValues.hh" -#include "naptr_layer_factory.hh" +#include "naptrPort_layer_factory.hh" #include "loggers.hh" #include "converter.hh" -naptr_layer::naptr_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { +naptr_layer::naptr_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { loggers::get_instance().log(">>> naptr_layer::naptr_layer: %s, %s", to_string().c_str(), p_param.c_str()); // Setup parameters params::convert(_params, p_param); @@ -18,8 +17,8 @@ void naptr_layer::sendMsg(const AtsImsIot__TypesAndValues::NAPTRmessage& p_diame // Encode DiameterMessage OCTETSTRING data; - _codec_register.encode(p_diameter_message, data); - send_data(data, _params); + // _codec_register.encode(p_diameter_message, data); + // send_data(data, _params); } void naptr_layer::send_data(OCTETSTRING& data, params& p_params) { @@ -35,5 +34,5 @@ void naptr_layer::receive_data(OCTETSTRING& data, params& p_params) // Decode Diameter message } -naptr_layer_factory naptr_layer_factory::_f; +naptrPort_layer_factory naptrPort_layer_factory::_f; diff --git a/ccsrc/Protocols/Naptr/naptr_layer.hh b/ccsrc/Protocols/Naptr/naptr_layer.hh index db265ce..964753c 100644 --- a/ccsrc/Protocols/Naptr/naptr_layer.hh +++ b/ccsrc/Protocols/Naptr/naptr_layer.hh @@ -18,7 +18,7 @@ namespace AtsImsIot__TestSystem { class NaptrPort; //! Forward declaration of TITAN class } -namespace LibIot__TypesAndValues { +namespace AtsImsIot__TypesAndValues { class NAPTRmessage; //! Forward declaration of TITAN class } @@ -51,7 +51,7 @@ public: //! \publicsection */ virtual ~naptr_layer() { }; - void sendMsg(const LibIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param); + void sendMsg(const AtsImsIot__TypesAndValues::NAPTRmessage& p_diameter_message, params& p_param); /*! * \virtual diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc index 6dfb39f..9304ef9 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer.cc +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.cc @@ -1,39 +1,39 @@ -// #include "LibIot__TestInterface.hh" -// #include "LibUpperTester.hh" +#include "LibIot_TestInterface.hh" +#include "LibUpperTester.hh" -// #include "upper_tester_layer_factory.hh" +#include "upper_tester_layer_factory.hh" -// #include "loggers.hh" +#include "loggers.hh" -// #include "converter.hh" +#include "converter.hh" -// upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params(), _codec_request(), _codec_response(), _codec_register(), _codec_invite(), _codec_ack(), _codec_subscribe(), _codec_message(), _codec_options(), _codec_cancel(), _codec_notify(), _codec_info(), _codec_bye() { -// loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); -// // Setup parameters -// params::convert(_params, p_param); -// } +upper_tester_layer::upper_tester_layer(const std::string & p_type, const std::string & p_param) : t_layer(p_type), _params() { + loggers::get_instance().log(">>> upper_tester_layer::upper_tester_layer: %s, %s", to_string().c_str(), p_param.c_str()); + // Setup parameters + params::convert(_params, p_param); +} -// void upper_tester_layer::sendMsg(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_message, params& p_param) { -// loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_diameter_message); +void upper_tester_layer::sendMsg(const LibUpperTester::EquipmentOperationReq& p_equipment_operation_req, params& p_param) { + loggers::get_instance().log_msg(">>> upper_tester_layer::sendMsg: ", p_equipment_operation_req); -// // Encode DiameterMessage -// OCTETSTRING data; -// _codec_register.encode(p_diameter_message, data); -// send_data(data, _params); -// } + // Encode DiameterMessage + OCTETSTRING data; + //_codec_register.encode(p_equipment_operation_req, data); + //send_data(data, _params); +} -// void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { -// loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); +void upper_tester_layer::send_data(OCTETSTRING& data, params& p_params) { + loggers::get_instance().log_msg(">>> upper_tester_layer::send_data: ", data); -// send_to_all_layers(data, p_params); -// } + send_to_all_layers(data, p_params); +} -// void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) -// { -// loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); +void upper_tester_layer::receive_data(OCTETSTRING& data, params& p_params) +{ + loggers::get_instance().log_msg(">>> upper_tester_layer::receive_data: ", data); -// // Decode Diameter message -// } + // Decode Diameter message +} -// upper_tester_layer_factory upper_tester_layer_factory::_f; +upper_tester_layer_factory upper_tester_layer_factory::_f; diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh index 51f977f..2358550 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer.hh +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer.hh @@ -1,73 +1,73 @@ -// /*! -// * \file upper_tester_layer.hh -// * \brief Header file for ITS HTTP protocol layer. -// * \author ETSI STF549 -// * \copyright ETSI Copyright Notification -// * No part may be reproduced except as authorized by written permission. -// * The copyright and the foregoing restriction extend to reproduction in all media. -// * All rights reserved. -// * \version 0.1 -// */ -// #pragma once +/*! + * \file upper_tester_layer.hh + * \brief Header file for ITS HTTP protocol layer. + * \author ETSI STF549 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once -// #include +#include -// #include "t_layer.hh" +#include "t_layer.hh" -// namespace LibIot__TestInterface { -// class EquipmentAccessPort; //! Forward declaration of TITAN class -// } +namespace LibIot__TestInterface { + class EquipmentAccessPort; //! Forward declaration of TITAN class +} -// namespace LibUpperTester { -// class EquipmentOperationReq; //! Forward declaration of TITAN class -// } +namespace LibUpperTester { + class EquipmentOperationReq; //! Forward declaration of TITAN class +} -// class OCTETSTRING; //! Forward declaration of TITAN class +class OCTETSTRING; //! Forward declaration of TITAN class -// /*! -// * \class upper_tester_layer -// * \brief This class provides a factory class to create an upper_tester_layer class instance -// */ -// class upper_tester_layer : public t_layer { -// params _params; +/*! + * \class upper_tester_layer + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer : public t_layer { + params _params; -// public: //! \publicsection -// /*! -// * \brief Specialised constructor -// * Create a new instance of the upper_tester_layer class -// * \param[in] p_type \todo -// * \param[in] p_param \todo -// */ -// upper_tester_layer() : t_layer(), _params() {}; -// /*! -// * \brief Specialised constructor -// * Create a new instance of the upper_tester_layer class -// * \param[in] p_type \todo -// * \param[in] p_param \todo -// */ -// upper_tester_layer(const std::string& p_type, const std::string& p_param); -// /*! -// * \brief Default destructor -// */ -// virtual ~upper_tester_layer() { }; +public: //! \publicsection + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer() : t_layer(), _params() {}; + /*! + * \brief Specialised constructor + * Create a new instance of the upper_tester_layer class + * \param[in] p_type \todo + * \param[in] p_param \todo + */ + upper_tester_layer(const std::string& p_type, const std::string& p_param); + /*! + * \brief Default destructor + */ + virtual ~upper_tester_layer() { }; -// void sendMsg(const LibUpperTester::EquipmentOperationReq& p_diameter_message, params& p_param); + void sendMsg(const LibUpperTester::EquipmentOperationReq& p_equipment_operation_req, params& p_param); -// /*! -// * \virtual -// * \fn void send_data(OCTETSTRING& data, params& p_params); -// * \brief Send bytes formated data to the lower layers -// * \param[in] p_data The data to be sent -// * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters -// */ -// virtual void send_data(OCTETSTRING& data, params& p_params); -// /*! -// * \virtual -// * \fn void receive_data(OCTETSTRING& data, params& p_params); -// * \brief Receive bytes formated data from the lower layers -// * \param[in] p_data The bytes formated data received -// * \param[in] p_params Some lower layers parameters values when data was received -// */ -// virtual void receive_data(OCTETSTRING& data, params& info); -// }; // End of class upper_tester_layer + /*! + * \virtual + * \fn void send_data(OCTETSTRING& data, params& p_params); + * \brief Send bytes formated data to the lower layers + * \param[in] p_data The data to be sent + * \param[in] p_params Some parameters to overwrite default value of the lower layers parameters + */ + virtual void send_data(OCTETSTRING& data, params& p_params); + /*! + * \virtual + * \fn void receive_data(OCTETSTRING& data, params& p_params); + * \brief Receive bytes formated data from the lower layers + * \param[in] p_data The bytes formated data received + * \param[in] p_params Some lower layers parameters values when data was received + */ + virtual void receive_data(OCTETSTRING& data, params& info); +}; // End of class upper_tester_layer diff --git a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh index 8cd4356..558dfa8 100644 --- a/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh +++ b/ccsrc/Protocols/UpperTester/upper_tester_layer_factory.hh @@ -1,45 +1,45 @@ -// /*! -// * \file upper_tester_layer_factory.hh -// * \brief Header file for INT LibIot protocol layer factory. -// * \author ETSI TTF T010 -// * \copyright ETSI Copyright Notification -// * No part may be reproduced except as authorized by written permission. -// * The copyright and the foregoing restriction extend to reproduction in all media. -// * All rights reserved. -// * \version 0.1 -// */ -// #pragma once +/*! + * \file upper_tester_layer_factory.hh + * \brief Header file for INT LibIot protocol layer factory. + * \author ETSI TTF T010 + * \copyright ETSI Copyright Notification + * No part may be reproduced except as authorized by written permission. + * The copyright and the foregoing restriction extend to reproduction in all media. + * All rights reserved. + * \version 0.1 + */ +#pragma once -// #include "layer_stack_builder.hh" +#include "layer_stack_builder.hh" -// #include "upper_tester_layer.hh" +#include "upper_tester_layer.hh" -// /*! -// * \class upper_tester_layer_factory -// * \brief This class provides a factory class to create an upper_tester_layer class instance -// */ -// class upper_tester_layer_factory : public layer_factory { -// static upper_tester_layer_factory _f; //! Reference to the unique instance of this class -// public: //! \publicsection -// /*! -// * \brief Default constructor -// * Create a new instance of the udp_layer_factory class -// * \remark The HTTP layer identifier is HTTP -// */ -// upper_tester_layer_factory() { -// // Register factory -// layer_stack_builder::register_layer_factory("UT", this); -// }; -// /*! -// * \fn layer* create_layer(const std::string & type, const std::string & param); -// * \brief Create the layers stack based on the provided layers stack description -// * \param[in] p_type The provided layers stack description -// * \param[in] p_params Optional parameters -// * \return 0 on success, -1 otherwise -// * \inline -// */ -// inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ -// return new upper_tester_layer(p_type, p_param); -// }; -// }; // End of class upper_tester_layer_factory +/*! + * \class upper_tester_layer_factory + * \brief This class provides a factory class to create an upper_tester_layer class instance + */ +class upper_tester_layer_factory : public layer_factory { + static upper_tester_layer_factory _f; //! Reference to the unique instance of this class +public: //! \publicsection + /*! + * \brief Default constructor + * Create a new instance of the udp_layer_factory class + * \remark The HTTP layer identifier is HTTP + */ + upper_tester_layer_factory() { + // Register factory + layer_stack_builder::register_layer_factory("UT", this); + }; + /*! + * \fn layer* create_layer(const std::string & type, const std::string & param); + * \brief Create the layers stack based on the provided layers stack description + * \param[in] p_type The provided layers stack description + * \param[in] p_params Optional parameters + * \return 0 on success, -1 otherwise + * \inline + */ + inline virtual layer* create_layer(const std::string& p_type, const std::string& p_param){ + return new upper_tester_layer(p_type, p_param); + }; +}; // End of class upper_tester_layer_factory diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index b28e8e8..c14af3e 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -12,5 +12,11 @@ { "path": "../../tmp/vxlte-iop" } - ] + ], + "settings": { + "files.associations": { + "cmath": "cpp", + "vector": "cpp" + } + } } \ No newline at end of file diff --git a/etc/AtsImsIot/AtsImsIot.cfg b/etc/AtsImsIot/AtsImsIot.cfg new file mode 100644 index 0000000..a9ae8db --- /dev/null +++ b/etc/AtsImsIot/AtsImsIot.cfg @@ -0,0 +1,61 @@ +[MODULE_PARAMETERS] +# This section shall contain the values of all parameters that are defined in your TTCN-3 modules. + +[LOGGING] +# In this section you can specify the name of the log file and the classes of events +# you want to log into the file or display on console (standard error). + +LogFile := "../logs/AtsImsIot/%e.%h-%r.%s" +FileMask := LOG_ALL | USER | DEBUG | MATCHING +ConsoleMask := LOG_ALL | USER | DEBUG | MATCHING +#FileMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +#ConsoleMask := ERROR | WARNING | USER | MATCHING | EXECUTOR_RUNTIME | VERDICTOP | PORTEVENT | TESTCASE +LogSourceInfo := Stack +LogEntityName:= Yes +LogEventTypes:= Yes +#TimeStampFormat := DateTime + +[TESTPORT_PARAMETERS] +# In this section you can specify parameters that are passed to Test Ports. +# I1 interface +## Unsecured +system.diameterPort.params := "DIAMETER/SCTP(debug=1,server=172.25.1.54,port=8200)" + +[DEFINE] +# In this section you can create macro definitions, +# that can be used in other configuration file sections except [INCLUDE] and [ORDERED_INCLUDE]. + +[INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[ORDERED_INCLUDE] +# To use configuration settings given in other configuration files, +# the configuration files just need to be listed in this section, with their full or relative pathnames. + +[EXTERNAL_COMMANDS] +# This section can define external commands (shell scripts) to be executed by the ETS +# whenever a control part or test case is started or terminated. + +#BeginTestCase := "" +#EndTestCase := "" +#BeginControlPart := "" +#EndControlPart := "" + +[EXECUTE] +# In this section you can specify what parts of your test suite you want to execute. +#AtsImsIot_TestControl.control + +[GROUPS] +# In this section you can specify groups of hosts. These groups can be used inside the +# [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. + +[COMPONENTS] +# This section consists of rules restricting the location of created PTCs. + +[MAIN_CONTROLLER] +# The options herein control the behavior of MC. +KillTimer := 10.0 +LocalAddress := 127.0.0.1 +TCPPort := 12000 +NumHCs := 1 diff --git a/install.sh b/install.sh index deab399..4f97337 100755 --- a/install.sh +++ b/install.sh @@ -34,8 +34,9 @@ ln -f ./ttcn/patch_lib_ims_titan/module.mk ./ttcn/LibIms/ ln -f ./ttcn/patch_lib_sip_titan/module.mk ./ttcn/LibSip/ ln -f ./ttcn/patch_lib_diameter_titan/module.mk ./ttcn/LibDiameter ln -f ./ttcn/patch_lib_msrp_titan/module.mk ./ttcn/LibMsrp -ln -f ./ttcn/patch_lib_iot_titan/module.mk ./ttcn/LibIot -ln -f ./ttcn/patch_lib_config_and_trigger_titan/module.mk ./ttcn/LibIms_ConfigAndTrigger -ln -f ./ttcn/patch_lib_upper_tester_titan/module.mk ./ttcn/LibUpperTester +ln -f ./ttcn/patch_lib_iot_titan/module.mk ./ttcn/LibIot +ln -f ./ttcn/patch_lib_config_and_trigger_titan/module.mk ./ttcn/LibIms_ConfigAndTrigger +ln -f ./ttcn/patch_lib_upper_tester_titan/module.mk ./ttcn/LibUpperTester +ln -f ./ttcn/patch_ats_ims_iot/module.mk ./ttcn/AtsImsIot exit 0 diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 5218f5e..2b448a5 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -34,7 +34,7 @@ sources := \ AtsImsIot_TestControl.ttcn \ AtsImsIot_PIXITS.ttcn \ AtsImsIot_TD_INI.ttcn \ - AtsImsIot_TestSystem.ttcn \ + ../patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn \ AtsImsIot_TP_behavior_IC.ttcn \ AtsImsIot_TP_behavior_MW_SI.ttcn \ AtsImsIot_TP_behavior_S9.ttcn \ @@ -55,15 +55,21 @@ modules := ../LibCommon \ ../../titan-test-system-framework/ccsrc/Protocols/ETH \ ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ ../../titan-test-system-framework/ccsrc/Protocols/UDP \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Ports/ImsMonitorSipPort \ ../../ccsrc/Ports/LibDiameter \ + ../../ccsrc/Ports/ImsMonitorDiameterPort \ ../../ccsrc/Ports/Naptr \ ../../ccsrc/Ports/Data \ ../../ccsrc/Ports/Sgi \ ../../ccsrc/Ports/LibIot \ + ../../ccsrc/EncDec/LibDiameter \ ../../ccsrc/EncDec/LibSip \ + ../../ccsrc/EncDec/LibMsrp \ ../../ccsrc/Protocols/Diameter \ ../../ccsrc/Protocols/LowerLayerPPort \ ../../ccsrc/Protocols/Sip \ ../../ccsrc/Protocols/Naptr \ + ../../ccsrc/Protocols/UpperTester \ ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ diff --git a/ttcn/patch_ats_ims_iot/module.mk b/ttcn/patch_ats_ims_iot/module.mk new file mode 100644 index 0000000..2b448a5 --- /dev/null +++ b/ttcn/patch_ats_ims_iot/module.mk @@ -0,0 +1,75 @@ +suite := AtsImsIot + +sources := \ + AtsImsIot_TypesAndValues.ttcn \ + AtsImsIot_Diameter_Templates.ttcn \ + AtsImsIot_Templates.ttcn \ + AtsImsIot_Templates_GM.ttcn \ + AtsImsIot_Templates_IC.ttcn \ + AtsImsIot_Templates_MW.ttcn \ + AtsImsIot_Templates_MI.ttcn \ + AtsImsIot_Templates_MM.ttcn \ + AtsImsIot_Templates_MX.ttcn \ + AtsImsIot_Templates_ML.ttcn \ + AtsImsIot_TestConfiguration.ttcn \ + AtsImsIot_TP_behavior_CX.ttcn \ + AtsImsIot_TP_behavior_ISC.ttcn \ + AtsImsIot_TP_behavior_SH.ttcn \ + AtsImsIot_TP_behavior_GM.ttcn \ + AtsImsIot_TP_behavior_MW_IS.ttcn \ + AtsImsIot_TP_behavior_RX.ttcn \ + AtsImsIot_TP_behavior_GX.ttcn \ + AtsImsIot_TP_behavior_MW_PS.ttcn \ + AtsImsIot_TP_behavior_MM.ttcn \ + AtsImsIot_TP_behavior_ML.ttcn \ + AtsImsIot_TP_behavior_MI.ttcn \ + AtsImsIot_TP_behavior_MX.ttcn \ + AtsImsIot_TP_behavior_S6A.ttcn \ + AtsImsIot_TD_ATT.ttcn \ + AtsImsIot_TD_REG.ttcn \ + AtsImsIot_Functions.ttcn \ + AtsImsIot_Emergency.ttcn \ + AtsImsIot_TD_DRG.ttcn \ + AtsImsIot_TD_DTC.ttcn \ + AtsImsIot_TestControl.ttcn \ + AtsImsIot_PIXITS.ttcn \ + AtsImsIot_TD_INI.ttcn \ + ../patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn \ + AtsImsIot_TP_behavior_IC.ttcn \ + AtsImsIot_TP_behavior_MW_SI.ttcn \ + AtsImsIot_TP_behavior_S9.ttcn \ + + +modules := ../LibCommon \ + ../LibIms \ + ../LibIot \ + ../LibMsrp \ + ../LibUpperTester \ + ../LibIms_ConfigAndTrigger \ + ../LibSip \ + ../LibDiameter \ + ../../titan-test-system-framework/ttcn/LibHelpers \ + ../../titan-test-system-framework/ccsrc/Framework \ + ../../titan-test-system-framework/ccsrc/Helpers \ + ../../titan-test-system-framework/ccsrc/loggers \ + ../../titan-test-system-framework/ccsrc/Protocols/ETH \ + ../../titan-test-system-framework/ccsrc/Protocols/Tcp \ + ../../titan-test-system-framework/ccsrc/Protocols/UDP \ + ../../titan-test-system-framework/ccsrc/Protocols/Xml \ + ../../ccsrc/Ports/LibSip \ + ../../ccsrc/Ports/ImsMonitorSipPort \ + ../../ccsrc/Ports/LibDiameter \ + ../../ccsrc/Ports/ImsMonitorDiameterPort \ + ../../ccsrc/Ports/Naptr \ + ../../ccsrc/Ports/Data \ + ../../ccsrc/Ports/Sgi \ + ../../ccsrc/Ports/LibIot \ + ../../ccsrc/EncDec/LibDiameter \ + ../../ccsrc/EncDec/LibSip \ + ../../ccsrc/EncDec/LibMsrp \ + ../../ccsrc/Protocols/Diameter \ + ../../ccsrc/Protocols/LowerLayerPPort \ + ../../ccsrc/Protocols/Sip \ + ../../ccsrc/Protocols/Naptr \ + ../../ccsrc/Protocols/UpperTester \ + ../modules/titan.TestPorts.Common_Components.Abstract_Socket \ diff --git a/ttcn/patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn b/ttcn/patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn new file mode 100644 index 0000000..0eaf926 --- /dev/null +++ b/ttcn/patch_ats_ims_iot/ttcn/AtsImsIot_TestSystem.ttcn @@ -0,0 +1,174 @@ +module AtsImsIot_TestSystem { + + import from LibSip_SIPTypesAndValues all; + import from LibMsrp_TypesAndValues all; + import from AtsImsIot_TypesAndValues all; + import from LibIot_TestInterface all; + import from LibIot_TestInterface all; + import from LibIot_TypesAndValues all; + import from LibDiameter_TypesAndValues all; + + /** + * @desc interfaces to the SUT + */ + type component IotSystemInterface { + port DataPort dPort; + port ImsMonitorSipPort sipPort; + port ImsMonitorDiameterPort diameterPort; + port SgiPort sgiPort; + port EquipmentAccessPort eaPort; + port AdapterConfigPort acPort; + } + /** + * @desc + * providing monitoring functionality of involved interfaces. Used as + * PTC. + */ + type component ImsInterfaceMonitor extends InterfaceMonitor { + port DataPort dPort; + port NaptrPort naptrPort; + port ImsMonitorDiameterPort rxPort; + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + type component SipInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorSipPort sipPort; + port ImsCoordinationPort icpPort; + } + type component DiameterInterfaceMonitor extends InterfaceMonitor { + port ImsMonitorDiameterPort diameterPort; + port ImsCoordinationPort icpPort; + } + type component NaptrInterfaceMonitor extends InterfaceMonitor { + port NaptrPort naptrPort; + port ImsCoordinationPort icpPort; + } + type component SgiInterfaceMonitor extends InterfaceMonitor { + port SgiPort sgiPort; + port ImsCoordinationPort icpPort; + } + + /** + * @desc + * used to coordinate the behavior of other components. It is in charge + * of controlling the overall execution, manangement of testing phases, + * test verdicts collection and synchronization. Used as MTC. + */ + type component ImsTestCoordinator extends TestCoordinator { + port ImsCoordinationPort icpPort; + var VxLTEMonitorInterfaceList vc_MonIntfList; + var CF_VXLTE_Interfaces vc_vxlte_monitor_components; + } + + group portDefinitions { + type port ImsCoordinationPort message { + inout SipMessage, DIAMETER_MSG; + } with { + extension "internal" + } + type port DataPort message { + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port ImsMonitorSipPort message { //type port SipPort message + in Request, Response, SEND_request, RECEIVE_response; // SIP + } + type port NaptrPort message { + in NAPTRmessage; + } + type port ImsMonitorDiameterPort message { + in DIAMETER_MSG; + } + type port SgiPort message { + in charstring; + } + } + + type record CF_INT_CALL { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB optional, + ImsInterfaceMonitor naptr optional + } + type record CF_INT_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_ROAM_AS { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor ici, + ImsInterfaceMonitor mxB, + ImsInterfaceMonitor gmB, + ImsInterfaceMonitor iscA optional, + ImsInterfaceMonitor iscB optional + } + type record CF_EPC_CALL { + ImsInterfaceMonitor gmA, // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + ImsInterfaceMonitor rx, // See ETSI TS 103 029 V3.1.1 clause 5.4.2 + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mw, + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB // See ETSI TS 103 029 V3.1.1 clause 5.4.1.1 + } + + group g_release15 { + + type record CF_VXLTE_Interfaces{ + SipInterfaceMonitor gmA optional, + SipInterfaceMonitor gmB optional, + SipInterfaceMonitor mmB_PSAP optional,// MmMx interface at IBCF to PSAP + SipInterfaceMonitor mwEB optional,// Mw interface at E-CSCF/IBCF or E-CSCF/BGCF + SipInterfaceMonitor mlE_LRF optional,// Ml interface at E-CSCF/LRF + SipInterfaceMonitor mwS_PSAP optional,// MwMmMx interface at E,SCSCF to PSAP + SipInterfaceMonitor ic optional, + SipInterfaceMonitor mwPI optional,// Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + SipInterfaceMonitor mwPS optional, + SipInterfaceMonitor mwPE optional,// Mw interface at P-CSCF to E-CSCF + SipInterfaceMonitor mwIS optional,// Mw interface at I-CSCF/S-CSCF + SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF + SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF + SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF + SipInterfaceMonitor isc optional, + DiameterInterfaceMonitor cxIH optional, + DiameterInterfaceMonitor cxSH optional, + DiameterInterfaceMonitor gx optional, + DiameterInterfaceMonitor rx optional, + DiameterInterfaceMonitor s6a optional, + DiameterInterfaceMonitor s9 optional, + DiameterInterfaceMonitor sh optional + } + + type record CF_ATT_old { + ImsInterfaceMonitor gmA, + ImsInterfaceMonitor rx, + ImsInterfaceMonitor s6a, + ImsInterfaceMonitor gx, + ImsInterfaceMonitor mxA, + ImsInterfaceMonitor mwPS, // Mw interface at P-CSCF/I-CSCF or P-CSCF/S-CSCF if I-CSCF not used + ImsInterfaceMonitor mwIS, // Mw interface at I-CSCF/S-CSCF + ImsInterfaceMonitor mwSI, // Mw interface at S-CSCF/IBCF + ImsInterfaceMonitor sgi, + ImsInterfaceMonitor gmB + } + + type record CF_ATT { + SipInterfaceMonitor gmA, + DiameterInterfaceMonitor rx, + DiameterInterfaceMonitor s6a, + DiameterInterfaceMonitor gx, + SipInterfaceMonitor mxA, + SipInterfaceMonitor mw, + SgiInterfaceMonitor sgi, + SipInterfaceMonitor gmB + } + } // end of g_release15 + +} \ No newline at end of file -- GitLab From f3c8bec38a9f54f3323788645adacf82b39bfb0d Mon Sep 17 00:00:00 2001 From: Bostjan Date: Tue, 24 Oct 2023 10:40:36 +0200 Subject: [PATCH 73/84] TDs roaming for attachmnet and registration --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 209 ++++++++++++++++++++++++ 1 file changed, 209 insertions(+) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1adb1c1..1f05a7a 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -3272,6 +3272,102 @@ module AtsImsIot_Emergency { */ group NetworkAttachment { + group UENetworkAttachmentWithUSIM { + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_ECO_RMI_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_RMI_ATT_01 + } // End of group UENetworkAttachmentWithUSIM + + group UENetworkAttachmentWithoutUSIM { + /** + * @desc Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. + * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. + * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF + * and allowed forwarding towards E-CSCF + * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) + * + */ + testcase TC_VoLTE_EMC_RMI_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // test body + // Check that user A starts initial network attachment + f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) + + // postamble + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + } // End of TC TC_VoLTE_ECO_RMI_ATT_02 + } // End of group UENetworkAttachmentWithoutUSIM + } // End of group NetworkAttachment /** @@ -3279,7 +3375,120 @@ module AtsImsIot_Emergency { */ group IMSEmergencyRegistration { + /** + * @desc To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration. + * @see ETSI TS 103 795-2 Clause 6.2.1 IMS Emergency Registration - Rejection + * @remark This is option 1: Emergency registration rejected by the visited network + */ + testcase TD_VoLTE_ECO_RMI_REG_01_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 8 + + + //f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP + //f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 + + //f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Event 4, 7 + + //f_mtc_check_TP_CX_HSS_ECO_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); + } + } // End of testcase TD_VoLTE_ECO_RMI_REG_01_01 + + /** + * @desc To attempt initial emergency registration via the established emergency bearer. In this case, the emergency registration is not successful due to not accepted UE credentials. Emergency call can be established without emergency registration. + * @see ETSI TS 103 795-2 Clause 6.2.1 IMS Emergency Registration - Rejection + * @remark This is option 1: Emergency registration rejected - UE not supporting GIBA + */ + testcase TD_VoLTE_ECO_RMI_REG_01_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getSipUserId ( PX_EUT_A_EMERGENCY ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_SIP_MW_PI_INTERFACENAME, + PX_DIAMETER_CX_SH_INTERFACENAME, + PX_DIAMETER_CX_IH_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME})) + { + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // preamble + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 1, 10 + + + //f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP + //f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 + + //f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Event 4, 9 + + f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + + // postamble + f_PO_user_home_deregistration ( v_ueA ); + f_mtc_userRadioEnabled ( v_ueA, false, true ); + + //unmap/disconnet component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + f_cf_adapter_down ( ); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs"); + } + } // End of testcase TD_VoLTE_ECO_RMI_REG_01_02 + } // End of group IMSEmergencyRegistration + + /** + * @see ETSI TS 103 795-3 Clause 6.3 Emergency Session Establishment(Roaming) + */ + group EmergencySessionEstablishmentRoaming { + + } // End of group EmergencySessionEstablishmentRoaming } // End of group Roaming -- GitLab From 0fb59bad0aed9a717e508726badad426d4d1008b Mon Sep 17 00:00:00 2001 From: Bostjan Date: Tue, 24 Oct 2023 14:40:18 +0200 Subject: [PATCH 74/84] New TPs for roaming attachmnet and registration added --- .../AtsImsIot_Diameter_Templates.ttcn | 58 +++++ ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 14 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn | 231 ++++++++++++++++++ 3 files changed, 296 insertions(+), 7 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn index 2ac19f5..fbc9a37 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Diameter_Templates.ttcn @@ -215,6 +215,18 @@ module AtsImsIot_Diameter_Templates { aVP_Data := p_avpData } + template AF_Requested_Data_AVP mw_aF_Requested_Data(template (present) UInt32 p_avpData := ?) := + { + aVP_Header := mw_aVP_Header_any_Code(?), + aVP_Data := p_avpData + }; + + template Service_URN_AVP mw_service_URN(template (present) octetstring p_avpData := ?) := + { + aVP_Header := mw_aVP_Header_any_Code(c_service_URN_AVP_Code), + aVP_Data := p_avpData + }; + } //end group RxHeaderFields group GxHeaderFields{ @@ -893,6 +905,27 @@ module AtsImsIot_Diameter_Templates { } } + template AAR_MSG mw_AAR_AfRequestedData_ServiceUrn modifies mw_AAR_basic := { + aAR_Body :={ + //media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ?, + //framed_IPv6_Address := *, + aF_Requested_Data := mw_aF_Requested_Data, + service_URN := mw_service_URN + } + } + + template AAR_MSG mw_AAR_ServiceUrn modifies mw_AAR_basic := { + aAR_Body :={ + //media_Component_Description := {mw_mediaComponentDescription_FlowStatusEnabled}, + specific_Action := *, + framed_IP_Address := ?, + //framed_IPv6_Address := *, + service_URN := mw_service_URN + } + } + template ASR_MSG mw_ASR_abortCause(template (present) Abort_Cause_Type p_avpData) modifies mw_ASR_basic := { aSR_Body :={ abort_cause := mw_abortCause(p_avpData) @@ -959,6 +992,31 @@ module AtsImsIot_Diameter_Templates { } } + template AAA_MSG mw_AAA_resultCode_subscriptionId_userEquipmentInfo modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Equipment_Info := ?, + subscription_Id_AVP := ? + + } + } + + template AAA_MSG mw_AAA_resultCode_userEquipmentInfo modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + user_Equipment_Info := ? + + } + } + + template AAA_MSG mw_AAA_resultCode_subscriptionId modifies mw_AAA_basic := { + aAA_Body :={ + result_Code := mw_resultCode(mw_resultCode_diameterSuccess), + subscription_Id_AVP := ? + + } + } + template ASA_MSG mw_ASA_resultCode modifies mw_ASA_basic := { aSA_Body :={ result_Code := mw_resultCode(mw_resultCode_diameterSuccess) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1f05a7a..d220145 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -3407,12 +3407,12 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 8 - //f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP - //f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 + f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP + f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 - //f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Event 4, 7 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.mwPI); // Event 4, 7 - //f_mtc_check_TP_CX_HSS_ECO_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 + f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 // postamble f_PO_user_home_deregistration ( v_ueA ); @@ -3460,10 +3460,10 @@ module AtsImsIot_Emergency { f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 1, 10 - //f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP - //f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 + f_mtc_check_TP_RX_PCSCF_ECO_AAR_01(vc_vxlte_monitor_components.rx, true);// Event 2 //true because AAR repeated in next TP + f_mtc_check_TP_RX_PCRF_ECO_AAA_01(vc_vxlte_monitor_components.rx); // Event 3 - //f_mtc_check_TP_MW_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Event 4, 9 + f_mtc_check_TP_MW_ICSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.mwPI); // Event 4, 9 f_mtc_check_TP_CX_HSS_UAA_03(f_getCxInterface(PX_DIAMETER_CX_SINGLE_INTERFACE));// Event 5, 6 diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn index 5c86273..ed1b71d 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_RX.ttcn @@ -194,6 +194,111 @@ group g_PCRF_AAA { } } // End of function f_mtc_check_TP_RX_PCRF_AAA_01 + /** + * Starts monitor component behavior for TP_RX_PCRF_ECO_AAA_01 + * @param p_monitorCompRef Reference to monitor component + *
      +     * Test objective  "Verify that IUT after AA-Request is received due to provisioning of AF Signalling flow sends AA-Answer."
      +     * ensure that {
      +     *     when {
      +     *         the IMS_P_CSCF_A entity sends an AAR
      +     *         to the EPC_PCRF_A entity
      +     *     }
      +     *     then {
      +     *         the EPC_PCRF_A entity sends the AAA containing
      +     *             Result_Code_AVP
      +     *                 indicating value DIAMETER_SUCCESS,
      +     *             Acceptable_Service_Info_AVP containing
      +     *                 "one or more" Media_Component_Description_AVP containing
      +     *                     Media_Component_Number_AVP
      +     *                         indicating value 0,
      +     *                     Media_Sub_Component_AVP containing
      +     *                         Flow_Description_AVP
      +     *                         Flow_Usage_AVP
      +     *                             indicating value AF_SIGNALING,
      +     *                         Flow_Status_AVP
      +     *                             indicating value ENABLED,
      +     *                         AF_Signalling_Protocol_AVP
      +     *                             indicating value SIP
      +     *                     ;
      +     *                 ;
      +     *             ;,
      +     *             IP_CAN_AVP
      +     *             RAT_Type_AVP
      +     *         ;
      +     *         to the IMS_P_CSCF_A entity
      +     *         }
      +     *     }
      +     *     
      +     * ensure that {
      +     *     when {
      +     *         the IMS_P_CSCF_A entity sends an AAR
      +     *         to the EPC_PCRF_A entity
      +     *     }
      +     *     then {
      +     *         the EPC_PCRF_A entity sends the AAA containing
      +     *             Result_Code_AVP
      +     *                 indicating value DIAMETER_SUCCESS
      +     *             Subscription_Id_AVP containing
      +     *                 Subscription_Id_Type_AVP
      +     *                     indicating value END_USER_IMSI;, //or END_USERE_164   
      +     *             "and/or" 
      +     *             User_Equipment_Info_AVP containing
      +     *                 User_Equipment_Info_Type
      +     *                     indicating value IMEISV,
      +     *                 User_Equipment_Info_Value;;  
      +     *         to the IMS_P_CSCF_A entity
      +     *     }
      +     * 
      + * @see TS 103 653-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCRF_ECO_AAA_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_basic }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_dummy }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_AAA_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + mw_diameter_msg_pass := { aAA_MSG := (mw_AAA_resultCode_subscriptionId_userEquipmentInfo, + mw_AAA_resultCode_userEquipmentInfo, + mw_AAA_resultCode_subscriptionId) + }; + mw_diameter_msg_fail := { aAA_MSG := mw_AAA_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCRF_ECO_AAA_01 - AAA", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCRF_ECO_AAA_01 + /** * Starts monitor component behavior for TP_RX_PCRF_AAA_02 * @param p_monitorCompRef Reference to monitor component @@ -581,6 +686,70 @@ group g_PCSCF_AAR { } } // End of function f_mtc_check_TP_RX_PCSCF_AAR_01 + /** + * Starts monitor component behavior for TP_RX_PCSCF_ECO_AAR_01 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
      +     * Test objective  "Verify that IUT after 2XX_Response on REGISTER sends an AA-Request due to provisioning of AF Signalling flow."
      +     *
      +     * 
      +     * 
      +     * Config Id CF_VxLTE_INT
      +     * 
      +     * Initial conditions with {
      +     *     the UE_A entity isNotAttachedTo the EPC_A and
      +     *     the UE_A entity not isEmergencyRegisteredTo the IMS_A
      +     * }
      +     * 
      +     * ensure that {
      +     *     when {
      +     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
      +     *         to the IMS_P_CSCF_A entity
      +     *     }
      +     *     then {
      +     *         the IMS_P_CSCF_A entity sends an AAR containing
      +     *             Framed_IPv4_Address_AVP 
      +     *                 indicating value "IPv4_Address of UE_A",
      +     *             "or" Framed_IPv6_Address_AVP 
      +     *                 indicating value "IPv6_Address of UE_A",
      +     *             AF_Requested_Data_AVP
      +     *                 indicating value "EPC-level identities required",
      +     *             Service_URN_AVP
      +     *                 indicating value "sos*";
      +     *         to the EPC_PCRF_A entity
      +     *     }
      +     * }  
      +     * 
      + * @see TS 103 795-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_ECO_AAR_01( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_AfRequestedData_ServiceUrn }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_ECO_AAR_01 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_ECO_AAR_01 + /** * Starts monitor component behavior for TP_RX_PCSCF_AAR_02 * @param p_monitorCompRef Reference to monitor component @@ -638,6 +807,68 @@ group g_PCSCF_AAR { } } // End of function f_mtc_check_TP_RX_PCSCF_AAR_02 + /** + * Starts monitor component behavior for TP_RX_PCSCF_ECO_AAR_02 + * @param p_monitorCompRef Reference to monitor component + * @param p_checkMessage indicate if the incomming message should only be checked (port.check) or consumed (port.receive). + * The check operation allows read access to the top element of incoming port queues without removing the top element from the queue. + *
      +     * Test objective  "Verify that IUT send AA-Request in case of emergency session establishment for originating side after INVITE is received."
      +     *
      +     * 
      +     * 
      +     * Config Id CF_VoLTE_INT_ES
      +     * 
      +     * Initial conditions with {
      +     *     the UE_A entity isNotAttachedTo the EPC_A and
      +     *     the UE_A entity not isEmergencyRegisteredTo the IMS_A
      +     * }
      +     * 
      +     * ensure that {
      +     *     when {
      +     *         the IMS_S_CSCF_A entity sends a 200_Response_REGISTER
      +     *         to the IMS_P_CSCF_A entity
      +     *     }
      +     *     then {
      +     *         the IMS_P_CSCF_A entity sends an AAR containing
      +     *             Framed_IPv4_Address_AVP 
      +     *                 indicating value "IPv4_Address of UE_A",
      +     *             "or" Framed_IPv6_Address_AVP 
      +     *                 indicating value "IPv6_Address of UE_A",
      +     *             Service_URN_AVP
      +     *                 indicating value "sos*";
      +     *         to the EPC_PCRF_A entity
      +     *     }
      +     * }  
      +     * 
      + * @see TS 103 795-1 clause 7.6 + */ + function f_mtc_check_TP_RX_PCSCF_ECO_AAR_02( + DiameterInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in boolean p_forward_to_mtc := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var template DIAMETER_MSG mw_diameter_msg_pass := { aAR_MSG := mw_AAR_ServiceUrn }; + var template DIAMETER_MSG mw_diameter_msg_fail := { aAR_MSG := mw_AAR_basic }; + p_monitorCompRef.start ( + f_Iot_Diameter_receive( + { + mw_diameter_msg_pass + }, + { + mw_diameter_msg_fail + }, + {0, omit}, + "TP_RX_PCSCF_ECO_AAR_02 - AAR", + p_forward_to_mtc, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_RX_PCSCF_ECO_AAR_02 + /** * Starts monitor component behavior for TP_RX_PCSCF_AAR_03 * @param p_monitorCompRef Reference to monitor component -- GitLab From c1e1378b5d0766d348f2b760bbc022bd9413fe2f Mon Sep 17 00:00:00 2001 From: barakatr Date: Tue, 24 Oct 2023 17:06:56 +0200 Subject: [PATCH 75/84] Add EmergencySessionEstablishmentRoaming --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 428 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 9178 +++++++++-------- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 17 + .../AtsImsIot_TestConfiguration.ttcn | 1 + ttcn/LibIot/LibIot_PIXITS.ttcn | 6 + 5 files changed, 5072 insertions(+), 4558 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index d220145..1510653 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -3487,7 +3487,433 @@ module AtsImsIot_Emergency { * @see ETSI TS 103 795-3 Clause 6.3 Emergency Session Establishment(Roaming) */ group EmergencySessionEstablishmentRoaming { - + + /** + * @see ETSI TS 103 795-3 Clause 6.3.1 Roaming UE calling PSAP with emergency registration + */ + group RoamingUECallingPSAPWithEmergencyRegistration { + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP roaming emergency session establishment within an emergency registration. + * PSAP is located in the IM CN subsystem of IMS A + * @see ETSI TS 103 795-2 Clause 6.3.1 Roaming UE calling PSAP with emergency registration + */ + testcase TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueB ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueB, v_userInfoB); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01(); + + // Test body + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1 + } + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22 + + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19 + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // ACK Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // ACK Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 + + f_mtc_userCheckCallEstablished(v_ueB); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 + + // Postamble + f_mtc_EndCall(v_ueB); + f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueB ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_INT_INI_01 + + group f_TD_VoLTE_ECO_RMI_INI_01 { + + function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_01 + + } // End of group f_TD_VoLTE_ECO_RMI_INI_01 + } // End of group RoamingUECallingPSAPWithEmergencyRegistration + + /** + * @see ETSI TS 103 795-3 Clause 6.3.2 Roaming UE calling PSAP with non-emergency registration + */ + group RoamingUECallingPSAPWithNonEmergencyRegistration { + + /** + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to roaming SIP emergency session establishment within non-emergency registration. + * PSAP is located in the IM CN subsystem of IMS A + * @see ETSI TS 103 795-2 Clause 6.3.2.1 Roaming UE calling PSAP in same network + */ + testcase TD_VoLTE_ECO_RMI_INI_02() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); //non-emergency registration + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueB ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueB, v_userInfoB); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_02(); + + // Test body + // Test body + if (not PX_ECALL) { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1 + } else { + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1 + } + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 22 + + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19 + f_mtc_userAnswerCall(v_psap); + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // ACK Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // ACK Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 + + f_mtc_userCheckCallEstablished(v_ueB); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 + + // Postamble + f_mtc_EndCall(v_ueB); + f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueB ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_RMI_INI_02 + + group f_TD_VoLTE_ECO_RMI_INI_02 { + + function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_02() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02 + + } // End of group f_TD_VoLTE_ECO_RMI_INI_02 + + + /** + * @desc To demonstrate the rejection of roaming UE emergency session establishment when the + * P-CFCF is in home operator's network within non-emergency registration. + * P-CFCF is located in the IM CN subsystem of IMS A + * @see ETSI TS 103 795-2 Clause 6.3.2.2 Roaming UE calling PSAP in home operator's network + */ + testcase TD_VoLTE_ECO_RMI_INI_03() runs on ImsTestCoordinator system IotSystemInterface { + + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); //non-emergency registration + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_VxLteMonitor_Up(); + + // Preamble + //registration is not needed + + //similar to TC_VxLTE_RMI_ATT_01 UE A has perform a network_attachment + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 2 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + // 380 (Alternative Service) + f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 4 + + //unmap/disconnect component ports + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } // End of TC TD_VoLTE_ECO_RMI_INI_02 + + group f_TD_VoLTE_ECO_RMI_INI_03 { + + function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_03() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_02 + + } // End of group f_TD_VoLTE_ECO_RMI_INI_03 + + + /** + * @desc To demonstrate the establishment of dedicated bearers for a roaming UE without any registration. + * PSAP is located in the IM CN subsystem of IMS A + * @see ETSI TS 103 795-2 Clause 6.3.2.3 Roaming UE calling PSAP with non-registration + */ + testcase TD_VoLTE_ECO_RMI_INI_04() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMB_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueB ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + //UE B non-registered + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_04(); + + // Test body + f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.gmB, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmB, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 18 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 22 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25 + + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueB); // Event 19 + f_mtc_userAnswerCall(v_psap); // Event 26 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmB, -, v_sip); // Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 + + f_mtc_userCheckCallEstablished(v_ueB); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 + + // Postamble + f_mtc_EndCall(v_ueB); + f_PO_user_home_deregistration(v_ueB); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueB ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + } + group f_TD_VoLTE_ECO_RMI_INI_04 { + + function f_mtc_check_precond_TD_VoLTE_ECO_RMI_INI_04() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_04 + + } // End of group f_TD_VoLTE_ECO_RMI_INI_02 + + + + + } // End of group RoamingUECallingPSAPWithNonEmergencyRegistration + } // End of group EmergencySessionEstablishmentRoaming } // End of group Roaming diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index f8d01ae..8f739e4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -6,4727 +6,4791 @@ module AtsImsIot_TP_behavior_GM { - // LibIms - import from LibIms_Templates all; - import from LibIms_UpperTester all; - // LibIot - import from LibIot_TypesAndValues all; - import from LibIot_Functions all; - import from LibIot_TestInterface all; - import from LibIot_PIXITS all; - // LibSip - import from LibSip_SIPTypesAndValues all; - import from LibSip_Templates all; - import from LibSip_Common all; - import from LibSip_SDPTypes all; - // LibMsrp - import from LibMsrp_TypesAndValues all; - import from LibMsrp_Functions all; - import from LibMsrp_Templates all; - // AtsImsIot - import from AtsImsIot_TestSystem all; - import from AtsImsIot_Templates all; - import from AtsImsIot_Templates_GM all; - import from AtsImsIot_TypesAndValues all; - import from AtsImsIot_Functions all; + // LibIms + import from LibIms_Templates all; + import from LibIms_UpperTester all; + // LibIot + import from LibIot_TypesAndValues all; + import from LibIot_Functions all; + import from LibIot_TestInterface all; + import from LibIot_PIXITS all; + // LibSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_Templates all; + import from LibSip_Common all; + import from LibSip_SDPTypes all; + // LibMsrp + import from LibMsrp_TypesAndValues all; + import from LibMsrp_Functions all; + import from LibMsrp_Templates all; + // AtsImsIot + import from AtsImsIot_TestSystem all; + import from AtsImsIot_Templates all; + import from AtsImsIot_Templates_GM all; + import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_Functions all; - group imsMessages { + group imsMessages { - /** - * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a MESSAGE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * ContentLength indicating value greater than 1300 bytes - * ; - * to the IMS_P_CSCF_A entity - * } - * then { - * the IMS_P_CSCF_A entity receives the MESSAGE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * ContentLength indicating value greater than 1300 bytes - * ; - * from the UE_A entity - * and the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * PChargingVector containing - * orig_ioi indicating value PX_OPERATOR_ID_A, - * term_ioi indicating value PX_OPERATOR_ID_B, - * not PAccessNetworkInfo - * ;; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_MESSAGE_01( - SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := true - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mdw_MESSAGE_1500c) - }, // FIXME CallId and more can be checked - { mw_SipRequest(mw_MESSAGE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_MESSAGE_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK_Base) - }, // FIXME CallId and more can be checked - { }, - {0, omit}, - "TP_GM_PCSCF_MESSAGE_01 - Response", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_MESSAGE_01 + /** + * @desc Verify that the P-CSCF successfully processes a SIP messages greater than 1300 bytes + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * to the IMS_P_CSCF_A entity + * } + * then { + * the IMS_P_CSCF_A entity receives the MESSAGE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * ContentLength indicating value greater than 1300 bytes + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * PChargingVector containing + * orig_ioi indicating value PX_OPERATOR_ID_A, + * term_ioi indicating value PX_OPERATOR_ID_B, + * not PAccessNetworkInfo + * ;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_MESSAGE_01( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mdw_MESSAGE_1500c) + }, // FIXME CallId and more can be checked + { mw_SipRequest(mw_MESSAGE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK_Base) + }, // FIXME CallId and more can be checked + { }, + {0, omit}, + "TP_GM_PCSCF_MESSAGE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_MESSAGE_01 - } // End of group imsMessages + } // End of group imsMessages - // 5.2 IMS Registration - group imsRegistration { + // 5.2 IMS Registration + group imsRegistration { - /** - * @desc Verify that the P-CSCF successfully processes a first registration (Successful) - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isTriggeredToStart - * } - * then { - * the UE_A entity sends a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "", - * not term_ioi, - * not SecurityClient - * ;; - * to the IMS_P_CSCF_A entity - * and the UE_A entity receives an 401_Unauthorized containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Path, - * Warning, - * PAccessNetworkInfo, - * WwwAuthenticate containing - * Digest, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth" - * ;; - * from the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_REGISTER_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the UE_A entity sends a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient + * ;; + * to the IMS_P_CSCF_A entity + * and the UE_A entity receives an 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth" + * ;; + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_01( // FIXME Add CallId... - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_01 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 401 Unauthorized response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) - }, - { - mw_SipResponse(mw_401Unauthorized_Base), - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_01 - /** - * @desc Verify that the P-CSCF successfully processes a first registration (Successful) - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity not isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Path, - * Warning, - * WwwAuthenticate containing - * Digest,, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "", - * not term_ioi, - * not SecurityClient, - * Contact indicating value "sos";; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Path, - * Warning, - * PAccessNetworkInfo, - * WwwAuthenticate containing - * Digest, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth";; - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * WwwAuthenticate containing + * Digest,, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "", + * not term_ioi, + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 401_Unauthorized containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Path, + * Warning, + * PAccessNetworkInfo, + * WwwAuthenticate containing + * Digest, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth";; + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, - -, -, - mw_contact(mw_ContactAddress) - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_01 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 401 Unauthorized response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) - }, - { - mw_SipResponse(mw_401Unauthorized_Base), - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_ECO_REGISTER_01 - 401 Unauthorized", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_01( // FIXME Add CallId... + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_01 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 401 Unauthorized response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_01 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_01 - /** - * @desc Verify that the P-CSCF successfully processes a first registration (Successful) - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth", - * not SecurityClient - * ;; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * AuthenticationInfo, - * PAccessNetworkInfo, - * PAssociatedURI indicating value PX_UE_A_SIP_URI, - * PChargingVector, - * orig_ioi_parameter - * indicating value "Operator Identifier Of ImsA" , - * term_ioi_parameter - * indicating value "Operator Identifier Of ImsB" - * Path, - * ServiceRoute - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_REGISTER_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a first registration (Successful) + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_02 - Second request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_02 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_02 - /** - * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_A entity hasAchievedFirstRegistration - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "not empty", - * qop indicating value "auth", - * not SecurityClient, - * Contact indicating value "sos";; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends an 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * AuthenticationInfo, - * PAccessNetworkInfo, - * PAssociatedURI indicating value PX_UE_A_SIP_URI, - * PChargingVector, - * orig_ioi_parameter - * indicating value "Operator Identifier Of ImsA" , - * term_ioi_parameter - * indicating value "Operator Identifier Of ImsB" - * Path, - * ServiceRoute; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a full emergency registration (Successful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_A entity hasAchievedFirstRegistration + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "not empty", + * qop indicating value "auth", + * not SecurityClient, + * Contact indicating value "sos";; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends an 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * AuthenticationInfo, + * PAccessNetworkInfo, + * PAssociatedURI indicating value PX_UE_A_SIP_URI, + * PChargingVector, + * orig_ioi_parameter + * indicating value "Operator Identifier Of ImsA" , + * term_ioi_parameter + * indicating value "Operator Identifier Of ImsB" + * Path, + * ServiceRoute; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_ECO_REGISTER_02( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, - -, -, - mw_contact(mw_ContactAddress) - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_ECO_REGISTER_02 - Second request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_02 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_02( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_02 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_02 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_02 - /** - * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isNotRegisteredTo the IMS_A and - * the UE_B entity isNotRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isTriggeredToStart - * } - * then { - * the IMS_P_CSCF_A entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization containing - * Authentication_Schema indicating value PX_TO_BE_DEFINED, - * Authentication_URI indicating value PX_TO_BE_DEFINED, - * Username indicating value PX_UE_A_INVALID_USERNAME, - * Realm indicating value PX_UE_A_REALM, - * Algorithm indicating value PX_UE_A_AUTH_ALG, - * Nonce indicating value "" - * ;; - * from the UE_A entity - * and the IMS_P_CSCF_A entity sends an 404_NotFound containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_REGISTER_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes an invalid first registration (Unsuccessful). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isNotRegisteredTo the IMS_A and + * the UE_B entity isNotRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization containing + * Authentication_Schema indicating value PX_TO_BE_DEFINED, + * Authentication_URI indicating value PX_TO_BE_DEFINED, + * Username indicating value PX_UE_A_INVALID_USERNAME, + * Realm indicating value PX_UE_A_REALM, + * Algorithm indicating value PX_UE_A_AUTH_ALG, + * Nonce indicating value "" + * ;; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 404_NotFound containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); // User removed from HSS + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_03( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_03 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - log("v_sip", v_sip); - // Check REGISTER 404 Not Found response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) - }, - { - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_404NotFound(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_03 - /** - * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity not isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isTriggeredToStart - * } - * then { - * the IMS_P_CSCF_A entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization indicating value "Invalid credentials", - * Contact indicating value "sos"; - * from the UE_A entity - * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - Via indicating value PX_UE_A_VIA; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS - var SipMessage v_sip; + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case invalid credentials sent from UE. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToStart + * } + * then { + * the IMS_P_CSCF_A entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value "Invalid credentials", + * Contact indicating value "sos"; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); // User removed from HSS + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_ECO_REGISTER_03( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other, // FIXME indicating value "Invalid credentials" - -, -, - mw_contact(mw_ContactAddress) - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_ECO_REGISTER_03 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - log("v_sip", v_sip); - // Check REGISTER 404 Not Found response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) - }, - { - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_03( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other, // FIXME indicating value "Invalid credentials" + -, -, + mw_contact(mw_ContactAddress) + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_03 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + log("v_sip", v_sip); + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq/*, mw_WwwAuthenticate*/)) + }, + { + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_03 - 404 Not Found", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_03 - function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var SipMessage v_sip; + function f_mtc_check_TP_GM_PCSCF_REGISTER_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_04( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_04 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } - // Check REGISTER 404 Not Found response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) - }, - { - mw_SipResponse(mw_401Unauthorized_Base), - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_401Unauthorized(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_04 - /** - * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_B and - * the UE_A entity not isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_B entity receives a REGISTER containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Authorization indicating value GPRS_IMS_Bundled_authentication, - * Contact indicating value "sos"; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_B entity sends an 403_Forbiden containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * MessageBody containing - * XML containing - * ims_3gpp_element indicating value anonymous_emergencycall;;; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var SipMessage v_sip; + /** + * @desc Verify that the emergency registration is rejected with 403 (Forbidden) in case the UE and P-CSCF does not support GPRS-IMS-Bundled authentication. (Unsuccessful emergency registration). + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_B and + * the UE_A entity not isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives a REGISTER containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Authorization indicating value GPRS_IMS_Bundled_authentication, + * Contact indicating value "sos"; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_B entity sends an 403_Forbiden containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * MessageBody containing + * XML containing + * ims_3gpp_element indicating value anonymous_emergencycall;;; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_ECO_REGISTER_04( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other // FIXME not indicating value GPRS_IMS_Bundled_authenticatio - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_ECO_REGISTER_04 - First request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_04( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other // FIXME not indicating value GPRS_IMS_Bundled_authenticatio + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_04 - First request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } - // Check REGISTER 404 Not Found response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) - }, - { - mw_SipResponse(mw_401Unauthorized_Base), - mw_SipResponse(mw_Response_4xx_Base( - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.cSeq - )) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04 + // Check REGISTER 404 Not Found response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_403Forbidden(v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_401Unauthorized_Base), + mw_SipResponse(mw_Response_4xx_Base( + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.cSeq + )) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_04 - 401 Unauthorized", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04 - function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var SipMessage v_sip; + function f_mtc_check_TP_GM_PCSCF_REGISTER_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_05( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_05 - Second request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_05 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_05 - function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var SipMessage v_sip; + function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var SipMessage v_sip; - // Check the first REGISTER - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_ECO_REGISTER_05( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_ECO_REGISTER_05 - Second request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_420BadExtension( - v_sip.request.msgHeader.cSeq, - mw_WwwAuthenticate, - mw_MBody_MIME_Ims3gpp( - *, - ? // FIXME XML message body - ) - )), - mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_05 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05 + // Check the first REGISTER + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_ECO_REGISTER_05( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_ECO_REGISTER_05 - Second request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_420BadExtension( + v_sip.request.msgHeader.cSeq, + mw_WwwAuthenticate, + mw_MBody_MIME_Ims3gpp( + *, + ? // FIXME XML message body + ) + )), + mw_SipResponse(mw_480TemporaryUnavailable(-, v_sip.request.msgHeader.cSeq, mw_WwwAuthenticate)) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_05 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05 - } // End of group imsRegistration + } // End of group imsRegistration - group imsDeRegistration { + group imsDeRegistration { - /** - * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isTriggeredToDetachUser - * } - * then { - * the UE_A entity sends a REGISTER containing - * Expire indicating value 0 - * ; - * to the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_REGISTER_07( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_07( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var SipMessage v_sip; - // Check first DeREGISTER request - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_REGISTER_07( - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_Authorization_other/*(mw_credentialIntegrityYes)*/ - ) - ) - }, - { - mw_SipRequest(mw_REGISTER_Request_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_07 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check DeREGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_REGISTER_07 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_07 + // Check first DeREGISTER request + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_REGISTER_07( + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_Authorization_other/*(mw_credentialIntegrityYes)*/ + ) + ) + }, + { + mw_SipRequest(mw_REGISTER_Request_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check DeREGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_REGISTER_07 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_07 - /** - * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isTriggeredToDetachUser - * } - * then { - * the UE_A entity sends a REGISTER containing - * Expire indicating value 0 - * ; - * to the IMS_P_CSCF_A entity and - * the UE_A entity receives a BYE - * from the IMS_P_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_REGISTER_10( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := true - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_REGISTER_Request_Base) - //AXR mw_SipRequest(mw_BYE_Base), - }, - {}, - {0, omit}, - "TP_GM_PCSCF_REGISTER_10", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - }} // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_10 + /** + * @desc Verify that the P-CSCF successfully processes a user de-registration (no SIP session active). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isTriggeredToDetachUser + * } + * then { + * the UE_A entity sends a REGISTER containing + * Expire indicating value 0 + * ; + * to the IMS_P_CSCF_A entity and + * the UE_A entity receives a BYE + * from the IMS_P_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_REGISTER_10( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := true + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_REGISTER_Request_Base) + //AXR mw_SipRequest(mw_BYE_Base), + }, + {}, + {0, omit}, + "TP_GM_PCSCF_REGISTER_10", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + }} // End of function f_mtc_check_TP_GM_PCSCF_REGISTER_10 - } // End of group imsDeRegistration + } // End of group imsDeRegistration - group imsSubscribe { + group imsSubscribe { - /** - * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a SUBSCRIBE - * } - * then { - * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * and the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a SUBSCRIBE. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a SUBSCRIBE + * } + * then { + * the IMS_P_CSCF_A entity receives an SUBSCRIBE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * and the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; - // Check the SUBSCRIBE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_SUBSCRIBE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) - )) - }, - { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_SUBSCRIBE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_MW_PCSCF_SUBSCRIBE_01 - Response", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01 + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_SUBSCRIBE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_01 - function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ -// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); -// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - var SipMessage v_sip; + function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ +// var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); +// var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; - // Check the SUBSCRIBE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest( - mw_TP_GM_PCSCF_SUBSCRIBE_02( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) -// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), -// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) - }, - {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, - {0, omit}, - "TP_GM_PCSCF_SUBSCRIBE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_MW_PCSCF_SUBSCRIBE_02 - Response", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02 + // Check the SUBSCRIBE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest( + mw_TP_GM_PCSCF_SUBSCRIBE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) +// mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), +// mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + {mw_SipRequest(mw_SUBSCRIBE_Request_Base)}, + {0, omit}, + "TP_GM_PCSCF_SUBSCRIBE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_MW_PCSCF_SUBSCRIBE_02 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_SUBSCRIBE_02 - } // End of group imsSubscribe + } // End of group imsSubscribe - group imsNotify { + group imsNotify { - /** - * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY - * } - * then { - * the IMS_P_CSCF_A entity sends an NOTIFY containing - * Event indicating value "reg,de-reg" - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_NOTIFY_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - var SipMessage v_sip; + /** + * @desc Verify that the P-CSCF successfully processes a NOTIFY in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a NOTIFY + * } + * then { + * the IMS_P_CSCF_A entity sends an NOTIFY containing + * Event indicating value "reg,de-reg" + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NOTIFY_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + var SipMessage v_sip; - // Check the NOTIFY - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_NOTIFY_01( - -, - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) - )) - }, - { mw_SipRequest(mw_NOTIFY_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_NOTIFY_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_NOTIFY_01 - Response", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_NOTIFY_01 + // Check the NOTIFY + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NOTIFY_01( + -, + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_NOTIFY_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_NOTIFY_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_NOTIFY_01 - } // End of group imsNotify + } // End of group imsNotify - group imsPrack { + group imsPrack { - /** - * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_S_CSCF_A entity isRequestedToSend a PRACK - * } - * then { - * the IMS_P_CSCF_A entity sends an PRACK - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_PRACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ + /** + * @desc Verify that the P-CSCF successfully processes a PRACK in case of IMS Administrative de-registration. + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_S_CSCF_A entity isRequestedToSend a PRACK + * } + * then { + * the IMS_P_CSCF_A entity sends an PRACK + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_PRACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ - var SipMessage v_sip; + var SipMessage v_sip; - // Check the PRACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_PRACK_01( - -, - -, // FIXME Set expected value - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_PRACK_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_PRACK_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); - if (not(isbound(v_sip))) { - return; - } - // Check REGISTER 200 OK response - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_200OK( - v_sip.request.msgHeader.cSeq, - v_sip.request.msgHeader.callId, - v_sip.request.msgHeader.fromField, - v_sip.request.msgHeader.toField - )) - }, - { - mw_SipResponse(mw_Response_2xx_Base) - }, - {0, omit}, - "TP_GM_PCSCF_PRACK_01 - Response", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_PRACK_01 + // Check the PRACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_PRACK_01( + -, + -, // FIXME Set expected value + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_PRACK_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, v_sip); + if (not(isbound(v_sip))) { + return; + } + // Check REGISTER 200 OK response + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_200OK( + v_sip.request.msgHeader.cSeq, + v_sip.request.msgHeader.callId, + v_sip.request.msgHeader.fromField, + v_sip.request.msgHeader.toField + )) + }, + { + mw_SipResponse(mw_Response_2xx_Base) + }, + {0, omit}, + "TP_GM_PCSCF_PRACK_01 - Response", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_PRACK_01 - } // End of group imsPrack + } // End of group imsPrack - group imsInvite { + group imsInvite { - /** - * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend an INVITE - * } - * then { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId - mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_INVITE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### GM p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId + mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_01 - /** - * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. - * Reference - * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity not isRegisteredTo the IMS_A and - * the UE_A entity not isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToEstablishEmergencyCall - * } - * then { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value "Anonymous", - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * MessageBody; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity not isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value "Anonymous", + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, // see 5.1.6.8.2 7) + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getTelUserId(PX_PSAP); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), - mw_To_AddrUnion_TelUrl(v_psap.publicId) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_ECO_INVITE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - log("##### GM p_sip: ", p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), + mw_To_AddrUnion_TelUrl(v_psap.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + log("##### GM p_sip: ", p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01 - /** - * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend an INVITE - * } - * then { - * the IMS_P_CSCF_B entity sends an INVITE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * to the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + /** + * @desc Verify that the P-CSCF successfully processes an initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend an INVITE + * } + * then { + * the IMS_P_CSCF_B entity sends an INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_INVITE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_02 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(-)//v_userInfoA.publicId + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_02 - /** - * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." - * Reference - * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToEstablishEmergencyCall - * } - * then { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PPreferredIdentity, // one or two instances - * // TODO Geolocation header maybe added later, check! - * MessageBody; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_PSAP); + /** + * @desc "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * // TODO Geolocation header maybe added later, check! + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_PSAP); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( - -, // FIXME Set expected value - ( - mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), - mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) - ), - ( - mw_To_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId/*, v_userInfoA.domain*/), - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) - ) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_ECO_INVITE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( + -, // FIXME Set expected value + ( + mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) + ), + ( + mw_To_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId/*, v_userInfoA.domain*/), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + ) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_02 - function f_mtc_check_TP_GM_PCSCF_INVITE_03( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + function f_mtc_check_TP_GM_PCSCF_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_INVITE_03 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_03 - /** - * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. - * Reference - * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" - * Config Id CF_VxLTE_INT - * PICS Selection NONE - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_A entity not isEmergencyRegisteredTo the IMS_A - * } - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToEstablishEmergencyCall - * } - * then { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PPreferredIdentity, // one or two instances - * MessageBody; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_ECO_INVITE_03 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_03 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_03 - /** - * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. - * Reference - * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" - * Config Id CF_VxLTE_INT + /** + * @desc Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + * Config Id CF_VoLTE_RMI_ES * PICS Selection NONE * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } + * the UE_A entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * // This implies that the UE is currently attached and registered + * to its home operator's network and the IP-CAN does not define emergency bearers + * see 5.1.6.1 3rd paragraph // + * } * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToEstablishEmergencyCall - * } - * then { - * the IMS_P_CSCF_A entity receives an INVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PPreferredIdentity, // one or two instances - * MessageBody; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_04( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); - var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_P_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), - -, -, - mw_PPreferredID, - mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), - mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_INVITE_04 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_05( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_05 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_05 - function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - out SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_INVITE_04 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_INVITE_04 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 - /** - * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a ReINVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a ReINVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * to the IMS_S_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - // Check the RE-INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_01( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), - mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_RE_INVITE_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function TP_GM_PCSCF_RE_INVITE_01 + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_01 - /** - * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_B entity previouslyEstablishedCallWith the UE_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_B entity receives an ReINVITE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * from the IMS_S_CSCF_B entity - * } - * then { - * the IMS_P_CSCF_B entity sends an ReINVITE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * PAccessNetworkInfo, - * MessageBody containing - * SDP containing - * Version indicating value "0" - * ; - * ;; - * to the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); + /** + * @desc Verify that the P-CSCF successfully processes an initial RE-INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_B entity previouslyEstablishedCallWith the UE_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_B entity receives an ReINVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * from the IMS_S_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity sends an ReINVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * PAccessNetworkInfo, + * MessageBody containing + * SDP containing + * Version indicating value "0" + * ; + * ;; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_02( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getTelUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getTelUserId(PX_EUT_B); - // Check the RE-INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_02( - -, // FIXME Set expected value - mw_From_AddrUnion_TelUrl(v_userInfoB.publicId), - mw_To_AddrUnion_TelUrl(v_userInfoA.publicId) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_RE_INVITE_02 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function TP_GM_PCSCF_RE_INVITE_02 + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_02( + -, // FIXME Set expected value + mw_From_AddrUnion_TelUrl(v_userInfoB.publicId), + mw_To_AddrUnion_TelUrl(v_userInfoA.publicId) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_02 - function f_mtc_check_TP_GM_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_03( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the RE-INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_03( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_RE_INVITE_03 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function TP_GM_PCSCF_RE_INVITE_03 + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_03( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_03 - function f_mtc_check_TP_GM_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); - var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); + function f_mtc_check_TP_GM_PCSCF_RE_INVITE_04( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - // Check the RE-INVITE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_04( - -, // FIXME Set expected value - mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) - )) - }, - { mw_SipRequest(mw_INVITE_Request_Base) }, - {0, omit}, - "TP_GM_PCSCF_RE_INVITE_04 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function TP_GM_PCSCF_RE_INVITE_04 + // Check the RE-INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_04( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_RE_INVITE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function TP_GM_PCSCF_RE_INVITE_04 - } // End of group imsInvite + } // End of group imsInvite - group ims100Trying { + group ims100Trying { - /** - * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 100_Trying - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity forwards the 100_Trying - * to the IMS_S_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_GM_PCSCF_100Trying_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 100_Trying + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity forwards the 100_Trying + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_01 - function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ECO_100Trying_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01 + function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_100Trying_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01 - /** - * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity sends a 100_Trying containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * to the IMS_P_CSCF_B entity - * } - * then { - * the IMS_P_CSCF_B entity receives a 100_Trying containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_100Trying_02( - SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_02( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_GM_PCSCF_100Trying_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_02 + /** + * @desc Verify that the P-CSCF successfully processes a 100 (Trying) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_B entity receives a 100_Trying containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_100Trying_02( + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_02 - function f_mtc_check_TP_GM_PCSCF_100Trying_03( // FIXME RMI To be reviewed - SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_03( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_GM_PCSCF_100Trying_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_03 + function f_mtc_check_TP_GM_PCSCF_100Trying_03( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_03 - function f_mtc_check_TP_GM_PCSCF_100Trying_04( // FIXME RMI To be reviewed - SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 100 TRYING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_04( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_100Trying_Base) }, - { 0, omit }, - "TP_GM_PCSCF_100Trying_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_04 + function f_mtc_check_TP_GM_PCSCF_100Trying_04( // FIXME RMI To be reviewed + SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 100 TRYING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_100Trying_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_100Trying_Base) }, + { 0, omit }, + "TP_GM_PCSCF_100Trying_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_100Trying_04 - } // End of group ims100Trying + } // End of group ims100Trying - group ims180Ringing { + group ims180Ringing { - /** - * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity hasAchieveInitialINVITE - * } - * then { - * the IMS_P_CSCF_A entity receives a 180_Ringing containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_180RINGING_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_GM_PCSCF_180RINGING_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_01 + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 180_Ringing containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_01 - /** - * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity sends a 180_Ringing containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_P_CSCF_B entity - * - * } - * then { - * the IMS_P_CSCF_B entity receives a 180_Ringing containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_180RINGING_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_02( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_GM_PCSCF_180RINGING_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_02 + /** + * @desc Verify that the P-CSCF successfully processes a 180 (Ringing) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 180_Ringing containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_180RINGING_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_02 - function f_mtc_check_TP_GM_PCSCF_180RINGING_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_03( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_GM_PCSCF_180RINGING_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_03 + function f_mtc_check_TP_GM_PCSCF_180RINGING_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_03 - function f_mtc_check_TP_GM_PCSCF_180RINGING_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 180 RINGING - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_04( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_180Ringing_Base) }, - { 0, omit }, - "TP_GM_PCSCF_180RINGING_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_04 + function f_mtc_check_TP_GM_PCSCF_180RINGING_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_180Ringing_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_GM_PCSCF_180RINGING_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_180RINGING_04 - } // End of group ims180Ringing + } // End of group ims180Ringing - group ims183SessionProgress { + group ims183SessionProgress { - /** - * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity hasAchieveInitialINVITE - * } - * then { - * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_01( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_GM_PCSCF_183SESSION_PROGRESS_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01 + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives a 183_SessionProgress containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01 - /** - * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity sends a 183_SessionProgress containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_P_CSCF_B entity - * - * } - * then { - * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_02( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_GM_PCSCF_183SESSION_PROGRESS_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02 + /** + * @desc Verify that the P-CSCF successfully processes a 183 (SessionProgress) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_P_CSCF_B entity + * + * } + * then { + * the IMS_P_CSCF_B entity receives a 183_SessionProgress containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_02( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_02 - function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_03( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_GM_PCSCF_183SESSION_PROGRESS_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_03( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_03 - function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 183 SESSION_PROGRESS - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_04( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_183SessionProgress_Base) }, - { 0, omit }, - "TP_GM_PCSCF_183SESSION_PROGRESS_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04 + function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_GM_PCSCF_183SessionProgress_04( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_GM_PCSCF_183SESSION_PROGRESS_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_04 - } // End of group ims183SessionProgress + } // End of group ims183SessionProgress - group ims200Ok { + group ims200Ok { - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity hasAchieveInitialINVITE - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), - p_sip.request.msgHeader.toField - ) - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_01 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE; - * from the IMS_E_CSCF entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - ( - mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), - mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), - p_sip.request.msgHeader.toField - ) - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01 + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_01 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the IMS_P_CSCF_B entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (Ok) provisional response on initial INVITE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the IMS_P_CSCF_B entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_02 - function f_mtc_check_TP_GM_PCSCF_200OK_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_03 + function f_mtc_check_TP_GM_PCSCF_200OK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_03 - function f_mtc_check_TP_GM_PCSCF_200OK_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_04 + function f_mtc_check_TP_GM_PCSCF_200OK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_04 - } // End of group ims200Ok + } // End of group ims200Ok - group imsAck { + group imsAck { - /** - * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity hasAchieveInitialINVITE - * } - * then { - * the IMS_P_CSCF_A entity receives an ACK containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ACK_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity hasAchieveInitialINVITE + * } + * then { + * the IMS_P_CSCF_A entity receives an ACK containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_01 - function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ACK_01 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01 + function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_ACK_01 - /** - * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity hasAchieveInitialINVITE - * } - * then { - * the UE_B entity receives an ACK containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the IMS_P_CSCF_B entity - * } - */ - function f_mtc_check_TP_GM_PCSCF_ACK_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ACK_02( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ACK_02 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ACK_02 + /** + * @desc Verify that the P-CSCF successfully processes a ACK provisional response on initial INVITE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity hasAchieveInitialINVITE + * } + * then { + * the UE_B entity receives an ACK containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the IMS_P_CSCF_B entity + * } + */ + function f_mtc_check_TP_GM_PCSCF_ACK_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_02 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_02 - function f_mtc_check_TP_GM_PCSCF_ACK_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ACK_03( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ACK_03 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ACK_03 + function f_mtc_check_TP_GM_PCSCF_ACK_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_03 - function f_mtc_check_TP_GM_PCSCF_ACK_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the ACK - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_ACK_04( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ACK_04 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ACK_04 + function f_mtc_check_TP_GM_PCSCF_ACK_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_ACK_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ACK_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ACK_04 - } // End of group imsAck + } // End of group imsAck - group imsBye { + group imsBye { - /** - * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a BYE - * } - * then { - * the IMS_P_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_01 - /** - * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A and - * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a BYE - * } - * then { - * the IMS_P_CSCF_A entity receives a BYE containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_01 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a BYE for an emergency call. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity receives a BYE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_01( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_01 - /** - * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity isRequestedToSend a BYE - * } - * then { - * the IMS_P_CSCF_B entity receives a BYE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity receives a BYE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_02 - function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - { - fieldName := FROM_E, - addressField := p_sip.request.msgHeader.toField.addressField, - fromParams := * - }, //p_sip.request.msgHeader.fromField, - { - fieldName := TO_E, - addressField := p_sip.request.msgHeader.fromField.addressField, - toParams := * - } //p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ECO_BYE_02 - Request", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02 + function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_02( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + { + fieldName := FROM_E, + addressField := p_sip.request.msgHeader.toField.addressField, + fromParams := * + }, //p_sip.request.msgHeader.fromField, + { + fieldName := TO_E, + addressField := p_sip.request.msgHeader.fromField.addressField, + toParams := * + } //p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_BYE_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_BYE_02 - /** - * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and - * the UE_A entity previouslyEstablishedCallWith the UE_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isNoLongerAvailable - * } - * then { - * the IMS_P_CSCF_A entity sends a BYE containing - * From indicating value PX_S_CSCF_A_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_BYE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_03( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_03 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_03 + /** + * @desc Verify that the P-CSCF successfully processes a BYE (Network initiated). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and + * the UE_A entity previouslyEstablishedCallWith the UE_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isNoLongerAvailable + * } + * then { + * the IMS_P_CSCF_A entity sends a BYE containing + * From indicating value PX_S_CSCF_A_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_03( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_03 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_03 - function f_mtc_check_TP_GM_PCSCF_BYE_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_04( - p_sip.request.msgHeader.callId, - -, // New CSeq - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_BYE_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_04 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_04 + function f_mtc_check_TP_GM_PCSCF_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_04( + p_sip.request.msgHeader.callId, + -, // New CSeq + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_BYE_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_04 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_04 - function f_mtc_check_TP_GM_PCSCF_BYE_05( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_05( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_05 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_05 + function f_mtc_check_TP_GM_PCSCF_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_05( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_05 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_05 - function f_mtc_check_TP_GM_PCSCF_BYE_06( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_BYE_06( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_ACK_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_BYE_06 - Request", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_BYE_06 + function f_mtc_check_TP_GM_PCSCF_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_BYE_06( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_BYE_06 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_BYE_06 - } // End of group imsBye + } // End of group imsBye - group ims200OkBye { + group ims200OkBye { - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a BYE - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_S_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_01 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE; - * from the IMS_E_CSCF entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_S_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_ECO_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ECO_200OK_BYE_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Originating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE; + * from the IMS_E_CSCF entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_01 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity isRequestedToSend a BYE - * } - * then { - * the IMS_P_CSCF_B entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a BYE + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_02 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A - * } - * - * Expected behaviour - * ensure that { - * when { - * the IMS_P_CSCF_A entity receives a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity; - * from the UE_A entity - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE; - * to the IMS_E_CSCF entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_ECO_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_ECO_200OK_BYE_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) BYE (Terminating Leg) + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A + * } + * + * Expected behaviour + * ensure that { + * when { + * the IMS_P_CSCF_A entity receives a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity; + * from the UE_A entity + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * to the IMS_E_CSCF entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_ECO_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_ECO_200OK_BYE_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_200OK_BYE_02 - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_03 - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_04 - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_05", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_05", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_05 - function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK BYE - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_BYE_06", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06 + function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK BYE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_BYE_06", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_BYE_06 - } // End of group ims200OkBye + } // End of group ims200OkBye - group imsCancel { + group imsCancel { - /** - * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_A entity hasAchieveInitialINVITE - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_A entity receives a CANCEL containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_CANCEL_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_01 - /** - * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. - * Initial conditions with { - * the UE_A entity isEmergencyAttachedTo the EPC_A and - * the UE_A entity isEmergencyRegisteredTo the IMS_A and - * the UE_A entity hasAchievedInitialEmergencyINVITE - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_A entity receives a CANCEL containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE; - * from the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_EMC_CANCEL_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL during Emergency Call establishment. + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity hasAchievedInitialEmergencyINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity receives a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_EMC_CANCEL_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_EMC_CANCEL_01 - /** - * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_A entity hasAchieveInitialINVITE - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_B entity sends a CANCEL containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE - * ; - * to the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_CANCEL_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_02( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_CANCEL_02", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_02 + /** + * @desc Verify that the P-CSCF successfully processes a CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a CANCEL containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE + * ; + * to the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_02( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_02 - function f_mtc_check_TP_GM_PCSCF_CANCEL_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_03( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_CANCEL_03", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_03 + function f_mtc_check_TP_GM_PCSCF_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_03( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_03 - function f_mtc_check_TP_GM_PCSCF_CANCEL_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_04( - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.cSeq, - -, // FIXME To be set - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipRequest(mw_CANCEL_Request_Base) }, - { 0, omit }, - "TP_GM_PCSCF_CANCEL_04", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_04 + function f_mtc_check_TP_GM_PCSCF_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_GM_PCSCF_CANCEL_04( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_CANCEL_Request_Base) }, + { 0, omit }, + "TP_GM_PCSCF_CANCEL_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_CANCEL_04 - } // End of group imsCancel + } // End of group imsCancel - group ims200OkCancel { + group ims200OkCancel { - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_A entity sends a 200_Ok containing - * From indicating value PX_UE_A_SIP_URI, - * To indicating value PX_UE_B_SIP_URI, - * CallId indicating value PX_UE_A_CALLID, - * Via indicating value PX_UE_A_VIA, - * Route indicating value PX_UE_A_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * to the IMS_S_CSCF_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_CANCEL_01", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 200_Ok containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_UE_B_SIP_URI, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * to the IMS_S_CSCF_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_01 - /** - * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_B entity sends a 200_Ok containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE, - * not PChargingVector, - * not PChargingFunctionAddresses, - * not PPreferredIdentity - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_CANCEL_02", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02 + /** + * @desc Verify that the P-CSCF successfully processes a 200 (OK) CANCEL (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity sends a 200_Ok containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE, + * not PChargingVector, + * not PChargingFunctionAddresses, + * not PPreferredIdentity + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_02", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_02 - function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_CANCEL_03", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03 + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_03", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_03 - function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - in SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 200 OK CANCEL - p_monitorCompRef.start( - f_Iot_Sip_receive( - { mw_SipResponse(mw_200OK( - p_sip.request.msgHeader.cSeq, - p_sip.request.msgHeader.callId, - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - )) - }, - { mw_SipResponse(mw_200OK_Base) }, - { 0, omit }, - "TP_GM_PCSCF_200OK_CANCEL_04", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - } - } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04 + function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 200 OK CANCEL + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_GM_PCSCF_200OK_CANCEL_04", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_GM_PCSCF_200OK_CANCEL_04 - } // End of group ims200OkCancel + } // End of group ims200OkCancel - group imsBusy { + group imsBusy { - /** - * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_B entity isBusy - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity isRequestedToSend a 486_INVITE - * } - * then { - * the IMS_P_CSCF_A entity sends a 486_INVITE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_486INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 486 Busy - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - ( - mw_SipResponse( - mw_486Busy( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ), - mw_SipResponse( - mw_600BusyEverywhere( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_486INVITE_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_A entity sends a 486_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_01 - /** - * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_B entity isBusy - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_B entity isRequestedToSend a 486_INVITE - * } - * then { - * the IMS_P_CSCF_B entity receives a CANCEL containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_486INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 486 Busy - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - ( - mw_SipResponse( - mw_486Busy( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ), - mw_SipResponse( - mw_600BusyEverywhere( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_486INVITE_02", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 486 INVITE (busy) to reject call (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_B entity isBusy + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_B entity isRequestedToSend a 486_INVITE + * } + * then { + * the IMS_P_CSCF_B entity receives a CANCEL containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_486INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + ( + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ), + mw_SipResponse( + mw_600BusyEverywhere( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_02 - function f_mtc_check_TP_GM_PCSCF_486INVITE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 486 Busy - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_486Busy( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_486INVITE_03", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_03 + function f_mtc_check_TP_GM_PCSCF_486INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_03 - function f_mtc_check_TP_GM_PCSCF_486INVITE_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 486 Busy - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_486Busy( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_486INVITE_04", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_04 + function f_mtc_check_TP_GM_PCSCF_486INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 486 Busy + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_486Busy( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_486INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_486INVITE_04 - } // End of group imsBusy + } // End of group imsBusy - group imsRequestTermination { + group imsRequestTermination { - /** - * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_A entity hasAchieveInitialINVITE - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_A entity sends a 487_INVITE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * to the UE_A entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_487INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_487INVITE_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Originating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_A entity sends a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * to the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_01 - function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField, - omit - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_487INVITE_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01 + function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField, + omit + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_487INVITE_01 - /** - * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). - * Initial conditions with { - * the UE_A entity isAttachedTo the EPC_A and - * the UE_B entity isAttachedTo the EPC_B and - * the UE_A entity isRegisteredTo the IMS_A and - * the UE_B entity isRegisteredTo the IMS_B and and - * the UE_A entity hasAchieveInitialINVITE - * } - * - * Expected behaviour - * ensure that { - * when { - * the UE_A entity isRequestedToSend a CANCEL - * } - * then { - * the IMS_P_CSCF_B entity receives a 487_INVITE containing - * From indicating value PX_UE_B_SIP_URI, - * To indicating value PX_UE_A_SIP_URI, - * CallId indicating value PX_UE_B_CALLID, - * Via indicating value PX_UE_B_VIA, - * Route indicating value PX_UE_B_SERVICE_ROUTE - * ; - * from the UE_B entity - * } - * } - */ - function f_mtc_check_TP_GM_PCSCF_487INVITE_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_487INVITE_02", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_02 + /** + * @desc Verify that the P-CSCF successfully processes a 487 INVITE (Request Terminated) (Terminating Leg). + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_B entity isAttachedTo the EPC_B and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_B entity isRegisteredTo the IMS_B and and + * the UE_A entity hasAchieveInitialINVITE + * } + * + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToSend a CANCEL + * } + * then { + * the IMS_P_CSCF_B entity receives a 487_INVITE containing + * From indicating value PX_UE_B_SIP_URI, + * To indicating value PX_UE_A_SIP_URI, + * CallId indicating value PX_UE_B_CALLID, + * Via indicating value PX_UE_B_VIA, + * Route indicating value PX_UE_B_SERVICE_ROUTE + * ; + * from the UE_B entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_487INVITE_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_02 - function f_mtc_check_TP_GM_PCSCF_487INVITE_03( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_487INVITE_03", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_03 + function f_mtc_check_TP_GM_PCSCF_487INVITE_03( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_03", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_03 - function f_mtc_check_TP_GM_PCSCF_487INVITE_04( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse( - mw_487RequestTerminated( // TODO Enforce template - p_sip.request.msgHeader.callId, - -, // New CSeq - p_sip.request.msgHeader.fromField, - p_sip.request.msgHeader.toField - ) - ) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_487INVITE_04", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_04 + function f_mtc_check_TP_GM_PCSCF_487INVITE_04( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse( + mw_487RequestTerminated( // TODO Enforce template + p_sip.request.msgHeader.callId, + -, // New CSeq + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + ) + ) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_487INVITE_04", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_487INVITE_04 - } // End of group imsRequestTermination + } // End of group imsRequestTermination - group imsAlternateService { + group imsAlternateService { - function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) - }, - { - mw_SipResponse(mdw_3XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_ECO_380ALTSRV_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_01 + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_01 - function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_02( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) - }, - { - mw_SipResponse(mdw_3XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_ECO_380ALTSRV_02", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_02 + function f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_380AlternateService(p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_3XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_ECO_380ALTSRV_02", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_380ALTSRV_02 - } // End of group imsTemporaryUnavailable + } // End of group imsTemporaryUnavailable - group imsTemporaryUnavailable { + group imsTemporaryUnavailable { - function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( - in SipInterfaceMonitor p_monitorCompRef, - in boolean p_checkMessage := false, - inout SipMessage p_sip - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)) { - // Check the 487 Request Terminated - p_monitorCompRef.start( - f_Iot_Sip_receive( - { - mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) - }, - { - mw_SipResponse(mdw_4XX_Base) - }, - { 0, omit }, - "TP_GM_PCSCF_480TEMPAV_01", - true, - p_checkMessage - ) - ); - p_monitorCompRef.done; - // Retrieve messge - f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); - } - } // End of function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01 + function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + inout SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 487 Request Terminated + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipResponse(mw_480TemporaryUnavailable(-, p_sip.request.msgHeader.cSeq)) + }, + { + mw_SipResponse(mdw_4XX_Base) + }, + { 0, omit }, + "TP_GM_PCSCF_480TEMPAV_01", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_480TEMPAV_01 - } // End of group imsTemporaryUnavailable + } // End of group imsTemporaryUnavailable } // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index cb0acdb..7af92cc 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -484,6 +484,23 @@ module AtsImsIot_Templates_GM { } } // End of template mw_TP_GM_PCSCF_ECO_INVITE_04 + template (present) INVITE_Request mw_TP_GM_PCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_GM_PCSCF_ECO_INVITE_05 + template (present) INVITE_Request mw_TP_GM_PCSCF_RE_INVITE_01( // TODO To be enforced template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn index ec88bbc..d24a9e4 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestConfiguration.ttcn @@ -50,6 +50,7 @@ module AtsImsIot_TestConfiguration { const charstring c_userUE_A2 := "User A2"; //* eut trigger name User B const charstring c_userUE_B := "User B"; + const charstring c_userUE_B_emergency := "User B Emergency"; const charstring c_userUE_B2 := "User B2"; //* eut trigger name User C const charstring c_userUE_C := "User C"; diff --git a/ttcn/LibIot/LibIot_PIXITS.ttcn b/ttcn/LibIot/LibIot_PIXITS.ttcn index c807e8c..f4e20f7 100644 --- a/ttcn/LibIot/LibIot_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_PIXITS.ttcn @@ -269,6 +269,12 @@ module LibIot_PIXITS { */ modulepar integer PX_EUT_B := 2; + /** + * + * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_B + */ + modulepar integer PX_EUT_B_EMERGENCY := 3; + /** * * @desc Selects product based on index in PX_PRODCUTS vendor list for EUT_C -- GitLab From 701b40be1a541eea4eebc6e4a79d44e7d8445fa7 Mon Sep 17 00:00:00 2001 From: barakatr Date: Wed, 25 Oct 2023 10:48:57 +0200 Subject: [PATCH 76/84] Update UE for Roaming Network Att --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 1510653..443846e 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -3284,8 +3284,8 @@ module AtsImsIot_Emergency { */ testcase TC_VoLTE_ECO_RMI_ATT_01 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -3294,23 +3294,23 @@ module AtsImsIot_Emergency { // map/connect component ports f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); f_cf_VxLteMonitor_Up(); // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueB, true, true ); // UE-B trigger an initial network_attachment by enabling radio interface of its mobile // test body - // Check that user A starts initial network attachment + // TODO: Check that user B starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) - f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) + f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) f_mtc_check_TP_GX_PCRF_ECO_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) // postamble - f_mtc_userRadioEnabled ( v_ueA, false, true ); + f_mtc_userRadioEnabled ( v_ueB, false, true ); //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); + f_cf_user_down ( v_ueB ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); }else{ @@ -3332,8 +3332,8 @@ module AtsImsIot_Emergency { */ testcase TC_VoLTE_EMC_RMI_ATT_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + var IotEquipmentUser v_ueB := f_cf_create_IotEquipmentUser ( c_userUE_B ); + var ImsUserInfo v_userInfoB := f_getImUser ( PX_EUT_B ); f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -3342,23 +3342,23 @@ module AtsImsIot_Emergency { // map/connect component ports f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_ueB ); f_cf_VxLteMonitor_Up(); // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueB, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // test body - // Check that user A starts initial network attachment + // TODO Check that user B starts initial network attachment f_mtc_check_TP_S6A_MME_ULR_01 ( vc_vxlte_monitor_components.s6a, true ); // Check (ULR – Event 2) f_mtc_check_TP_S6A_HSS_ECO_ULA_01 ( vc_vxlte_monitor_components.s6a); // Check (ULA – Event 3) f_mtc_check_TP_GX_PCRF_EMC_CCA_01 ( vc_vxlte_monitor_components.gx); // Check (CCR, CCA – Events 4, 5) // postamble - f_mtc_userRadioEnabled ( v_ueA, false, true ); + f_mtc_userRadioEnabled ( v_ueB, false, true ); //unmap/disconnect component ports - f_cf_user_down ( v_ueA ); + f_cf_user_down ( v_ueB ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); }else{ -- GitLab From b47cfd0684a54275022cc8d5171796d470430349 Mon Sep 17 00:00:00 2001 From: barakatr Date: Wed, 25 Oct 2023 12:31:11 +0200 Subject: [PATCH 77/84] Add TD_VoLTE_ECO_INT_INI_09 and ISC behavior --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 53 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 2 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn | 281 +++++- ttcn/AtsImsIot/AtsImsIot_Templates_ISC.ttcn | 816 ++++++++++++++++++ ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn | 2 +- 5 files changed, 1103 insertions(+), 51 deletions(-) create mode 100644 ttcn/AtsImsIot/AtsImsIot_Templates_ISC.ttcn diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 443846e..63604a3 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -1286,14 +1286,16 @@ module AtsImsIot_Emergency { /** - * @desc + * @desc To demonstrate the establishment of dedicated bearers at the originating EPC due to SIP emergency session establishment over AS with non-emergency registration. + * PSAP is located in the IM CN subsystem of IMS A. + * * @see ETSI TS 103 795-2 Clause 5.3.1.10 UE calling PSAP over AS with non-emergency registration */ testcase TD_VoLTE_ECO_INT_INI_09() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); - var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); f_setVxLteMonIterfacesAvailability(); @@ -1303,7 +1305,8 @@ module AtsImsIot_Emergency { PX_DIAMETER_RX_INTERFACENAME, PX_SIP_MW_PE_INTERFACENAME, PX_SIP_MW_EB_INTERFACENAME, // E-CSCF -> IBCF - PX_SIP_MM_B_PSAP_INTERFACENAME + PX_SIP_MM_B_PSAP_INTERFACENAME, + PX_SIP_ISC_INTERFACENAME })) { var SipMessage v_sip; @@ -1324,20 +1327,52 @@ module AtsImsIot_Emergency { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 - + // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); // TODO + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + + // Session INVITE + f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.isc, -, v_sip); // INVITE Event 2 //TODO + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.isc, -, v_sip); + + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 3 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwIE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // Event 4 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); - f_mtc_userCheckCallEstablished(v_ueA); // Event 34 - f_mtc_userCheckCallEstablished(v_psap); // Event 34 + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // Event 5 + f_mtc_check_TP_MI_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 6 + f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.isc, -, v_sip); // Event 7 + + // 180 Ringing + f_mtc_check_TP_IC_IBCF_180RESP_01(vc_vxlte_monitor_components.mwS_PSAP, true); // 180 Ringing – Event 10 + f_mtc_check_TP_MX_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 11 + f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.isc, -, v_sip); // Event 12 + + f_mtc_userCheckRinging(v_psap); + f_mtc_userCheckPeerIsRinging(v_ueA); + f_mtc_userAnswerCall(v_psap); + + // 200 OK + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // Event 14 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 15 + f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01(vc_vxlte_monitor_components.isc, -, v_sip); // Event 16 + + f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01(vc_vxlte_monitor_components.isc, -, v_sip); // Event 19 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 20 + f_mtc_check_TP_MX_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // Event 21 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 22 + f_mtc_userCheckCallEstablished(v_psap); // Event 22 // Postamble f_mtc_EndCall(v_ueA); f_PO_user_home_deregistration(v_ueA); f_PO_user_home_deregistration(v_psap); - //f_cf_int_call_down(v_config); //unmap/disconnect component ports f_cf_user_down ( v_psap ); diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 8f739e4..c64c5f8 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -1902,7 +1902,7 @@ module AtsImsIot_TP_behavior_GM { out SipMessage p_sip ) runs on ImsTestCoordinator { if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); // Check the INVITE diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn index 5b20a2a..adea268 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_ISC.ttcn @@ -21,7 +21,7 @@ module AtsImsIot_TP_behavior_ISC import from LibSip_Common all; import from AtsImsIot_Functions all; - import from AtsImsIot_Templates_MW all; + import from AtsImsIot_Templates_ISC all; import from LibIot_PIXITS all; // LibSip import from LibSip_SDPTypes all; @@ -44,49 +44,250 @@ module AtsImsIot_TP_behavior_ISC group g_ISC { + group imsRegistration { /** - * @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01 - * @param p_monitorCompRef Reference to monitor component - * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02 - */ - function f_mtc_check_TP_ISC_SCSCF_REGISTER_01( - SipInterfaceMonitor p_monitorCompRef, - boolean p_checkMessage := false - ) runs on ImsTestCoordinator { - if (isvalue(p_monitorCompRef)){ - var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + * @desc Starts monitor component behavior for TP_ISC_SCSCF_REGISTER_01 + * @param p_monitorCompRef Reference to monitor component + * @remark source function f_mtc_check_TP_IC_IBCF_REGISTER_02 + */ + function f_mtc_check_TP_ISC_SCSCF_REGISTER_01( + SipInterfaceMonitor p_monitorCompRef, + boolean p_checkMessage := false + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipRequest(mdw_TP_ISC_SCSCF_REGISTER_01(mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain)))}, + {mw_SipRequest(mw_REGISTER_Request_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - REGISTER", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + var charstring v_EUT_A_Addr := f_GetEUTPcscfIpAddress_1(); + var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1()); + + p_monitorCompRef.start( + f_Iot_Sip_receive( + {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, //TODO To/From + //{mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, + {mw_SipResponse (mw_200OK_Base)}, + {0, omit}, + "TP_ISC_SCSCF_REGISTER_01 - 200 OK", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + }//end f_mtc_check_TP_ISC_SCSCF_REGISTER_01 + }// end imsRegistration - p_monitorCompRef.start( - f_Iot_Sip_receive( - {mw_SipRequest(mdw_TP_ISC_SCSCF_REGISTER_01(mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain)))}, - {mw_SipRequest(mw_REGISTER_Request_Base)}, - {0, omit}, - "TP_ISC_SCSCF_REGISTER_01 - REGISTER", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; + + group imsInvite { + + /** + * @desc Verify that the S-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE. + * Reference + * "ETSI TS 124 229 [1], Clauses 5.7.1.14" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isAttachedTo the EPC_A and + * the UE_A entity isRegisteredTo the IMS_A and + * the UE_A entity not isEmergencyRegisteredTo the IMS_A + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToEstablishEmergencyCall + * } + * then { + * the IMS_S_CSCF_A entity receives an INVITE containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * PPreferredIdentity, // one or two instances + * MessageBody; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_ISC_SCSCF_ECO_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_ECO_INVITE_01 - Request", //TODO + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_ISC_SCSCF_INVITE_01 + + } + + group ims183SessionProgress { + + function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 183 SESSION_PROGRESS + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_ISC_SCSCF_183SessionProgress_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipResponse(mw_183SessionProgress_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_183SESSION_PROGRESS_01 + + } // End of group ims183SessionProgress - var charstring v_EUT_A_Addr := f_GetEUTPcscfIpAddress_1(); - var template SipUrl v_eutBUri := mw_SipUrl_Host(f_GetEUTScscfAddress_1()); + group ims180Ringing { + + function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the 180 RINGING + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_TP_ISC_SCSCF_180Ringing_01( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.fromField, + mw_To_NameAddr_TelUrl( + -, + p_sip.request.msgHeader.toField.addressField.addrSpecUnion.components.tel.subscriber + ))) + }, + { mw_SipResponse(mw_180Ringing_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_180RINGING_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_180RINGING_01 + + } // End of group ims180Ringing + + group ims200Ok { + + function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + var ImsUserInfo v_userInfoB := f_getSipUserId(PX_EUT_B); - p_monitorCompRef.start( - f_Iot_Sip_receive( - {mw_SipResponse(mw_Response_Base_ToFrom(c_statusLine200, ?, ?,?,?))}, //TODO To/From - //{mw_SipResponse(mdw_TP_IC_IBCF_REGISTER200OK_02(v_EUT_A_Addr, v_eutBUri))}, - {mw_SipResponse (mw_200OK_Base)}, - {0, omit}, - "TP_ISC_SCSCF_REGISTER_01 - 200 OK", - false, - p_checkMessage - ) - ); - p_monitorCompRef.done; - - } - }//end f_mtc_check_TP_ISC_SCSCF_REGISTER_01 + // Check the 200 OK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipResponse(mw_200OK( + p_sip.request.msgHeader.cSeq, + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.fromField, + ( + mw_To_NameAddr_TelUrl({quotedString:=f_getSipUserId(PX_EUT_B).publicId}), + mw_To_AddrUnion_TelUrl(f_getTelUserId(PX_EUT_B).publicId), + p_sip.request.msgHeader.toField + ) + )) + }, + { mw_SipResponse(mw_200OK_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_200OK_01", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_200OK_01 + + } // End of group ims200Ok + + group imsAck { + + function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + in SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)) { + // Check the ACK + p_monitorCompRef.start( + f_Iot_Sip_receive( + { mw_SipRequest(mw_TP_ISC_SCSCF_ACK_01( + p_sip.request.msgHeader.callId, + p_sip.request.msgHeader.cSeq, + -, // FIXME To be set + p_sip.request.msgHeader.fromField, + p_sip.request.msgHeader.toField + )) + }, + { mw_SipRequest(mw_ACK_Request_Base) }, + { 0, omit }, + "TP_ISC_SCSCF_ECO_ACK_01 - Request", + false, + p_checkMessage + ) + ); + p_monitorCompRef.done; + } + } // End of function f_mtc_check_TP_ISC_SCSCF_ECO_ACK_01 + + } // End of group imsAck + } // end of g_ISC diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_ISC.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_ISC.ttcn new file mode 100644 index 0000000..71b619f --- /dev/null +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_ISC.ttcn @@ -0,0 +1,816 @@ +/* + * @author TTF 010 + * @version $Id$ + * @desc This module provides TP related templates used at MW interface + */ +module AtsImsIot_Templates_ISC { + + // LibCommon + //import from LibCommon_BasicTypesAndValues all; + //import from LibCommon_VerdictControl all; + + // libSip + import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; + import from LibSip_Templates all; + import from LibSip_Common all; + + // LibIms + import from LibIms_Templates all; + + //import from LibMsrp_TypesAndValues all; + + // LibIot + //import from LibIot_TypesAndValues all; + import from LibIot_PIXITS all; + + // AtsImsIot + //import from AtsImsIot_TypesAndValues all; + import from AtsImsIot_PIXITS all; + import from AtsImsIot_Templates all; + + group sip_templates { + + template NameAddr mw_NameAddr_DispName_Tel( + template DisplayName p_displayName := *, + template(present) charstring p_number := ? + ) := { + displayName := p_displayName, + addrSpec := { + scheme := c_telScheme, //* contains "tel" + components := { + tel := { + subscriber := p_number + } + }, + urlParameters := *, + headers := * + } + } // End of template mw_NameAddr_DispName_Tel + + // template(present) From mw_From_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // fromParams := * + // } // End of template mw_From_AddrUnion_SipUrl + + // template(present) From mw_From_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // fromParams := * + // } // End of template mw_From_AddrUnion_TelUrl + + // template From mw_From_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := FROM_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // fromParams := * + // } // End of template mw_From_NameAddr_TelUrl + + // template(present) To mw_To_AddrUnion_SipUrl( + // template DisplayName p_dn, + // template(present) charstring p_user := ?, + // template charstring p_host + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_SipUrl(p_user, p_host), + // toParams := * + // } // End of template mw_To_AddrUnion_SipUrl + + // template(present) To mw_To_AddrUnion_TelUrl( + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := mw_AddrUnion_TelUrl(p_number), + // toParams := * + // } // End of template mw_To_AddrUnion_TelUrl + + // template To mw_To_NameAddr_TelUrl( + // template DisplayName p_displayName := *, + // template(present) charstring p_number := ? + // ) := { + // fieldName := TO_E, + // addressField := { nameAddr := mw_NameAddr_DispName_Tel(p_displayName, p_number) }, + // toParams := * + // } // End of template mw_To_NameAddr_TelUrl + + // template (present) Contact mw_contact( + // template (present) ContactAddress p_contactAddresses := ? + // ) := { + // fieldName := CONTACT_E, + // contactBody := { contactAddresses := { p_contactAddresses } } + // } // End of template mw_Contact + + // template (present) Response mw_200OK( + // template (present) CSeq p_cSeq := ?, + // template (present) CallId p_callId := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ? + // ) modifies mw_200OK_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to + // } + // } // End of template mw_200OK + + // template (present) Response mw_401Unauthorized( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_401Unauthorized_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_401Unauthorized + + // template (present) Response mw_404NotFound( + // template (present) CSeq p_cSeq := ?, + // template (present) WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_404NotFound_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_404NotFound + + // template Response mw_480TemporaryUnavailable( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template WwwAuthenticate p_wwwAuthenticate := * + // ) modifies mw_480TemporaryUnavailable_Base := { + // msgHeader := { + // cSeq := p_cSeq, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_480TemporaryUnavailable + + // template (present) Response mw_486Busy( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_486Busy_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_486Busy + + // template (present) Response mw_600BusyEverywhere( + // template (present) CallId p_callId := ?, + // template (present) CSeq p_cSeq := ?, + // template (present) From p_from := ?, + // template (present) To p_to := ?, + // template WwwAuthenticate p_wwwAuthenticate := ? + // ) modifies mw_600BusyEverywhere_Base := { + // msgHeader := { + // callId := p_callId, + // cSeq := p_cSeq, + // fromField := p_from, + // toField := p_to, + // wwwAuthenticate := p_wwwAuthenticate + // } + // } // End of template mw_600BusyEverywhere + + } // End of group sip_templates + + group g_gmA { + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_REGISTER_authorizedRequest_wo_securityheaders_IMS := { + msgHeader := { + fromField := p_from, + toField := p_to, + authorization := ?, + pChargingVector := p_pChargingVector, + pVisitedNetworkID := p_pVisitedNetworkID + //require := mw_require_path + } + } // End of template mw_TP_ISC_SCSCF_REGISTER_01 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_01( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + msgHeader := { + contact := p_contact, + path := p_path, + warning := p_warning + } + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_01 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_02( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_02 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_03 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_03( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_03 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_04( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := * + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_REGISTER_04 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_ECO_REGISTER_05( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) Contact p_contact := ?, + template Path p_path := ?, + template Warning p_warning := ? + ) modifies mw_TP_ISC_SCSCF_ECO_REGISTER_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_REGISTER_05 + + template(present) REGISTER_Request mw_TP_ISC_SCSCF_REGISTER_07( + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Authorization p_authorization := ?, + template PChargingVector p_pChargingVector := *, + template PVisitedNetworkID p_pVisitedNetworkID := *, + template (present) charstring p_expires := "0" + ) modifies mw_TP_ISC_SCSCF_REGISTER_01 := { + msgHeader := { + expires := mw_Expires(p_expires) + } + } // End of template mw_TP_ISC_SCSCF_REGISTER_07 + + template (present) SUBSCRIBE_Request mw_TP_ISC_SCSCF_SUBSCRIBE_01( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_SUBSCRIBE_Request_Base := { + requestLine := { + method := SUBSCRIBE_E, + requestUri := p_subscribe_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg, + expires := ?, // checked outside the template + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_ISC_SCSCF_SUBSCRIBE_01 + + template (present) SUBSCRIBE_Request mw_TP_ISC_SCSCF_SUBSCRIBE_02( + template (present) SipUrl p_subscribe_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_SUBSCRIBE_01 := { + } // End of template mw_TP_ISC_SCSCF_SUBSCRIBE_02 + + template (present) NOTIFY_Request mw_TP_ISC_SCSCF_NOTIFY_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_NOTIFY_Request_Base := { + requestLine := { + method := NOTIFY_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + event := m_Event_reg + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + } + } // End of template mw_TP_ISC_SCSCF_NOTIFY_01 + + template (present) PRACK_Request mw_TP_ISC_SCSCF_PRACK_01( + template (present) CallId p_callId := ?, + template (present) SipUrl p_notify_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_PRACK_Request_Base := { + requestLine := { + method := PRACK_E, + requestUri := p_notify_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to, + // TODO Check if it is required for PRACK event := m_Event_reg, + //pAssertedID := mw_PAssertedID(mw_PAssertedIDValue(-)), // FIXME Set expected value + //pChargingVector := mw_PChargingVector({ + // {id := "icid-value", paramValue := *}, + // * + // }), + route := ? + } + } // End of template mw_TP_ISC_SCSCF_PRACK_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_INVITE_Request_Base := { + requestLine := { + method := INVITE_E, + requestUri := p_invite_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + msgHeader := { + contact := p_contact + }, + messageBody := p_messageBody + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_INVITE_04 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_04 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_ECO_INVITE_05( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_ISC_SCSCF_ECO_INVITE_01 := { + msgHeader := { + accept := p_accept, + recvInfo := p_recvInfo, + pPreferredID := p_pPreferredID + } + } // End of template mw_TP_ISC_SCSCF_ECO_INVITE_05 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_01 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_02( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_02 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_03( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_03 + + template (present) INVITE_Request mw_TP_ISC_SCSCF_RE_INVITE_04( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_INVITE_01 := { + } // End of template mw_TP_ISC_SCSCF_RE_INVITE_014 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_100Trying_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_100Trying_01 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_02 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_03 + + template (present) Response mw_TP_ISC_SCSCF_100Trying_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_100Trying_01 := { + } // End of template mw_TP_ISC_SCSCF_100Trying_04 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_180Ringing_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_180Ringing_01 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_02 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_03 + + template (present) Response mw_TP_ISC_SCSCF_180Ringing_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_180Ringing_01 := { + } // End of template mw_TP_ISC_SCSCF_180Ringing_04 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_01( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_183SessionProgress_Base := { + msgHeader := { + cSeq := p_cSeq, + fromField := p_from, + toField := p_to + } + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_01 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_02( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_02 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_03( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_03 + + template (present) Response mw_TP_ISC_SCSCF_183SessionProgress_04( + template (present) CSeq p_cSeq := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_183SessionProgress_01 := { + } // End of template mw_TP_ISC_SCSCF_183SessionProgress_04 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_ACK_Request_Base := { + requestLine := { + method := ACK_E, + requestUri := p_ack_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_ACK_01 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_02 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_03 + + template (present) ACK_Request mw_TP_ISC_SCSCF_ACK_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_ack_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_ACK_01 := { + } // End of template mw_TP_ISC_SCSCF_ACK_04 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_BYE_Request_Base := { + requestLine := { + method := BYE_E, + requestUri := p_bye_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_BYE_01 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_02 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_03 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_04 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_05( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_05 + + template (present) BYE_Request mw_TP_ISC_SCSCF_BYE_06( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_bye_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_BYE_01 := { + } // End of template mw_TP_ISC_SCSCF_BYE_06 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_01( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_CANCEL_Request_Base := { + requestLine := { + method := CANCEL_E, + requestUri := p_cancel_uri, // @TODO + sipVersion := c_sipNameVersion + }, + msgHeader := { + cSeq := p_cSeq, + callId := p_callId, + fromField := p_from, + toField := p_to, + route := { + fieldName := ROUTE_E, + routeBody := { + *, + ?, + * + } + } + } + } // End of template mw_TP_ISC_SCSCF_CANCEL_01 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_02( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_02 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_03( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_03 + + template (present) CANCEL_Request mw_TP_ISC_SCSCF_CANCEL_04( // TODO To be enforced + template (present) CallId p_callId := ?, + template (present) CSeq p_cSeq := ?, + template (present) SipUrl p_cancel_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + ) modifies mw_TP_ISC_SCSCF_CANCEL_01 := { + } // End of template mw_TP_ISC_SCSCF_CANCEL_04 + + } // End of group g_gmA + +} // End of module AtsImsIot_Templates_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn index d69a207..a9c5d39 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TestSystem.ttcn @@ -136,7 +136,7 @@ module AtsImsIot_TestSystem { SipInterfaceMonitor mwIE optional,// Mw interface at I-CSCF/S-CSCF to E-CSCF SipInterfaceMonitor mwPB optional,// Mw interface at P-CSCF/IBCF SipInterfaceMonitor mwIB optional,// Mw interface at I-CSCF/IBCF - SipInterfaceMonitor isc optional, + SipInterfaceMonitor isc optional,// ISC interface at AS to S-CSCF DiameterInterfaceMonitor cxIH optional, DiameterInterfaceMonitor cxSH optional, DiameterInterfaceMonitor gx optional, -- GitLab From a20b8b244b0767619653c0b132f4177aa91dc3ab Mon Sep 17 00:00:00 2001 From: barakatr Date: Thu, 26 Oct 2023 16:12:48 +0200 Subject: [PATCH 78/84] ADD TD_VoLTE_NGC_INT_INF_01_0X and corresponding INFO functions --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 353 +++++++++++++++++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 230 +++++++++++- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 152 ++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 225 +++++++++++ .../AtsImsIot_TP_behavior_MW_PS.ttcn | 222 +++++++++++ ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn | 155 ++++++++ ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 28 ++ ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 27 ++ ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 42 +++ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 25 ++ ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn | 32 ++ ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn | 1 + 12 files changed, 1481 insertions(+), 11 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 63604a3..bbc9acf 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -1329,9 +1329,8 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_INI_09_01(); // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - // TODO - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + //f_mtc_userInitiateCall (v_ueA, v_infoPsap); + action("UE A needs to trigger an emergency call"); // Event 1 // Session INVITE f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.isc, -, v_sip); // INVITE Event 2 //TODO @@ -2992,6 +2991,342 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionEmergencyBearerOperations + /** + * @see ETSI TS 103 795-2 Clause 5.3.4 NG eCall tests + */ + group NGeCallTests { + + /** + * @desc To demonstrate the establishment of IMS emergency call of the (automatically or manually) initiated eCall type of emergency service within an emergency registration + * @see ETSI TS 103 795-2 Clause 5.3.4.1 MSD sent during NG eCall establishment + */ + testcase TD_VoLTE_NGC_INT_INI_01() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01(); + + // Test body + f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); + + //Rx/Gx exchange after INVITE (SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_03(vc_vxlte_monitor_components.rx);// Event 2 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 3 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 4 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 5 + f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 7,8 + f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 6,9 + + f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 10 + f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); + + f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 + f_mtc_check_TP_MM_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); + + // 183 Session Progress + f_mtc_check_TP_MM_ECSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 183 In Progress Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 + f_mtc_check_TP_GM_PCSCF_183SESSION_PROGRESS_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 + + //Rx/Gx exchange after 183(SDP) was received at P-CSCF + f_mtc_check_TP_RX_PCSCF_AAR_04(vc_vxlte_monitor_components.rx);// Event 14 + f_mtc_check_TP_GX_PCRF_RAR_01(vc_vxlte_monitor_components.gx, true); // Event 15 + f_mtc_check_TP_GX_PGW_RAA_02(vc_vxlte_monitor_components.gx); // Event 16 + f_mtc_check_TP_RX_PCRF_AAA_02(vc_vxlte_monitor_components.rx); // Event 17 + + f_mtc_check_TP_MM_ECSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 180 Ringing – Event 20 + f_mtc_check_TP_MW_PCSCF_ECO_180RINGING_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 21 + f_mtc_check_TP_GM_PCSCF_180RINGING_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 22 + + f_mtc_userCheckRinging(v_psap); // Event 19 + f_mtc_userCheckPeerIsRinging(v_ueA); // Event 19 + f_mtc_userAnswerCall(v_psap); // Event 26 + + f_mtc_check_TP_MM_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 200 OK Event 23 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 24 + f_mtc_check_TP_GM_PCSCF_200OK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 25 + + f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // ACK Event 26 + f_mtc_check_TP_MW_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 27 + f_mtc_check_TP_MM_ECSCF_ECO_ACK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // ACK – Event 28 + + f_mtc_userCheckCallEstablished(v_ueA); // Event 29 + f_mtc_userCheckCallEstablished(v_psap); // Event 29 + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + //f_cf_int_call_down(v_config); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + + } // End of TC TD_VoLTE_NGC_INT_INI_01 + + group f_TD_VoLTE_NGC_INT_INI_01 { + + function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01 + + } // End of group f_TD_VoLTE_NGC_INT_INI_01 + + + /** + * @desc To demonstrate the if an IMS emergency call of the (automatically or manually) initiated eCall type of emergency service has been established, + * the attempt by the PSAP to request transfer of an updated MSD shall be answered. + * @see ETSI TS 103 795-2 Clause 5.3.4.1 MSD update during NG eCall + */ + testcase TD_VoLTE_NGC_INT_INF_01_01() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MM_B_PSAP_INTERFACENAME // E-CSCCF -> PSAP + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01(); + + // Test body + + //Send INFO + f_mtc_check_TP_MM_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 1 + f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6 + f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7 + + //Receive INFO + + f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8 + f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9 + f_mtc_check_TP_MM_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 10 + + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + + } // End of TC TD_VoLTE_NGC_INT_INF_01_01 + + testcase TD_VoLTE_NGC_INT_INF_01_02() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MW_EB_INTERFACENAME // E-CSCCF -> IBCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01(); + + // Test body + + //Send INFO + f_mtc_check_TP_MX_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 3 + f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6 + f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7 + + //Receive INFO + + f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8 TODO + f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9 TODO + f_mtc_check_TP_MX_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 11 + + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + + } // End of TC TD_VoLTE_NGC_INT_INF_01_02 + + testcase TD_VoLTE_NGC_INT_INF_01_03() runs on ImsTestCoordinator system IotSystemInterface { + var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A_emergency ); + var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); + var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A_EMERGENCY ); + var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); + + f_setVxLteMonIterfacesAvailability(); + //Check required monitor interfaces due to TD + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, + PX_DIAMETER_GX_INTERFACENAME, + PX_DIAMETER_RX_INTERFACENAME, + PX_SIP_MW_PE_INTERFACENAME, + PX_SIP_MI_EB_INTERFACENAME // E-CSCCF -> BGCF + })) + { + var SipMessage v_sip; + + f_cf_createVxLteMonitor(); + + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + + f_mtc_userRegistration(v_ueA, v_userInfoA); + if (PX_PSAP_REGISTERED) { + f_mtc_userRegistration(v_psap, v_infoPsap); + } else { + // TODO Check OPTIONS from PSAP to E-CSCF + } + f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 + f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01(); + + // Test body + + //Send INFO + f_mtc_check_TP_MI_ECSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 5 + f_mtc_check_TP_MW_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 6 + f_mtc_check_TP_GM_PCSCF_NGC_INFO_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 7 + + //Receive INFO + + f_mtc_check_TP_GM_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.gmA, -, v_sip); // INFO Event 8 TODO + f_mtc_check_TP_MW_PCSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // INFO Event 9 TODO + f_mtc_check_TP_MI_ECSCF_NGC_INFO_02(vc_vxlte_monitor_components.mwS_PSAP, -, v_sip); // INFO Event 13 + + + // Postamble + f_mtc_EndCall(v_ueA); + f_PO_user_home_deregistration(v_ueA); + f_PO_user_home_deregistration(v_psap); + + //unmap/disconnect component ports + f_cf_user_down ( v_psap ); + f_cf_user_down ( v_ueA ); + f_cf_VxLteMonitor_Down(); + }else{ + //log... + setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") + } + f_cf_adapter_down ( ); + + } // End of TC TD_VoLTE_NGC_INT_INF_01_03 + + group f_TD_VoLTE_NGC_INT_INF_01 { + + function f_mtc_check_precond_TD_VoLTE_NGC_INT_INF_01() runs on ImsTestCoordinator { + log("If the test case fails, please check the preconditions"); + // TODO Add real code to check pre-conditions + } // End of function f_mtc_check_precond_TD_VoLTE_NGC_INT_INI_01 + + } // End of group f_TD_VoLTE_NGC_INT_INF_01_01 + } + + /** * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment */ @@ -3785,9 +4120,7 @@ module AtsImsIot_Emergency { f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD - if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME, - PX_DIAMETER_GX_INTERFACENAME, - PX_DIAMETER_RX_INTERFACENAME + if (f_checkVxLteRequiredMonitorInterface({PX_SIP_GMA_INTERFACENAME })) { var SipMessage v_sip; @@ -3806,12 +4139,15 @@ module AtsImsIot_Emergency { f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body + // UE A requests emergency session initiation // Event 1 f_mtc_check_TP_GM_PCSCF_ECO_INVITE_05(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 2 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.gmA, -, v_sip); // 380 (Alternative Service) f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 - f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 4 + + // ACK + f_mtc_check_TP_GM_PCSCF_ECO_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 6 //unmap/disconnect component ports f_cf_user_down ( v_ueA ); @@ -3944,9 +4280,6 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_ECO_RMI_INI_02 - - - } // End of group RoamingUECallingPSAPWithNonEmergencyRegistration } // End of group EmergencySessionEstablishmentRoaming diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index c64c5f8..7cff160 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -1845,7 +1845,8 @@ module AtsImsIot_TP_behavior_GM { -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), - -, -, + -, + -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) @@ -2163,6 +2164,77 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.done; } } // End of function TP_GM_PCSCF_RE_INVITE_04 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_04 } // End of group imsInvite @@ -4793,4 +4865,160 @@ module AtsImsIot_TP_behavior_GM { } // End of group imsTemporaryUnavailable + + group imsINFO{ + + /** + * @desc Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_NGC_INFO_01 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_GM_PCSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_GM_PCSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_NGC_INFO_02 + + }// End of group imsINFO + + + + } // End of module AtsImsIot_TP_behavior_GM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn index 8669444..25595cb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -754,4 +754,156 @@ module AtsImsIot_TP_behavior_MI { } // End of group imsRequestTermination + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MI_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MI_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MI_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MI_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + } // End of module AtsImsIot_TP_behavior_MI \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index c052257..943c9e1 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -232,6 +232,78 @@ module AtsImsIot_TP_behavior_MM { log("##### p_sip: ", p_sip); } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_INVITE_03 + + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INVITE_01 } // End of group imsInvite @@ -748,4 +820,157 @@ module AtsImsIot_TP_behavior_MM { } // End of group imsTemporaryUnavailable + + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MM_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MM_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MM_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + + } // End of module AtsImsIot_TP_behavior_MM \ No newline at end of file diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index de07262..19091fd 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -2204,6 +2204,77 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function TP_MW_PCSCF_RE_INVITE_04 + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01( // FIXME RMI To be reviewed + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INVITE_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INVITE_01 + } // End of group imsInvite group ims100Trying { @@ -4880,5 +4951,156 @@ module AtsImsIot_TP_behavior_MW_PS { } // End of function f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01 } // End of group imsTemporaryUnavailable + + group imsINFO{ + + /** + * @desc Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INFO_01 + + /** + * @desc Verify that the P-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MW_PCSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MW_PCSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MW_PCSCF_NGC_INFO_02 + + }// End of group imsINFO } // End of module AtsImsIot_TP_behavior_MW_PS diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn index 1e7fbde..89cc8c2 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn @@ -270,6 +270,7 @@ module AtsImsIot_TP_behavior_MX { p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01 + } // End of group ims100Trying @@ -820,4 +821,158 @@ module AtsImsIot_TP_behavior_MX { } // End of group ims3xxAny + + group imsINFO{ + + /** + * @desc Verify that the E-CSCF sends an INFO request demanding a transfer of updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VoLTE_INT_ES + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + */ + function f_mtc_check_TP_MX_ECSCF_NGC_INFO_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + -, -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_NGC_INFO_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_NGC_INFO_01 + + /** + * @desc Verify that the E-CSCF successfully receives an INFO from the UE in an established eCall type emergency call that has been requested to transfer an updated MSD. + * + * Reference + * "ETSI TS 124 229 [1], Clauses 5.1.6.11.3" + * Config Id CF_VxLTE_INT + * PICS Selection NONE + * Initial conditions with { + * the UE_A entity isEmergencyAttachedTo the EPC_A and + * the UE_A entity isEmergencyRegisteredTo the IMS_A and + * the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + * } + * Expected behaviour + * ensure that { + * when { + * the UE_A entity isRequestedToTransferUpdatedMSD + * // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + * } + * then { + * the IMS_P_CSCF_A entity receives an INFO containing + * From indicating value PX_UE_A_SIP_URI, + * To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + * CallId indicating value PX_UE_A_CALLID, + * Via indicating value PX_UE_A_VIA, + * Route indicating value PX_UE_A_SERVICE_ROUTE, + * InfoPackage indicating value "EmergencyCallData.eCall.MSD", + * ContentDisposition indicating value "Info-Package", + * MessageBody containing + * MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + * // MSD not exceeding 140 bytes and encoded in binary ASN.1 + * ContentDisposition indicating value "By-Reference";; + * from the UE_A entity + * } + * } + */ + function f_mtc_check_TP_MX_ECSCF_NGC_INFO_02( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A_EMERGENCY); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( + -, // FIXME Set expected value + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), + -, + -, + mw_PPreferredID, + mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), + mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) + )) + }, + { mw_SipRequest(mw_INFO_Request_Base) }, + {0, omit}, + "TP_MX_ECSCF_NGC_INFO_02 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_MX_ECSCF_NGC_INFO_02 + + }// End of group imsINFO + + + } // End of module AtsImsIot_TP_behavior_MX diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index 7af92cc..e24e4ba 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -529,6 +529,34 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_RE_INVITE_014 + template (present) INVITE_Request mw_TP_GM_PCSCF_NGC_INVITE_01( // TODO To be enforced + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_TP_GM_PCSCF_INVITE_01 := { + } // End of template mw_TP_GM_PCSCF_NGC_INVITE_01 + + template (present) INFO_Request mw_TP_GM_PCSCF_NGC_INFO_01( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) modifies mw_INFO_Request_Base(omit) := { + + } + + // End of template mw_TP_GM_PCSCF_NGC_INFO_01 + // End of template mw_TP_GM_PCSCF_NGC_INFO_01 + template (present) Response mw_TP_GM_PCSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn index 3a4b5fa..d59b1e8 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -11,6 +11,7 @@ module AtsImsIot_Templates_MI { // libSip import from LibSip_SIPTypesAndValues all; + import from LibSip_MessageBodyTypes all; import from LibSip_Templates all; import from LibSip_Common all; @@ -175,6 +176,32 @@ module AtsImsIot_Templates_MI { } } } // End of template mw_TP_MW_PCSCF_BYE_01 + + template(present) INVITE_Request mw_TP_MI_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + )modifies mw_INFO_Request_Base(omit) := { + msgHeader := { + fromField := p_from, + toField := p_to, + pAssertedID := p_pAssertedID + } + } + + template(present) INFO_Request mw_TP_MI_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MI_ECSCF_INFO_01 := { + } template (present) CANCEL_Request mw_TP_MI_ECSCF_CANCEL_01( // TODO To be enforced template (present) CallId p_callId := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index bcfd154..d2c5188 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -84,6 +84,32 @@ module AtsImsIot_Templates_MM { modifies mw_TP_MM_ECSCF_INVITE_02 := { } + template(present) INVITE_Request mw_TP_MM_ECSCF_NGC_INVITE_01 ( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + + + template(present) INFO_Request mw_TP_MM_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INFO_01 := { + } + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, @@ -212,5 +238,21 @@ module AtsImsIot_Templates_MM { } } } // End of template mw_TP_MM_ECSCF_CANCEL_01 + + + template(present) INVITE_Request mw_TP_MM_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + )modifies mw_INFO_Request_Base(omit) := { + msgHeader := { + fromField := p_from, + toField := p_to, + pAssertedID := p_pAssertedID + } + } + } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index ad1de23..e460dfb 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -877,6 +877,31 @@ module AtsImsIot_Templates_MW { ) modifies mw_TP_MW_ECSCF_INVITE_01 := { } // End of template mw_TP_MW_ECSCF_RE_INVITE_02 + template(present) INVITE_Request mw_TP_MW_PCSCF_NGC_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MW_ECSCF_INVITE_02 := { + } + + template(present) INVITE_Request mw_TP_MW_PCSCF_NGC_INFO_01 ( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_INFO_Request_Base(omit) := { + } + template (present) Response mw_TP_MW_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn index f2696c6..7044c65 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn @@ -83,6 +83,28 @@ module AtsImsIot_Templates_MX { ) modifies mw_TP_MX_ECSCF_INVITE_02 := { } + + template(present) INVITE_Request mw_TP_MX_PCSCF_NGC_INVITE_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + ) + modifies mw_TP_MX_ECSCF_INVITE_02 := { + } + + template(present) INFO_Request mw_TP_MX_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MX_ECSCF_INFO_01 := { + } template (present) Response mw_TP_MX_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, @@ -147,6 +169,16 @@ module AtsImsIot_Templates_MX { } } // End of template mw_TP_MX_ECSCF_ACK_01 + template(present) INVITE_Request mw_TP_MX_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ? + )modifies mw_INFO_Request_Base(omit) := { + msgHeader := { + fromField := p_from, + toField := p_to + } + } + template (present) BYE_Request mw_TP_MX_ECSCF_BYE_01( // TODO To be enforced template (present) CallId p_callId := ?, template (present) CSeq p_cSeq := ?, diff --git a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn index 9b8644a..ea0a694 100644 --- a/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn +++ b/ttcn/LibIot/LibIot_VxLTE_PIXITS.ttcn @@ -50,6 +50,7 @@ module LibIot_VxLTE_PIXITS { group Mw{ modulepar charstring PX_SIP_MM_B_PSAP_INTERFACENAME := "Mm IBCF PSAP"; //Mm interface between IBCF and PSAP modulepar charstring PX_SIP_MW_EB_INTERFACENAME := "Mw ECSCF IBCF"; //Mw interface between ECSCF and IBCF + modulepar charstring PX_SIP_MI_EB_INTERFACENAME := "Mi ECSCF BCF"; //Mw interface between ECSCF and BGCF modulepar charstring PX_SIP_ML_E_LRF_INTERFACENAME := "Ml ECSCF LRF"; //Ml interface between ECSCF and LRF modulepar charstring PX_SIP_MW_S_PSAP_INTERFACENAME := "Mw SCSCF PSAP"; //Mw interface between S-CSCF and PSAP modulepar charstring PX_SIP_MW_PI_INTERFACENAME := "Mw PI"; //Mw interface between P-CSCF and I-CSCF -- GitLab From 9d0670ecff6b93321bca23483dfdfa3c3b40a360 Mon Sep 17 00:00:00 2001 From: barakatr Date: Fri, 27 Oct 2023 10:46:01 +0200 Subject: [PATCH 79/84] Update numbering --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 151 +++++++++++------------- 1 file changed, 72 insertions(+), 79 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index bbc9acf..7f28174 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -54,11 +54,12 @@ module AtsImsIot_Emergency { group UENetworkAttachmentWithUSIM { /** - * @desc Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. + * @desc UE Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see ETSI TS 103 795-2 Clause 5.1.1 + * TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -102,11 +103,12 @@ module AtsImsIot_Emergency { group UENetworkAttachmentWithoutUSIM { /** - * @desc Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. + * @desc UE Emergency Network Attachment and Establishment of the Emergency Bearer without USIM. * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see ETSI TS 103 795-2 Clause 5.1.2 + * TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -278,6 +280,9 @@ module AtsImsIot_Emergency { */ group EmergencySessionEmergencyBearerOperations { + /** + * @see ETSI TS 103 795-2 Clause 5.3.1 Emergency Session Establishment + */ group EmergencySessionEstablishment { /** @@ -522,7 +527,6 @@ module AtsImsIot_Emergency { */ testcase TD_VoLTE_ECO_INT_INI_03() runs on ImsTestCoordinator system IotSystemInterface { - var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var IotEquipmentUser v_psap := f_cf_create_IotEquipmentUser ( c_psap ); var ImsUserInfo v_infoPsap := f_getImUser ( PX_PSAP ); @@ -1333,7 +1337,7 @@ module AtsImsIot_Emergency { action("UE A needs to trigger an emergency call"); // Event 1 // Session INVITE - f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.isc, -, v_sip); // INVITE Event 2 //TODO + f_mtc_check_TP_ISC_SCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.isc, -, v_sip); // INVITE Event 2 f_mtc_check_TP_GM_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.isc, -, v_sip); f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwIE, -, v_sip); // Event 3 @@ -1396,7 +1400,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP - * @remark Ipetion 1: PSAP in IMS A + * @remark Option 1: PSAP in IMS A */ testcase TD_VoLTE_ECO_INT_INI_10_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -1496,7 +1500,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP - * @remark Ipetion 1: PSAP NOT in IMS A + * @remark Option 2: PSAP NOT in IMS A */ testcase TD_VoLTE_ECO_INT_INI_10_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -1601,7 +1605,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate that if an emergency call has been terminated, the attempt by the PSAP call taker to communicate back to the emergency caller shall be answered. * @see ETSI TS 103 795-2 Clause 5.3.1.11 Callback from PSAP - * @remark Ipetion 1: PSAP in PSTN A + * @remark Option 3: PSAP in PSTN A */ testcase TD_VoLTE_ECO_INT_INI_10_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -1714,7 +1718,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.2.1 UE Initiated Emergency Session Release * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_EMC_INT_REL_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -1798,7 +1802,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating UE session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.1 UE Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.2.1 UE Initiated Emergency Session Release * @remark This is option 2: PSAP is not in IMS A network */ testcase TD_VoLTE_EMC_INT_REL_01_02 ( ) runs on ImsTestCoordinator system IotSystemInterface { @@ -1924,8 +1928,8 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_EMC_INT_REL_01_03(); // Test body - //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); - + + // SIP BYE f_mtc_check_TP_GM_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_MW_PCSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 3 f_mtc_check_TP_MI_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 7 @@ -1970,7 +1974,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.2.2 PSAP Initiated Emergency Session Release * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_02_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2012,7 +2016,6 @@ module AtsImsIot_Emergency { // Test body f_mtc_check_TP_MM_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 1 - f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 @@ -2057,7 +2060,7 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release + * @see ETSI TS 103 795-2 Clause 5.3.2.2 PSAP Initiated Emergency Session Release * @remark This is option2: PSAP is not in IMS A network */ testcase TD_VoLTE_ECO_INT_REL_02_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2148,8 +2151,8 @@ module AtsImsIot_Emergency { /** * @desc To perform originating PSAP session release and the tear down of related dedicated bearers. * On call release initiated bye PSAP, the P-CSCF A should trigger the removal of all relevant previously created bearers - * @see ETSI TS 103 795-2 Clause 5.3.3.2 PSAP Initiated Emergency Session Release - * @remark This is option2: PSAP is in the same network + * @see ETSI TS 103 795-2 Clause 5.3.2.2 PSAP Initiated Emergency Session Release + * @remark This is option3: PSAP is in PSTN network */ testcase TD_VoLTE_ECO_INT_REL_02_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2189,8 +2192,8 @@ module AtsImsIot_Emergency { // Test body - f_mtc_check_TP_IC_IBCF_BYE_01(vc_vxlte_monitor_components.ic); // Event 4 - f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 5 + action("PSAP Initiated Emergency Session Release via PSTN") // Event 5 + f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 f_mtc_check_TP_GM_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 8 @@ -2237,11 +2240,14 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionRelease + /** + * @see ETSI TS 103 795-2 Clause 5.3.3 Emergency Session Abort/Reject + */ group EmergencySessionAbortOrReject { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort + * @see ETSI TS 103 795-2 Clause 5.3.3.1 Emergency Session Abort * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_EMC_INT_ABT_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2292,7 +2298,10 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + + // Option 1 f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 7 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 8 f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -2334,8 +2343,8 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is not in IMS A network + * @see ETSI TS 103 795-2 Clause 5.3.3.1 Emergency Session Abort + * @remark This is option 2: PSAP is not in IMS A network */ testcase TD_VoLTE_EMC_INT_ABT_01_02() runs on ImsTestCoordinator system IotSystemInterface { @@ -2386,11 +2395,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MX_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 9 f_mtc_check_TP_IC_IBCF_CANCEL_01(vc_vxlte_monitor_components.ic, true); // CANCEL Event 10 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_IC_IBCF_2XXRESP_01(vc_vxlte_monitor_components.ic); // 200 CANCEL – Event 11 f_mtc_check_TP_MX_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -2434,8 +2445,8 @@ module AtsImsIot_Emergency { /** * @desc To perform SIP session abort (originating side) and the related interactions with PCRF A and EPC A. - * @see ETSI TS 103 795-2 Clause 5.3.4.1 Emergency Session Abort - * @remark This is option 1: PSAP is in PSTN network + * @see ETSI TS 103 795-2 Clause 5.3.3.1 Emergency Session Abort + * @remark This is option 3: PSAP is in PSTN network */ testcase TD_VoLTE_EMC_INT_ABT_01_03() runs on ImsTestCoordinator system IotSystemInterface { @@ -2486,10 +2497,11 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCRF_STA_01(vc_vxlte_monitor_components.rx); // (STA – Event 5) f_mtc_check_TP_MW_PCSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 6 + f_mtc_check_TP_MI_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 13 f_mtc_check_TP_MM_ECSCF_EMC_CANCEL_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 14 - f_mtc_check_TP_MI_ECSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 16 + f_mtc_check_TP_MW_PCSCF_ECO_200OK_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 17 f_mtc_check_TP_GM_PCSCF_200OK_02(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 18 @@ -2533,7 +2545,7 @@ module AtsImsIot_Emergency { /** * @desc To demonstrate interaction between UE A and PSAP when an emergency session is rejected. - * @see ETSI TS 103 795-2 5.3.4.3 Emergency Session Reject + * @see ETSI TS 103 795-2 5.3.3.2 Emergency Session Reject from PSAP * @remark This is option 1: PSAP is in IMS A network */ testcase TD_VoLTE_ECO_INT_REJ_01_01() runs on ImsTestCoordinator system IotSystemInterface { @@ -2565,13 +2577,8 @@ module AtsImsIot_Emergency { // Preamble f_mtc_userRegistration(v_ueA, v_userInfoA); - if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); - } else { - // TODO Check OPTIONS from PSAP to E-CSCF - } + f_cf_user_down ( v_psap ); // PSAP unavailable f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_01(); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2593,8 +2600,6 @@ module AtsImsIot_Emergency { f_mtc_check_TP_MW_PCSCF_ECO_INVITE_03(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 13 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MM_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // Event 11 - // 480 Temporary Unvailable f_mtc_check_TP_MM_ECSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mmB_PSAP, -, v_sip); // 480 Temporary Unavailables Event 14 f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 @@ -2615,10 +2620,8 @@ module AtsImsIot_Emergency { // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2664,19 +2667,16 @@ module AtsImsIot_Emergency { f_cf_createVxLteMonitor(); - // map/connect component ports - f_cf_adapter_up ( ); - f_cf_user_up ( v_ueA ); - f_cf_user_up ( v_psap ); - f_cf_VxLteMonitor_Up(); + // map/connect component ports + f_cf_adapter_up ( ); + f_cf_user_up ( v_ueA ); + f_cf_user_up ( v_psap ); + f_cf_VxLteMonitor_Up(); + + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_cf_user_down ( v_psap ); // PSAP unavailable - // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); - } else { - // TODO Check OPTIONS from PSAP to E-CSCF - } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_02(); f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 3 @@ -2694,16 +2694,13 @@ module AtsImsIot_Emergency { f_mtc_check_TP_RX_PCSCF_RAA_01(vc_vxlte_monitor_components.rx);// Events 8,9 f_mtc_check_TP_GX_PCRF_CCA_01(vc_vxlte_monitor_components.gx); // Events 10,11 - f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 12 + f_mtc_check_TP_MW_PCSCF_ECO_INVITE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 15 f_mtc_check_TP_MW_PCSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwPE, -, v_sip); - f_mtc_check_TP_MX_ECSCF_ECO_INVITE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 11 - f_mtc_check_TP_MX_ECSCF_ECO_100Trying_01(vc_vxlte_monitor_components.mwEB, -, v_sip); - - f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_INVITE_01(vc_vxlte_monitor_components.ic); // INVITE Event 16 (NOTE: comment out if ISC simulated by Ic) // 480 Temporary Unavailable - f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 12 (NOTE: comment out if ISC simulated by Ic) + f_mtc_check_TP_IC_IBCF_480TEMPAV_01(vc_vxlte_monitor_components.ic, -, v_sip); // INVITE Event 18 (NOTE: comment out if ISC simulated by Ic) f_mtc_check_TP_MW_PCSCF_ECO_480INVITE_01(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 23 f_mtc_check_TP_RX_PCSCF_STR_01(vc_vxlte_monitor_components.rx); // Event 24 @@ -2722,10 +2719,8 @@ module AtsImsIot_Emergency { // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2777,15 +2772,11 @@ module AtsImsIot_Emergency { f_cf_user_up ( v_psap ); f_cf_VxLteMonitor_Up(); - // Preamble - f_mtc_userRegistration(v_ueA, v_userInfoA); - if (PX_PSAP_REGISTERED) { - f_mtc_userRegistration(v_psap, v_infoPsap); - } else { - // TODO Check OPTIONS from PSAP to E-CSCF - } + // Preamble + f_mtc_userRegistration(v_ueA, v_userInfoA); + f_cf_user_down ( v_psap ); // PSAP unavailable + f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_01_03(); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body //f_mtc_userInitiateCall (v_ueA, v_userTelInfoB); @@ -2830,10 +2821,8 @@ module AtsImsIot_Emergency { // Postamble f_PO_user_home_deregistration(v_ueA); - f_PO_user_home_deregistration(v_psap); //unmap/disconnect component ports - f_cf_user_down ( v_psap ); f_cf_user_down ( v_ueA ); f_cf_VxLteMonitor_Down(); f_cf_adapter_down ( ); @@ -2887,8 +2876,8 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } + //TODO Configure IMS so that IMS is not capable to handle emergency session f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 @@ -2955,9 +2944,9 @@ module AtsImsIot_Emergency { // TODO Check OPTIONS from PSAP to E-CSCF } f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03(); - f_mtc_userInitiateCall (v_ueA, v_infoPsap); // Event 1 // Test body + //TODO: SET incorrect URN to SIP message f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 @@ -2989,12 +2978,12 @@ module AtsImsIot_Emergency { } // End of group EmergencySessionAbortOrReject - } // End of group EmergencySessionEmergencyBearerOperations + /** * @see ETSI TS 103 795-2 Clause 5.3.4 NG eCall tests */ - group NGeCallTests { + group NGeCallTests { /** * @desc To demonstrate the establishment of IMS emergency call of the (automatically or manually) initiated eCall type of emergency service within an emergency registration @@ -3325,7 +3314,8 @@ module AtsImsIot_Emergency { } // End of group f_TD_VoLTE_NGC_INT_INF_01_01 } - + + } // End of group EmergencySessionEmergencyBearerOperations /** * @see ETSI TS 103 795-2 Clause 5.5 Emergency Network Detachment @@ -3354,8 +3344,9 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); //preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile f_mtc_userRadioEnabled ( v_ueA, false, true ); + // test body // Check that user A starts initial network attachment f_mtc_check_TP_GX_PCRF_EMC_CCA_01(vc_vxlte_monitor_components.gx, false);//f_mtc_check_TP_GX_PCRF_ECO_CCA_02 ( vc_vxlte_monitor_components.gx, false ); // Check (CCA – Event 3) @@ -3648,7 +3639,8 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see ETSI TS 103 795-2 6.1.1 UE Emergency Network Attachment with USIM + * TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -3696,7 +3688,8 @@ module AtsImsIot_Emergency { * On successful emergency attachment, the UE/IVS should discover the P-CSCF IP address. * The EPC will create the Emergency Bearers which will allow communication only between the UE and the P-CSCF * and allowed forwarding towards E-CSCF - * @see TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; + * @see ETSI TS 103 795-2 6.1.2 UE Emergency Network Attachment without USIM + * TS 124 229 [2], clause 9.2.1 and L.2.2.6; TS 129 212 [7], clauses 4.5.15 and 4a.5.12; * TS 129 272 [8], clause 5.2.1.1 (MME shall proceed even if Update Location fails) * */ @@ -3716,7 +3709,7 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // preamble - f_mtc_userRadioEnabled ( v_ueB, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueB, true, true ); // UE-B trigger an initial network_attachment by enabling radio interface of its mobile // test body // TODO Check that user B starts initial network attachment @@ -3771,7 +3764,7 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_04(vc_vxlte_monitor_components.gmA); // Events 1, 8 @@ -3824,7 +3817,7 @@ module AtsImsIot_Emergency { f_cf_VxLteMonitor_Up(); // preamble - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body f_mtc_check_TP_GM_PCSCF_ECO_REGISTER_05(vc_vxlte_monitor_components.gmA); // Events 1, 10 @@ -4136,7 +4129,7 @@ module AtsImsIot_Emergency { //registration is not needed //similar to TC_VxLTE_RMI_ATT_01 UE A has perform a network_attachment - f_mtc_userRadioEnabled ( v_ueA, true, true ); // UA-A trigger an initial network_attachment by enabling radio interface of its mobile + f_mtc_userRadioEnabled ( v_ueA, true, true ); // UE-A trigger an initial network_attachment by enabling radio interface of its mobile // Test body // UE A requests emergency session initiation // Event 1 -- GitLab From 2e9daa4673c40a5d273fd062a4b0a513b2db05e6 Mon Sep 17 00:00:00 2001 From: barakatr Date: Fri, 27 Oct 2023 11:51:58 +0200 Subject: [PATCH 80/84] Add URN_SERVICE_SOS PIXIT --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 5 +++-- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 7f28174..c6ae630 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -2192,7 +2192,7 @@ module AtsImsIot_Emergency { // Test body - action("PSAP Initiated Emergency Session Release via PSTN") // Event 5 + action("PSAP Initiated Emergency Session Release via PSTN"); // Event 5 f_mtc_check_TP_MX_ECSCF_ECO_BYE_01(vc_vxlte_monitor_components.mwEB, -, v_sip); // Event 6 f_mtc_check_TP_MW_PCSCF_ECO_BYE_02(vc_vxlte_monitor_components.mwPE, -, v_sip); // Event 7 @@ -2876,7 +2876,7 @@ module AtsImsIot_Emergency { } else { // TODO Check OPTIONS from PSAP to E-CSCF } - //TODO Configure IMS so that IMS is not capable to handle emergency session + // Configure IMS so that IMS is not capable to handle emergency session f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02(); // Test body @@ -2904,6 +2904,7 @@ module AtsImsIot_Emergency { function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02() runs on ImsTestCoordinator { log("If the test case fails, please check the preconditions"); + log("Check that IMS is not capable to handle emergency session"); // TODO Add real code to check pre-conditions } // End of function f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_02 diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index b862a52..6b43e97 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -32,6 +32,11 @@ group SUT_CONF { * @desc Set to true if the emergency call is an issued by an eCall */ modulepar boolean PX_ECALL := false; + + /** + * @desc charstring for emergency service urn + */ + modulepar charstring PX_URN_SERVICE_SOS := "urn:service:sos"; } // end group SUT_CONF -- GitLab From 7fa2d14506836e1913b0c1e1deca5e5f336c62a7 Mon Sep 17 00:00:00 2001 From: barakatr Date: Fri, 27 Oct 2023 12:52:23 +0200 Subject: [PATCH 81/84] Add urn:service:sos check for GM interface --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 4 +- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 108 ++++++++++-------- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 76 +++++++++--- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 5 +- 4 files changed, 128 insertions(+), 65 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index c6ae630..ae571c0 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -2947,8 +2947,8 @@ module AtsImsIot_Emergency { f_mtc_check_precond_TD_VoLTE_ECO_INT_REJ_03(); // Test body - //TODO: SET incorrect URN to SIP message - f_mtc_check_TP_GM_PCSCF_ECO_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 + //Send incorrect URN to SIP message + f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01(vc_vxlte_monitor_components.gmA, -, v_sip); // INVITE Event 1 f_mtc_check_TP_GM_PCSCF_ECO_380ALTSRV_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 2 f_mtc_check_TP_GM_PCSCF_ACK_01(vc_vxlte_monitor_components.gmA, -, v_sip); // Event 3 diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index 6b43e97..d17d966 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -1,47 +1,61 @@ -/* - * @author STF 574 - * @version $Id$ - * @desc This module provides the module parameter - */ - -module AtsImsIot_PIXITS -{ - -group SUT { - -group SUT_CONF { - /** - * @desc charstring for SUT/conference domain - */ - modulepar charstring PX_IMS_SUT_CONF_HOME_DOMAIN := "conf.sut.net"; - /** - * @desc charstring for conference factory URI name - */ - modulepar charstring PX_IMS_SUT_CONF_FACTORY_NAME := "factory.uri.name"; - /** - * @desc charstring for PChargingVector TP_IC_IBCF_INVITE_04 - */ - modulepar charstring PX_IMS_A_ICID := "PX_IMS_A_ICID"; - - /** - * @desc Set to true of PSAP shall be registered to the IMS - */ - modulepar boolean PX_PSAP_REGISTERED := true; - - /** - * @desc Set to true if the emergency call is an issued by an eCall - */ - modulepar boolean PX_ECALL := false; - - /** - * @desc charstring for emergency service urn - */ - modulepar charstring PX_URN_SERVICE_SOS := "urn:service:sos"; - -} // end group SUT_CONF - -} // end group SUT -group TS { - -} // end group TS -} // end module AtsImsIot_PIXITS +/* + * @author STF 574 + * @version $Id$ + * @desc This module provides the module parameter + */ +module AtsImsIot_PIXITS { + import from LibSip_SIPTypesAndValues all; + + group SUT { + + group SUT_CONF { + /** + * @desc charstring for SUT/conference domain + */ + modulepar charstring PX_IMS_SUT_CONF_HOME_DOMAIN := "conf.sut.net"; + /** + * @desc charstring for conference factory URI name + */ + modulepar + charstring PX_IMS_SUT_CONF_FACTORY_NAME := "factory.uri.name"; + /** + * @desc charstring for PChargingVector TP_IC_IBCF_INVITE_04 + */ + modulepar charstring PX_IMS_A_ICID := "PX_IMS_A_ICID"; + + /** + * @desc Set to true of PSAP shall be registered to the IMS + */ + modulepar boolean PX_PSAP_REGISTERED := true; + + /** + * @desc Set to true if the emergency call is an issued by an eCall + */ + modulepar boolean PX_ECALL := false; + + /** + * @desc charstring for emergency service urn + */ + // modulepar charstring PX_URN_SERVICE_SOS := "urn:service:sos"; + // modulepar UrnUriComponents PX_URN_SERVICE_SOS := { + // namespaceId := "service", + // namespaceSpecificString := "sos" + // }; + modulepar SipUrl PX_URN_SERVICE_SOS := { + "sip", + components := { + urn := { + namespaceId := "service", + namespaceSpecificString := "sos" + } + } + }; + + + } // end group SUT_CONF + + + } // end group SUT + group TS { + } // end group TS +} diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 7cff160..82b3b30 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -29,6 +29,7 @@ module AtsImsIot_TP_behavior_GM { import from AtsImsIot_Templates_GM all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; group imsMessages { @@ -1494,7 +1495,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_01( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId )) @@ -1554,7 +1555,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_TelUrl(mw_SipUrl_Anonymous.components.sip.userInfo.userOrTelephoneSubscriber), mw_To_AddrUnion_TelUrl(v_psap.publicId) )) @@ -1617,7 +1618,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_02( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, ( mw_From_NameAddr_SipUrl({quotedString:=v_userInfoB.publicId}, v_userInfoB.publicId, v_userInfoB.domain), mw_From_AddrUnion_TelUrl(v_userInfoB.publicId) @@ -1683,7 +1684,7 @@ module AtsImsIot_TP_behavior_GM { p_monitorCompRef.start( f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_02( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, ( mw_From_NameAddr_SipUrl({quotedString:=v_userInfoA.publicId}, v_userInfoA.publicId, v_userInfoA.domain), mw_From_AddrUnion_TelUrl(v_userInfoA.publicId) @@ -1721,7 +1722,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_03( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) )) @@ -1782,7 +1783,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_03( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) )) @@ -1842,7 +1843,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_04( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, @@ -1911,7 +1912,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_05( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain) )) @@ -1928,6 +1929,53 @@ module AtsImsIot_TP_behavior_GM { f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); } } // End of function f_mtc_check_TP_GM_PCSCF_INVITE_05 + + + + /** + * @desc Send out INVITE message with incorrect urn + */ + function f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01( + in SipInterfaceMonitor p_monitorCompRef, + in boolean p_checkMessage := false, + out SipMessage p_sip + ) runs on ImsTestCoordinator { + if (isvalue(p_monitorCompRef)){ + var ImsUserInfo v_userInfoA := f_getSipUserId(PX_EUT_A); + var ImsUserInfo v_psap := f_getSipUserId(PX_PSAP); + + + var SipUrl v_invalidUrnServiceSos := { + "sip", + components := {urn := { + namespaceId := "service", + namespaceSpecificString := "sosxxxx" + } + } + } + + // Check the INVITE + p_monitorCompRef.start( + f_Iot_Sip_receive( + { + mw_SipRequest(mw_TP_GM_PCSCF_ECO_INVITE_01( + v_invalidUrnServiceSos, + mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), + - + )) + }, + { mw_SipRequest(mw_INVITE_Request_Base) }, + {0, omit}, + "f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01 - Request", + true, + p_checkMessage + ) + ); + p_monitorCompRef.done; + // Retrieve messge + f_getSipMsgFromMonitor(p_monitorCompRef, p_sip); + } + } // End of function f_mtc_check_TP_GM_PCSCF_ECO_INVALID_INVITE_01 function f_mtc_check_TP_GM_PCSCF_INVITE_04( // FIXME RMI To be reviewed in SipInterfaceMonitor p_monitorCompRef, @@ -1943,7 +1991,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_INVITE_04( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) )) @@ -2018,7 +2066,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_01( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_TelUrl(v_userInfoA.publicId), mw_To_AddrUnion_TelUrl(v_userInfoB.publicId) )) @@ -2091,7 +2139,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_02( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_TelUrl(v_userInfoB.publicId), mw_To_AddrUnion_TelUrl(v_userInfoA.publicId) )) @@ -2120,7 +2168,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_03( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) )) @@ -2149,7 +2197,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_RE_INVITE_04( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoB.publicId, v_userInfoB.domain) )) @@ -2214,7 +2262,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_NGC_INVITE_01( - -, // FIXME Set expected value + PX_URN_SERVICE_SOS, mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, -, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index 19091fd..f56f04c 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -29,6 +29,7 @@ module AtsImsIot_TP_behavior_MW_PS { import from AtsImsIot_Templates all; import from AtsImsIot_TypesAndValues all; import from AtsImsIot_Functions all; + import from AtsImsIot_PIXITS all; group imsMessages { @@ -1465,8 +1466,8 @@ module AtsImsIot_TP_behavior_MW_PS { // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( - { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_01( - -, // FIXME Set expected value + { mw_SipRequest(mw_TP_MW_PCSCF_INVITE_01(PX_URN_SERVICE_SOS, +// -, // FIXME Set expected value mw_From_AddrUnion_TelUrl(-), // v_userInfoA.publicId mw_To_AddrUnion_TelUrl(-) // v_userInfoB.publicId )) -- GitLab From 5bbf2437de18c4b315438a5b472a32550bed0cf2 Mon Sep 17 00:00:00 2001 From: garciay Date: Mon, 30 Oct 2023 07:35:01 +0100 Subject: [PATCH 82/84] Add skeleton for Diameter codec; Add install.sh script for titanization --- .../EncDec/LibDiameter/LibDiameter_EncDec.cc | 27 +- ccsrc/Protocols/Diameter/avp.cc | 80 +++ ccsrc/Protocols/Diameter/avp.hh | 31 + ccsrc/Protocols/Diameter/diameter_codec.cc | 573 +++++++++++++++++- ccsrc/Protocols/Diameter/diameter_codec.hh | 529 +++++++++++++++- .../Protocols/Diameter/diameter_uar_codec.cc | 208 +++++++ .../Protocols/Diameter/diameter_uar_codec.hh | 43 ++ ccsrc/Protocols/Diameter/module.mk | 1 + emergency-iop.code-workspace | 65 +- etc/AtsImsIot/AtsImsIot.cfg | 3 + install.sh | 2 +- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 29 + 12 files changed, 1544 insertions(+), 47 deletions(-) create mode 100644 ccsrc/Protocols/Diameter/diameter_uar_codec.cc create mode 100644 ccsrc/Protocols/Diameter/diameter_uar_codec.hh diff --git a/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc index 508dfe2..5002bf3 100644 --- a/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc +++ b/ccsrc/EncDec/LibDiameter/LibDiameter_EncDec.cc @@ -3,6 +3,8 @@ #include "loggers.hh" +#include "diameter_uar_codec.hh" + namespace LibDiameter__EncdecDeclarations { BITSTRING fx__enc__CER__MSG(const LibDiameter__TypesAndValues::CER__MSG& p) { @@ -16,7 +18,7 @@ namespace LibDiameter__EncdecDeclarations { // TODO loggers::get_instance().set_stop_time(tag, duration); - return oct2bit(os); + return oct2bit(os); } INTEGER fx__dec__CER__MSG(BITSTRING&, LibDiameter__TypesAndValues::CER__MSG& p) { return INTEGER(0); } @@ -230,26 +232,37 @@ namespace LibDiameter__EncdecDeclarations { INTEGER fx__dec__DPA__MSG(BITSTRING&, LibDiameter__TypesAndValues::DPA__MSG& p) { return INTEGER(0); } BITSTRING fx__enc__UAR__MSG(const LibDiameter__TypesAndValues::UAR__MSG& p) { - loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + loggers::get_instance().log_msg(">>> fx__enc__UAR__MSG: ", p); float duration; - std::string tag(" BITSTRING fx__enc__Request"); + std::string tag("fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; - // TODO + diameter_uar_codec codec; + if (codec.encode(p, os) == -1) { + loggers::get_instance().warning("fx__enc__UAR__MSG: -1 result code was returned"); + return int2bit(0, 1); + } loggers::get_instance().set_stop_time(tag, duration); return oct2bit(os); } - INTEGER fx__dec__UAR__MSG(BITSTRING&, LibDiameter__TypesAndValues::UAR__MSG& p) { return INTEGER(0); } + INTEGER fx__dec__UAR__MSG(BITSTRING& pdu, LibDiameter__TypesAndValues::UAR__MSG& p) { + + OCTETSTRING os = bit2oct(pdu); + diameter_uar_codec codec; + codec.decode(os, p); + + return INTEGER(0); + } BITSTRING fx__enc__UAA__MSG(const LibDiameter__TypesAndValues::UAA__MSG& p) { - loggers::get_instance().log_msg(">>> BITSTRING fx__enc__Request: ", p); + loggers::get_instance().log_msg(">>> BITSTRING fx__enc__UAR__MSG: ", p); float duration; - std::string tag(" BITSTRING fx__enc__Request"); + std::string tag(" BITSTRING fx__enc__UAR__MSG"); loggers::get_instance().set_start_time(tag); OCTETSTRING os; diff --git a/ccsrc/Protocols/Diameter/avp.cc b/ccsrc/Protocols/Diameter/avp.cc index 94bc5b7..ad6ce3c 100644 --- a/ccsrc/Protocols/Diameter/avp.cc +++ b/ccsrc/Protocols/Diameter/avp.cc @@ -5,3 +5,83 @@ #include "loggers.hh" #include "converter.hh" +avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL(OPTIONAL_OMIT) : OPTIONAL(p_vendor_id))), _enc_avp() { + loggers::get_instance().log_msg("avp::avp (1): _avp_header:", _avp_header); + loggers::get_instance().log_to_hexa("avp::avp (1): _payload:", _payload.data(), _payload.size()); +} // End of ctor + +avp::avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload, const OCTETSTRING& p_enc_avp) : _code(p_code), _vendor_specific(p_vendor_specific), _mandatory(p_mandatory), _protected_(p_protected_), _length(p_length), _vendor_id(p_vendor_id), _encoded_length(p_encoded_length), _payload(p_payload), _avp_header(LibDiameter__Types__Base__AVPs::AVP__Header(p_code, LibDiameter__Types__Base__AVPs::AVP__Flags( int2bit(p_vendor_specific, 1), int2bit(p_mandatory, 1), int2bit(p_protected_, 1), int2bit(0, 5)), p_length, (p_vendor_specific == 0) ? OPTIONAL(OPTIONAL_OMIT) : OPTIONAL(p_vendor_id))), _enc_avp(p_enc_avp) { + loggers::get_instance().log_msg("avp::avp (2): _avp_header:", _avp_header); + loggers::get_instance().log_to_hexa("avp::avp (2): _payload:", _payload.data(), _payload.size()); + loggers::get_instance().log_msg("avp::avp (2): _enc_avp:", _enc_avp); +} // End of ctor + +int avp::get_code() const { + return _code; +} + +int avp::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_session_id: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_session_id: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Session__Id__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_session_id: p_avp:", p_avp); + + return 0; +} + +int avp::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_auth_session_state: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_auth_session_state: _payload:", _payload.data(), _payload.size()); + + // Sanity checks + if (_payload.size() != 4) { + loggers::get_instance().warning("avp::decode_auth_session_state: Wrong payload length: '%d'", _payload.size()); + return -1; + } + p_avp = LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), LibDiameter__Types__Base__AVPs::Auth__Session__State__Type(_payload[0] << 24 || _payload[1] << 16 || _payload[2] << 8 || _payload[3])); + loggers::get_instance().log_msg("avp::decode_auth_session_state: p_avp:", p_avp); + + return 0; +} + +int avp::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_origin_host: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_origin_host: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Origin__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_origin_host: p_avp:", p_avp); + + return 0; +} + +int avp::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_origin_realm: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_origin_realm: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Origin__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_origin_realm: p_avp:", p_avp); + + return 0; +} + +int avp::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_destination_host: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_destination_host: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Destination__Host__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_destination_host: p_avp:", p_avp); + + return 0; +} + +int avp::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const { + loggers::get_instance().log(">>> avp::decode_destination_realm: '%d'", _code); + loggers::get_instance().log_to_hexa("avp::decode_destination_realm: _payload:", _payload.data(), _payload.size()); + + p_avp = LibDiameter__Types__Base__AVPs::Destination__Realm__AVP(LibDiameter__Types__Base__AVPs::AVP__Header(_avp_header), CHARSTRING(converter::get_instance().bytes_to_string(_payload).c_str())); + loggers::get_instance().log_msg("avp::decode_destination_realm: p_avp:", p_avp); + + return 0; +} + diff --git a/ccsrc/Protocols/Diameter/avp.hh b/ccsrc/Protocols/Diameter/avp.hh index 7113b90..dec2c6a 100644 --- a/ccsrc/Protocols/Diameter/avp.hh +++ b/ccsrc/Protocols/Diameter/avp.hh @@ -1,5 +1,36 @@ #pragma once +#include +#include + + +#include "LibDiameter_TypesAndValues.hh" + class avp { + const int _code; + const unsigned char _vendor_specific; + const unsigned char _mandatory; + const unsigned char _protected_; + const int _length; + const int _vendor_id; + const int _encoded_length; + const std::vector _payload; + const OCTETSTRING _enc_avp; + const LibDiameter__Types__Base__AVPs::AVP__Header _avp_header; +public: + avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload); + avp(const int p_code, const unsigned char p_vendor_specific, const unsigned char p_mandatory, const unsigned char p_protected_, const int p_length, const int p_vendor_id, const int p_encoded_length, const std::vector p_payload, const OCTETSTRING& p_enc_avp); + virtual ~avp() {}; + + int get_code() const; + + int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, std::unique_ptr& p_encoded_avp); + + int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) const; + int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) const; + int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) const; + int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) const; + int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) const; + int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) const; }; // End of class avp \ No newline at end of file diff --git a/ccsrc/Protocols/Diameter/diameter_codec.cc b/ccsrc/Protocols/Diameter/diameter_codec.cc index ca825f3..4c2ee29 100644 --- a/ccsrc/Protocols/Diameter/diameter_codec.cc +++ b/ccsrc/Protocols/Diameter/diameter_codec.cc @@ -8,49 +8,576 @@ #include "converter.hh" template class OPTIONAL; +class TTCN_Buffer; class TTCN_EncDec; -int diameter_codec::encode(const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, OCTETSTRING& p_data) { - loggers::get_instance().log_msg(">>> diameter_codec::encode", (const Base_Type &)p_diameter_msg); +diameter_codec::~diameter_codec() { + loggers::get_instance().log(">>> diameter_codec::~diameter_codec"); + if (_avps.size() != 0) { + _avps.clear(); + } +} + +int diameter_codec::encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_header: ", (const Base_Type &)p_header); - TTCN_EncDec::clear_error(); - TTCN_Buffer encoding_buffer; + p_encoding_buffer.put_c(p_header.version()); - //encode_header(p_diameter_msg.header(), encoding_buffer); // len field is set to 0 + p_encoding_buffer.put_c(static_cast((p_header.msglen() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.msglen() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.msglen()) & 0xFF)); - // if (p_diameter_msg.ischosen()) { - // } + unsigned char cmdflags = 0x00; + BITSTRING bit_set = int2bit(1, 1); + if (p_header.cmdflags().r__bit() == bit_set) { + cmdflags |= 0x80; + } + if (p_header.cmdflags().p__bit() == bit_set) { + cmdflags |= 0x40; + } + if (p_header.cmdflags().e__bit() == bit_set) { + cmdflags |= 0x20; + } + if (p_header.cmdflags().t__bit() == bit_set) { + cmdflags |= 0x10; + } + p_encoding_buffer.put_c(cmdflags); + + int cmdcode = _command_codes[p_header.cmdcode()]; + p_encoding_buffer.put_c(static_cast((cmdcode >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((cmdcode >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(cmdcode & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.applid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.applid() & 0xFF)); + + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.hopid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.hopid() & 0xFF)); + + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((p_header.endid() >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(p_header.endid() & 0xFF)); + + _avps.clear(); // unique_ptr class manages deletion of resources + + loggers::get_instance().log_msg("<<< diameter_codec::encode_header: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} // End of method encode_header + +int diameter_codec::encode_session_id(const LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_session_id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_session_id: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = unichar2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_session_id: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); return 0; } -int diameter_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params) { - loggers::get_instance().log_msg(">>> diameter_codec::decode: ", (const Base_Type &)p_data); +int diameter_codec::encode_origin_host(const LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_origin_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); - TTCN_EncDec::clear_error(); - TTCN_Buffer decoding_buffer; + // TODO Group - // if (decode_header(decoding_buffer, p_diameter_msg.header()) == 0) { - // loggers::get_instance().log_warning("diameter_codec::decode: Failed to decode header"); - // return -1; - // } + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_origin_host: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = char2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_origin_host: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); return 0; } -int diameter_codec::encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer) { - loggers::get_instance().log_msg(">>> diameter_codec::encode_header: ", (const Base_Type &)p_header); +int diameter_codec::encode_origin_realm(const LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_origin_realm: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_origin_realm: Failed to encode AVP header"); + return -1; + } + + const OCTETSTRING& os = char2oct(p_avp.aVP__Data()); + p_encoding_buffer.put_string(os); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + std::vector(static_cast(os), static_cast(os) + os.lengthof()), + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); + + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + loggers::get_instance().log_msg("<<< diameter_codec::encode_origin_realm: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; } -int diameter_codec::decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header) { - loggers::get_instance().log(">>> diameter_codec::decode_header"); +int diameter_codec::encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_auth_session_state: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // TODO Group + + // Encode AVP header + int padding = 0; + if (encode_avp_header(p_avp.aVP__Header(), &padding, p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_codec::encode_auth_session_state: Failed to encode AVP header"); + return -1; + } + + int conv = p_avp.aVP__Data().as_int(); + std::vector v; + unsigned char c = static_cast((conv >> 24) & 0xFF); + v.push_back(c); + p_encoding_buffer.put_c(c); + c = static_cast((conv >> 16) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast((conv >> 8) & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + c = static_cast(conv & 0xFF); + p_encoding_buffer.put_c(c); + v.push_back(c); + + _avps.insert( + std::make_pair >( + p_avp.aVP__Header().aVP__Code(), + std::unique_ptr( + new avp( + p_avp.aVP__Header().aVP__Code(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().m__bit()[0].get_bit()) ? 0x01 : 0x00, + (p_avp.aVP__Header().aVP__flags().p__bit()[0].get_bit()) ? 0x01 : 0x00, + p_avp.aVP__Header().aVP__len(), + (p_avp.aVP__Header().aVP__vid().is_present()) ? static_cast(static_cast(*p_avp.aVP__Header().aVP__vid().get_opt_value())) : 0, + p_avp.aVP__Header().aVP__len(), + v, + static_cast(OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())) + )))); - return -1; + if (padding != 0) { + OCTETSTRING os = int2oct(0, padding); + p_encoding_buffer.put_string(os); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_auth_session_state: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; } -int diameter_codec::padding(TTCN_Buffer& p_encoding_buffer) { //padding = (4 - (size & 3)) & 3; - loggers::get_instance().log(">>> diameter_codec::padding"); +int diameter_codec::encode_avp_header(const LibDiameter__Types__Base__AVPs::AVP__Header& p_header, int* p_padding, TTCN_Buffer& p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_codec::encode_avp_header: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + int total_length = 4 + 4 + p_header.aVP__len(); + loggers::get_instance().log("diameter_codec::encode_avp_header: total_length: '%d'", total_length); + + if (p_header.aVP__vid().is_present()) { + total_length += 4; + } + int send_length = total_length; + if ((total_length % 4) != 0) { + total_length = (total_length / 4 + 1) * 4; + *p_padding = total_length - send_length; + } + loggers::get_instance().log("diameter_codec::encode_avp_header: send_length: '%d'", send_length); + loggers::get_instance().log("diameter_codec::encode_avp_header: total_length after padding: '%d'", total_length); + loggers::get_instance().log("diameter_codec::encode_avp_header: *p_padding: '%d'", *p_padding); + + int conv = p_header.aVP__Code(); + p_encoding_buffer.put_c(static_cast((conv >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(conv & 0xFF)); + + unsigned char flags = 0x00; + if (p_header.aVP__vid().is_present()) { + flags |= 0x80; + } + if (p_header.aVP__flags().m__bit()[0].get_bit()) { + flags |= 0x40; + + } + if (p_header.aVP__flags().p__bit()[0].get_bit()) { + flags |= 0x20; + + } + p_encoding_buffer.put_c(flags); - return -1; + conv = send_length; + p_encoding_buffer.put_c(static_cast((send_length >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((send_length >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(send_length & 0xFF)); + + if (p_header.aVP__vid().is_present()) { + conv = static_cast(*p_header.aVP__vid().get_opt_value()); + p_encoding_buffer.put_c(static_cast((conv >> 24) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 16) & 0xFF)); + p_encoding_buffer.put_c(static_cast((conv >> 8) & 0xFF)); + p_encoding_buffer.put_c(static_cast(conv & 0xFF)); + } + + loggers::get_instance().log_msg("<<< diameter_codec::encode_auth_session_state: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; } + +int diameter_codec::decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params) { + loggers::get_instance().log(">>> diameter_codec::decode_header: '%p'", _start); + + // Sanity check + if (p_decoding_buffer.get_len() < 20) { // DiameterHeader size + loggers::get_instance().warning("diameter_codec::decode: Wrong packet length for daimeter message"); + return -1; + } + + _start = static_cast(p_decoding_buffer.get_data()); + _avps.clear(); // unique_ptr class manages deletion of resources + + p_header.version() = static_cast(*_start++ & 0xFF); + p_header.msglen() = static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + // Resize the docoding buffer + if ((int)p_header.msglen() > p_decoding_buffer.get_len()) { + loggers::get_instance().warning("diameter_codec::decode: Resize docoding buffer: '%d' to '%d'", p_header.msglen(), p_decoding_buffer.get_len()); + p_header.msglen() = p_decoding_buffer.get_len(); + } + _end = static_cast(p_decoding_buffer.get_data()) + p_header.msglen(); + loggers::get_instance().log("diameter_codec::decode: _end: '%p' - offset: '%d'", _end, static_cast(_end - _start)); + loggers::get_instance().log_to_hexa("diameter_codec::decode: diameter message:", _start, static_cast(_end - _start)); + + p_header.cmdflags().r__bit() = int2bit(static_cast(static_cast(*_start & 0x80) != 0), 1); + p_header.cmdflags().p__bit() = int2bit(static_cast(static_cast(*_start & 0x40) != 0), 1); + p_header.cmdflags().e__bit() = int2bit(static_cast(static_cast(*_start & 0x20) != 0), 1); + p_header.cmdflags().t__bit() = int2bit(static_cast(static_cast(*_start & 0x10) != 0), 1); + p_header.cmdflags().reserved__bits() = int2bit(static_cast(*_start++ & 0x0F), 4); + + params::const_iterator it = p_params.find(std::string("Request")); + boolean is_request = true; + if (it != p_params.cend()) { + is_request = it->second.compare("1") == 0; + } + p_header.cmdcode() = LibDiameter__TypesAndValues::Command__Code::str_to_enum( + command_code_2_enumerated( + static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)), + static_cast(is_request) + ).c_str() + ); + + p_header.applid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + p_header.hopid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + p_header.endid() = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + + loggers::get_instance().log_msg("diameter_codec::decode_header: p_header=", p_header); + + return 0; +} // End of method decode_header + +int diameter_codec::decode_avps(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params) { + loggers::get_instance().log(">>> diameter_codec::decode_avps: '%p'", _start); + + while (_start < _end) { + avp* avp_ptr = nullptr; + if (decode_avp(p_decoding_buffer, p_header, p_params, &avp_ptr) == -1) { + loggers::get_instance().log("diameter_codec::decode_avps: Failed to decode AVP: current position: '%p' - offset:'%d' - value:'0x%02x'", _start, reinterpret_cast(_end) - reinterpret_cast(_start), static_cast(*_start)); + return -1; + } + _avps.insert(std::make_pair >(avp_ptr->get_code(), std::unique_ptr(avp_ptr))); + } // End of 'while' statemement + loggers::get_instance().log(">>> diameter_codec::decode_avps: No more AVP to decode: '%p' / '%p'", _start, _end); + + return 0; +} // End of method decode_avps + +int diameter_codec::decode_avp(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params, avp** avp_ptr) { + loggers::get_instance().log(">>> diameter_codec::decode_avp: '%p'", _start); + + // Sanity checks + if (static_cast((_end - _start)) < 8) { + loggers::get_instance().warning("diameter_codec::decode_avp: Not enought bytes for AVP decoding"); + return -1; + } + + int code = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + loggers::get_instance().log("diameter_codec::decode_avp: code:'%d'", code); + unsigned char vendor_specific = static_cast(static_cast(*_start & 0x80) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: vendor_specific:'0x%x'", vendor_specific); + unsigned char mandatory = static_cast(static_cast(*_start & 0x40) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: mandatory:'0x%x'", mandatory); + unsigned char protected_ = static_cast(static_cast(*_start++ & 0x20) != 0); + loggers::get_instance().log("diameter_codec::decode_avp: protected_:'0x%x'", protected_); + int length = static_cast(static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + loggers::get_instance().log("diameter_codec::decode_avp: length:'%d'", length); + + int vendor_id = 0; + int payload_length = length; + if (vendor_specific) { + vendor_id = static_cast(static_cast(*_start++ & 0xFF) << 24 | static_cast(*_start++ & 0xFF) << 16 | static_cast(*_start++ & 0xFF) << 8 | static_cast(*_start++ & 0xFF)); + payload_length -= 12; + } else { + payload_length -= 8; + } + loggers::get_instance().log("diameter_codec::decode_avp: payload_length:'%d'", payload_length); + std::vector payload(_start, _start + payload_length); + + // if (length > static_cast(_end - _start)) { + // loggers::get_instance().warning("diameter_codec::decode_avp: Resize docoding buffer: '%d' to '%d'", length, static_cast(_end - _start)); + // length = static_cast(_end - _start); + // } + + int encoded_length = length; + if ((encoded_length % 4) !=0) { + encoded_length = (encoded_length / 4 + 1) * 4; + } + loggers::get_instance().log("diameter_codec::decode_avp: encoded_length:'%d'", encoded_length); + + loggers::get_instance().log("diameter_codec::decode_avp: encoded_length:'%d'", encoded_length - length); + loggers::get_instance().log("diameter_codec::decode_avp: payload_length + (encoded_length - length):'%d'", payload_length + (encoded_length - length)); + _start = _start + payload_length + (encoded_length - length); + loggers::get_instance().log("diameter_codec::decode_avp: new _start:'%p'", _start); + + *avp_ptr = new avp(code, vendor_specific, mandatory, protected_, length, vendor_id, encoded_length, payload); + + return 0; +} + +const std::unique_ptr& diameter_codec::get_avp(const int p_code) { + loggers::get_instance().log(">>> diameter_codec::get_avp: '%d'", p_code); + + if ((_it = _avps.find(p_code)) == _avps.cend()) { + loggers::get_instance().log("diameter_codec::get_avp: Failed to retrieve AVP '%d'", p_code); + return _nullptr; + } + + loggers::get_instance().log("diameter_codec::get_avp: got AVP '%d'", _it->second->get_code()); + return _it->second; +} + +std::string diameter_codec::command_code_2_enumerated(const int p_code, const boolean p_request_flag) { + + std::string code_enum; + if(p_request_flag) { + switch(p_code){ + case Code_CE: code_enum.assign("CER_E"); break; + case Code_RA: code_enum.assign("RAR_E"); break; + case Code_AC: code_enum.assign("ACR_E"); break; + case Code_AS: code_enum.assign("ASR_E"); break; + case Code_ST: code_enum.assign("STR_E"); break; + case Code_DW: code_enum.assign("DWR_E"); break; + case Code_DP: code_enum.assign("DPR_E"); break; + //CxDx + case Code_UA: code_enum.assign("UAR_E"); break; + case Code_SA: code_enum.assign("SAR_E"); break; + case Code_LI: code_enum.assign("LIR_E"); break; + case Code_MA: code_enum.assign("MAR_E"); break; + case Code_RT: code_enum.assign("RTR_E"); break; + case Code_PP: code_enum.assign("PPR_E"); break; + + /* Codes on Sh/Dh interface */ + case Code_UD: code_enum.assign("UDR_E"); break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: code_enum.assign("PUR_E"); break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: code_enum.assign("SNR_E"); break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: code_enum.assign("PNR_E"); break;// PNR Profile-Notification-Request HSS->AS + + //Rx + case Code_AA: code_enum.assign("AAR_E"); break; + //4006 + case Code_CC: code_enum.assign("CCR_E"); break; + + //s6a + case Code_UL: code_enum.assign("ULR_E"); break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: code_enum.assign("CLR_E"); break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: code_enum.assign("AIR_E"); break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: code_enum.assign("IDR_E"); break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: code_enum.assign("DSR_E"); break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: code_enum.assign("PUER_E"); break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: code_enum.assign("RSR_E"); break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: code_enum.assign("NOR_E"); break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + } + } else { + switch(p_code) { + case Code_CE: code_enum.assign("CEA_E"); break; + case Code_RA: code_enum.assign("RAA_E"); break; + case Code_AC: code_enum.assign("ACA_E"); break; + case Code_AS: code_enum.assign("ASA_E"); break; + case Code_ST: code_enum.assign("STA_E"); break; + case Code_DW: code_enum.assign("DWA_E"); break; + case Code_DP: code_enum.assign("DPA_E"); break; + //CxDx + case Code_UA: code_enum.assign("UAA_E"); break; + case Code_SA: code_enum.assign("SAA_E"); break; + case Code_LI: code_enum.assign("LIA_E"); break; + case Code_MA: code_enum.assign("MAA_E"); break; + case Code_RT: code_enum.assign("RTA_E"); break; + case Code_PP: code_enum.assign("PPA_E"); break; + + /* Codes on Sh/Dh interface */ + case Code_UD: code_enum.assign("UDA_E"); break;// UDR User-Data-Request AS->HSS UDR (306) + case Code_PU: code_enum.assign("PUA_E"); break;// PUR Profile-Update-Request AS->HSS PUR (307) + case Code_SN: code_enum.assign("SNA_E"); break;// SNR Subscribe-Notifications-Request AS->HSS SNR (308) + case Code_PN: code_enum.assign("PNA_E"); break;// PNR Profile-Notification-Request HSS->AS + //Rx + case Code_AA: code_enum.assign("AAA_E"); break; + //4006 + case Code_CC: code_enum.assign("CCA_E"); break; + + //S6a + case Code_UL: code_enum.assign("ULA_E"); break; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + case Code_CL: code_enum.assign("CLA_E"); break; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + case Code_AI: code_enum.assign("AIA_E"); break; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + case Code_ID: code_enum.assign("IDA_E"); break; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + case Code_DS: code_enum.assign("DSA_E"); break; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + case Code_PUE: code_enum.assign("PUEA_E"); break; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + case Code_RS: code_enum.assign("RSA_E"); break; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + case Code_NO: code_enum.assign("NOA_E"); break; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-1 + } + } + return code_enum; +} // End of method command_code_2_enumerated + +const int diameter_codec::_command_codes[] = { + /* Ref: RFC3588 p.3.1 */ + + diameter_codec::Code_CE, // Capabilities-Exchange-Request CER (257) + diameter_codec::Code_CE, // Capabilities-Exchange-Answer CEA (257) + diameter_codec::Code_RA, // Re-Auth-Request RAR (258) + diameter_codec::Code_RA, // Re-Auth-Answer RAA (258) + /**/ + diameter_codec::Code_AC, // Accounting-Request ACR(271) + diameter_codec::Code_AC, // Accounting-Answer ACA (271) + /**/ + diameter_codec::Code_AS, // Abort-Session-Request ASR (274) + diameter_codec::Code_AS, // Abort-Sesion-Answer ASA (274) + diameter_codec::Code_ST, // Session-Termination-Request STR (275) + diameter_codec::Code_ST, // Session-Termination-Answer STA (275) +/**/ + diameter_codec::Code_DW, // Device-Watchdog-Request DWR (280) + diameter_codec::Code_DW, // Device-Watchdog-Answer DWA (280) + diameter_codec::Code_DP, // Disconnect-Peer-Request DPR (282) + diameter_codec::Code_DP, // Disconnect-Peer-Answer DPA (282) + +/* Codes on Cx */ + diameter_codec::Code_UA, // User-Authorization-Request UAR 300 + diameter_codec::Code_UA, // User-Authorization-Answer UAA 300 + diameter_codec::Code_SA, // Server-Assignment-Request SAR 301 + diameter_codec::Code_SA, // Server-Assignment-Answer SAA 301 + diameter_codec::Code_LI, // Location-Info-Request LIR 302 + diameter_codec::Code_LI, // Location-Info-Answer LIA 302 + diameter_codec::Code_MA, // Multimedia-Auth-Request MAR 303 + diameter_codec::Code_MA, // Multimedia-Auth-Answer MAA 303 + diameter_codec::Code_RT, // Registration-Termination-Request RTR 304 + diameter_codec::Code_RT, // Registration-Termination-Answer RTA 304 + diameter_codec::Code_PP, // Push-Profile-Request PPR 305 + diameter_codec::Code_PP, // Push-Profile-Answer PPA 305 + +/* Codes on Sh/Dh interface */ + diameter_codec::Code_UD, // UDR User-Data-Request AS->HSS 306 + diameter_codec::Code_UD, // UDA User-Data-Answer HSS->AS 306 + diameter_codec::Code_PU, // PUR Profile-Update-Request AS->HSS 307 + diameter_codec::Code_PU, // PUA Profile-Update-Answer HSS->AS 307 + diameter_codec::Code_SN, // SNR Subscribe-Notifications-Request AS->HSS 308 + diameter_codec::Code_SN, // SNA Subscribe-Notifications-Answer HSS->AS 308 + diameter_codec::Code_PN, // PNR Profile-Notification-Request HSS->AS 309 + diameter_codec::Code_PN, // PNA Profile-Notification-Answer AS->HSS 309 + +/* Codes on Rx interface */ + diameter_codec::Code_AA, // AAR Auth-Accounting-Request 265 + diameter_codec::Code_AA, // AAA Auth-Accounting-Request 265 + +/*RFC4006*/ + diameter_codec::Code_CC, // CCR Credit-Control-Request 272 + diameter_codec::Code_CC, // CCA Credit-Control-Answer 272 + + /* Codes on S6a interface - TS 129 272 */ + diameter_codec::Code_UL, // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3 + diameter_codec::Code_UL, // Update-Location-Answer ULA (316)- Ref: TS 129 272 7.2.4 + diameter_codec::Code_CL, // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7 + diameter_codec::Code_CL, // Cancel-Location-Answer CLA (317)- Ref: TS 129 272 7.2.8 + diameter_codec::Code_AI, // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5 + diameter_codec::Code_AI, // Authentication-Information-Answer AIA (318)- Ref: TS 129 272 7.2.6 + diameter_codec::Code_ID, // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9 + diameter_codec::Code_ID, // Insert-Subscriber-Data-Answer IDA (319)- Ref: TS 129 272 7.2.10 + diameter_codec::Code_DS, // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11 + diameter_codec::Code_DS, // Delete-Subscriber-Data-Answer DSA (320)- Ref: TS 129 272 7.2.12 + diameter_codec::Code_PUE, // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13 + diameter_codec::Code_PUE, // Purge-UE-Answer PUA (321)- Ref: TS 129 272 7.2.14 + diameter_codec::Code_RS, // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15 + diameter_codec::Code_RS, // Reset-Answer DSA (322)- Ref: TS 129 272 7.2.16 + diameter_codec::Code_NO, // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17 + diameter_codec::Code_NO // Notify-Answer NOA (323)- Ref: TS 129 272 7.2.18 +}; diff --git a/ccsrc/Protocols/Diameter/diameter_codec.hh b/ccsrc/Protocols/Diameter/diameter_codec.hh index 34b9a60..89326bd 100644 --- a/ccsrc/Protocols/Diameter/diameter_codec.hh +++ b/ccsrc/Protocols/Diameter/diameter_codec.hh @@ -1,35 +1,534 @@ #pragma once #include +#include #include "codec_gen.hh" #include "params.hh" #include "avp.hh" -class Base_Type; class TTCN_Typedescriptor_t; class TTCN_Buffer; namespace LibDiameter__TypesAndValues { - class DIAMETER__MSG; //! Forward declaration of TITAN class - class DiameterHeader; + class DiameterHeader; //! Forward declaration of TITAN class } -class diameter_codec: public codec_gen < - LibDiameter__TypesAndValues::DIAMETER__MSG, - LibDiameter__TypesAndValues::DIAMETER__MSG> -{ - std::vector avps; +class diameter_codec { + std::map > _avps; + std::map >::const_iterator _it; + std::unique_ptr _nullptr; + const unsigned char* _start; + const unsigned char* _end; + public: - explicit diameter_codec() : codec_gen(), avps() { }; - virtual ~diameter_codec() { }; + explicit diameter_codec() : _avps(), _it(), _nullptr(nullptr), _start(nullptr) { }; + virtual ~diameter_codec(); + + int encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer); + int encode_session_id(const LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_auth_session_state(const LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_origin_host(const LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + int encode_origin_realm(const LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp, TTCN_Buffer& p_encoding_buffer); + + int decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params); + int decode_avps(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params); + + const std::unique_ptr& get_avp(const int p_code); + +public: + int encode_avp_header(const LibDiameter__Types__Base__AVPs::AVP__Header& p_header, int* p_padding, TTCN_Buffer& p_encoding_buffer); + + int decode_avp(TTCN_Buffer& p_decoding_buffer, const LibDiameter__TypesAndValues::DiameterHeader& p_header, const params& p_params, avp** avp_ptr); + + std::string command_code_2_enumerated(const int p_code, const boolean p_request_flag); + + /** Command code of Request/Answer */ + static const int Code_CE=257;// Capabilities-Exchange + static const int Code_RA=258;// Re-Auth + static const int Code_AC=271;// Accounting + static const int Code_AS=274;// Abort-Session + static const int Code_ST=275;// Session-Termination + static const int Code_DW=280;// Device-Watchdog + static const int Code_DP=282;// Disconnect-Peer + + /* Codes on Cx */ + static const int Code_UA=300;// User-Authorization + static const int Code_SA=301;// Server-Assignment-Request SAR (284 in RFC4740 or 301 in TS 129 229) + static const int Code_LI=302;// Location-Info-Request LIR (285 in RFC4740 or 302 in TS 129 229) + static const int Code_MA=303;// Multimedia-Auth-Request MAR (286 in RFC4740 or 303 in TS 129 229) + static const int Code_RT=304;// Registration-Termination-Request RTR (287 in RFC4740 or 304 in TS 129 229) + static const int Code_PP=305;// Push-Profile-Request PPR (288 in RFC4740 or 305 in TS 129 229) + + /* Codes on Sh/Dh interface */ + static const int Code_UD=306;// UDR User-Data-Request AS->HSS UDR (306) + static const int Code_PU=307;// PUR Profile-Update-Request AS->HSS PUR (307) + static const int Code_SN=308;// SNR Subscribe-Notifications-Request AS->($1) ($2) (308) + static const int Code_PN=309;// PNR Profile-Notification-Request HSS->AS PNR (309) + + /* Codes on Rx interface */ + static const int Code_AA=265;// Auth-Accounting + + /* Codes on Gx interface - RFC4006 and TS 129 212 */ + static const int Code_CC=272;// Credit-Control + + /* Codes on S6a interface - TS 129 272 */ + static const int Code_UL=316; // Update-Location-Request ULR (316)- Ref: TS 129 272 7.2.3-4 + static const int Code_CL=317; // Cancel-Location-Request CLR (317)- Ref: TS 129 272 7.2.7-8 + static const int Code_AI=318; // Authentication-Information-Request AIR (318)- Ref: TS 129 272 7.2.5-6 + static const int Code_ID=319; // Insert-Subscriber-Data-Request IDR (319)- Ref: TS 129 272 7.2.9-10 + static const int Code_DS=320; // Delete-Subscriber-Data-Request DSR (320)- Ref: TS 129 272 7.2.11-12 + static const int Code_PUE=321; // Purge-UE-Request PUR (321)- Ref: TS 129 272 7.2.13-14 + static const int Code_RS=322; // Reset-Request DSR (322)- Ref: TS 129 272 7.2.15-16 + static const int Code_NO=323; // Notify-Request NOR (323)- Ref: TS 129 272 7.2.17-18 + + + /*RFC3588 AVP codes*/ + const int AVP_Accounting_Realtime_Required_AVP = 483; //Ref: RFC3588 9.8.7. Accounting-Realtime-Required AVP + const int AVP_Accounting_Record_Number_AVP = 485; //Ref: RFC3588 9.8.3. Accounting-Record-Number AVP + const int AVP_Accounting_Record_Type_AVP = 480; //Ref: RFC3588 9.8.1. Accounting-Record-Type AVP + const int AVP_Accounting_Sub_Session_Id_AVP = 287; //Ref: RFC3588 9.8.6. Accounting-Sub-Session-Id AVP + const int AVP_Acct_Application_Id_AVP = 259; //Ref: RFC3588 6.9. Acct-Application-Id AVP + const int AVP_Acct_Interim_Interval_AVP = 85; //Ref: RFC3588 9.8.2. Acct-Interim-Interval + const int AVP_Acct_Multi_Session_Id_AVP = 50; //Ref: RFC3588 9.8.5. Acct-Multi-Session-Id AVP + const int AVP_Acct_Session_Id_AVP = 44; //Ref: RFC3588 9.8.4. Acct-Session-Id AVP + const int AVP_Auth_Application_Id_AVP = 258; //Ref: RFC3588 6.8. Auth-Application-Id AVP + const int AVP_Class_AVP = 25; //Ref: RFC3588 8.20. Class AVP + const int AVP_Destination_Host_AVP = 293; //Ref: RFC3588 6.5. Destination-Host AVP + const int AVP_Destination_Realm_AVP = 283; //Ref: RFC3588 6.6. Destination-Realm AVP + const int AVP_Disconnect_Cause_AVP = 273; //Ref: RFC3588 5.4.3. Disconnect-Cause AVP + const int AVP_Error_Message_AVP = 281; //Ref: RFC3588 7.3. Error-Message AVP + const int AVP_Error_Reporting_Host_AVP = 294; //Ref: RFC3588 7.4. Error-Reporting-Host AVP + const int AVP_Event_Timestamp_AVP = 55; //Ref: RFC3588 8.21. Event-Timestamp AVP + const int AVP_Failed_AVP = 279; //Ref: RFC3588 7.5. Failed-AVP AVP + const int AVP_Firmware_Revision_AVP = 267; //Ref: RFC3588 5.3.4. Firmware-Revision AVP + const int AVP_Host_IP_Address_AVP = 257; //Ref: RFC3588 5.3.5. Host-IP-Address AVP + const int AVP_Inband_Security_Id_AVP = 299; //Ref: RFC3588 6.10. Inband-Security-Id AVP + const int AVP_Origin_Host_AVP = 264; //Ref: RFC3588 6.3. Origin-Host AVP + const int AVP_Origin_Realm_AVP = 296; //Ref: RFC3588 6.4. Origin-Realm AVP + const int AVP_Origin_State_Id_AVP = 278; //Ref: RFC3588 8.16. Origin-State-Id AVP + const int AVP_Product_Name_AVP = 269; //Ref: RFC3588 5.3.7. Product-Name AVP + const int AVP_Proxy_Host_AVP = 280; //Ref: RFC3588 6.7.3. Proxy-Host AVP + const int AVP_Proxy_Info_AVP = 284; //Ref: RFC3588 6.7.2. Proxy-Info AVP + const int AVP_Proxy_State_AVP = 33; //Ref: RFC3588 6.7.4. Proxy-State AVP + const int AVP_Re_Auth_Request_Type_AVP = 285; //Ref: RFC3588 8.12. Re-Auth-Request-Type AVP + const int AVP_Redirect_Host_AVP = 292; //Ref: RFC3588 6.12. Redirect-Host AVP + const int AVP_redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 redirect_Max_Cache_Time_AVP is not defined. + const int AVP_Redirect_Host_Usage_AVP = 261; //Ref: RFC3588 6.13. Redirect-Host-Usage AVP + const int AVP_Result_Code_AVP = 268; //Ref: RFC3588 7.1. Result-Code AVP + const int AVP_Route_Record_AVP = 282; //Ref: RFC3588 6.7.1. Route-Record AVP + const int AVP_Session_Id_AVP = 263; //Ref: RFC3588 8.8. Session-Id AVP + const int AVP_Supported_Vendor_Id_AVP = 265; //Ref; RFC3588 5.3.6. Supported-Vendor-Id AVP + const int AVP_Termination_Cause_AVP = 295; //Ref: RFC3588 8.15. Termination-Cause AVP + const int AVP_User_Name_AVP = 1; //Ref: RFC3588 8.14. User-Name AVP + const int AVP_Vendor_Id_AVP = 266; //Ref: RFC3588 5.3.3. Vendor-Id AVP + const int AVP_Vendor_Specific_Appl_Id_AVP = 260; //Ref: RFC3588 6.11. Vendor-Specific-Application-Id AVP + /*end RFC3588 AVP codes*/ + + //RFC4740 AVP codes{ +// const int AVP_Auth_Grace_Period_AVP = 276; //Ref: RFC3588 8.10. Auth-Grace-Period AVP + const int AVP_Auth_Session_State_AVP = 277; //Ref: RFC3588 8.11. Auth-Session-State AVP +// const int AVP_Authorization_Lifetime_AVP = 291; //Ref: RFC3588 8.9. Authorization-Lifetime AVP +// const int AVP_Redirect_Max_Cache_Time_AVP = 262; //Ref: RFC3588 6.14. Redirect-Max-Cache-Time AVP +// const int AVP_SIP_Accounting_Information_AVP = 368; //Ref: RFC4740 9.1. SIP-Accounting-Information AVP +// const int AVP_SIP_Accounting_Server_URI_AVP = 369; //Ref: RFC4740 9.1.1. SIP-Accounting-Server-URI AVP +// const int AVP_SIP_AOR_AVP = 122; //Ref: RFC4740 9.8. SIP-AOR AVP + const int AVP_SIP_Auth_Data_Item_RFC_AVP = 376; //Ref: RFC4740 9.5. SIP-Auth-Data-Item AVP + const int AVP_SIP_Item_Number_AVP = 378; + const int AVP_SIP_Authenticate_RFC_AVP = 379; //Ref: RFC4740 9.5.3. SIP-Authenticate AVP +// const int AVP_SIP_Authentication_Info_AVP = 381; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP + const int AVP_SIP_Authentication_Scheme_RFC_AVP = 377; //Ref: RFC4740 9.5.1. SIP-Authentication-Scheme AVP + const int AVP_SIP_Authorization_RFC_AVP = 380; //Ref: RFC4740 9.5.4. SIP-Authorization AVP +// const int AVP_SIP_Credit_Control_Server_URI_AVP = 370; //Ref: RFC4740 9.1.2. SIP-Credit-Control-Server-URI AVP +// const int AVP_SIP_Deregistration_Reason_AVP = 383; //Ref: RFC4740 9.5.5. SIP-Authentication-Info AVP +// const int AVP_SIP_Item_Number_AVP = 378; //Ref: RFC4740 9.5.2 SIP-Item-Number AVP +// const int AVP_SIP_MandatoryCapability_AVP = 373; //Ref: RFC4740 9.3.1. SIP-Mandatory-Capability AVP + const int AVP_SIP_Method_AVP = 393; //Ref: RFC4740 9.14. SIP-Method AVP + const int AVP_SIP_Number_Auth_Items_RFC_AVP = 382; //Ref: RFC4740 9.6. SIP-Number-Auth-Items AVP +// const int AVP_SIP_OptionalCapability_AVP = 374; //Ref: RFC4740 9.3.2. SIP-Optional-Capability AVP +// const int AVP_SIP_Reason_Code_AVP = 384; //Ref: RFC4740 9.7.1. SIP-Reason-Code AVP +// const int AVP_SIP_Reason_Info_AVP = 385; //Ref: RFC4740 9.7.2. SIP-Reason-Info AVP +// const int AVP_SIP_Server_Assignment_Type_AVP = 375; //Ref: RFC4740 9.4. SIP-Server-Assignment-Type AVP +// const int AVP_SIP_Server_Capabilities_AVP = 372; //Ref: RFC4740 9.3. SIP-Server-Capabilities AVP +// const int AVP_SIP_Server_URI_AVP = 371; //Ref: RFC4740 9.2 SIP-Server-URI AVP +// const int AVP_SIP_Supported_User_Data_Type_AVP = 388; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// const int AVP_SIP_User_Authorization_Type_AVP = 387; //Ref: RFC4740 9.10. SIP-User-Authorization-Type AVP +// const int AVP_SIP_User_Data_Already_Available_AVP = 392; //Ref: RFC4740 9.13. SIP-User-Data-Already-Available AVP +// const int AVP_SIP_User_Data_AVP = 389; //Ref: RFC4740 9.12. SIP-User-Data AVP +// const int AVP_SIP_User_Data_Contents_AVP = 391; //Ref: RFC4740 9.12.2. SIP-User-Data-Contents AVP +// const int AVP_SIP_User_Data_Type_AVP = 390; //Ref: RFC4740 9.12.1. SIP-User-Data-Type AVP +// const int AVP_SIP_Visited_Network_Id_AVP = 386; //Ref: RFC4740 9.9. SIP-Visited-Network-Id AVP + //end of RFC4740 AVP codes + + const int AVP_Digest_Realm_AVP = 104; + const int AVP_Digest_Nonce_AVP = 105; + const int AVP_Digest_Domain_AVP = 119; + const int AVP_Digest_Opaque_AVP = 116; + const int AVP_Digest_Stale_AVP = 120; + const int AVP_Digest_Algorithm_AVP = 111; + const int AVP_Digest_QoP_AVP = 110; + const int AVP_Digest_HA1_AVP = 121; + const int AVP_Digest_Auth_Param_AVP = 117; + const int AVP_Digest_Username_AVP = 115; + const int AVP_Digest_URI_AVP = 109; + const int AVP_Digest_Response_AVP = 103; + const int AVP_Digest_CNonce_AVP = 113; + const int AVP_Digest_Nonce_Count_AVP = 114; + const int AVP_Digest_Method_AVP = 108; + const int AVP_Digest_Entity_Body_Hash_AVP = 112; + const int AVP_Digest_Nextnonce_AVP = 107; + const int AVP_Digest_Response_Auth_AVP = 106; + + + //RFC4005 AVP codes + const int AVP_Called_Station_Id_AVP = 30; + const int AVP_Framed_IP_Address_AVP = 8; + const int AVP_Framed_IPv6_Prefix_AVP = 97; + const int AVP_Framed_Interface_Id_AVP = 96; + //end of RFC4005 AVP codes - virtual int encode (const LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, OCTETSTRING& p_data); - virtual int decode (const OCTETSTRING& p_data, LibDiameter__TypesAndValues::DIAMETER__MSG& p_diameter_msg, params* p_params = NULL); + //RFC4006 AVP codes +// const int AVP_Rating_Group_AVP = 433; //Ref: RFC4006 8.29. Rating-Group AVP +const int AVP_Tariff_Time_Change_AVP = 451; //Ref: RFC4006 8.20. Tariff-Time-Change AVP +// const int AVP_CC_Correlation_Id_AVP = 411; //Ref: RFC4006 8.1. CC-Correlation-Id AVP +const int AVP_CC_Input_Octets_AVP = 412; //Ref: RFC4006 8.24. CC-Input-Octets AVP +const int AVP_CC_Money_AVP = 413; //Ref: RFC4006 8.22. CC-Money AVP +const int AVP_CC_Output_Octets_AVP = 414; //Ref: RFC4006 8.25. CC-Output-Octets AVP + const int AVP_CC_Request_Number_AVP = 415; //Ref: RFC4006 8.2. CC-Request-Number AVP + const int AVP_CC_Request_Type_AVP = 416; //Ref: RFC4006 8.3. CC-Request-Type AVP +const int AVP_CC_Service_Specific_Units_AVP = 417; //Ref: RFC4006 8.26. CC-Service-Specific-Units AVP +const int AVP_CC_Session_Failover_AVP = 418; //Ref: RFC4006 8.4. CC-Session-Failover AVP +// const int AVP_vendIdCC_Sub_Session_Id_AVP = 419; //Ref: RFC4006 8.5. CC-Sub-Session-Id AVP +const int AVP_CC_Time_AVP = 420; //Ref: RFC4006 8.21. CC-Time AVP +const int AVP_CC_Total_Octets_AVP = 421; //Ref: RFC4006 8.23. CC-Total-Octets AVP +const int AVP_CC_Unit_Type_AVP = 454; //Ref: RFC4006 8.32. CC-Unit-Type AVP +// const int AVP_vendIdCheck_Balance_Result_AVP = 422; //Ref: RFC4006 8.6. Check-Balance-Result AVP 12.8. Check-Balance-Result AVP +const int AVP_Cost_Information_AVP = 423; //Ref: RFC4006 8.7. Cost-Information AVP +const int AVP_Cost_Unit_AVP = 424; //Ref: RFC4006 8.12. Cost-Unit AVP +const int AVP_Credit_Control_Failure_Handling_AVP = 427; //Ref: RFC4006 8.14. Credit-Control-Failure-Handling AVP +const int AVP_Currency_Code_AVP = 425; //Ref: RFC4006 8.11. Currency-Code AVP +const int AVP_Direct_Debiting_Failure_Handling_AVP = 428; //Ref: RFC4006 8.15. Direct-Debiting-Failure-Handling AVP +const int AVP_Exponent_AVP = 429; //Ref: RFC4006 8.9. Exponent AVP +const int AVP_Filter_Id_AVP = 11; //Ref: RFC4005 6.7. Filter-Id AVP +const int AVP_Final_Unit_Action_AVP = 449; //Ref: RFC4006 8.35. Final-Unit-Action AVP +const int AVP_Final_Unit_Indication_AVP = 430; //Ref: RFC4006 8.34. Final-Unit-Indication AVP +const int AVP_G_S_U_Pool_Identifier_AVP = 453; //Ref: RFC4006 8.31. G-S-U-Pool-Identifier AVP +const int AVP_G_S_U_Pool_Reference_AVP = 457; //Ref: RFC4006 8.30. G-S-U-Pool-Reference AVP +const int AVP_Granted_Service_Unit_AVP = 431; //Ref: RFC4006 8.17. Granted-Service-Unit AVP +// const int AVP_vendIdMultiple_Services_Credit_Control_AVP = 456; //Ref: RFC4006 8.16. Multiple-Services-Credit-Control AVP +const int AVP_Multiple_Services_Indicator_AVP = 455; //Ref: RFC4006 8.40. Multiple-Services-Indicator AVP + const int AVP_Redirect_Address_Type_AVP = 433; //Ref: RFC4006 8.38. Redirect-Address-Type AVP + const int AVP_Redirect_Server_Address_AVP = 435; //Ref: RFC4006 8.39. Redirect-Server-Address AVP + const int AVP_Redirect_Server_AVP = 434; //Ref: RFC4006 8.37. Redirect-Server AVP +// const int AVP_vendIdRequested_Action_AVP = 436; //Ref: RFC4006 8.41. Requested-Action AVP +const int AVP_Requested_Service_Unit_AVP = 437; //Ref: RFC4006 8.18. Requested-Service-Unit AVP +const int AVP_Restriction_Filter_Rule_AVP = 438; //Ref: RFC4006 8.36. Restriction-Filter-Rule AVP + const int AVP_Service_Context_Id_AVP = 461; //Ref: RFC4006 8.42. Service-Context-Id AVP + const int AVP_Service_Identifier_AVP = 439; //Ref: RFC4006 8.28. Service-Identifier AVP + const int AVP_Requested_Action_AVP = 436; + // const int AVP_vendIdService_Parameter_Info_AVP = 440; //Ref: RFC4006 8.43. Service-Parameter-Info AVP +// const int AVP_vendIdService_Parameter_Type_AVP = 441; //Ref: RFC4006 8.44. Service-Parameter-Type AVP +// const int AVP_vendIdService_Parameter_Value_AVP = 442; //Ref: RFC4006 8.45. Service-Parameter-Value AVP + const int AVP_Subscription_Id_AVP = 443; //Ref: RFC4006 8.46. Subscription-Id AVP + const int AVP_Subscription_Id_Data_AVP = 444; //Ref: RFC4006 + const int AVP_Subscription_Id_Type_AVP = 450; //Ref: RFC4006 8.47. Subscription-Id-Type AVP + const int AVP_Tariff_Change_Usage_AVP = 452;//Ref: RFC4006 8.27. Tariff-Change-Usage AVP + const int AVP_Rating_Group_AVP = 433; +const int AVP_Unit_Value_AVP = 445; //Ref: RFC4006 8.8. Unit-Value AVP +const int AVP_Used_Service_Unit_AVP = 446; //Ref: RFC4006 8.19. Used-Service-Unit AVP +// const int AVP_vendIdUser_Equipment_Info_AVP = 458; //Ref: RFC4006 8.49. User-Equipment-Info AVP +// const int AVP_vendIdUser_Equipment_Info_Type_AVP = 459; //Ref: RFC4006 8.50. User-Equipment-Info-Type AVP +// const int AVP_vendIdUser_Equipment_Info_Value_AVP = 460; //Ref: RFC4006 8.51. User-Equipment-Info-Value AVP +const int AVP_Validity_Time_AVP = 448; //Ref: RFC4006 8.33. Validity-Time AVP +const int AVP_Value_Digits_AVP = 447; //Ref: RFC4006 8.10. Value-Digits AVP + /*end of RFC4006 AVP codes*/ + + //TS129_229 AVP codes +// const int AVP_vendIdCharging_Information_AVP = 61; //Ref: ETSI TS 129 229 Charging_Information_AVP +// const int AVP_vendIdPrimary_Event_Charging_Function_Name_AVP = 619; //Ref: ETSI TS 129 229 Primary_Event_Charging_Function_Name_AVP +// const int AVP_vendIdSecondary_Event_Charging_Function_Name_AVP = 620; //Ref: ETSI TS 129 229 Secondary_Event_Charging_Function_Name_AVP +// const int AVP_vendIdPrimary_Charging_Collection_Function_Name_AVP = 621; //Ref: ETSI TS 129 229 Primary_Charging_Collection_Function_Name_AVP +// const int AVP_vendIdSecondary_Charging_Collection_Function_Name_AVP = 622; //Ref: ETSI TS 129 229 Secondary_Charging_Collection_Function_Name_AVP + const int AVP_Charging_Rule_Remove_AVP = 1002; + const int AVP_Charging_Rule_Install_AVP = 1001; + const int AVP_Charging_Rule_Report_AVP = 1018; + const int AVP_Routing_Rule_Install_AVP = 1081; + const int AVP_Routing_Rule_Remove_AVP = 1075; + const int AVP_QoS_Information_AVP = 1016; + const int AVP_Default_EPS_Bearer_QoS_AVP = 1049; + const int AVP_Server_Capabilities_AVP = 603; //Ref: ETSI TS 129 229 Server_Capabilities_AVP +// const int AVP_vendIdMandatory_Capability_AVP = 604; //Ref: ETSI TS 129 229 Mandatory_Capability_AVP +// const int AVP_vendIdOptional_Capability_AVP = 605; //Ref: ETSI TS 129 229 Optional_Capability_AVP + const int AVP_IP_CAN_Type_AVP = 1027; + const int AVP_RAT_Type_AVP = 1032; //Ref: ETSI TS 129 212 RAT_Type_AVP + const int AVP_Event_Trigger_AVP = 1006; + const int AVP_Session_Release_Cause_AVP = 1045; + const int AVP_Charging_Rule_Name_AVP = 1005; + const int AVP_AN_GW_Address_AVP = 1050; + + const int AVP_Experimental_Result_AVP = 297; + const int AVP_Experimental_Result_Code_AVP = 298; + const int AVP_User_Data_AVP = 606; + + /*end of TS129_229 AVP codes*/ + + //tS129_329 + const int AVP_Public_Identity_AVP = 601; + const int AVP_Server_Name_AVP = 602; + const int AVP_Feature_List_ID_AVP = 629; // Ref: 3GPP TS 29.229, clause 6.3.30 + const int AVP_Feature_List_AVP = 630; // Ref: 3GPP TS 29.229, clause 6.3.31 + const int AVP_Supported_Features_AVP = 628; // Ref: 3GPP TS 29.329 6.3.11 Supported-Features AVP (See 3GPP TS 29.229, clause 6.3.29) + /*End TS129_329*/ + + //Sh AVP codes + + ////const int AVP_Public_Identity_AVP = 601; + const int AVP_User_Identity_AVP = 700; + const int AVP_MSISDN_AVP= 701; + const int AVP_User_Data_Sh_AVP= 702; + const int AVP_Data_Reference_AVP = 703; + const int AVP_Service_Indication_AVP = 704; + const int AVP_Subs_Req_Type_AVP =705; + const int AVP_Requested_Domain_AVP = 706; + const int AVP_Current_Location_AVP = 707; + const int AVP_Identity_Set_AVP = 708; + const int AVP_Expiry_Time_AVP= 709; + const int AVP_Send_Data_Indication_AVP = 710; + const int AVP_Repository_Data_ID_AVP = 715; + const int AVP_Sequence_Number_AVP = 716; + ////const int AVP_Server_Name_AVP = 602; + ////const int AVP_Supported_Features_AVP = 628; + ////const int AVP_Feature_List_ID_AVP = 629; + ////const int AVP_Feature_List_AVP = 630; + const int AVP_Wildcarded_PSI_AVP = 634; + const int AVP_Wildcarded_IMPU_AVP = 636; + const int AVP_DSAI_Tag_AVP = 711; + ////const int AVP_Experimental_Result_Code_AVP = 298; + ////const int AVP_Experimental_Result_AVP = 297; + ////const int AVP_User_Data_AVP = 606; + //TS129_214 AVP codes + const int AVP_Media_Component_Description_AVP = 517; + const int AVP_Media_Component_Nr_AVP = 518; + const int AVP_Media_Sub_Component_AVP = 519; + const int AVP_AF_Application_Identifier_AVP = 504; + const int AVP_Media_Type_AVP = 520; + const int AVP_AF_Signalling_Protocol_AVP = 529; + const int AVP_Reservation_Priority_AVP = 458; + const int AVP_RS_Bandwidth_AVP = 522; + const int AVP_RR_Bandwidth_AVP = 521; + const int AVP_Codec_Data_AVP = 524; + const int AVP_Flow_Description_AVP = 507; + const int AVP_Flow_Number_AVP = 509; + const int AVP_Flow_Status_AVP = 511; + const int AVP_Flow_Usage_AVP = 512; + const int AVP_Specific_Action_AVP = 513; + const int AVP_Service_Info_Status_AVP = 527; + const int AVP_Rx_Request_Type_AVP = 533; + + //TS129_215 AVP codes + const int AVP_QoS_Rule_Name_AVP = 1054; + const int AVP_Rule_Failure_Code_AVP = 1031; + const int AVP_PDN_Connection_ID_AVP = 1065; + const int AVP_QoS_Rule_Report_AVP = 1055; + const int AVP_QoS_Rule_Install_AVP = 1051; + const int AVP_Multiple_BBERF_Action_AVP = 2204; + const int AVP_Session_Linking_Indicator_AVP = 1064; + const int AVP_Subses_Decision_Info_AVP = 2200; + const int AVP_Subses_Enforcement_Info_AVP = 2201; + const int AVP_Subsession_Id_AVP = 2202; + const int AVP_Subsession_Operation_AVP = 2203; + //End TS129_215 AVP codes + + //TS129_272 AVP codes + const int AVP_ULR_Flags_AVP = 1405; //ref: 7.3.7 ETSI TS 129 272 + const int AVP_ULA_Flags_AVP = 1406; //ref: 7.3.8 + const int AVP_Visited_PLMN_Id_AVP = 1407; //ref: 7.3.9 + const int AVP_UE_SRVCC_Capability_AVP = 1615; //ref: 7.3.130 + const int AVP_SGSN_Number_AVP = 1489; //ref: 7.3.102 + const int AVP_Homogeneous_Support_AVP = 1493; //ref: 7.3.107 + + const int AVP_Context_Identifier_AVP = 1423; //ref: 7.3.27 + const int AVP_Service_Selection_AVP = 493; //ref: 7.3.36 + const int AVP_MIP_Home_Agent_Address_AVP = 334; //ref: 7.3.42 - IETF RFC 4004 7.4 + const int AVP_MIP_Home_Agent_Host_AVP = 348; //ref: 7.3.43 - IETF RFC 4004 7.11 + const int AVP_MIP6_Home_Link_Prefix_AVP = 125; //ref:IETF RFC 5447 4.2.4 + const int AVP_MIP6_Agent_Info_AVP = 486; //ref: 7.3.45 + const int AVP_Visited_Network_Identifier_AVP = 600; //ref: 7.3.105 - TS 129 229 6.3.1 + const int AVP_SIP_Authentication_Context_AVP = 611; + const int AVP_UAR_Flags_AVP = 637; + const int AVP_User_Authorization_Type_AVP = 623; + const int AVP_Server_Assignment_Type_AVP = 614; + const int AVP_User_Data_Already_Available_AVP = 624; + const int AVP_SIP_Digest_Authenticate_AVP = 635; + const int AVP_SCSCF_Restoration_Info_AVP = 639; + const int AVP_Restoration_Info_AVP = 649; + const int AVP_Path_AVP = 640; + const int AVP_Contact_AVP = 641; + const int AVP_Subscription_Info_AVP = 642; + const int AVP_Originating_Request_AVP = 652; + const int AVP_Deregistration_Reason_AVP = 615; + const int AVP_Reason_Code_AVP = 616; + const int AVP_Reason_Info_AVP = 617; + const int AVP_Specific_APN_Info_AVP = 1472; //ref: 7.3.82 + const int AVP_Active_APN_AVP = 1612; //ref: 7.3.127 + const int AVP_Error_Diagnostic_AVP = 1614; //ref: 7.3.128; + const int AVP_Subscriber_Status_AVP = 1424; + const int AVP_Operator_Determined_Barring_AVP = 1425; + const int AVP_HPLMN_ODB_AVP = 1418; + const int AVP_Access_Restriction_Data_AVP = 1426; + const int AVP_APN_OI_Replacement_AVP = 1427; + const int AVP_Max_Requested_Bandwidth_UL_AVP = 516; + const int AVP_Max_Requested_Bandwidth_DL_AVP = 515; + const int AVP_APN_Aggregate_Max_Bitrate_UL_AVP = 1041; + const int AVP_APN_Aggregate_Max_Bitrate_DL_AVP = 1040; + const int AVP_AMBR_AVP = 1435; + + const int AVP_All_APN_Conf_Included_Id_AVP = 1428; + const int AVP_APN_Configuration_Profile_AVP = 1429; + const int AVP_PDN_Type_AVP = 1456; + const int AVP_QoS_Class_Identifier_AVP=1028; + const int AVP_Priority_Level_AVP = 1046; + const int AVP_Pre_emption_Capability_AVP = 1047; + const int AVP_Pre_emption_Vulnerability_AVP = 1048; + + const int AVP_Allocation_Retention_Priority_AVP =1034; + const int AVP_EPS_Subscribed_QoS_Profile_AVP = 1431; + const int AVP_APN_Configuration_AVP = 1430; + const int AVP_GMLC_Address_AVP = 2405; //ref: 7.3.109 - TS 129 173 6.4.7 + //.... + const int AVP_Complete_DL_Included_Indicator_AVP = 1468; + const int AVP_QoS_Subscribed_AVP = 1404; + const int AVP_PDP_Type_AVP = 1470; + const int AVP_PDP_Context_AVP = 1469; + const int AVP_GPRS_Subscription_Data_AVP = 1467; + const int AVP_Subscription_Data_AVP = 1400; //ref: 7.3.2 + const int AVP_Immediate_Response_Preferred_AVP = 1412; //ref: 7.3.16 + const int AVP_Re_synchronization_Info_AVP = 1411; //ref: 7.3.15 + const int AVP_Req_EUTRAN_Auth_Info_AVP = 1408; //ref: 7.3.11 + const int AVP_Req_UTRAN_GERAN_Auth_Info_AVP = 1409; //ref: 7.3.12 + + const int AVP_Item_Number_AVP = 1419; + const int AVP_RAND_AVP = 1447; + const int AVP_XRES_AVP = 1448; + const int AVP_AUTN_AVP = 1449; + const int AVP_KASME_AVP = 1450; + const int AVP_E_UTRAN_Vector_AVP = 1414; + const int AVP_SIP_Authentication_Scheme_3GPP_AVP = 608; + const int AVP_SIP_Authenticate_3GPP_AVP = 609; + const int AVP_SIP_Authorization_3GPP_AVP = 610; + const int AVP_SIP_Number_Auth_Items_3GPP_AVP = 607; + const int AVP_SIP_Auth_Data_Item_3GPP_AVP = 612;//ETSI TS 129 229 V10.5.0 (2013-04) Clause 6.3.13 SIP-Auth-Data-Item AVP + const int AVP_Identity_with_Emergency_Registration_AVP = 651; + const int AVP_Confidentiality_Key_AVP = 625; + const int AVP_Integrity_Key_AVP = 626; + const int AVP_Line_Identifier_AVP = 500; + const int AVP_UTRAN_Vector_AVP = 1415; + const int AVP_SRES_AVP = 1454; + const int AVP_Kc_AVP = 1453; + const int AVP_GERAN_Vector_AVP = 1416; + const int AVP_Authentication_Info_AVP = 1413; + + const int AVP_Cancellation_Type_AVP = 1420; + const int AVP_CLR_Flags_AVP = 1638; //ref: 7.3.152 + const int AVP_IDR_Flags_AVP = 1490; //ref: 7.3.103 + const int AVP_DSR_Flags_AVP = 1421; //ref: 7.3.25 + const int AVP_DSA_Flags_AVP = 1422; //ref: 7.3.26 + const int AVP_PUER_Flags_AVP= 1635; //ref: 7.3.149 + const int AVP_PUEA_Flags_AVP= 1442; //ref: 7.3.48 + const int AVP_IDA_Flags_AVP = 1441; //ref: 7.3.47 + const int AVP_NOR_Flags_AVP = 1443; //ref: 7.3.49 + const int AVP_IMS_Voice_PS_Sessions_Support_AVP = 1492; + const int AVP_Last_UE_Activity_Time_AVP = 1494; + const int AVP_EPS_User_State_AVP = 1495; + const int AVP_EPS_Location_Information_AVP = 1496; + //end TS129_272 AVP codes + + + //TS132_299 AVP codes + const int AVP_Charging_Information_AVP = 618; + const int AVP_Primary_Event_Charging_Function_Name_AVP = 619; + const int AVP_Secondary_Event_Charging_Function_Name_AVP = 620; + const int AVP_Primary_Charging_Collection_Function_Name_AVP = 621; + const int AVP_Secondary_Charging_Collection_Function_Name_AVP = 622; +// const int AVP_User_CSG_Information_AVP = 2319; //Ref: ETSI TS 132 299 User_CSG_Information_AVP +// const int AVP_CSG_Id_AVP = 1437; //Ref: ETSI TS 132 299 CSG_Id_AVP +// const int AVP_CSG_Access_Mode_AVP = 2317; //Ref: ETSI TS 132 299 CSG_Access_Mode_AVP +// const int AVP_CSG_Membership_Indication_AVP = 2318; //Ref: ETSI TS 132 299 CSG_Membership_Indication_AVP + const int AVP_Service_Information_AVP = 873; //Ref: ETSI TS 132 299 Service_Information_AVP + const int AVP_PS_Information_AVP = 874; //Ref: ETSI TS 132 299 PS_Information_AVP + const int AVP_WLAN_Information_AVP = 875; //Ref: ETSI TS 132 299 WLAN_Information_AVP + const int AVP_IMS_Information_AVP = 876; //Ref: ETSI TS 132 299 IMS_Information_AVP +// const int AVP_MMS_Information_AVP = 877; //Ref: ETSI TS 132 299 MMS_Information_AVP +// const int AVP_LCS_Information_AVP = 878; //Ref: ETSI TS 132 299 LCS_Information_AVP +// const int AVP_PoC_Information_AVP = 879; //Ref: ETSI TS 132 299 PoC_Information_AVP +// const int AVP_MBMS_Information_AVP = 880; //Ref: ETSI TS 132 299 MBMS_Information_AVP + const int AVP_Service_Generic_Information_AVP = 1256; //Ref: ETSI TS 132 299 Service_Generic_Information_AVP + const int AVP_Event_Type_AVP = 825; //Ref: ETSI TS 132 299 Event_Type_AVP + const int AVP_Event_AVP = 823; //Ref: ETSI TS 132 299 Event_AVP + const int AVP_Expires_AVP = 888; //Ref: ETSI TS 132 299 Expires_AVP + const int AVP_Role_Of_Node_AVP = 829; //Ref: ETSI TS 132 299 Role_Of_Node_AVP + const int AVP_Node_Functionality_AVP = 862; //Ref: ETSI TS 132 299 Node_Functionality_AVP + const int AVP_User_Session_ID_AVP = 830; //Ref: ETSI TS 132 299 User_Session_ID_AVP + const int AVP_Calling_Party_Address_AVP = 831; //Ref: ETSI TS 132 299 Calling_Party_Address_AVP + const int AVP_Called_Party_Address_AVP = 832; //Ref: ETSI TS 132 299 Called_Party_Address_AVP + const int AVP_Called_Asserted_Identity_AVP = 1250; //Ref: ETSI TS 132 299 Called_Asserted_Identity_AVP + const int AVP_Alternate_Charged_Party_Address_AVP = 1280;//Ref: ETSI TS 132 299 Alternate_Charged_Party_Address_AVP + const int AVP_Requested_Party_Address_AVP = 1251; //Ref: ETSI TS 132 299 Requested_Party_Address_AVP + const int AVP_Associated_URI_AVP = 856; //Ref: ETSI TS 132 299 Associated_URI_AVP + const int AVP_Time_Stamps_AVP = 833; //Ref: ETSI TS 132 299 Time_Stamps_AVP + const int AVP_SIP_Request_Timestamp_AVP = 834; //Ref: ETSI TS 132 299 SIP_Request_Timestamp_AVP + const int AVP_SIP_Response_Timestamp_AVP = 835; //Ref: ETSI TS 132 299 SIP_Response_Timestamp_AVP + const int AVP_Application_Server_Information_AVP = 850;//Ref: ETSI TS 132 299 Application_Server_Information_AVP + const int AVP_Application_Server_AVP = 836; //Ref: ETSI TS 132 299 Application_Server_AVP + const int AVP_Application_Provided_Called_Party_Address_AVP = 837; //Ref: ETSI TS 132 299 Application_Provided_Called_Party_Address_AVP + const int AVP_Inter_Operator_Identifier_AVP = 838; //Ref: ETSI TS 132 299 Inter_Operator_Identifier_AVP + const int AVP_Originating_IOI_AVP = 839; //Ref: ETSI TS 132 299 Originating_IOI_AVP + const int AVP_Terminating_IOI_AVP = 840; //Ref: ETSI TS 132 299 Terminating_IOI_AVP + const int AVP_IMS_Charging_Identifier_AVP = 841; //Ref: ETSI TS 132 299 IMS_Charging_Identifier_AVP + const int AVP_SDP_Session_Description_AVP = 842; //Ref: ETSI TS 132 299 SDP_Session_Description_AVP + const int AVP_SDP_Media_Component_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// const int AVP_SDP_Media_Name_AVP = 844; //Ref: ETSI TS 132 299 SDP_Media_Name_AVP +// const int AVP_SDP_Media_Description_AVP = 845; //Ref: ETSI TS 132 299 SDP_Media_Description_AVP +// const int AVP_Media_Initiator_Flag_AVP = 882; //Ref: ETSI TS 132 299 Media_Initiator_Flag_AVP +// const int AVP_Media_Initiator_Party_AVP = 1288; //Ref: ETSI TS 132 299 Media_Initiator_Party_AVP +// const int AVP_Authorized_QoS_AVP = 849; //Ref: ETSI TS 132 299 Authorized_QoS_AVP + const int AVP_Served_Party_IP_Address_AVP = 848; //Ref: ETSI TS 132 299 Served_Party_IP_Address_AVP + const int AVP_Trunk_Group_ID_AVP = 851; //Ref: ETSI TS 132 299 Trunk_Group_ID_AVP + const int AVP_Incoming_Trunk_Group_ID_AVP = 852; //Ref: ETSI TS 132 299 Incoming_Trunk_Group_ID_AVP + const int AVP_Outgoing_Trunk_Group_ID_AVP = 853; //Ref: ETSI TS 132 299 Outgoing_Trunk_Group_ID_AVP + + const int AVP_Delivery_Status_AVP =2104; + const int AVP_Application_Session_ID_AVP=2103; + const int AVP_Application_Service_Type_AVP=2102; + const int AVP_Application_Server_ID_AVP=2101; + + const int AVP_Reporting_Reason_AVP=872; + const int AVP_Time_Quota_Threshold_AVP=868; + const int AVP_Volume_Quota_Threshold_AVP=869; + const int AVP_Unit_Quota_Threshold_AVP=1226; + const int AVP_Quota_Holding_Time_AVP=871; + const int AVP_Quota_Consumption_Time_AVP=881; + const int AVP_Time_Quota_Type_AVP=1271; + const int AVP_Base_Time_Interval_AVP=1265; + const int AVP_Time_Quota_Mechanism_AVP=1270; + const int AVP_Envelope_Start_Time_AVP=1269; + const int AVP_Envelope_End_Time_AVP=1267; + const int AVP_Envelope_AVP=1266; + const int AVP_Envelope_Reporting_AVP=1268; + const int AVP_Trigger_AVP=1264; + const int AVP_Trigger_Type_AVP=870; + const int AVP_Refund_Information_AVP=2022; + const int AVP_Multiple_Services_Credit_Control_AVP = 456; + + const int AVP_Offline_Charging_AVP = 1278; + const int AVP_Low_Balance_Indication_AVP=2020; + const int AVP_Remaining_Balance_AVP = 2021; + //end of TS132_299 AVP codes private: - int encode_header(const LibDiameter__TypesAndValues::DiameterHeader& p_header, TTCN_Buffer& p_encoding_buffer); - int decode_header(TTCN_Buffer& p_decoding_buffer, LibDiameter__TypesAndValues::DiameterHeader& p_header); - int padding(TTCN_Buffer& p_encoding_buffer); //padding = (4 - (size & 3)) & 3; + //NOTE: The order of constants in the following array is very important. + //It must exactly match order specified in TTCN-3 module. + static const int _command_codes[]; + }; // End of class diameter_codec diff --git a/ccsrc/Protocols/Diameter/diameter_uar_codec.cc b/ccsrc/Protocols/Diameter/diameter_uar_codec.cc new file mode 100644 index 0000000..4c7f93e --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_uar_codec.cc @@ -0,0 +1,208 @@ +#include + +#include "avp.hh" + +#include "diameter_uar_codec.hh" + +#include "loggers.hh" +#include "converter.hh" + +template class OPTIONAL; +class TTCN_EncDec; + +int diameter_uar_codec::encode(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, OCTETSTRING& p_data) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::encode", (const Base_Type &)p_uar_msg); + + TTCN_EncDec::clear_error(); + TTCN_Buffer encoding_buffer; + + if (_codec.encode_header(p_uar_msg.header(), encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode: Failed to encode UAR header"); + return -1; + } + + if (encode_avps(p_uar_msg, encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode: Failed to encode UAR AVPs"); + return -1; + } + + p_data = OCTETSTRING(encoding_buffer.get_len(), encoding_buffer.get_data()); + // Update length at offset #1 on 3 bytes + + return 0; +} + +int diameter_uar_codec::encode_avps(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, TTCN_Buffer p_encoding_buffer) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + + // SessionId + if (_codec.encode_session_id(p_uar_msg.session__Id(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode session__Id__AVP"); + return -1; + } + + // Mandatory AVPs + if (_codec.encode_origin_host(p_uar_msg.uAR__Body().origin__Host(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode Origin__Host__AVP"); + return -1; + } + if (_codec.encode_origin_realm(p_uar_msg.uAR__Body().origin__Realm(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: Failed to encode Origin__Realm__AVP"); + return -1; + } + + + + // Optional AVPs + if (_codec.encode_auth_session_state(p_uar_msg.uAR__Body().auth__Session__State(), p_encoding_buffer) == -1) { + loggers::get_instance().warning("diameter_uar_codec::encode_avps: AVP is missing"); + return -1; + } + // TODO Continue + + loggers::get_instance().log_msg("<<< diameter_uar_codec::encode_avps: ", OCTETSTRING(p_encoding_buffer.get_len(), p_encoding_buffer.get_data())); + return 0; +} + +int diameter_uar_codec::decode(const OCTETSTRING& p_data, LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, params* p_params) { + loggers::get_instance().log_msg(">>> diameter_uar_codec::decode: ", (const Base_Type &)p_data); + + TTCN_EncDec::set_error_behavior(TTCN_EncDec::ET_ALL, TTCN_EncDec::EB_DEFAULT); + TTCN_EncDec::clear_error(); + TTCN_Buffer decoding_buffer(p_data); + + params _params; + _params.insert(std::make_pair("Request", "1")); + + if (_codec.decode_header(decoding_buffer, p_uar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Failed to decode UAR message header"); + return -1; + } + + if (_codec.decode_avps(decoding_buffer, p_uar_msg.header(), static_cast(_params)) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Failed to decode UAR AVPs"); + return -1; + } + + // Mandatory AVPs + if (decode_auth_session_state(p_uar_msg.uAR__Body().auth__Session__State()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Auth__Session__State__AVP"); + return -1; + } + if (decode_origin_host(p_uar_msg.uAR__Body().origin__Host()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Origin__Host__AVP"); + return -1; + } + if (decode_origin_realm(p_uar_msg.uAR__Body().origin__Realm()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Origin__Realm__AVP"); + return -1; + } + if (decode_destination_realm(p_uar_msg.uAR__Body().destination__Realm()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + if (decode_session_id(p_uar_msg.session__Id()) == -1) { + loggers::get_instance().warning("diameter_uar_codec::decode: Missing Destination__Realm__AVP"); + return -1; + } + + // Optinal AVPs + if (decode_destination_host(p_uar_msg.uAR__Body().destination__Host()) == -1) { + p_uar_msg.uAR__Body().destination__Host().set_to_omit(); + } + + p_uar_msg.uAR__Body().vendor__Specific__Application__Id().set_to_omit(); + p_uar_msg.uAR__Body().auth__Application__Id().set_to_omit(); + p_uar_msg.uAR__Body().sIP__AOR().set_to_omit(); + p_uar_msg.uAR__Body().user__Name().set_to_omit(); + p_uar_msg.uAR__Body().sIP__Visited__Network__Id().set_to_omit(); + p_uar_msg.uAR__Body().sIP__User__Authorization__Type().set_to_omit(); + p_uar_msg.uAR__Body().supported__Features().set_to_omit(); + p_uar_msg.uAR__Body().public__Identity().set_to_omit(); + p_uar_msg.uAR__Body().visited__Network__Identifier().set_to_omit(); + p_uar_msg.uAR__Body().user__Authorization__Type().set_to_omit(); + p_uar_msg.uAR__Body().uAR__Flags().set_to_omit(); + p_uar_msg.uAR__Body().proxy__Info().set_to_omit(); + p_uar_msg.uAR__Body().route__Record().set_to_omit(); + p_uar_msg.uAR__Body().aVP__Type().set_to_omit(); + + return 0; +} + +int diameter_uar_codec::decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_session_id: looking for '%d", _codec.AVP_Session_Id_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Session_Id_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_session_id: AVP is missing"); + return -1; + } + avp_ptr->decode_session_id(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_session_id: ", p_avp); + + return 0; +} + +int diameter_uar_codec::decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_auth_session_state: looking for '%d", _codec.AVP_Auth_Session_State_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Auth_Session_State_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_auth_session_state: AVP is missing"); + return -1; + } + avp_ptr->decode_auth_session_state(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_auth_session_state: ", p_avp); + + return 0; +} + +int diameter_uar_codec::decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_origin_host: looking for '%d", _codec.AVP_Origin_Host_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Origin_Host_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_origin_host: AVP is missing"); + return -1; + } + avp_ptr->decode_origin_host(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_origin_host: ", p_avp); + + return 0; +} + +int diameter_uar_codec::decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_destination_host: looking for '%d", _codec.AVP_Destination_Host_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Destination_Host_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_destination_host: AVP is missing"); + return -1; + } + avp_ptr->decode_destination_host(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_destination_host: ", p_avp); + + return 0; +} + +int diameter_uar_codec::decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_origin_realm: looking for '%d", _codec.AVP_Origin_Realm_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Origin_Realm_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_origin_realm: AVP is missing"); + return -1; + } + avp_ptr->decode_origin_realm(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_origin_realm: ", p_avp); + + return 0; +} + +int diameter_uar_codec::decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp) { + loggers::get_instance().log("diameter_uar_codec::decode_destination_realm: looking for '%d", _codec.AVP_Destination_Realm_AVP); + const std::unique_ptr& avp_ptr = _codec.get_avp(_codec.AVP_Destination_Realm_AVP); + if (avp_ptr.get() == nullptr) { + loggers::get_instance().warning("diameter_uar_codec::decode_destination_realm: AVP is missing"); + return -1; + } + avp_ptr->decode_destination_realm(p_avp); + loggers::get_instance().log_msg("diameter_uar_codec::decode_destination_realm: ", p_avp); + + return 0; +} diff --git a/ccsrc/Protocols/Diameter/diameter_uar_codec.hh b/ccsrc/Protocols/Diameter/diameter_uar_codec.hh new file mode 100644 index 0000000..910b13d --- /dev/null +++ b/ccsrc/Protocols/Diameter/diameter_uar_codec.hh @@ -0,0 +1,43 @@ +#pragma once + +#include + +#include "codec_gen.hh" +#include "params.hh" + +#include "avp.hh" +#include "diameter_codec.hh" + +class Base_Type; +class TTCN_Typedescriptor_t; +class TTCN_Buffer; + +namespace LibDiameter__TypesAndValues { + class UAR__MSG; //! Forward declaration of TITAN class +} + +class diameter_uar_codec: public codec_gen < + LibDiameter__TypesAndValues::UAR__MSG, + LibDiameter__TypesAndValues::UAR__MSG> +{ + std::vector avps; + diameter_codec _codec; + +public: + diameter_uar_codec() : codec_gen(), avps(), _codec() { }; + virtual ~diameter_uar_codec() { }; + + virtual int encode (const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, OCTETSTRING& p_data); + virtual int decode (const OCTETSTRING& p_data, LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, params* p_params = NULL); + +private: + int encode_avps(const LibDiameter__TypesAndValues::UAR__MSG& p_uar_msg, TTCN_Buffer p_encoding_buffer); + + int decode_session_id(LibDiameter__Types__Base__AVPs::Session__Id__AVP& p_avp); + int decode_auth_session_state(LibDiameter__Types__Base__AVPs::Auth__Session__State__AVP& p_avp); + int decode_origin_host(LibDiameter__Types__Base__AVPs::Origin__Host__AVP& p_avp); + int decode_destination_host(LibDiameter__Types__Base__AVPs::Destination__Host__AVP& p_avp); + int decode_origin_realm(LibDiameter__Types__Base__AVPs::Origin__Realm__AVP& p_avp); + int decode_destination_realm(LibDiameter__Types__Base__AVPs::Destination__Realm__AVP& p_avp); + +}; // End of class diameter_uar_codec diff --git a/ccsrc/Protocols/Diameter/module.mk b/ccsrc/Protocols/Diameter/module.mk index 81e106f..e3ad396 100644 --- a/ccsrc/Protocols/Diameter/module.mk +++ b/ccsrc/Protocols/Diameter/module.mk @@ -1,6 +1,7 @@ sources := \ diameter_layer.cc \ diameter_codec.cc \ + diameter_uar_codec.cc \ avp.cc includes := . diff --git a/emergency-iop.code-workspace b/emergency-iop.code-workspace index c14af3e..d7e19c1 100644 --- a/emergency-iop.code-workspace +++ b/emergency-iop.code-workspace @@ -11,12 +11,75 @@ }, { "path": "../../tmp/vxlte-iop" + }, + { + "path": "../../frameworks/titan/titan.core/Install/include" } ], "settings": { "files.associations": { "cmath": "cpp", - "vector": "cpp" + "vector": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "cctype": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "semaphore": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp" } } } \ No newline at end of file diff --git a/etc/AtsImsIot/AtsImsIot.cfg b/etc/AtsImsIot/AtsImsIot.cfg index a9ae8db..3318c8a 100644 --- a/etc/AtsImsIot/AtsImsIot.cfg +++ b/etc/AtsImsIot/AtsImsIot.cfg @@ -46,6 +46,9 @@ system.diameterPort.params := "DIAMETER/SCTP(debug=1,server=172.25.1.54,port=820 # In this section you can specify what parts of your test suite you want to execute. #AtsImsIot_TestControl.control +# Emergency Network Attachment and Establishment of the Emergency Bearer with USIM. +AtsImsIot_Emergency.TC_VoLTE_ECO_INT_ATT_01 + [GROUPS] # In this section you can specify groups of hosts. These groups can be used inside the # [COMPONENTS] section to restrict the creation of certain PTCs to a given set of hosts. diff --git a/install.sh b/install.sh index 4f97337..61dd4f2 100755 --- a/install.sh +++ b/install.sh @@ -10,7 +10,7 @@ git submodule update --init --recursive --remote if [ ! -f ./titan-test-system-framework ] then - git clone --recurse-submodules --single-branch --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git + git clone --recurse-submodules --branch devel https://labs.etsi.org/rep/cti-tools/titan-test-system-framework.git cd ./titan-test-system-framework else cd ./titan-test-system-framework diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index ae571c0..92b9ad6 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -42,6 +42,10 @@ module AtsImsIot_Emergency { import from AtsImsIot_TP_behavior_RX all; import from AtsImsIot_PIXITS all; + // For Diameter codec tests only + import from LibDiameter_TypesAndValues all; + + /** * @see ETSI TS 103 795-2 Clause 5 Test Descriptions (Interoperability at HPLMN) */ @@ -68,6 +72,9 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); + f_validate_uar('010001a0c000012c010000000001fc43c521ba2d000001074000002d7363736366696d73342e696d73342e69736b726174656c2e6d616b3b3131303b373131333400000000000104400000200000010a4000000c000028af000001024000000c01000000000001154000000c0000000100000108400000237363736366696d73342e696d73342e69736b726174656c2e6d616b000000012840000019696d73342e69736b726174656c2e6d616b00000000000125400000236873733131696d73342e696d73342e69736b726174656c2e6d616b000000011b40000019696d73342e69736b726174656c2e6d616b00000000000258c000001d000028af696d73342e69736b726174656c2e6d616b0000000000026fc0000010000028af0000000000000259c0000041000028af7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000000014000003930303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000'O); + stop; + f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD if (f_checkVxLteRequiredMonitorInterface({PX_DIAMETER_GX_INTERFACENAME,PX_DIAMETER_S6A_INTERFACENAME})){ @@ -99,6 +106,28 @@ module AtsImsIot_Emergency { setverdict (inconc,"At least one required monitor interface SHALL be selected! Check PIXITs") } } // End of TC TC_VoLTE_ECO_INT_ATT_01 + + + function f_validate_uar(in octetstring p_uar) { + var bitstring v_conv := oct2bit(p_uar); + var UAR_MSG v_msg; + var integer v_result := decvalue(v_conv, v_msg); + log("msg: ", v_msg); + if (v_result == 0) { + var octetstring v_uar_enc := bit2oct(encvalue(v_msg)); + log("v_uar_enc: ", v_uar_enc); + log("Matching v_uar_enc: ", match(p_uar, v_uar_enc)); + if (match(p_uar, v_uar_enc)) { + setverdict(pass); + } else { + setverdict(fail); + } + } else { + setverdict(fail); + } + stop; + } + } // End of group UENetworkAttachmentWithUSIM group UENetworkAttachmentWithoutUSIM { -- GitLab From 03db8dcc96a3c892b96a143f013ca453e3258236 Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 8 Nov 2023 09:33:15 +0100 Subject: [PATCH 83/84] Merge manually TTF010 branch into devel branch --- test_purposes/Cx/TP_CX.tplan2 | 4 +- test_purposes/Diameter_Common.tplan2 | 32 +++-- test_purposes/E_CSCF/TP_E_CSCF.tplan2 | 52 ++++---- test_purposes/Gm/TP_GM.tplan2 | 117 ++++++++++++++++-- test_purposes/Gx/TP_GX.tplan2 | 8 +- test_purposes/Ic/TP_IC.tplan2 | 2 + test_purposes/Isc/TP_ISC.tplan2 | 42 +++++++ test_purposes/Mw/TP_MW_IS.tplan2 | 6 +- test_purposes/Mw/TP_MW_PS.tplan2 | 61 ++++++++- test_purposes/Mw/TP_MW_SI.tplan2 | 2 + test_purposes/Rtp/TP_Rtp.tplan2 | 10 +- test_purposes/Rtp_Common.tplan2 | 32 +++-- test_purposes/Rx/TP_RX.tplan2 | 2 + test_purposes/S6a/TP_S6A.tplan2 | 2 + test_purposes/S9/TP_S9.tplan2 | 2 + test_purposes/Sh/TP_Sh.tplan2 | 2 +- test_purposes/Sip_Common.tplan2 | 33 +++-- ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn | 19 +-- ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn | 10 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn | 8 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn | 11 +- .../AtsImsIot_TP_behavior_MW_PS.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn | 6 +- ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn | 21 +++- ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn | 32 +++-- ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn | 93 ++++++++------ ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn | 20 ++- ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn | 13 +- ttcn/AtsImsIot/module.mk | 1 + 29 files changed, 460 insertions(+), 189 deletions(-) diff --git a/test_purposes/Cx/TP_CX.tplan2 b/test_purposes/Cx/TP_CX.tplan2 index 65d5a37..f8693a5 100644 --- a/test_purposes/Cx/TP_CX.tplan2 +++ b/test_purposes/Cx/TP_CX.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Diameter_Common.tplan2 b/test_purposes/Diameter_Common.tplan2 index a87b9f2..d9e7cbc 100644 --- a/test_purposes/Diameter_Common.tplan2 +++ b/test_purposes/Diameter_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 index 7e5f51a..1e650ba 100644 --- a/test_purposes/E_CSCF/TP_E_CSCF.tplan2 +++ b/test_purposes/E_CSCF/TP_E_CSCF.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* E-CSCF interfaces to @@ -32,7 +34,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the EATF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2 1)" + "ETSI TS 124 229 [1], Clause 5.11.2 1" Config Id CF_VoLTE_INT_ES @@ -85,7 +87,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the LRF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.3" + "ETSI TS 124 229 [1], Clause 5.11.3" Config Id CF_VoLTE_INT_ES @@ -134,7 +136,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -274,7 +276,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -325,7 +327,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the IBCF for a PSAP in another network and includes the LRF provided URI in the Route header." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -422,7 +424,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -473,7 +475,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes an initial INVITE from the P-CSCF and routes the request to the BGCF for a PSAP in the PSTN and includes the LRF provided URI in the Request-URI." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -571,7 +573,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -613,9 +615,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the PSAP in the IM CN subsystem for an Emergency Call and routes the request to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -654,7 +656,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -697,7 +699,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the IBCF for a PSAP in another network for an Emergency Call and routes the request to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -738,7 +740,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the P-CSCF for an Emergency Call and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -781,7 +783,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a BYE from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the request to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -822,7 +824,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the PSAP in the IM CN subsystem of own network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -865,7 +867,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the IBCF for a PSAP in another network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -908,7 +910,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a CANCEL from the P-CSCF for an Emergency Call under establishment and routes the request to the BGCF for a PSAP in the PSTN." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -950,9 +952,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -993,7 +995,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1036,7 +1038,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 480 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1078,9 +1080,9 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the PSAP in the IM CN subsystem for an Emergency Call and routes the response to the P-CSCF of home network." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" - Config Id CF_VxLTE_INT + Config Id CF_VoLTE_INT_ES PICS Selection NONE @@ -1121,7 +1123,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the IBCF for a PSAP in another network for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES @@ -1164,7 +1166,7 @@ Package TP_E_CSCF { Test objective "Verify that the E-CSCF successfully processes a 487 response from the BGCF for a PSAP in the PSTN for an Emergency Call and routes the response to the P-CSCF." Reference - "ETSI TS 124 229 [1], Clauses 5.11.2" + "ETSI TS 124 229 [1], Clause 5.11.2" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Gm/TP_GM.tplan2 b/test_purposes/Gm/TP_GM.tplan2 index 4696be0..eceb18d 100644 --- a/test_purposes/Gm/TP_GM.tplan2 +++ b/test_purposes/Gm/TP_GM.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Gm interface at UE/P-CSCF */ @@ -51,9 +53,9 @@ Package TP_GM { Realm indicating value PX_UE_A_REALM, Algorithm indicating value PX_UE_A_AUTH_ALG, Nonce indicating value "", - not term_ioi, + not term_ioi;, not SecurityClient, - Contact indicating value "sos";; + Contact indicating value "sos"; from the UE_A entity } then { @@ -185,7 +187,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -229,7 +231,7 @@ Package TP_GM { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -272,7 +274,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an unregistered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.2" + "ETSI TS 124 229 [1], Clause 5.1.6.8.2" Config Id CF_VoLTE_INT_ES @@ -309,7 +311,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from an emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.3" + "ETSI TS 124 229 [1], Clause 5.1.6.8.3" Config Id CF_VoLTE_INT_ES @@ -347,7 +349,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.8.4" + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" Config Id CF_VoLTE_INT_ES @@ -383,12 +385,12 @@ Package TP_GM { Test Purpose { - TP Id TP_GM_PCSCF_ECO_INVITE_04 + TP Id TP_GM_PCSCF_NGC_INVITE_01 Test objective "Verify that the P-CSCF successfully receives an initial eCall type INVITE from an emergency registered UE." Reference - "ETSI TS 124 229 [1], Clauses 5.1.6.11" + "ETSI TS 124 229 [1], Clause 5.1.6.11" Config Id CF_VoLTE_INT_ES @@ -413,14 +415,103 @@ Package TP_GM { Route indicating value PX_UE_A_SERVICE_ROUTE, Accept indicating value "application/EmergencyCallData.Control+xml", RecvInfo indicating value "EmergencyCallData.eCall.MSD", - PPreferredIdentity, // one or two instances + PPreferredIdentity, // one or two instances, + ContentDisposition containing + handling indicating value "optional";, // TODO Geolocation header maybe added later, check! MessageBody containing - MIME containing MSD;;; // MIME may contain additional parts e.g., sdp, xml + MIME containing MSD;;; // "application/EmergencyCallData.eCall.MSD" MIME body + // MIME may contain additional parts e.g., sdp, xml + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_NGC_INVITE_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_NGC_INFO_01 + + Test objective "Verify that the P-CSCF successfully receives an INFO from the UE in an + established eCall type emergency call that has been requested to transfer + an updated MSD." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.11.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isEmergencyAttachedTo the EPC_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToTransferUpdatedMSD + // UE_A has received an INFO request as described in TP_MW_PCSCF_NGC_INFO_01 + } + then { + the IMS_P_CSCF_A entity receives an INFO containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_ECALL_EMERGENCY_SERVICE_URN, // "urn:service:sos.ecall.manual" or "urn:service:sos.ecall.automatic" + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.eCall.MSD", // MIME may contain additional parts e.g., sdp, xml + // MSD not exceeding 140 bytes and encoded in binary ASN.1 + ContentDisposition indicating value "By-Reference";; + from the UE_A entity + } + } + } // End of TP_GM_PCSCF_NGC_INFO_01 + + Test Purpose { + + TP Id TP_GM_PCSCF_ECO_INVITE_05 + + Test objective "Verify that the P-CSCF successfully receives an initial emergency INVITE from a registered but not emergency registered UE." + + Reference + "ETSI TS 124 229 [1], Clause 5.1.6.8.4" + + Config Id CF_VoLTE_RMI_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_B and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + /* This implies that the UE is currently attached and registered + to its home operator's network and the IP-CAN does not define emergency bearers + see 5.1.6.1 3rd paragraph */ + } + + Expected behaviour + ensure that { + when { + the UE_A entity isRequestedToEstablishEmergencyCall + } + then { + the IMS_P_CSCF_A entity receives an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + CallId indicating value PX_UE_A_CALLID, + Via indicating value PX_UE_A_VIA, + Route indicating value PX_UE_A_SERVICE_ROUTE, + PPreferredIdentity, // one or two instances + MessageBody; from the UE_A entity } } - } // End of TP_GM_PCSCF_ECO_INVITE_04 + } // End of TP_GM_PCSCF_ECO_INVITE_05 Test Purpose { @@ -429,7 +520,7 @@ Package TP_GM { Test objective "Verify that the P-CSCF successfully processes a BYE for an emergency call." Reference - "ETSI TS 124 229 [2] Clauses 5.1.6.9" + "ETSI TS 124 229 [2] Clause 5.1.6.9" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Gx/TP_GX.tplan2 b/test_purposes/Gx/TP_GX.tplan2 index dc55c7d..e7488b7 100644 --- a/test_purposes/Gx/TP_GX.tplan2 +++ b/test_purposes/Gx/TP_GX.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ @@ -22,12 +24,12 @@ Package TP_GX { Test Purpose { - TP Id TP_GX_PCRF_CCA_01 + TP Id TP_GX_PCRF_ECO_CCA_01 //TP_GX_PCRF_CCA_01 from TS 103 653-1 V2.1.1 without emergency registration Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMSI for emergency services sends a CC-Answer in case of attachment procedure." Reference - "TS 129 212 [9], clauses 4.5.15.2.1" + "TS 129 212 [9], clause 4.5.15.2.1" Config Id CF_VoLTE_INT_ES @@ -111,7 +113,7 @@ Package TP_GX { Test objective "Verify that IUT when receives CC-Request for PCC Rules containing IMEI for emergency call sends a CC-Answer in case of attachment procedure." Reference - "TS 129 212 [9], clauses 4.5.15.2.1" + "TS 129 212 [9], clause 4.5.15.2.1" Config Id CF_VoLTE_INT_ES diff --git a/test_purposes/Ic/TP_IC.tplan2 b/test_purposes/Ic/TP_IC.tplan2 index dc99d91..751d0a5 100644 --- a/test_purposes/Ic/TP_IC.tplan2 +++ b/test_purposes/Ic/TP_IC.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Isc/TP_ISC.tplan2 b/test_purposes/Isc/TP_ISC.tplan2 index 588bc56..0d23f25 100644 --- a/test_purposes/Isc/TP_ISC.tplan2 +++ b/test_purposes/Isc/TP_ISC.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Isc interface at S-CSCF<->AS */ @@ -18,6 +20,46 @@ Package TP_ISC { import all from Sip_Common; + Test Purpose { + + TP Id TP_ISC_SCSCF_EMC_INVITE_01 + + Test objective "Verify that the AS successfully identify the request for emergency call and forwards it towards S-CSCF." + + Reference + "ETSI TS 124 229 [2], Clauses 4.7.3 and 5.7.1.14" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity not isEmergencyRegisteredTo the IMS_A + + } + + Expected behaviour + ensure that { + when { + the IMS_AS_A entity receives an INVITE + from the UE_A entity + } + then { + the IMS_AS_A entity sends an INVITE containing + From indicating value PX_UE_A_SIP_URI, + To indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Request_Uri indicating value PX_SIP_EMERGENCY_SERVICE_URN, + Route indicating value PX_E_CSCF_SERVICE_ROUTE, + PChargingVector, + // TODO Geolocation header maybe added later, check! + MessageBody; + to the IMS_S_CSCF_A entity + } + } + } // End of TP_ISC_SCSCF_EMC_INVITE_01 + } // End of Package TP_ISC diff --git a/test_purposes/Mw/TP_MW_IS.tplan2 b/test_purposes/Mw/TP_MW_IS.tplan2 index aef07b0..566a0d1 100644 --- a/test_purposes/Mw/TP_MW_IS.tplan2 +++ b/test_purposes/Mw/TP_MW_IS.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at I-CSCF/S-CSCF */ @@ -177,7 +179,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -216,7 +218,7 @@ Package TP_MW_IS { Reference "ETSI TS 124 229 [1], Clauses 5.1.6.2 and 5.2.10.5" - Config Id CF_VxLTE_RMI + Config Id CF_VoLTE_RMI_ES PICS Selection NONE diff --git a/test_purposes/Mw/TP_MW_PS.tplan2 b/test_purposes/Mw/TP_MW_PS.tplan2 index b049914..f2fbad4 100644 --- a/test_purposes/Mw/TP_MW_PS.tplan2 +++ b/test_purposes/Mw/TP_MW_PS.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at P-CSCF/E-CSCF */ @@ -157,14 +159,14 @@ Package TP_MW_PS { Test Purpose { - TP Id TP_MW_PCSCF_REGISTER_03 + TP Id TP_MW_PCSCF_ECO_REGISTER_03 Test objective "Verify that the P-CSCF rejects invalid credentials within registration (Unsuccessful)." Reference - "ETSI TS 124 229 [1], Clauses 5.2.2.1" + "ETSI TS 124 229 [1], Clause 5.2.2.1" - Config Id CF_VxLTE_RMI_B + Config Id CF_VoLTE_RMI_ES PICS Selection NONE @@ -203,7 +205,7 @@ Package TP_MW_PS { to the UE_A entity } } - } // End of TP_MW_PCSCF_REGISTER_03 + } // End of TP_MW_PCSCF_ECO_REGISTER_03 @@ -353,7 +355,7 @@ Package TP_MW_PS { if the IM CN subsystem of the P-CSCF is not capable to handle emergency sessions." Reference - "ETSI TS 124 229 [1], Clauses 5.2.10.5" + "ETSI TS 124 229 [1], Clause 5.2.10.5" Config Id CF_VoLTE_INT_ES @@ -450,7 +452,7 @@ Package TP_MW_PS { if the E-CSCF informs the P-CSCF that Emergency Services are currently not available." Reference - "ETSI TS 124 229 [1], Clauses 5.2.10.5" + "ETSI TS 124 229 [1], Clause 5.2.10.5" Config Id CF_VoLTE_INT_ES @@ -767,5 +769,52 @@ Package TP_MW_PS { } // End of TP_MW_PCSCF_EMC_487INVITE_01 + Test Purpose { + + TP Id TP_MW_PCSCF_NGC_INFO_01 + + Test objective "Verify that the P-CSCF sends an INFO request demanding a transfer of updated MSD." + + Reference + "ETSI TS 124 229 [1], clause 5.1.6.11.3" + + Config Id CF_VoLTE_INT_ES + + PICS Selection NONE + + Initial conditions with { + the UE_A entity isAttachedTo the EPC_A and + the UE_A entity isRegisteredTo the IMS_A and + the UE_A entity isEmergencyRegisteredTo the IMS_A and + the UE_A entity previouslyEstablishedEmergencyCallWith the PSAP + } + + Expected behaviour + ensure that { + when { + the IMS_P_CSCF_A entity receives a INFO containing "Request transfer of updated MSD"; + from the IMS_E_CSCF entity + } + then { + the IMS_P_CSCF_A entity sends a INFO containing + From indicating value PX_PSAP_SIP_URI, + To indicating value PX_UE_A_SIP_URI, + CallId indicating value PX_PSAP_CALLID, + Via indicating value PX_PSAP_VIA, + Route indicating value PX_PSAP_SERVICE_ROUTE, + InfoPackage indicating value "EmergencyCallData.eCall.MSD", + ContentDisposition indicating value "Info-Package", + MessageBody containing + MIME indicating value "application/EmergencyCallData.Control+xml", // MIME may contain additional parts e.g., sdp, xml + request containing + action indicating value "send-data", + datatype indicating value "eCall.MSD";, + ContentDisposition indicating value "By-Reference";; + to the UE_A entity + } + } + + } // End of TP_MW_PCSCF_NGC_INFO_01 + } // End of Package TP_MW_PS diff --git a/test_purposes/Mw/TP_MW_SI.tplan2 b/test_purposes/Mw/TP_MW_SI.tplan2 index 1f698b3..14b2d84 100644 --- a/test_purposes/Mw/TP_MW_SI.tplan2 +++ b/test_purposes/Mw/TP_MW_SI.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ /* Mw interface at S-CSCF/IBCF */ diff --git a/test_purposes/Rtp/TP_Rtp.tplan2 b/test_purposes/Rtp/TP_Rtp.tplan2 index deadc45..c49cd88 100644 --- a/test_purposes/Rtp/TP_Rtp.tplan2 +++ b/test_purposes/Rtp/TP_Rtp.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ @@ -23,7 +25,7 @@ Package TP_RTP { Test Purpose { - TP Id TP_RTP_ECO_UE_01 + TP Id TP_RTP_ECO_01 // TP_RTP_UE_01 from VxLTE TTF T006 Test objective "Verify that media between UE_A/IVS and PSAP is not delivered in any direction before call establishment." @@ -51,11 +53,11 @@ Package TP_RTP { } } - } // End of TP_RTP_ECO_UE_01 + } // End of TP_RTP_ECO_01 Test Purpose { - TP Id TP_RTP_ECO_UE_03 + TP Id TP_RTP_ECO_03 // TP_RTP_UE_03 from VxLTE TTF T006 Test objective "Verify that media between UE_A and UE_B is successfully routed." @@ -83,7 +85,7 @@ Package TP_RTP { } } - } // End of TP_RTP_ECO_UE_03 + } // End of TP_RTP_ECO_03 } // End of Package TP_RTP diff --git a/test_purposes/Rtp_Common.tplan2 b/test_purposes/Rtp_Common.tplan2 index 7da1861..6cb40b5 100644 --- a/test_purposes/Rtp_Common.tplan2 +++ b/test_purposes/Rtp_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Rx/TP_RX.tplan2 b/test_purposes/Rx/TP_RX.tplan2 index 4719db8..0c5daef 100644 --- a/test_purposes/Rx/TP_RX.tplan2 +++ b/test_purposes/Rx/TP_RX.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/S6a/TP_S6A.tplan2 b/test_purposes/S6a/TP_S6A.tplan2 index ff5f4d2..0057f0a 100644 --- a/test_purposes/S6a/TP_S6A.tplan2 +++ b/test_purposes/S6a/TP_S6A.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/S9/TP_S9.tplan2 b/test_purposes/S9/TP_S9.tplan2 index fa3ed8f..ddeab02 100644 --- a/test_purposes/S9/TP_S9.tplan2 +++ b/test_purposes/S9/TP_S9.tplan2 @@ -11,6 +11,8 @@ from its use or inability of use.This permission does not apply to any documenta associated with this file for which ETSI keeps all rights reserved. The present copyright notice shall be included in all copies of whole or part of this file and shall not imply any sub-license right. +* +* @author TTF T010 */ diff --git a/test_purposes/Sh/TP_Sh.tplan2 b/test_purposes/Sh/TP_Sh.tplan2 index ecde968..fd249bb 100644 --- a/test_purposes/Sh/TP_Sh.tplan2 +++ b/test_purposes/Sh/TP_Sh.tplan2 @@ -1,5 +1,5 @@ /* -Copyright (c) ETSI 2019. +Copyright (c) ETSI 2023. This software is subject to copyrights owned by ETSI. Non-exclusive permission is hereby granted, free of charge, to copy, reproduce and amend this file diff --git a/test_purposes/Sip_Common.tplan2 b/test_purposes/Sip_Common.tplan2 index e14773e..eeb2bd6 100644 --- a/test_purposes/Sip_Common.tplan2 +++ b/test_purposes/Sip_Common.tplan2 @@ -1,20 +1,18 @@ -/* ETSI Software License -* As long as the here under conditions are respected, non-exclusive permission is hereby granted, -* free of charge, to use, reproduce and modify this software source code, under the following conditions: -* This source code is provided AS IS with no warranties, express or implied, including but not limited to, -* the warranties of merchant ability, fitness for a particular purpose and warranties for non-infringement -* of intellectual property rights. -* ETSI shall not be held liable in any event for any direct or indirect damages whatsoever (including, without -* limitation, damages for loss of profits, business interruption, loss of information, or any other pecuniary -* loss) arising out of or related to the use of or inability to use the source code. -* This permission is granted to facilitate the implementation of the related ETSI standard, provided that -* ETSI is given the right to use, reproduce and amend the modified source code under the same conditions -* as the present permission. -* This permission does not apply to any documentation associated with this source code for which ETSI keeps -* all rights reserved. -* The present ETSI Source Code license shall be included in all copies of whole or part of this source code -* and shall not imply any sub-license right. -* (c) ETSI 2019-2020 +/* +Copyright (c) ETSI 2023. + +This software is subject to copyrights owned by ETSI. Non-exclusive permission +is hereby granted, free of charge, to copy, reproduce and amend this file +under the following conditions: It is provided "as is", without warranty of any +kind, expressed or implied. + +ETSI shall never be liable for any claim, damages, or other liability arising +from its use or inability of use.This permission does not apply to any documentation +associated with this file for which ETSI keeps all rights reserved. The present +copyright notice shall be included in all copies of whole or part of this +file and shall not imply any sub-license right. +* +* @author TTF T010 */ @@ -96,6 +94,7 @@ Package Sip_Common { - isRequestedToSend - isRequestedToEstablishEmergencyCall - isRequestedToEstablisheCallTypeEmergencyCall + - isRequestedToTransferUpdatedMSD - isRequestedToDeregisterUser - isBusy - isTemporaryUnavailable diff --git a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn index d17d966..366a1f8 100644 --- a/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_PIXITS.ttcn @@ -42,15 +42,16 @@ module AtsImsIot_PIXITS { // namespaceSpecificString := "sos" // }; modulepar SipUrl PX_URN_SERVICE_SOS := { - "sip", - components := { - urn := { - namespaceId := "service", - namespaceSpecificString := "sos" - } - } - }; - + scheme := "sip", + components := { + urn := { + namespaceId := "service", + namespaceSpecificString := "sos" + } + }, + urlParameters := omit, + headers := omit + }; } // end group SUT_CONF diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn index 82b3b30..6d49ec9 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_GM.ttcn @@ -1946,14 +1946,16 @@ module AtsImsIot_TP_behavior_GM { var SipUrl v_invalidUrnServiceSos := { - "sip", + scheme := "sip", components := {urn := { namespaceId := "service", namespaceSpecificString := "sosxxxx" } - } + }, + urlParameters := omit, + headers := omit } - + // Check the INVITE p_monitorCompRef.start( f_Iot_Sip_receive( @@ -4969,6 +4971,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), @@ -5041,6 +5044,7 @@ module AtsImsIot_TP_behavior_GM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_GM_PCSCF_NGC_INFO_01( + -, -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn index 25595cb..09e7834 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MI.ttcn @@ -809,11 +809,13 @@ module AtsImsIot_TP_behavior_MI { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), -, -, + -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) @@ -881,11 +883,13 @@ module AtsImsIot_TP_behavior_MI { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MI_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, -, + -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn index 943c9e1..48b94e7 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MM.ttcn @@ -286,7 +286,7 @@ module AtsImsIot_TP_behavior_MM { -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), - -, -, + -, -, -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) @@ -876,10 +876,11 @@ module AtsImsIot_TP_behavior_MM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), - -, -, + -, -, -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.Control+xml")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) @@ -947,11 +948,13 @@ module AtsImsIot_TP_behavior_MM { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MM_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, -, + -, mw_PPreferredID, mw_accept({mw_acceptBody("application/EmergencyCallData.MSD")}), mw_recvInfo({mw_infoPackage_Type("EmergencyCallData.eCall.MSD")}) diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn index f56f04c..45dab74 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MW_PS.ttcn @@ -5008,7 +5008,8 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), -, -, @@ -5079,7 +5080,8 @@ module AtsImsIot_TP_behavior_MW_PS { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MW_PCSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, diff --git a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn index 89cc8c2..4db5139 100644 --- a/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_TP_behavior_MX.ttcn @@ -877,7 +877,8 @@ module AtsImsIot_TP_behavior_MX { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), mw_To_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), -, -, @@ -948,7 +949,8 @@ module AtsImsIot_TP_behavior_MX { f_Iot_Sip_receive( { mw_SipRequest(mw_TP_MX_ECSCF_NGC_INFO_01( - -, // FIXME Set expected value + -, + -, // FIXME Set expected value mw_From_AddrUnion_SipUrl(omit, v_userInfoA.publicId, v_userInfoA.domain), mw_To_AddrUnion_SipUrl(omit, v_psap.publicId, v_psap.domain), -, diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn index e24e4ba..dd17d90 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_GM.ttcn @@ -541,8 +541,9 @@ module AtsImsIot_Templates_GM { ) modifies mw_TP_GM_PCSCF_INVITE_01 := { } // End of template mw_TP_GM_PCSCF_NGC_INVITE_01 - template (present) INFO_Request mw_TP_GM_PCSCF_NGC_INFO_01( - template (present) SipUrl p_invite_uri := ?, + template (present) INFO_Request mw_TP_GM_PCSCF_NGC_INFO_01( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, template (present) Contact p_contact := ?, @@ -550,8 +551,20 @@ module AtsImsIot_Templates_GM { template (present) PPreferredID p_pPreferredID := ?, template (present) Accept p_accept := ?, template (present) RecvInfo p_recvInfo := ? - ) modifies mw_INFO_Request_Base(omit) := { - + ) modifies mw_INFO_Dummy := { + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + accept := p_accept, + callId := p_callId, + contact := p_contact, + fromField := p_from, + pPreferredID := p_pPreferredID, + recvInfo := p_recvInfo, + toField := p_to + }, + messageBody := p_messageBody } // End of template mw_TP_GM_PCSCF_NGC_INFO_01 diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn index d59b1e8..b80c969 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MI.ttcn @@ -39,14 +39,14 @@ module AtsImsIot_Templates_MI { msgHeader := { fromField := p_from, toField := p_to, - route := ({ + route := { fieldName := ROUTE_E, routeBody := { *, complement(mw_routeBody(p_invite_uri)), * } - }, omit), + } ifpresent, recordRoute := { fieldName := RECORD_ROUTE_E, routeBody := {mw_routeBody(p_invite_uri), *} @@ -177,25 +177,37 @@ module AtsImsIot_Templates_MI { } } // End of template mw_TP_MW_PCSCF_BYE_01 - template(present) INVITE_Request mw_TP_MI_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template(present) INFO_Request mw_TP_MI_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, template (present) Contact p_contact := ?, template (present) MessageBody p_messageBody := ?, template (present) PAssertedID p_pAssertedID := ? - )modifies mw_INFO_Request_Base(omit) := { - msgHeader := { - fromField := p_from, - toField := p_to, - pAssertedID := p_pAssertedID + )modifies mw_INFO_Dummy := { + + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + callId := p_callId, + contact := p_contact, + fromField := p_from, + pAssertedID := p_pAssertedID, + toField := p_to + }, + messageBody := p_messageBody } - } - template(present) INFO_Request mw_TP_MI_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template(present) INFO_Request mw_TP_MI_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, template (present) Contact p_contact := ?, template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, template (present) PPreferredID p_pPreferredID := ?, template (present) Accept p_accept := ?, template (present) RecvInfo p_recvInfo := ? diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn index d2c5188..8f9a17b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MM.ttcn @@ -84,32 +84,36 @@ module AtsImsIot_Templates_MM { modifies mw_TP_MM_ECSCF_INVITE_02 := { } - template(present) INVITE_Request mw_TP_MM_ECSCF_NGC_INVITE_01 ( - template (present) SipUrl p_invite_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template (present) Contact p_contact := ?, - template (present) MessageBody p_messageBody := ?, - template (present) PPreferredID p_pPreferredID := ?, - template (present) Accept p_accept := ?, - template (present) RecvInfo p_recvInfo := ? - ) - modifies mw_TP_MM_ECSCF_INVITE_02 := { - } - - - template(present) INFO_Request mw_TP_MM_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template (present) Contact p_contact := ?, - template (present) MessageBody p_messageBody := ?, - template (present) PPreferredID p_pPreferredID := ?, - template (present) Accept p_accept := ?, - template (present) RecvInfo p_recvInfo := ? - ) - modifies mw_TP_MM_ECSCF_INFO_01 := { - } - + template(present) INVITE_Request mw_TP_MM_ECSCF_NGC_INVITE_01 ( + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INVITE_02 := { + } + + + template(present) INFO_Request mw_TP_MM_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ?, + template (present) PPreferredID p_pPreferredID := ?, + template (present) Accept p_accept := ?, + template (present) RecvInfo p_recvInfo := ? + ) + modifies mw_TP_MM_ECSCF_INFO_01 := { + } + template (present) Response mw_TP_MM_ECSCF_100Trying_01( template (present) CSeq p_cSeq := ?, template (present) From p_from := ?, @@ -240,19 +244,28 @@ module AtsImsIot_Templates_MM { } // End of template mw_TP_MM_ECSCF_CANCEL_01 - template(present) INVITE_Request mw_TP_MM_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, - template (present) From p_from := ?, - template (present) To p_to := ?, - template (present) Contact p_contact := ?, - template (present) MessageBody p_messageBody := ?, - template (present) PAssertedID p_pAssertedID := ? - )modifies mw_INFO_Request_Base(omit) := { - msgHeader := { - fromField := p_from, - toField := p_to, - pAssertedID := p_pAssertedID - } - } - + template(present) INFO_Request mw_TP_MM_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, + template (present) From p_from := ?, + template (present) To p_to := ?, + template (present) Contact p_contact := ?, + template (present) MessageBody p_messageBody := ?, + template (present) PAssertedID p_pAssertedID := ? + )modifies mw_INFO_Dummy := { + + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + callId := p_callId, + contact := p_contact, + fromField := p_from, + pAssertedID := p_pAssertedID, + toField := p_to + }, + messageBody := p_messageBody + } + } // End of module AtsImsIot_Templates_MM diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn index e460dfb..9369014 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MW.ttcn @@ -889,8 +889,9 @@ module AtsImsIot_Templates_MW { modifies mw_TP_MW_ECSCF_INVITE_02 := { } - template(present) INVITE_Request mw_TP_MW_PCSCF_NGC_INFO_01 ( - template (present) SipUrl p_invite_uri := ?, + template(present) INFO_Request mw_TP_MW_PCSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, template (present) Contact p_contact := ?, @@ -899,7 +900,20 @@ module AtsImsIot_Templates_MW { template (present) Accept p_accept := ?, template (present) RecvInfo p_recvInfo := ? ) - modifies mw_INFO_Request_Base(omit) := { + modifies mw_INFO_Dummy := { + requestLine := { + requestUri := p_invite_uri // @TODO + }, + msgHeader := { + accept := p_accept, + callId := p_callId, + contact := p_contact, + fromField := p_from, + pPreferredID := p_pPreferredID, + recvInfo := p_recvInfo, + toField := p_to + }, + messageBody := p_messageBody } template (present) Response mw_TP_MW_ECSCF_100Trying_01( diff --git a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn index 7044c65..06d9a28 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Templates_MX.ttcn @@ -94,7 +94,9 @@ module AtsImsIot_Templates_MX { modifies mw_TP_MX_ECSCF_INVITE_02 := { } - template(present) INFO_Request mw_TP_MX_ECSCF_NGC_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template(present) INFO_Request mw_TP_MX_ECSCF_NGC_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ?, template (present) Contact p_contact := ?, @@ -169,13 +171,16 @@ module AtsImsIot_Templates_MX { } } // End of template mw_TP_MX_ECSCF_ACK_01 - template(present) INVITE_Request mw_TP_MX_ECSCF_INFO_01 (template (present) SipUrl p_invite_uri := ?, + template(present) INFO_Request mw_TP_MX_ECSCF_INFO_01 ( + template CallId p_callId := omit, + template (present) SipUrl p_invite_uri := ?, template (present) From p_from := ?, template (present) To p_to := ? - )modifies mw_INFO_Request_Base(omit) := { + )modifies mw_INFO_Request_Base := { msgHeader := { fromField := p_from, - toField := p_to + toField := p_to, + callId := p_callId } } diff --git a/ttcn/AtsImsIot/module.mk b/ttcn/AtsImsIot/module.mk index 2b448a5..dceae2f 100644 --- a/ttcn/AtsImsIot/module.mk +++ b/ttcn/AtsImsIot/module.mk @@ -11,6 +11,7 @@ sources := \ AtsImsIot_Templates_MM.ttcn \ AtsImsIot_Templates_MX.ttcn \ AtsImsIot_Templates_ML.ttcn \ + AtsImsIot_Templates_ISC.ttcn \ AtsImsIot_TestConfiguration.ttcn \ AtsImsIot_TP_behavior_CX.ttcn \ AtsImsIot_TP_behavior_ISC.ttcn \ -- GitLab From 19c6abe40e74d8e201b7e4aba76e74b86643374c Mon Sep 17 00:00:00 2001 From: garciay Date: Wed, 8 Nov 2023 10:25:59 +0100 Subject: [PATCH 84/84] Comment Diameter tests code --- ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn | 42 ++++++++++++------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn index 92b9ad6..d85026b 100644 --- a/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn +++ b/ttcn/AtsImsIot/AtsImsIot_Emergency.ttcn @@ -72,8 +72,8 @@ module AtsImsIot_Emergency { var IotEquipmentUser v_ueA := f_cf_create_IotEquipmentUser ( c_userUE_A ); var ImsUserInfo v_userInfoA := f_getImUser ( PX_EUT_A ); - f_validate_uar('010001a0c000012c010000000001fc43c521ba2d000001074000002d7363736366696d73342e696d73342e69736b726174656c2e6d616b3b3131303b373131333400000000000104400000200000010a4000000c000028af000001024000000c01000000000001154000000c0000000100000108400000237363736366696d73342e696d73342e69736b726174656c2e6d616b000000012840000019696d73342e69736b726174656c2e6d616b00000000000125400000236873733131696d73342e696d73342e69736b726174656c2e6d616b000000011b40000019696d73342e69736b726174656c2e6d616b00000000000258c000001d000028af696d73342e69736b726174656c2e6d616b0000000000026fc0000010000028af0000000000000259c0000041000028af7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000000014000003930303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000'O); - stop; + // f_validate_uar('010001a0c000012c010000000001fc43c521ba2d000001074000002d7363736366696d73342e696d73342e69736b726174656c2e6d616b3b3131303b373131333400000000000104400000200000010a4000000c000028af000001024000000c01000000000001154000000c0000000100000108400000237363736366696d73342e696d73342e69736b726174656c2e6d616b000000012840000019696d73342e69736b726174656c2e6d616b00000000000125400000236873733131696d73342e696d73342e69736b726174656c2e6d616b000000011b40000019696d73342e69736b726174656c2e6d616b00000000000258c000001d000028af696d73342e69736b726174656c2e6d616b0000000000026fc0000010000028af0000000000000259c0000041000028af7369703a30303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000000000014000003930303130313130303130303232303740696d732e6d6e633030312e6d63633030312e336770706e6574776f726b2e6f7267000000'O); + // stop; f_setVxLteMonIterfacesAvailability(); //Check required monitor interfaces due to TD @@ -108,25 +108,25 @@ module AtsImsIot_Emergency { } // End of TC TC_VoLTE_ECO_INT_ATT_01 - function f_validate_uar(in octetstring p_uar) { - var bitstring v_conv := oct2bit(p_uar); - var UAR_MSG v_msg; - var integer v_result := decvalue(v_conv, v_msg); - log("msg: ", v_msg); - if (v_result == 0) { - var octetstring v_uar_enc := bit2oct(encvalue(v_msg)); - log("v_uar_enc: ", v_uar_enc); - log("Matching v_uar_enc: ", match(p_uar, v_uar_enc)); - if (match(p_uar, v_uar_enc)) { - setverdict(pass); - } else { - setverdict(fail); - } - } else { - setverdict(fail); - } - stop; - } + // function f_validate_uar(in octetstring p_uar) { + // var bitstring v_conv := oct2bit(p_uar); + // var UAR_MSG v_msg; + // var integer v_result := decvalue(v_conv, v_msg); + // log("msg: ", v_msg); + // if (v_result == 0) { + // var octetstring v_uar_enc := bit2oct(encvalue(v_msg)); + // log("v_uar_enc: ", v_uar_enc); + // log("Matching v_uar_enc: ", match(p_uar, v_uar_enc)); + // if (match(p_uar, v_uar_enc)) { + // setverdict(pass); + // } else { + // setverdict(fail); + // } + // } else { + // setverdict(fail); + // } + // stop; + // } } // End of group UENetworkAttachmentWithUSIM -- GitLab

      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

      )@4(x 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

      ;#Kq?0M&y8Eje&RGxtA2Z@mv$ z1Q84#D5#)lgRg3P&0rItGYU+rci!ngmQPb1SS~fOSg80M+b2RLmr5&3(2clJ zkEq0unA&>l;znV{5d4bRFlV+rzgmCEIBcStNFL)rVZwDqpxG#TtEO9_>x^4>x!4Va zUC7DTF+=wtZM&wE{Dt(0jt5nh+iwb5-~Fi{VfNbB8-h6#oFxl+}7Vkcj^ovzIpoJwI)2LYbm@$Boe|vxm zmzR_oiVpU2Xs0>cowFj+$hr+|5s2+~58K!Q0NOnP!0mISw(f(Gig$5C2BnC+)PHq+ z!OjPt9wC(sW-8RBrKH25xTm?2vw{=pROVOVna-sfrk635w9jZoBLwWNcopHfD{i?{ zbR9vq!;NZWCCk=1hN9Kd2U2W<6lXLL8dHp>Q_h^l z(oubh{-QpKC00p21`h-3T$?zie`YgXRw>)pD|O4oU4y!dLmICEEufj;*B8Za0$Q;^ z&j{03lW`%0^>=XdS}e9wW7^;G1j?o;X5Av9RK|80lg-sZKo*c~F-Ur2gQLuzsg=9r zxI`knz$B7!z>N?d*H=Qq--s!C$~;-iz-(Mc+ig$;F_Jz7gHB-b_n?Hw5+*G?9kwQh z44%wQF6kefIJV!d4*~Y{UEg2%&%>{-n1C!`;Y&3-@FX7u)!Nh@eqg{^i_A>?3_Dj# zpyV*;Kp0AI(6}PFdCKY^A2)NkHh_-NWet!Li?3FMlg0Xe%=yLqV@UL-6a_JhUYbiT zG`7&B=7ZfLZhyJ;c?YXa*2+x5^yA_muLqA0p+A4;G=j3@H^qjOI!x$W`oXbYMlBms zdJz;%C;F~waY~LNC`KC*8HRt0CB1>HQXY!5qQ1Vci&a_P*9g?KPLHGADLY@jvtF7D zy%K${@}4`7V9-R(!CiKn*yD%|bgV1K6RVp0jQLmK{sB1xGzqF1MV-dEWhihknuvHHE&zvSQtICun{kAY^ zL~4qu-N}~XRV3`)-DCtpqpNd7tHDA9W)}M~TpV{@TBLB^O`F?&#kAK6TiR=Hw3(e=={T%F0tAC4Rzzitru0j?)U;-A`; zkh;qwE@@3%t`wBVvkuRD99r-ILqNR0SUvvBZJJS2#k@vswYrYZ*@pP`QoxPOT(L|b znJRzeI-rM)>nL+OY2`5pg3T!WuUx-N`!l=Lw`5~ugRwN6RKP0-@q%H-0ziOBk=u8# z`B=~Ws!g(Llrv#y#0!kzI7PM2ME5?a|MkF4#nx<|{~n{Y&pNv?k=I(u?mF6w-8wL> z)!idkM+d%p%A|FIAFr*UjeNlx#7@9?Tv(de_s*IYJ}lV2Os7}g+Wd&5i*0$$7a0Mg z6RY}K0-{TqPntqUOisvcsl6xR9vm)wf0XT>oOSCGYexd8S;Afvd9KL7V?gN%eui2f zA^64~-9Pk70k%l80@`GtSUgZpF@icBY(826w3Gv0GZD#ujyktkF>q|L);q~hnQrq> zvdX_dy#dHPdV|pvX2nP#|MaL8Q6ZeO!p1;?^MmP#rF*qZzEq+Te4nw*^(@VD=Ksd1 z9S<4F;Ik-~xZHBk&<$LfWTmKuVVZ%oqny5p8pj64zejW^bGBzrQVr+_%yZ$iZZ`oT zBddKvis|k7wIEx2UM<=Gerbn9c3lVRP}GK}+WKyY)WWKu+5dK69ibqgC3Tl3*m34fCmV($3|Bo8`MhWW}(7@pK9Q4PYE@nWdWY36~Ovj z$6>3i`Q#I5OUi@Cb?h}M6=9_<1KN~MFsWCedg$lv$DH{wR#~gKSM#~JCsw?JCZK~6 zV_K*y9Xs^-G}Zv3a`kk&yN`VVJINGV?S$)}SG_s~zcTu$;2=uJK`XE#6iTA>GF0s3 zUunk;`FP6xyZPp^B6fAbedA{j4L3O3tbg7;!{eM$)_OO%OxxgnPp1l1u~<)EmJzCx zzOm+1*)K81Nb@@Us8;ZOooD2HZQ}~;kqseE9|2Xio}{v(a}_1jym+`{Nm8*@PPti% zME!6Y=P6|7ZQ(1?KF0n%Us>E#!=rqS$6Zyof~6P4&6m))dwH`?lMEGUia>D{G8*Za z9)X{mI#Ze~kAPfvqQRst6_R#|2IU($O#~$HOBOL? zV*wF+4i;h>DY^JXDfh6~x=BhTZdoGHrSG3x)=VV9Geh}47r_MD2UqH>f`Q59MG9^y zOyE;Qi(WUfp$*NfHN(FYMPq8KsTEzh7tJr7tv#*4S-(`ZXCS)7(G>1=GS$Rtf;k%! z9v9dE2ta8^j(fKA`T~!{`y+i)=4gsWBy!rp0)od3(1jbd{06o=fFF^nBxP?!!IGA0 z85Hlx=zOUq;7(mM3k-LEA_iQpNFVh7F+W6S4VHQs2&}{@Y0j_Ve?4 z0*Pl6!~=qn6p=s54y63WSCKM~ITo9u>xEUa+k*Mj}vei3DLF{>9SJ$ce~q~Gx3x} z61F16t^IQpy;h_%j}_Z=JKys3p#rIZdI8;wRBAin`I)J`;7j7&eiM;;;+gqmqJ{f) zG2rCt%9tNbhNj~FO*xxpfVzZ;7-XN$5~FD1jw%S1ZE>{l#0VP1dF9<^ zUO$&ZpL6#qoZ{oF`xwk+`&CCCY5c?xlD~~=n9Nor{78yXlV!9WNY0z$r2t z!%0{*^%Gi$lz&&-ppxGO`cl8Q_L6+eZYqZ>ArY|~4s_FDN#K@6J?_w91TP@zInX$V ze5pDs%%6CPm1s95%p_5;^I3o{BWkKUPu?;)lg~x&^VscE?4V>b{X4Uc_*9J3OqF3F zN0YG&Je^+jqYUG9?DFB=j2`M2Z)59nL;&EelA1nOGx)eN%vPXWsc4hMK<9`0Pbe1&6VSFTwu%W(4Cg1Afr6bjD69TMXv^szVg-Fr5< z7^@~!*ocQOu2hNMC{wu^R_;E7o_TjC)YHm1-8>7EESN*=81nAb*xvMyZ_3j|^;=wg zxN87(NLtIJi0iz9LB7w5J)UjG<`|FYhHKP0RF%E5pr~`ID2YP>j(V@sV??dFzt)cy z|0F-E>YUKhdax4M|Ia;LrFPHEx)DRpk!um`d3J#_-F)+6?-JvXVgQ4Q_$|dfNv>`K zN^9k9RWfUx_#+G~TF+~R$66Tt0cqe*D5$_Hwk_irPZm6BO*B``%?T;n6sN|CE#}3P zWrJQ|Hkf7>GXGbZm>mSyp(r^&pt@kO6+pV#Rq{>cO!N~G`Vdg{7wFqkjK(jX9DAq4 zD?w_evWtkzU&^sSz?&Q6)e8QdfuSf`mY?yw2g+1m(*w;FzRof>{!J{!m2Yq4n>Ua; zsrusA9woVA&xDNbMgG*4(A6AMEhSk4Eel_L$q&FN zB+vWme>ko{^`DeWP)NAT-l24{aB(0$4U z*pytilQeF^Y8N0-De+lZ-3^>kK-lRPO=h37j8ir4z^8LR=?lC+x_JRlVKzCFQf8UH z{FBfC_Qa+^IyJbZ_D?g+K!CY_w@syddj0gIF=ZIn|2 zDp1+Iq1?evtTE#--n(I{)EhU&&2WN;Q8;m|D=NGV5kaC!|ME}+&_D-i!4U!O9fWHY z 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%0DNX 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