Commit 59fd5c47 authored by rennoch's avatar rennoch
Browse files

consider attribute check on SDP in response message (ReInvite)

parent 75393df0
Loading
Loading
Loading
Loading
+69 −3
Original line number Diff line number Diff line
@@ -2388,10 +2388,12 @@ group SDPOperations{
	function f_SIP_checksetSDPreqDirection(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent
	{	var template SDP_attribute v_direction_out := p_direction_out;
		// check incoming SDP attribute
		log(vc_request.messageBody.sdpMessageBody);log(p_direction_in);
		if (not (ispresent(vc_request.messageBody) and (f_check_attribute(vc_request.messageBody.sdpMessageBody,p_direction_in)
			))) 
			{if (
			    match(mw_attribute_sendrecv,p_direction_in) and
			{log("than branch of if");
			    if (
			    match(p_direction_in,mw_attribute_sendrecv) and
			    not(f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendrecv) or
                 f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_sendonly) or
                 f_check_attribute(vc_request.messageBody.sdpMessageBody,mw_attribute_recvonly) or
@@ -2400,13 +2402,47 @@ group SDPOperations{
			    ){
				log("no direction attributes with expectation: ", p_direction_in)			
				}
			    else {setverdict(fail);};};
			    else {setverdict(fail);};}
			  else {setverdict(pass);log("attribute found in message body");};
  		if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO
			{v_direction_out := f_get_attribute_answer(vc_request.messageBody.sdpMessageBody, p_direction_in);}
		f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description
		f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session		
	}

    /*
     * 
     * @desc check (from remote) and set (local) the session/media attribute lines on directions
     * @param p_direction_in incoming SDP attribute that need to be checked
     * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer)
     * @return 
     * @verdict 
     */	
    function f_SIP_checkResponsesetSDPreqDirection(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent
    {	var template SDP_attribute v_direction_out := p_direction_out;
        // check incoming SDP attribute
        log(vc_response.messageBody.sdpMessageBody);log(p_direction_in);
        if (not (ispresent(vc_response.messageBody) and (f_check_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in)
            ))) 
            {log("than branch of if");
                if (
                match(p_direction_in,mw_attribute_sendrecv) and
                not(f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or
                 f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or
                 f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or
                 f_check_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive)
                )
                ){
                log("no direction attributes with expectation: ", p_direction_in)			
                }
                else {setverdict(fail);};}
              else {setverdict(pass);log("attribute found in message body");};
        if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO
            {v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);}
        f_SIP_modMediaDirection(1, v_direction_out); // handling of attribute in media description
        f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session		
    }
	
    /*
     * 
     * @desc check (from remote) and set (local) the session attribute lines on directions
@@ -2436,6 +2472,36 @@ group SDPOperations{
        f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session		
    }

    /*
     * 
     * @desc check (from remote) and set (local) the session attribute lines on directions
     * @param p_direction_in incoming SDP attribute that need to be checked
     * @param p_direction_out SDP attribute that should be included in the SDP answer (to be returned to peer)
     * @return 
     * @verdict 
     */	
    function f_SIP_checkResponsesetSDPreqDirectionSession(template SDP_attribute p_direction_in, template SDP_attribute p_direction_out) runs on SipComponent
    {	var template SDP_attribute v_direction_out := p_direction_out;
        // check incoming SDP attribute
        if (not (ispresent(vc_response.messageBody) and (f_check_session_attribute(vc_response.messageBody.sdpMessageBody,p_direction_in)
            ))) 
            {if (
                match(mw_attribute_sendrecv,p_direction_in) and
                not(f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendrecv) or
                f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_sendonly) or
                f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_recvonly) or
                f_check_session_attribute(vc_response.messageBody.sdpMessageBody,mw_attribute_inactive)
                )
                ){
                log("no direction attributes with expectation: ", p_direction_in)			
                }
                else {setverdict(fail);};};
        if (match(omit,p_direction_out))//not isvalue(v_direction_out))//MRO
            {v_direction_out := f_get_attribute_answer(vc_response.messageBody.sdpMessageBody, p_direction_in);}
        f_SIP_modSessionDirection(v_direction_out); // handling of attribute in session		
    }


	/*
		* 
		* @desc check (from remote) and set (local)the session/media attribute lines on directions