Skip to content
AtsSccas_TCFunctions.ttcn 125 KiB
Newer Older
Steffen Ludtke's avatar
Steffen Ludtke committed
/*
 *    @author     TTF T016
 *    @version    $Id$
 *    @desc       This module provides the TCfunctions used by the test component
 *              for SCCAS tests.
 */
module AtsSccas_TCFunctions {

    // XSD support
    import from XSD all;

    // LibCommon
    import from LibCommon_Sync all;
    import from LibCommon_VerdictControl all;
    import from LibCommon_DataStrings all;

    // LibSip
    import from LibSip_SIPTypesAndValues all;
    import from LibSip_SDPTypes all;
    import from LibSip_Templates all;
    import from LibSip_Steps all;
    import from LibSip_Interface all;
    import from LibSip_PIXITS all;

    // LibIms
    import from LibIms_Templates all;
    import from LibIms_Steps all;
    import from LibIms_SIPTypesAndValues all;
    import from LibIms_Interface all;

    // AtsSccas
    // import from AtsSccas_TestSystem all;
    import from AtsSccas_Templates all;
    import from AtsSccas_Steps all;
    import from AtsSccas_PICS all;
    import from AtsSccas_PIXITS all;
    import from AtsSccas_TestConfiguration all;

    group Group_6_3 {

        group TP_6_3_1_General {

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes 3pty registration information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;
                
Steffen Ludtke's avatar
Steffen Ludtke committed

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
               
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    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}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    omit,
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};

                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );

                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                             m_REGISTER_Request_AS(
                                              vc_requestUri, 
                                              vc_callId, 
                                              vc_cSeq, 
                                              vc_from, 
                                              vc_to, 
                                              vc_via_REG, 
                                              vc_contact, 
                                              -,
                                              "600000",
                                              m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                              m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
                              ));
Steffen Ludtke's avatar
Steffen Ludtke committed
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_01

            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes de-registration information (Expires=0)
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_02(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preamble
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone
Steffen Ludtke's avatar
Steffen Ludtke committed

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
Steffen Ludtke's avatar
Steffen Ludtke committed
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_02

        } // End of group TP_6_3_1_General
          
        group TP_6_3_2_Triggers_To_ATCF {
            
            /**
             *  @desc    Verify that the SCCAS successfully obtain/processes SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_03(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    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}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    m_sccas_featureCaps({m_fcValue("g3gppAtcfFeatureCapabilityIndicator")}),
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};
                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );
                
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "600000",
                                                m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                                m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                //Deregistration
                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
                                                -,
                                                "0",
                                                - ,
                                                -)
                                );
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_03
Steffen Ludtke's avatar
Steffen Ludtke committed


        } // End of group TP_6_3_2_Triggers_To_ATCF

        group TP_6_3_3_SRVCC_Information_To_ATCF {

            /**
             *  @desc    Verify that the SCCAS successfully sends MESSAGE providing PS to CS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_04_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var template(value) REGISTER_Request m_register3ptyUe;
                var template(value) RequestUnion m_req;
                var template(value) Response m_ResponseReg_3ptyUe;
Steffen Ludtke's avatar
Steffen Ludtke committed

                // Preamble
                f_init_userprofile(c_userProfile_PCSCFwithHomeUE);
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_initSipUrl(c_userProfile_PCSCFwithHomeUE);
                
                //Registration
                f_setHeaders_REGISTER(v_cSeq_s);//UE REGISTER
                m_register3ptyUe :=  m_register_ue_srvcc(
                                                    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}
                                                                                ), 
                                                    PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                    PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                    "600000",
                                                    m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                        {
                                                                            m_fcValue(
                                                                                      "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                      {
                                                                                        {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                      })
                                                                        }),
                                                    omit,
                                                    omit
                                                    );
                m_req:= {Register:=valueof(m_register3ptyUe)};
                
                m_ResponseReg_3ptyUe :=  m_Response_2xxonREGISTER_IMS(
                                                                c_statusLine200,
                                                                vc_callId,
                                                                p_cSeq_s,
                                                                vc_from,
                                                                vc_to,
                                                                vc_via_REG,
                                                                vc_contact,
                                                                m_SipUrl_currDomain(vc_userprofile),
                                                                vc_from.addressField.nameAddr.addrSpec
                                                                );
                
                f_init_userprofile(c_userProfile_SCSCFwithHomeUE);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_AS); //AS as SCCAS
                f_initSipUrl(c_userProfile_SCSCFwithHomeUE);
                
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync preambleDone
Steffen Ludtke's avatar
Steffen Ludtke committed

                f_setHeaders_REGISTER_AS(v_cSeq_s);//AS INTERFACE REGISTER
Steffen Ludtke's avatar
Steffen Ludtke committed
                f_SendREGISTER(
                               m_REGISTER_Request_AS(
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                vc_contact, 
Steffen Ludtke's avatar
Steffen Ludtke committed
                                                "600000",
                                                m_contentType("multipart/mixed",{m_contentTypeBoundary(c_boundary)}) ,
                                                m_MBody_MIME_SipReqResp(c_boundary,m_req,m_ResponseReg_3ptyUe)
Steffen Ludtke's avatar
Steffen Ludtke committed
                                ));
                tc_ack.start;
                alt {
//					[] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
//																					   vc_callId, 
//																					   vc_cSeq, 
//																					   vc_from, 
//																					   vc_to, 
//																					   vc_via_REG, 
//																					   vc_contact, 
//																					   mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
//																					   mw_PAssertedID(
//																									  mw_PAssertedIDValue(PX_SCCAS_URI)
//																									  )
//																					   )) 
                    [] SIPP.receive(mw_Response_2xxonREGISTER_AS(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
Steffen Ludtke's avatar
Steffen Ludtke committed
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_ueims

            function f_TC_ISC_SCCAS_RSC_REG_04_atcf(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // End of function f_TC_ISC_SCCAS_RSC_REG_04_atcf

        } // End of group TP_6_3_3_SRVCC_Information_To_ATCF

        group TP_6_3_4_Trigger_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully get CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_05_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.atcf-mgmt-uri",
                                                                               {tokenOrHost := PX_ACTF_MGMT_URI}
                                                                             },
                                                                             {
                                                                               "g.3gpp.path",
                                                                               {tokenOrHost := PX_ACTF_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                           vc_authorization, 
                                                                           {c_Integrity_protected_no}
                                                                           ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri\",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_05_ueims

            function f_TC_ISC_SCCAS_RSC_REG_05_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {

                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration

                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // deregistration
                
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // end function f_TC_ISC_SCCAS_RSC_REG_05_msc

        } // End of group TP_6_3_4_Trigger_SRVCC_To_MSC

        group TP_6_3_5_Providing_SRVCC_To_MSC {

            /**
             *  @desc    Verify that the SCCAS successfully provide CS to PS SRVCC information
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_RSC_REG_06_ueims(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;
                var Contact v_contact;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                action("Please register UE");
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_setHeaders_REGISTER(v_cSeq_s);
                v_contact := valueof(vc_contact);
                v_contact.contactBody.contactAddresses[0].contactParams := { // TODO To be refined during validation
                                                                             {
                                                                               "g.3gpp.icsi-ref",
                                                                               {tokenOrHost := PX_ICSI_URI}
                                                                             }
                                                                            };
                f_SendREGISTER(
                               m_sccas_register(
                                                vc_requestUri, 
                                                vc_callId, 
                                                vc_cSeq, 
                                                vc_from, 
                                                vc_to, 
                                                vc_via_REG, 
                                                v_contact, 
                                                m_add_Authorization_digest(
                                                                            vc_authorization, 
                                                                            {c_Integrity_protected_no}
                                                                            ), 
                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                "600000",
                                                -/*m_sccas_featureCaps( // TS 124 237 Clause C.6 Definition of feature-capability indicator g.3gpp.atcfmgmt-uri
                                                                    {
                                                                        m_fcValue(
                                                                                  "g-3gpp-atcf-mgmt-uri-in-path",
                                                                                  {
                                                                                    {"sip-uri", { tokenOrHost := PX_ACTF_MGMT_URI }}
                                                                                  })
                                                                    })*/, // TODO To be refined during validation
                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonREGISTER(
                                                                    vc_callId, 
                                                                    vc_cSeq, 
                                                                    vc_from, 
                                                                    vc_to, 
                                                                    vc_via_REG, 
                                                                    vc_contact, 
                                                                    mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                                    mw_PAssertedID(
                                                                                   mw_PAssertedIDValue(PX_SCCAS_URI)
                                                                                   ), // TODO To be refined during validation
                                                                    mw_acceptContact(
                                                                                     { // TODO To be refined during validation
                                                                                        {
                                                                                        "g.3gpp.path-media",
                                                                                        {tokenOrHost := PX_ICSI_URI}
                                                                                        }
                                                                                     }
                                                                                     )
                                                                    )) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_RSC_REG_06_ueims

            function f_TC_ISC_SCCAS_RSC_REG_06_msc(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Message
                LibIms_Steps.f_setHeadersMESSAGE(v_cSeq_s, vc_from.addressField.addrSpecUnion, vc_to.addressField.addrSpecUnion);
                f_awaitingMESSAGE(
                                  mw_sccas_MESSAGE_Request(
                                                           -, -, 
                                                           mw_pChargingVector(-, { tokenOrHost := "orig-ioi" }), // TODO To be refined during validation
                                                           -,
                                                           m_contentType("application/vnd.3gpp.SRVCC-info+xml"),  // TODO To be refined during validation
                                                           ? // TODO To be refined during validation
                                  )
                                  );
                f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict()); // sync

                // Answer to the MESSAGE
                f_send200OK();
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
            } // end function f_TC_ISC_SCCAS_RSC_REG_06_msc

        } // End of group TP_6_3_5_Providing_SRVCC_To_MSC

    } // End of group Group_6_3
     
    group Group_6A_4 {

        group TP_6A_4_2_SIP_INVITE_request {

            /**
             *  @desc    Verify that the SCCAS send INVITE for anchored user populated with FeatureCaps header
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_GEN_INV_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                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}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_sccas_Response_2xxonINVITE(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: 200 OK message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_GEN_INV_01

        }  // End of group TP_6A_4_2_SIP_INVITE_request

    } // End of group Group_6A_4
     
    group Group_7_3 {
    } // End of group Group_7_3
     
    group Group_8_3 {
    } // End of group Group_8_3
     
    group Group_9_3 {
        
        function f_TC_IISC_SCCAS_CPT_INV_01_ueims(in CSeq p_cSeq_s)
        runs on ImsComponent {
                
            // TODO: set correct service profiles
            LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
            f_SendINVITE(m_sccas_invite(
                    vc_requestUri,
                    vc_callId,
                    vc_cSeq,
                    vc_from,
                    vc_to,
                    vc_via_REG,
                    vc_contact,
                    omit, // template(omit) Require p_require := omit,
                    vc_route,
                    m_supported_replaces, //template(omit) Supported p_supported := omit,
                    omit //template(value) MessageBody p_mb
                )
            
            );
            f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callIdReg, p_cSeq_s));
            
            
            }
        
Steffen Ludtke's avatar
Steffen Ludtke committed
    } // End of group Group_9_3
     
    group Group_10_3 {

            /**
             *  @desc    Verify that the SCC AS successfully processes an INVITE on a previously established dialog if the SIP INVITE request contains a Replaces header field.
             *  @param   p_cSeq_s Random CSeq REGISTER number
             */
            function f_TC_ISC_SCCAS_PPT_RIN_01(in CSeq p_cSeq_s)
            runs on ImsComponent {
                // Local variables
                var CSeq v_cSeq_s := p_cSeq_s;

                // Preambule
                f_init_userprofile(c_userProfile_UE1atSUThome);
                f_initSipUrl(c_serviceProfile_EMERGENCY);
                f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
                // Registration
                f_sendRegistrationAndAwait200Ok(
                                                v_cSeq_s,
                                                m_sccas_register(
                                                                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}
                                                                                            ), 
                                                                PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
                                                                PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
                                                                "600000",
                                                                -,
                                                                m_contentType(c_sdpApplication), // TODO To be refined during validation
                                                                m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
                                                ), 
                                                mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
                                                );
                f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

                // Registration
                f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
                f_SendINVITE(
                             m_sccas_invite(   // TODO request active speech media component using CS bearer
                                            vc_requestUri,
                                            vc_callId, 
                                            p_cSeq_s, 
                                            vc_from, vc_to, vc_via_REG, 
                                            vc_contact,
                                            -, -, -,
                                            m_MBody_SDP(vc_sdp_local)
                                            ));
                tc_ack.start;
                alt {
                    [] SIPP.receive(mw_INVITE_Request(?,vc_requestUri)) {
                        tc_ack.stop;
                        log("*** " & __SCOPE__ & ": PASS: forwarded INVITE message was received ***");
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
                    }
                    [] tc_ack.timeout {
                        f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
                    }
                }

                // TODO Deregistration?
                f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

            } // End of function f_TC_ISC_SCCAS_PPT_RIN_01        

			/**
			 *  @desc    Verify that the SCC AS successfully processes an UPDATE on an existing early dialog if the SIP INVITE request contains a Replaces header field.
			 *  @param   p_cSeq_s Random CSeq REGISTER number
			 */
			function f_TC_ISC_SCCAS_PPT_RIN_02(in CSeq p_cSeq_s)
			runs on ImsComponent {
				// Local variables
				var CSeq v_cSeq_s := p_cSeq_s;

				// Preambule
				f_init_userprofile(c_userProfile_UE1atSUThome);
				f_initSipUrl(c_serviceProfile_EMERGENCY);
				f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
				// Registration
				f_sendRegistrationAndAwait200Ok(
												v_cSeq_s,
												m_sccas_register(
																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}
																							), 
																PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
																PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
																"600000",
																-,
																m_contentType(c_sdpApplication), // TODO To be refined during validation
																m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
												), 
												mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
												);
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

				// Registration
				f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
				f_SendINVITE(
							 m_sccas_invite(   // TODO request active speech media component using CS bearer
											vc_requestUri,
											vc_callId, 
											p_cSeq_s, 
											vc_from, vc_to, vc_via_REG, 
											vc_contact,
											-, -, -,
											m_MBody_SDP(vc_sdp_local)
											));
				tc_ack.start;
				alt {
					[] SIPP.receive(mw_UPDATE_Request_Base(?)) {
						tc_ack.stop;
						log("*** " & __SCOPE__ & ": PASS: UPDATE message was received ***");
						f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
					}
					[] tc_ack.timeout {
						f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
					}
				}

				// TODO Deregistration?
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

			} // End of function f_TC_ISC_SCCAS_PPT_RIN_02    
			/**
			 *  @desc    Verify that the SCC AS processes an INVITE if it is unable to associate the SIP INVITE request with a confirmed dialog or on a previously established dialog.
			 *  @param   p_cSeq_s Random CSeq REGISTER number
			 */
			function f_TC_ISC_SCCAS_PPT_RIN_03(in CSeq p_cSeq_s)
			runs on ImsComponent {
				// Local variables
				var CSeq v_cSeq_s := p_cSeq_s;

				// Preambule
				f_init_userprofile(c_userProfile_UE1atSUThome);
				f_initSipUrl(c_serviceProfile_EMERGENCY);
				f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
				// Registration
				f_sendRegistrationAndAwait200Ok(
												v_cSeq_s,
												m_sccas_register(
																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}
																							), 
																PX_IMS_SUT_SCSCF_IPADDR, // TODO To be refined during validation
																PX_IMS_SUT_SCSCF_PORT, // TODO To be refined during validation
																"600000",
																-,
																m_contentType(c_sdpApplication), // TODO To be refined during validation
																m_MBody_SDP(vc_sdp_local) // TODO To be refined during validation
												), 
												mw_sccas_Response_2xxonREGISTER(vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact)
												);
				f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict()); // sync

				// Registration
				f_IncCSeq(v_cSeq_s); LibIms_Steps.f_setHeadersINVITE(v_cSeq_s, f_initSipUrl(c_serviceProfile_EMERGENCY), f_initSipUrl(c_userProfile_UE1atSUThome));
				f_SendINVITE(
							 m_sccas_invite( // TODO Replaces indicating value PX_UE_A_SIP_URI; // indicating access transfer procedure
											vc_requestUri,
											vc_callId, 
											p_cSeq_s, 
											vc_from, vc_to, vc_via_REG, 
											vc_contact,
											-, -, -,
											m_MBody_SDP(vc_sdp_local)
											));
				tc_ack.start;
				alt {
					[] SIPP.receive(mw_Response_Base(c_statusLine480)) {
						tc_ack.stop;
						log("*** " & __SCOPE__ & ": PASS: 480 OK message was received ***");
						f_selfOrClientSyncAndVerdict(c_tbDone, e_success); // sync
					}
					[] tc_ack.timeout {
						f_selfOrClientSyncAndVerdict(c_tbDone, e_error); // sync 
					}
				}

				// TODO Deregistration?
				f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync

			} // End of function f_TC_ISC_SCCAS_PPT_RIN_03

			/**
			 *  @desc    Verify that the SCC AS processes an INVITE if number of media lines in the Target Access Leg is less than the number of media lines in the Source Access Leg.
			 *  @param   p_cSeq_s Random CSeq REGISTER number
			 */
			function f_TC_ISC_SCCAS_PPT_RIN_04(in CSeq p_cSeq_s)
			runs on ImsComponent {
				// Local variables
				var CSeq v_cSeq_s := p_cSeq_s;

				// Preambule
				f_init_userprofile(c_userProfile_UE1atSUThome);
				f_initSipUrl(c_serviceProfile_EMERGENCY);
				f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_PCSCF1);
				// Registration
				f_sendRegistrationAndAwait200Ok(
												v_cSeq_s,
												m_sccas_register(
																vc_requestUri, 
																vc_callId, 
																vc_cSeq,