Commit ed324a9d authored by garciay's avatar garciay
Browse files

Add emergency support

parent 2c29d1be
Loading
Loading
Loading
Loading
+29 −14
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ group ParameterOperations {
              { id := "uri", paramValue := v_uri },
              { id := "nonce=""""", paramValue := omit }, // already enclosed to " characters
              { id := "response=""""", paramValue := omit }, // already enclosed to " characters
              { id := "algorithm=""""", paramValue := PX_AUTH_ALGORITHM } // already enclosed to " characters
              { id := "algorithm", paramValue := PX_AUTH_ALGORITHM } // already enclosed to " characters
          }};
	  }
	      
@@ -988,6 +988,7 @@ group SetHeaders {
	  vc_cSeq := p_cSeq_s;
      
	  vc_contact := valueof(m_Contact(m_SipUrl_contactIpaddr(vc_userprofile)));

	  vc_branch := c_branchCookie & f_getRndTag();
	  vc_via:={
		fieldName := VIA_E,
@@ -1062,7 +1063,7 @@ group SetHeaders {
	 * @desc function sets header field for the next outgoing REGISTER message
	 * @param p_cSeq_s CSeq parameter to be applied
	 */
 	function f_setHeaders_REGISTER(inout CSeq p_cSeq_s) runs on SipComponent
 	function f_setHeaders_REGISTER(inout CSeq p_cSeq_s, boolean p_emergency:=false) runs on SipComponent
	{
	  var SemicolonParam_List v_params;

@@ -1094,9 +1095,14 @@ group SetHeaders {
	  
	  if(not vc_firstREGISTER_sent)
	  {
		  if (p_emergency) {
		      v_params := { { "sos", omit } };
			  vc_contact.contactBody.contactAddresses[0].addressField.addrSpecUnion.urlParameters := v_params;
		  } else {
			  v_params := { {id:=c_expiresId, paramValue:=c_shortRegistration} };
			  vc_contact.contactBody.contactAddresses[0].contactParams := v_params;
		  }
	  }
	  
	  vc_firstREGISTER_sent := true;//f_setHeaders_Register is called in deREGISTER function
	  
@@ -1305,7 +1311,14 @@ group SetHeaders {
      
	  vc_caller_From := vc_from;

      if (ischosen(vc_requestUri.components.sip)) { // sip/sips call
        vc_reqHostPort := vc_requestUri.components.sip.hostPort;
      } else if (ischosen(vc_requestUri.components.urn)) { // Emergency call
        vc_reqUrnUri := vc_requestUri.components.urn;
      } else {
        log ("f_setHeadersINVITE: unsupported field: ", vc_requestUri);
        setverdict(fail);
      } 
      
	}// end function f_setHeadersINVITE
	
@@ -3638,11 +3651,11 @@ group Registration {
	 * @param p_register	register template
	 * @param p_auth		flag indicating if authentication is needed
	 */
	function f_Registration(inout CSeq p_cSeq_s, out template REGISTER_Request p_register, in boolean p_auth) runs on SipComponent
	function f_Registration(inout CSeq p_cSeq_s, out template REGISTER_Request p_register, in boolean p_auth, boolean p_emergency:=false) runs on SipComponent
	{
	  if (PX_SIP_REGISTRATION)
	  {
		f_setHeaders_REGISTER(p_cSeq_s); //TODO need if p_register not set
		f_setHeaders_REGISTER(p_cSeq_s, p_emergency); //TODO need if p_register not set
		p_register := m_REGISTER_Request_Base(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via_REG, vc_contact, vc_authorization);	
		f_SendREGISTER(p_register); //LibSip
		
@@ -4380,18 +4393,20 @@ group DefaultsTestStep
		[] SIPP.receive(mw_Response_Base(mw_statusLine4xx, vc_callId, ?))-> value v_response sender vc_sent_label
		{ 
			setverdict(fail);
			if(v_response.msgHeader.cSeq.method == "INVITE"){
        		f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); 
    			LibSip_Steps.f_setHeadersACK();
    		f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route));
        		f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route))};
    			f_RemoveRegistration(vc_cSeq);
		}
		// catch 5xx response
		[] SIPP.receive(mw_Response_Base(mw_statusLine5xx, vc_callId, ?))-> value v_response sender vc_sent_label
		{ 
			setverdict(fail);
            if(v_response.msgHeader.cSeq.method == "INVITE"){
			f_setHeadersOnReceiptOfResponse(v_response.msgHeader.cSeq, v_response); 
			LibSip_Steps.f_setHeadersACK();
			f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route));
			f_SendACK(m_ACK_Request_route(vc_requestUri, vc_callId, v_response.msgHeader.cSeq, vc_from, vc_to, vc_via, vc_route))};
			f_RemoveRegistration(vc_cSeq);
		}	
		// catch invalid REGISTER