Commit 3ab75026 authored by garciay's avatar garciay
Browse files

Add MSRP support

parent c99ec44a
Loading
Loading
Loading
Loading
+152 −27
Original line number Diff line number Diff line
@@ -29,14 +29,31 @@ module AtsImsIot_Behavior {
	
	import from LibSip_Templates all;
	
	import from LibMsrp_Templates {
	    template 
	        mw_msrpSEND_any, mw_msrpResponse_success
	};
	
	import from AtsImsIot_Functions all;
	import from LibIot_PIXITS {modulepar PX_EUT_A, PX_EUT_B;}
	
	// LibSip
	import from LibSip_SDPTypes {
	    type SDP_media_desc_list
	};
	
	// LibMsrp
	import from LibMsrp_TypesAndValues {
	    type 
            MsrpURI
	};
	import from LibMsrp_Functions {
	    function 
            f_str2msrpUri
	};
    import from LibMsrp_Templates {
        template 
            m_msrpSend_Dummy, mw_msrpSEND_toPath_FromPath, 
            mw_msrpResponse_success, 
            mw_toPath, mw_fromPath
    };
		
group checks {

group checksTC_IMS_MESS_0001{
@@ -4898,48 +4915,156 @@ group checksTC_IMS_SHARE_0009 {
    
    group msrpChecks {
        
        function f_mtc_check_TP_IMS_9000_invite_req(
            ImsInterfaceMonitor p_monitorCompRef,
            boolean p_checkMessage
        ) runs on ImsTestCoordinator return SipMessage {
            var SipMessage v_sip := { request := valueof(m_INVITE_Dummy) };
            
            p_monitorCompRef.start(
                f_imsIot_receive(
                    {
                        mw_SipRequest(mw_INVITE_Request_Base)
                    },
                    { },
                    {0, omit},
                    "f_mtc_check_TP_IMS_9000_invite_req",
                    false,
                    p_checkMessage
                )
            );
            p_monitorCompRef.done;
            
            // Retrieve INVITE request message
            f_getSipMsgFromMonitor(p_monitorCompRef, v_sip);
            log("### f_mtc_check_TP_IMS_9000_invite_req: v_invite=", v_sip.request.messageBody.sdpMessageBody.media_list);
            
            return v_sip;
        } // End of function f_mtc_check_TP_IMS_9000_invite_req
        
        function f_mtc_check_TP_IMS_9000_invite_resp(
            ImsInterfaceMonitor p_monitorCompRef, 
            boolean p_checkMessage, 
            template StatusLine p_statusLine 
        ) runs on ImsTestCoordinator return SipMessage {
            var SipMessage v_sip := { request := valueof(m_INVITE_Dummy) };
            
            p_monitorCompRef.start(
                f_imsIot_receive(
                    {
                        mw_SipResponse(mw_Response_Base(p_statusLine, ?, ?))
                    },
                    { },
                    {0, omit},
                    "f_mtc_check_TP_IMS_9000_invite_resp",
                    true,
                    p_checkMessage
                )
            );
            p_monitorCompRef.done;
            
            // Retrieve INVITE response message
            f_getSipMsgFromMonitor(p_monitorCompRef, v_sip);
            log("### f_mtc_check_TP_IMS_9000_invite_resp: v_invite=", v_sip.response.messageBody.sdpMessageBody.media_list);
            
            return v_sip;
        } // End of function f_mtc_check_TP_IMS_9000_invite_resp
        
        /**
         * @desc Starts monitor component behavior
         * @param p_monitorCompRef Reference to monitor component
         * @param p_checkMessage TODO
         * <pre>
         * ensure that {
         *     when { 
         *         UE_A sends SEND_MSRP to UE_B 
         *     }
         *     then { 
         *         UE_B receives the SEND_MSRP containing 
         *             FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE 
         *             ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response
         *             Content-Type_header indicating text/plain
         *     }
         * }
         * </pre>
         */
        function f_mtc_check_TP_MSRP_9000_01( 
            ImsInterfaceMonitor p_monitorCompRef,
            boolean p_checkMessage
        ) runs on ImsTestCoordinator return Request {
            var SipMessage v_sip := { request := valueof(m_INVITE_Dummy) };
            var Request v_registerStep;
            
            boolean p_checkMessage,
            in SipMessage p_inviteReq
        ) runs on ImsTestCoordinator return SipMessage {
            var SipMessage v_sip := { msrpRequest := valueof(m_msrpSend_Dummy) };
            var template MsrpURI v_fromPath;
            var SDP_media_desc_list v_medias;
            
            if (not(ispresent(p_inviteReq.request.messageBody))) {
                setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_01: 'messageBody' field not present ***");
            } else if (not(ischosen(p_inviteReq.request.messageBody.sdpMessageBody))) {
                setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_01: 'sdpMessageBody' field not selected ***");
            } else if (not(ispresent(p_inviteReq.request.messageBody.sdpMessageBody.media_list))) {
                setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_01: 'media_list' field not present ***");
            } else {
                v_medias := p_inviteReq.request.messageBody.sdpMessageBody.media_list;
                if (lengthof(v_medias) == 0) {
                    setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_01: 'media_list' is empty ***");
                } else {
                    // Extrat fromPath and toPath
                    if (not(f_str2msrpUri(v_medias[0].attributes[0].msrp.attr_value, v_fromPath))) { // FIXME To be refined
                        setverdict(inconc, self, fail, "*** f_mtc_check_TP_MSRP_9000_01: 'media_list' is empty ***");
                    } else {
                        p_monitorCompRef.start(
                            f_imsIot_receive(
                                { // Pass criteria
                     mw_MsrpRequest(mw_msrpSEND_any)
                                    mw_MsrpRequest(
                                        mw_msrpSEND_toPath_FromPath(
                                            mw_toPath(?),
                                            mw_fromPath(v_fromPath)
                                        )
                                    )
                                },
                                { }, // Fail criteria
                                {0, omit},
                                "TP_MSRP_9000_01",
                 false,
                                true,
                                p_checkMessage
                            )
                        );
                        p_monitorCompRef.done;
                        
            // Retrieve INVITE message
                        // Retrieve MSRP SEND message
                        f_getSipMsgFromMonitor(p_monitorCompRef, v_sip);
            v_registerStep := v_sip.request;
            log("### f_mtc_check_TP_MSRP_9000_01: v_registerStep=", v_sip.request.messageBody.sdpMessageBody.media_list[0].attributes[0].msrp);
                        log("### f_mtc_check_TP_MSRP_9000_01: v_sip=", v_sip.msrpRequest);
                        
                        return v_sip;
                    }
                }
            }
            
            return v_registerStep
            return null;
        } // End of function f_mtc_check_TP_MSRP_9000_01
        
        /**
         * @desc Starts monitor component behavior
         * @param p_monitorCompRef Reference to monitor component
         * @param p_checkMessage TODO
         * <pre>
         * ensure that { 
         *     when { 
         *         UE_B receives SEND_MSRP from UE_A 
         *     }
         *     then { 
         *         UE_B sends the 200_response_MSRP containing 
         *             FromPath_header indicating the msrp_path from SDP attribute within SIP INVITE 
         *             ToPath_header indicating the msrp_path from SDP attribute within SIP 200_response 
         *         }
         *     }
         * </pre>
         */
        function f_mtc_check_TP_MSRP_9000_02( 
            ImsInterfaceMonitor p_monitorCompRef,
            boolean p_checkMessage
            boolean p_checkMessage,
            in SipMessage p_inviteResp,
            in SipMessage p_msrpSend
        ) runs on ImsTestCoordinator {
            p_monitorCompRef.start(
             f_imsIot_receive(