DiameterRfRo_SIP_TCFunctions.ttcn 72.4 KB
Newer Older
/**
 *  @author     STF 490
 *  @version    $Id$
 *  @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.
  */
module DiameterRfRo_SIP_TCFunctions {
    
    //LibCommon
    import from LibCommon_Sync all ;

    //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;
    import from LibSip_Common all;
    //LibIms
    import from LibIms_Templates all;
    import from LibIms_Steps all;
    import from LibIms_Interface all;
    
    // DiameterRfRo
    import from DiameterRfRo_SIP_Templates all;
garciay's avatar
garciay committed
    import from DiameterRfRo_PIXITS all;

    
    
    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
                *           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 {
                
                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);
                    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());
        
                    // Test Body
garciay's avatar
garciay committed

                    // prepare f_setHeadersMESSAGE(cSeq, To, From) and send MESSAGE 
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    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
                *           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 {
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);
                
                    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());
                    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
                *           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 {
                
                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);
                
                    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());
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    
                    // 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));
        
                    // Test Body
garciay's avatar
garciay committed

                    // prepare f_setHeadersMESSAGE(cSeq, To, From) and send MESSAGE 
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    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
                *           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 {
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);
                
                    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());
                    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
                *           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 {
                
                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);
                
                    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());
                    
                    // 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());
                    
                    // await NOTIFY and send reply 200 OK
                    f_awaitingOkResponseAndNOTIFY_sendReply(p_cSeq_s, mw_NOTIFY_Request_Base(vc_callId));
        
                    // Test Body
garciay's avatar
garciay committed

                    // prepare f_setHeadersMESSAGE(cSeq, To, From) and send MESSAGE 
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    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
                *           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
                *           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 {

                    var template REGISTER_Request v_register;
                    
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_UE1atSUThome);
                    
                    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());
                    // Test Body
                    // 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
garciay's avatar
garciay committed

                    //  PUBLISH UE1 f_setHeadersPUBLISH(cSeq, To, From) and send PUBLISH
                    LibIms_Steps.f_setHeadersPUBLISH(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    
                    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());
                    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
                *           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 {
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);
                    	
                    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());
                    // 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());
                    f_SIP_postamble_IMS1_withoutRegistration();
                } // end function f_TC_CTF_TC_CSCF_01_VA4
                
                /** 
                *  @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 template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

garciay's avatar
garciay committed
                    //  INVITE UE1 f_setHeadersINVITE(cSeq, To, From) amd send INVITE
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    
                    //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, valueof(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());
                    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;
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

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

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // await INVITE UE1@SUT
                    f_awaitingINVITE(mw_INVITE_Request_noPChargingFunction); 

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());

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

                    // Test Body
                    // 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());
                    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 template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

garciay's avatar
garciay committed
                    //  INVITE UE1 f_setHeadersINVITE(cSeq, To, From) amd send INVITE
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    
                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE
                    
                    //send BYE await response
                    f_terminateCall_UE(vc_requestUri, valueof(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());
                    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;
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

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

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // 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))));			

                    // Test Body
                    // 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());
                    
                    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());
                    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 template REGISTER_Request v_register;
                    
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_UE1atSUThome);
                    
                    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());

                    // Test Body
garciay's avatar
garciay committed

                    //  INVITE UE1 f_setHeadersINVITE(cSeq, To, From) amd send INVITE
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());

                    // 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, valueof(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());
                    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,
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    //	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());
                    
                    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());
                    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 template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

garciay's avatar
garciay committed
                    //  INVITE UE1 f_setHeadersINVITE(cSeq, To, From) amd send INVITE
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    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());
                    
                    //send BYE await response
                    f_terminateCall_UE(vc_requestUri, valueof(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());
                    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;
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

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

                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());
                    
                    // 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))));			

                    // Test Body
                    // 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());
                    
                    //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());
                    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 {
                
                /** 
                *  @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
            } // End of group TP_RF_CTF_EC_Role {
        } // End of group TP_RF_CTF_Role
        
    }  // 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 terminating side - UE1) for f_TC_RO_CTF_TC_UE_01
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_MW_GEN_09_UE1
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_UE_01(in CSeq p_cSeq_s) runs on ImsComponent {

                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

                    //Awaiting MESSAGE	
                    f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE);
                    
                    f_send200OK(); 
                    
                    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_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_RO_CTF_TC_UE_01

                /** 
                *  @desc    This is the test case function (SIP originating side - CSCF) for f_TC_RO_CTF_TC_CSCF_01
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_MW_GEN_09_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_CSCF_01(in CSeq p_cSeq_s) runs on ImsComponent {
                    var GenValue v_genValue := {tokenOrHost := "host"};
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

                    f_IMS_preamble_woRegistration( p_cSeq_s); //c_userProfile_SCSCFwithHomeUE,
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());

                    // Testbody
garciay's avatar
garciay committed
                    
                    // prepare f_setHeadersMESSAGE(cSeq, To, From) and send MESSAGE 
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, omit, omit, m_pChargingVector_origIoi_fixedValue(v_genValue)));
                    
                    //	await response - 200 OK ...
                    f_awaitingResponse(mw_Response_Base (c_statusLine200,vc_callId, vc_cSeq));

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

                    f_SIP_postamble_IMS1_withoutRegistration();

                } // end function f_TC_RO_CTF_TC_CSCF_01

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

                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

                    //Awaiting MESSAGE	
                    f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE);

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    
                    f_send200OK(); 
                    
                    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_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_RO_CTF_TC_UE_06

                /** 
                *  @desc    This is the test case function (SIP originating side - CSCF) for f_TC_RO_CTF_TC_CSCF_06
                *           Test function is adopted and comes from TS 102 790 - f_TC_IMST2_MW_GEN_09_IMS
                *  @param    p_cSeq_s 
                */
                function f_TC_RO_CTF_TC_CSCF_06(in CSeq p_cSeq_s) runs on ImsComponent {
                    var GenValue v_genValue := {tokenOrHost := "host"};
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

                    f_IMS_preamble_woRegistration( p_cSeq_s); //c_userProfile_SCSCFwithHomeUE,
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF);
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());

                    // Testbody
garciay's avatar
garciay committed
                    
                    // prepare f_setHeadersMESSAGE(cSeq, To, From) and send MESSAGE 
                    LibIms_Steps.f_setHeadersMESSAGE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    f_SendMESSAGE(m_MESSAGE_Request_PCharging_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, omit, omit, omit, m_pChargingVector_origIoi_fixedValue(v_genValue)));
                    
                    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());
                    //Postamble

                    f_SIP_postamble_IMS1_withoutRegistration();

                } // end function f_TC_RO_CTF_TC_CSCF_06

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

                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);
		
                    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());
                    // Test Body

                    //Awaiting INVITE	
                    f_awaitingINVITE(mw_INVITE_Request_noPChargingFunction); 
                    
                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());
                    
                    f_sendResponse(m_Response_2xxonINVITE_UE(c_statusLine200,vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,vc_contact,f_recordroute(),valueof(m_MBody_SDP(vc_sdp_local))));
                    // await ACK
                    f_awaitingACK(mw_ACK_Request_Base(vc_callId));
                    
                    f_selfOrClientSyncAndVerdict(c_sync2, f_getVerdict());// sync point sync2
                    
                    //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
                    // POSTAMBLE
                    
                    // send REGISTER, await 401, send REGISTER, await 200 OK	
                    f_RemoveRegistration(vc_cSeq); // deregistration in SUT
                    f_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_RO_CTF_TC_UE_08

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

                    var REGISTER_Request v_register;
                    var GenValue v_genValue := {tokenOrHost := "host"};
garciay's avatar
garciay committed
                    f_init_userprofile(c_userProfile_ICSCFwithHomeUE);

                    f_IMS_preamble_woRegistration( p_cSeq_s);//c_userProfile_SCSCFwithHomeUE,
                    //f_init_interfaceprofile(c_interfaceProfile_IMS_SUT_ICSCF); 
                    
                    f_selfOrClientSyncAndVerdict(c_prDone, f_getVerdict());

garciay's avatar
garciay committed
                    // 	INVITE UE1 f_setHeadersINVITE(cSeq, To, From) amd send INVITE
                    LibIms_Steps.f_setHeadersINVITE(p_cSeq_s, f_initSipUrl(c_userProfile_UE1atSUThome), f_initSipUrl(vc_userprofile.id));
                    f_SendINVITE(m_INVITE_Request_IMS(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact, omit, omit/* vc_route*/, omit, omit, m_pChargingVector_origIoi_fixedValue(v_genValue), valueof(m_MBody_SDP(vc_sdp_local))));

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());

                    //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_sync2, f_getVerdict());// sync point sync2

                    //send BYE and await 200OK
                    f_terminateCall_UE(vc_requestUri, valueof(vc_callId), vc_cSeq, vc_caller_From, vc_caller_To);

                    f_selfOrClientSyncAndVerdict(c_tbDone, f_getVerdict());// sync point test body done
                    // POSTAMBLE

                    f_SIP_postamble_IMS1_withoutRegistration();

                } // end function f_TC_RO_CTF_TC_CSCF_08
                
            } // End of group TP_RO_CTF_TC
            // 5.2.3.2.4 Error Casses 
            group TP_RO_CTF_EC {
            } // End of group TP_RO_CTF_EC
            // 5.2.3.2.5 Tariff Changes 
            group TP_RO_CTF_CH {
            } // End of group TP_RO_CTF_CH
            // 5.2.3.2.6 Re-Authorization 
            group TP_RO_CTF_RE {
            } // End of group TP_RO_CTF_RE
            // 5.2.3.2.7 Failure Handling 
            group TP_RO_CTF_FH {

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

                    var template REGISTER_Request v_register;
garciay's avatar
garciay committed
                    
                    f_init_userprofile(c_userProfile_UE1atSUThome);

                    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());
                    // Test Body

                    //Awaiting MESSAGE	
                    f_awaitingMESSAGE(mw_MESSAGE_Request_noPchargingFunction_UE);

                    f_selfOrClientSyncAndVerdict(c_sync1, f_getVerdict());

                    f_selfOrClientSyncAndVerdict(c_sync2, f_getVerdict());// sync point sync2
                    
                    f_send200OK(); 
                    
                    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_SIP_postamble_UE_withoutRegistration();
                } // end function f_TC_RO_CTF_FH_UE_01

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