DiameterRfRo_SIP_TCFunctions.ttcn 83.2 KB
Newer Older
pintar's avatar
pintar committed
/**
 *  @author     STF 490
pintar's avatar
pintar committed
 *  @version    $Id$
pintar's avatar
pintar committed
 *  @desc       This module provides SIP/IMS test functions used by the test cases
 *              for IMS-DIAMETER tests. Test functions comes from TS 102 790 standard 
 *              and are modified due to new LibIms/LibSip library V3.X.X. All tests are 
 *              adopted with new sinchronization points due to Rf/Ro TSS/TP test specifications.
  */
pintar's avatar
pintar committed
module DiameterRfRo_SIP_TCFunctions {
pintar's avatar
pintar committed
    
    //LibCommon
    import from LibCommon_Sync all ;
pintar's avatar
pintar committed
    //LibSip
    import from LibSip_SIPTypesAndValues 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_Interface all;
    
    // DiameterRfRo
pintar's avatar
pintar committed
    import from DiameterRfRo_SIP_Templates all;
pintar's avatar
pintar committed
    group TP_RF_Role {
        
        // 5.2.2.2. CTF Role
        group TP_RF_CTF_Role {
            // 5.2.2.2.2 Message Syntax
            group TP_RF_CTF_MS {
                //Add SIP functions if needed
            } // End of group TP_RF_CTF_MS_Role
            // 5.2.2.2.3 Type of Charging 
            group TP_RF_CTF_TC {
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_01_VA1
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_01_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));    
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register);//TODO - delete when test is validated //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1,
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
        
                    // TESTBODY
                    // prepare and send MESSAGE IMS1UE@TS
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, vc_requestUri);//TODO - delete when test is validated - //used to be profile c_userProfile_ICSCFwithHomeUE
                    f_SendMESSAGE(m_MESSAGE_Request_MBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit, m_mBody_plainText("Hello!")));//vc_route is set after 200OkRegister from ServiceRoute: if not then vc_route need to be preparee in set_header function:( 
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    //    await response - 200 OK ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
        
                    // POSTAMBLE
                    // send REGISTER, await 401, send REGISTER, await 200 OK    
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_01_VA1
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_01_VA1
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_01_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                
                    f_IMS_preamble_woRegistration(p_cSeq_s);//TODO - delete when test is validated - //used to be profile c_userProfile_ICSCFwithHomeUE,
                    //TODO - delete when test is validated - //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
                    // Testbody
                    //Awaiting MESSAGE    
                    f_awaitingMESSAGE(mw_MESSAGE_Request_PchargingVector("icid-value",?));
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    f_send200OK();
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
        
                    //Postamble
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_IMS1_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_01_VA1
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_01_VA2
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_01_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));    
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    //TODO - delete when test is validated //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1,

                    // Variables & defaults initialization
                    f_IMS_preamble_woRegistration(p_cSeq_s);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    // Preamble
                    f_Registration(p_cSeq_s, v_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));
        
                    // TESTBODY
                    // prepare and send MESSAGE IMS1UE@TS
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, vc_requestUri);//TODO - delete when test is validated - //used to be profile c_userProfile_ICSCFwithHomeUE
                    f_SendMESSAGE(m_MESSAGE_Request_MBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit, m_mBody_plainText("Hello!")));//vc_route is set after 200OkRegister from ServiceRoute: if not then vc_route need to be preparee in set_header function:( 
                    //    await response - 200 OK ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
        
                    // POSTAMBLE
                    // send REGISTER, await 401, send REGISTER, await 200 OK    
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_01_VA2
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_01_VA2
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_01_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                
                    f_IMS_preamble_woRegistration(p_cSeq_s);//TODO - delete when test is validated - //used to be profile c_userProfile_ICSCFwithHomeUE,
                    //TODO - delete when test is validated - //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
        
                    // Testbody
                    //Awaiting MESSAGE    
                    f_awaitingMESSAGE(mw_MESSAGE_Request_PchargingVector("icid-value",?));
                    f_send200OK();
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
        
                    //Postamble
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_IMS1_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_01_VA2
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_01_VA3
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_01_VA3(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));    
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    //TODO - delete when test is validated //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1,
                    // Variables & defaults initialization
                    f_IMS_preamble_woRegistration(p_cSeq_s);
                    // Preamble
                    f_Registration(p_cSeq_s, v_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    
                    // deregistration in case of successful registration
                    vc_DeregDone := false;
                    f_setHeaders_SUBSCRIBE(p_cSeq_s);
                    // send SUBSCRIBE
                    f_SendSUBSCRIBE(m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, vc_route_REG));
                    // awaiting 200 OK SUBSCRIBE

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    // await NOTIFY and send reply 200 OK
                    f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, mw_NOTIFY_Request_Base(vc_callId));
        
                    // TESTBODY
                    // prepare and send MESSAGE IMS1UE@TS
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, vc_requestUri);//TODO - delete when test is validated - //used to be profile c_userProfile_ICSCFwithHomeUE
                    f_SendMESSAGE(m_MESSAGE_Request_MBody_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, vc_route_REG, omit, m_mBody_plainText("Hello!")));//vc_route is set after 200OkRegister from ServiceRoute: if not then vc_route need to be preparee in set_header function:( 
                    //    await response - 200 OK ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
        
                    // POSTAMBLE
                    // send REGISTER, await 401, send REGISTER, await 200 OK    
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_01_VA3
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_01_VA3
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_03_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_01_VA3(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_01_VA2(p_cSeq_s);
                } // end function f_TC_CTF_TC_CSCF_01_VA3
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_01_VA4
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_SUB_03_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_01_VA4(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed

                    var REGISTER_Request v_register;
                    
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));	
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration( p_cSeq_s, v_register);//c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1,
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    // TESTBODY
                    // await SUBSCRIBE
                    
                    //UE2 has established a SUBSCRIBE dialog with UE1 
                    //f_awaitingSUBSCRIBE(mw_SUBSCRIBE_Request_Base);
                    //f_sendResponse(m_Response_2xxonSUBSCRIBE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact));
                    
                    //send PUBLISH
                    LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, vc_requestUri);//, c_userProfile_ICSCFwithHomeUE);
                    f_SendPUBLISH(m_PUBLISH_Request_UE(vc_requestUri, vc_callId, vc_cSeq,
                    	vc_from, vc_to, vc_via, m_Event_presence, omit, m_mBody_plainText("I'M PRESENT!"),vc_route_REG));
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE

                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_01_VA4
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_01_VA4
pintar's avatar
pintar committed
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_SUB_03_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_01_VA4(in CSeq p_cSeq_s) runs on ImsComponent {
pintar's avatar
pintar committed
                    	
                    f_IMS_preamble_woRegistration( p_cSeq_s);//c_userProfile_ICSCFwithHomeUE,
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());

                    // Testbody

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    // await PUBLISH
                    f_awaitingPUBLISH_sendReply(mw_PUBLISH_Request_PchargingVector(?,mw_pChargingVector(c_icid,?)));

                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    // POSTAMBLE
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_IMS1_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_01_VA4
pintar's avatar
pintar committed
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_02
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_02(in CSeq p_cSeq_s) runs on ImsComponent {

                    var REGISTER_Request v_register;

                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));	
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register);  //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1, 
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    // TESTBODY

                    // prepare and send INVITE IMS1UE@TS
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, vc_requestUri); //, c_userProfile_ICSCFwithHomeUE
                    f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, valueof(m_MBody_SDP(vc_sdp_local))));

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    //await response - 200 ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    
                    // send ACK
                    LibSip_Steps.f_setHeadersACK();
                    f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq,
                                                 vc_from, vc_to, vc_via, vc_route));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE
                    
                    //send BYE await response
                    f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To);
                    
                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_02
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_02
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_02(in CSeq p_cSeq_s) runs on ImsComponent {
                    var REGISTER_Request v_register;

                    f_IMS_preamble_woRegistration(p_cSeq_s); //c_userProfile_ICSCFwithHomeUE, 
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    
                    // await INVITE UE1@SUT
                    f_awaitingINVITE(mw_INVITE_Request_noPChargingFunction); 

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1

                    //send response - 200
                    f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_addNewRecordRouteIMS(valueof(vc_recordRoute)), valueof(m_MBody_SDP(vc_sdp_local))));			

                    // TESTBODY
                    // await ACK
                    f_awaitingACK(mdw_ACK_Request_noPchargingVector(vc_callId)); // P-Charging-Function-Addresses does not pass network border
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE
                    
                    //await BYE and send 200OK
                    f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_02
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_03
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_03(in CSeq p_cSeq_s) runs on ImsComponent {

                    var REGISTER_Request v_register;

                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));	
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register);  //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1, 
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    // TESTBODY

                    // prepare and send INVITE IMS1UE@TS
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, vc_requestUri); //, c_userProfile_ICSCFwithHomeUE
                    f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, valueof(m_MBody_SDP(vc_sdp_local))));

                    //await response - 200 ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    // send ACK
                    LibSip_Steps.f_setHeadersACK();
                    f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq,
                                                 vc_from, vc_to, vc_via, vc_route));
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE
                    
                    //send BYE await response
                    f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To);
                    
                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_03
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_03
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_03(in CSeq p_cSeq_s) runs on ImsComponent {
                    var REGISTER_Request v_register;

                    f_IMS_preamble_woRegistration(p_cSeq_s); //c_userProfile_ICSCFwithHomeUE, 
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    
                    // await INVITE UE1@SUT
                    f_awaitingINVITE(mw_INVITE_Request_noPChargingFunction); 

                    //send response - 200
                    f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_addNewRecordRouteIMS(valueof(vc_recordRoute)), valueof(m_MBody_SDP(vc_sdp_local))));			

                    // TESTBODY
                    // await ACK
                    f_awaitingACK(mdw_ACK_Request_noPchargingVector(vc_callId)); // P-Charging-Function-Addresses does not pass network border
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE
                    
                    //await BYE and send 200OK
                    f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_03
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_04
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_TAR_03_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_04(in CSeq p_cSeq_s) runs on ImsComponent {
		
                    var REGISTER_Request v_register;
                    
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));	
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register); //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1, 
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done

                    // TESTBODY
                    // prepare and send INVITE UE@TS
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, vc_requestUri);//TODO:vc_requestUri need to be set for TO field---c_userProfile_ICSCFwithHomeUE
                    f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, m_MBody_SDP(vc_sdp_local)));

                    // await response - 200 ...
                    f_awaitingResponse(mw_Response_Base(c_statusLine200,vc_callId, vc_cSeq));
                    // send ACK
                    LibSip_Steps.f_setHeadersACK();
                    f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq,
                                         vc_from, vc_to, vc_via, vc_route));
                    // Send reINVITE
                    LibIms_Steps.f_setHeadersReINVITE(p_cSeq_s, true, vc_requestUri);//TODO:vc_requestUri need to be set for TO field---//, c_userProfile_ICSCFwithHomeUE
                    f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route, omit, m_MBody_SDP(vc_sdp_local)));
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1

                    // await response - 200
                    f_awaitingResponse(mw_Response_Base((c_statusLine200),vc_callId, vc_cSeq));
                    //	send ACK
                    LibSip_Steps.f_setHeadersACK();
                    f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq,
                                         vc_from, vc_to, vc_via, vc_route));
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done

                    // POSTAMBLE
                    // send original BYE await response to clean the session
                    f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To);
                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_04
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_04
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_TAR_03_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_04(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_IMS_preamble_woRegistration(p_cSeq_s);//c_userProfile_ICSCFwithHomeUE,
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    
                    //	await INVITE UE1@SUT                    
                    f_awaitingINVITE(mw_INVITE_Request_Base); // no specific constraints in TP
                    
                    //send response - 200
                    f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_addNewRecordRouteIMS(valueof(vc_recordRoute)), valueof(m_MBody_SDP(vc_sdp_local))));
                    
                    // await ACK
                    f_awaitingACK(mw_ACK_Request_Base(vc_callId));
                    
                    //await REINVITE UE1@SUT
                    f_awaitingINVITE(mw_INVITE_Request_Base);
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_addNewRecordRouteIMS(valueof(vc_recordRoute)), valueof(m_MBody_SDP(vc_sdp_local))));
                    //	await ACK
                    f_awaitingACK(mw_ACK_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    //await BYE and send 200OK
                    f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_04
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_TC_UE_05
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_UE_05(in CSeq p_cSeq_s) runs on ImsComponent {

                    var REGISTER_Request v_register;

                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));	
                    // preamble with send REGISTER, await 401, send REGISTER, await 200 OK and user profile setting
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register);  //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1, 
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    // TESTBODY

                    // prepare and send INVITE IMS1UE@TS
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, vc_requestUri); //, c_userProfile_ICSCFwithHomeUE
                    f_SendINVITE(m_INVITE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, vc_route_REG, omit, valueof(m_MBody_SDP(vc_sdp_local))));
                    
                    //await response - 200 ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));
                    
                    // send ACK
                    LibSip_Steps.f_setHeadersACK();
                    f_SendACK(m_ACK_Request_IMS(vc_requestUri, vc_callId, vc_cSeq,
                                                 vc_from, vc_to, vc_via, vc_route));

                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    //send BYE await response
                    f_terminateCall_UE(vc_requestUri, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To);
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    
                    // POSTAMBLE
                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_UE_05
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_TC_CSCF_05
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_TC_CSCF_05(in CSeq p_cSeq_s) runs on ImsComponent {
                    var REGISTER_Request v_register;

                    f_IMS_preamble_woRegistration(p_cSeq_s); //c_userProfile_ICSCFwithHomeUE, 
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_SCSCF);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    
                    // await INVITE UE1@SUT
                    f_awaitingINVITE(mw_INVITE_Request_noPChargingFunction); 

                    //send response - 200
                    f_sendResponse(m_Response_2xxonINVITE(c_statusLine200, vc_callId, vc_cSeq, vc_caller_From, vc_caller_To, vc_via, vc_contact, f_addNewRecordRouteIMS(valueof(vc_recordRoute)), valueof(m_MBody_SDP(vc_sdp_local))));			

                    // TESTBODY
                    // await ACK
                    f_awaitingACK(mdw_ACK_Request_noPchargingVector(vc_callId)); // P-Charging-Function-Addresses does not pass network border

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    //await BYE and send 200OK
                    f_awaitingBYE_sendReply(mw_BYE_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
pintar's avatar
pintar committed
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_05
                
            } // End of group TP_RF_CTF_TC_Role
            // 5.2.2.2.4 Error cases
            group TP_RF_CTF_EC {
pintar's avatar
pintar committed
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_01
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_01(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_02(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_01
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_01
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_01(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_02(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_1
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_02
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_02(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_02
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_02
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_02(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_02
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_03
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_03(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_03
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_03
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_03(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_03
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_04
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_04(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_04
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_04
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_04(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_04
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_05
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_05(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_05
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_05
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_05(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_05
                
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for TC_CTF_EC_UE_06
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_UE_06(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_UE_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_UE_06
                
                /** 
                *  @desc    This is the test case function (Mw interface - IUT P-CSCF) for TC_CTF_EC_CSCF_06
                *           Test function is adopted and comes from TS 102 790 - TC_IMST2_MW_GEN_08_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_CTF_EC_CSCF_06(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_CTF_TC_CSCF_03(p_cSeq_s);
                } // end function f_TC_CTF_EC_CSCF_06
pintar's avatar
pintar committed
            } // End of group TP_RF_CTF_EC_Role {
        } // End of group TP_RF_CTF_Role
pintar's avatar
pintar committed
    }  // End of group TP_RF_Role
    
    group TP_RO_Role {
        //5.2.3.2. CTF Role
        group TP_RO_CTF_Role {
            // 5.2.3.2.2 Message Syntax 
            group TP_RO_CTF_MS {
            } // End of group TP_RO_CTF_MS
            // 5.2.3.2.3 Type of Charging 
            group TP_RO_CTF_TC {

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_01_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_01_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact,vc_authorization));
                    
                    // Variables & defaults initialization
                    f_IMS_preamble_woRegistration(p_cSeq_s);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());// sync point preamble done
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());// sync point sync1
                    
                    // Preamble
                    f_Registration(p_cSeq_s, v_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));
            
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                        
                    //POSTAMBLE:  dereg
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                    f_RemoveRegistration(vc_cSeq); // de-register in SUT
                    f_SIP_postamble_UE_withoutRegistration();
                            
                } // end function f_TC_RO_CTF_TC_UE_01_VA1
            
            
                /** 
                *  @desc    This is the test case function (SIP terminating side - UE2) for f_TC_RO_CTF_TC_UE2_01_VA1
                *           Test function used for UE2 with only sync point in case when only UE1 need to be registered.
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE2_01_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    
                    log("No action on UE2.");
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
            
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    
                    //POSTAMBLE:  dereg
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                            
                } // end function f_TC_RO_CTF_TC_UE2_01_VA1	

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_AS_01_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_AS1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_AS_01_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                	
                    var PChargingVector v_pCharging;

                    // IMS1UE1 contact is in home network (TS)
                    f_IMS_preamble_AS( p_cSeq_s); // configuration of local user IMS1UE1 //c_userProfile_AS1, c_interfaceProfile_IMS_SUT_SCSCF,

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
            
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    
                    //Registration of first user sent to AS
                    f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true);

                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());

                    // POSTAMBLE: deregistration for UE1 on AS
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                    f_IMS_postamble_AS_withDeRegistration(true);

                } // end function f_TC_RO_CTF_TC_AS_01_VA1

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_01_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_01_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact,vc_authorization));
                    
                    // Request-Uri refers to home network (SUT)
                    // UE1 registers its public sip-url in home network (SUT)
                    // UE contact is in home network (SUT)
                    // UE authorizaton data is in home network (SUT)
                    f_IMS_preamble_withRegistration(p_cSeq_s,v_register); // LibSip //c_userProfile_UE1atSUThome, c_interfaceProfile_IMS_SUT_PCSCF1,
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    // Testbody
            
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
            
                    //     MESSAGE UE1@IMS1
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, vc_requestUri);//c_userProfile_UE2atSUThome
                    f_SendMESSAGE(m_MESSAGE_Request_Base(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via));
            
                    f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq));
            
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                        
                    //POSTAMBLE:  dereg
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                    f_RemoveRegistration(vc_cSeq); // de-register in SUT
                    f_SIP_postamble_UE_withoutRegistration();
                            
                } // end function f_TC_RO_CTF_TC_UE_01_VA2
            
            
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE2_01_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_UE2
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE2_01_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    
                    var REGISTER_Request v_register;
                
                    v_register := valueof(m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization));
                    
                    // Request-Uri refers to home network (SUT)
                    // UE1 registers its public sip-url in home network (SUT)
                    // UE contact is in home network (SUT)
                    // UE authorizaton data is in home network (SUT)
                    f_IMS_preamble_withRegistration(p_cSeq_s, v_register); // LibSip //c_userProfile_UE2atSUThome, c_interfaceProfile_IMS_SUT_PCSCF2, 
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
            
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());

                    // Testbody
                    f_awaitingMESSAGE_sendReply();
                
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());
                    
                    //POSTAMBLE:  dereg
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                    f_RemoveRegistration(vc_cSeq); // de-register in SUT
                    f_SIP_postamble_UE_withoutRegistration();
                            
                } // end function f_TC_RO_CTF_TC_UE2_01_VA2	

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_AS_01_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_AS1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_AS_01_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                	
                    var PChargingVector v_pCharging;

                    // IMS1UE1 contact is in home network (TS)
                    f_IMS_preamble_AS( p_cSeq_s); // configuration of local user IMS1UE1 //c_userProfile_AS1, c_interfaceProfile_IMS_SUT_SCSCF,

                    //Registration of first user sent to AS
                    f_awaitingREGISTER_sendReply(mw_REGISTER_Request_Base, true);

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
            
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());

                    f_awaitingMESSAGE(mw_MESSAGE_Request_Base);
                    
                    if(vc_request.requestLine.method == MESSAGE_E){
                            v_pCharging := vc_request.msgHeader.pChargingVector;
                            f_setHeadersForwardRequestFromAS(vc_cSeq, true);
                            f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri2, vc_callId, vc_cSeq, vc_from, vc_to, vc_via, omit, vc_route, omit, v_pCharging));

                            // check 200
                            f_awaitingResponse(mw_Response_Base(c_statusLine200, vc_callId, vc_cSeq)); 
                        
                        f_setHeadersForwardResponseFromAS();
                        f_sendResponse(m_Response_2xxonMESSAGE_PCharging_IMS(c_statusLine200,
                                                                 vc_callId, vc_cSeq,
                                                                 vc_caller_From,
                                                                 vc_caller_To, vc_via, v_pCharging));
                    }

                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());

                    // POSTAMBLE: deregistration for UE1 on AS
                    f_selfOrClientSyncAndVerdict(c_poDone, f_getVerdict()); // sync
                    f_IMS_postamble_AS_withDeRegistration(true);

                } // end function f_TC_RO_CTF_TC_AS_01_VA2

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_02_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_02_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE_01_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE_02_VA1
            
            
                /** 
                *  @desc    This is the test case function (SIP terminating side - UE2) for f_TC_RO_CTF_TC_UE2_02_VA1
                *           Test function used for UE2 with only sync point in case when only UE1 need to be registered.
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE2_02_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE2_02_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE2_02_VA1	

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_AS_02_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_AS1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_AS_02_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_AS_01_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_AS_02_VA1

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_02_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_02_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE_01_VA2(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE_02_VA2
            
                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE2_02_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_UE2
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE2_02_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE2_01_VA2(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE2_02_VA2	

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_AS_02_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_AS1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_AS_02_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_AS_01_VA2(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_AS_02_VA2

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_03_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_03_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE_01_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE_03_VA1
            
            
                /** 
                *  @desc    This is the test case function (SIP terminating side - UE2) for f_TC_RO_CTF_TC_UE2_03_VA1
                *           Test function used for UE2 with only sync point in case when only UE1 need to be registered.
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE2_03_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE2_02_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_UE2_03_VA1	

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_AS_03_VA1
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_REG_02_AS1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_AS_03_VA1(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_AS_01_VA1(p_cSeq_s);
                } // end function f_TC_RO_CTF_TC_AS_03_VA1

                /** 
                *  @desc    This is the test case function (SIP originating side - UE1) for f_TC_RO_CTF_TC_UE_03_VA2
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_ISC_GEN_01_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_03_VA2(in CSeq p_cSeq_s) runs on ImsComponent {
                    f_TC_RO_CTF_TC_UE_01_VA2(p_cSeq_s);