/* * @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_MM 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 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_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_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_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 { /** * @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_MM_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_MM_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_MM_ECSCF_100Trying_01", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_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_MM_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_MM_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_MM_ECSCF_180RINGING_01", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_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_MM_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_MM_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_MM_ECSCF_183SESSION_PROGRESS_01", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_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_MM_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_MM_ECSCF_200OK_01", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_ECSCF_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_MM_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_MM_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_MM_ECSCF_ACK_01 - Request", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_ECSCF_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_MM_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_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_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_ECSCF_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_MM_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_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_ECSCF_200OK_BYE_01", false, p_checkMessage ) ); p_monitorCompRef.done; } } // End of function f_mtc_check_TP_MM_ECSCF_ECO_200OK_BYE_01 } // 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(-, 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