Commit acf5e7db authored by pintar's avatar pintar
Browse files

changes due to week 41

parent 4f2e0d82
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -56,6 +56,11 @@ group SUT_UE1 {
	/** @desc	charstring for home(SUT) REGISTRAR domain
	*/
	modulepar charstring  PX_IMS_SUT_UE1_REGISTRAR := "registrar.sut.net";

	/** @desc	charstring for UE1 display name
	*/
	modulepar charstring  PX_IMS_SUT_UE1_DISPLAY := "UE1@SUT";
	
} // end group SUT_UE1
group SUT_UE2 {
	/** @desc	integer for SUT - PCSCF2 port number to exchange SIP messages
@@ -101,6 +106,17 @@ group SUT_UE2 {
	*/
	modulepar charstring  PX_IMS_SUT_UE2_REGISTRAR := "registrar.sut.net";
} // end group SUT_UE2



group SUT_unknown{
	/** @desc	charstring for identity of emergency service local domain
	*/
	modulepar charstring  PX_IMS_SUT_unknownUE_PUBLIC_USER := "0007";
	
} // end group SUT_unknown


group EMERGENCY{
	/** @desc	charstring for identity of emergency service local domain
	*/
@@ -171,6 +187,11 @@ group SUT_SCSCF {
	/** @desc	charstring for SUT/S-CSCFdomain
	*/
	modulepar charstring  PX_IMS_SUT_SCSCF_HOME_DOMAIN := "172.27.16.115";
	
	/** @desc	charstring for SUT/S-CSCF globally used realm name of IUT S-CSCF 
	*/
	modulepar charstring  PX_IMS_SUT_SCSCF_REALM := "realm.scscf";

} // end group SUT_SCSCF

group SUT_ICSCF {	
@@ -262,6 +283,9 @@ group TS_IMS1user {
	*/
	modulepar charstring  PX_IMS_TS_IMS1UE_PUBLIC_USER := "IMS1UE";

	/** @desc	charstring for SUT/P-CSCFdomain
	*/
	modulepar charstring  PX_IMS_TS_IMS1UE_HOME_DOMAIN := "172.27.16.115";
} // end group TS_IMS1user

} // end group TS
+9 −3
Original line number Diff line number Diff line
@@ -26,8 +26,10 @@ group UserProfileConstants
	  const integer c_userProfile_IBCFwithVisitingUE := 31; 		// location is IMS1 domain
	  const integer c_userProfile_PCSCFwithHomeUE := 41;	    	// location is IMS1 domain
	  const integer c_userProfile_PCSCFwithVisitingUE := 42;	    // location is IMS1 domain
	  const integer c_userProfile_ICSCFwithHomeUE := 43; 			// location is IMS1 domain
	  const integer c_userProfile_SCSCFwithHomeUE := 44; 			// location is IMS1 domain
	  const integer c_userProfile_PCSCFwithVisitingUE2 := 43;		// location is IMS1 domain
	  const integer c_userProfile_PCSCFwithUnknownVisitingUE := 44;		// location is IMS1 domain
	  const integer c_userProfile_ICSCFwithHomeUE := 45; 			// location is IMS1 domain
	  const integer c_userProfile_SCSCFwithHomeUE := 46; 			// location is IMS1 domain
 
	  
	  // number of interface profile 
@@ -45,6 +47,10 @@ group UserProfileConstants
      const integer c_serviceProfile_EMERGENCY := 911;
	  const integer c_serviceProfile_EMERGENCY_INVALID := 912;

	  // number of SIPURL identifiers
	  const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_domain := 1101; // c_interfaceProfile_IMS_SUT_PCSCF1
	  const integer c_interfaceSIPURL_IMS_SUT_PCSCF1_ip := 1102;	 // c_interfaceProfile_IMS_SUT_PCSCF1

} //end group UserProfileConstants


+164 −3
Original line number Diff line number Diff line
@@ -347,11 +347,37 @@ module LibIms_Steps
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}
	
			case (c_userProfile_IBCFwithUnknownUE) { 					//variant 
			vc_userprofile.currPort := PX_IMS_TS_ICSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_ICSCF_IPADDR;		// via
			vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT;			// contact (simulated UE)
			vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR;		// contact
			vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN;	// From, To (register)
			vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER;	// From, To (register)
			vc_userprofile.qop := PX_IMS_SUT_UE1_QOP;					// Authorization
			vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME;	// Authorization
			vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD;			// Authorization
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}

			case (c_userProfile_PCSCFwithHomeUE) { 						//variant c_userProfile_PCSCFwithHomeUE
			vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR;		// via
			vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT;			// contact (simulated UE)
			vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR;		// contact
			vc_userprofile.homeDomain := PX_IMS_TS_IMS1UE_HOME_DOMAIN;	// From, To (register)
			vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER;	// From, To (register)
			vc_userprofile.qop := PX_IMS_SUT_UE1_QOP;					// Authorization
			vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME;	// Authorization
			vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD;			// Authorization
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}
	
			case (c_userProfile_PCSCFwithVisitingUE) { 					//variant c_userProfile_PCSCFwithVisitingUE
			vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR;		// via
			vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT;			// contact (simulated UE)
			vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR;		// contact
			vc_userprofile.homeDomain := PX_IMS_SUT_UE1_HOME_DOMAIN;	// From, To (register)
			vc_userprofile.publUsername := PX_IMS_SUT_UE1_PUBLIC_USER;	// From, To (register)
			vc_userprofile.qop := PX_IMS_SUT_UE1_QOP;					// Authorization
@@ -360,6 +386,34 @@ module LibIms_Steps
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}

			// another visting user in IMS (cp. TP_IMST2_MW_REG_15: different public id, same private id)
			case (c_userProfile_PCSCFwithVisitingUE2) { 				//variant
			vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR;		// via
			vc_userprofile.contactPort := PX_IMS_TS_UE2_PORT;			// contact (simulated UE)
			vc_userprofile.contactIpaddr := PX_IMS_TS_UE2_IPADDR;		// contact
			vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN;	// From, To (register)
			vc_userprofile.publUsername := PX_IMS_SUT_UE2_PUBLIC_USER;	// From, To (register)
			vc_userprofile.qop := PX_IMS_SUT_UE1_QOP;					// Authorization
			vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME;	// Authorization
			vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD;			// Authorization
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}

			// unknown visting user in IMS (cp. TP_IMST2_MW_REG_16)
			case (c_userProfile_PCSCFwithUnknownVisitingUE) { 			//variant
			vc_userprofile.currPort := PX_IMS_TS_PCSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_PCSCF_IPADDR;		// via
			vc_userprofile.contactPort := PX_IMS_TS_UE1_PORT;			// contact (simulated UE)
			vc_userprofile.contactIpaddr := PX_IMS_TS_UE1_IPADDR;		// contact
			vc_userprofile.homeDomain := PX_IMS_SUT_UE2_HOME_DOMAIN;	// From, To (register)
			vc_userprofile.publUsername := PX_IMS_SUT_unknownUE_PUBLIC_USER;	// From, To (register)
			vc_userprofile.qop := PX_IMS_SUT_UE1_QOP;					// Authorization
			vc_userprofile.privUsername := PX_IMS_SUT_UE1_PRIVAT_USERNAME;	// Authorization
			vc_userprofile.passwd := PX_IMS_SUT_UE1_PRIVAT_PASSWD;			// Authorization
			vc_userprofile.registrarDomain := PX_IMS_SUT_UE1_REGISTRAR; 	// Authorization
			}

			case (c_userProfile_SCSCFwithHomeUE) { 						//variant c_userProfile_SCSCFwithHomeUE
			vc_userprofile.currPort := PX_IMS_TS_SCSCF_PORT;			// via (Mw interface of TS)
			vc_userprofile.currIpaddr := PX_IMS_TS_SCSCF_IPADDR;		// via
@@ -452,6 +506,16 @@ module LibIms_Steps
						p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit};
						p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT}
						}						
						
				// following setting is used in relation to the route headers list elements
				case (c_interfaceSIPURL_IMS_SUT_PCSCF1_domain) {
						p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit};
						p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_DOMAIN, portField :=PX_IMS_SUT_PCSCF1_PORT}
						}						
				case (c_interfaceSIPURL_IMS_SUT_PCSCF1_ip) {
						p_sipUrl.userInfo := {userOrTelephoneSubscriber:="", password:=omit};
						p_sipUrl.hostPort := {host := PX_IMS_SUT_PCSCF1_IPADDR, portField :=PX_IMS_SUT_PCSCF1_PORT}
						}						
				};
			return(p_sipUrl)
		}
@@ -534,7 +598,81 @@ module LibIms_Steps
		
	}
	group registration {

		/**
		 * 
		 * @desc  registration and authentication with MD5
		 * @param p_cSeq_s		cseq parameter 
		 * @param p_auth		flag indicating if authentication is needed
		 */
		function f_Registration_IMS(inout CSeq p_cSeq_s, in boolean p_auth) runs on SipComponent
		{
			f_setHeaders_REGISTER(p_cSeq_s);
			f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_no}))); //LibSip
		
			//awaiting of 401 and sending 2nd REGISTER and awaiting 200 OK REGISTER
			if (p_auth)
			{
			  // receiving 401 Unauthorized response.
			  // and Re-send REGISTER request with Authorization header
			  tc_ack.start(PX_SIP_TACK);
			  alt
			  {
				[] SIPP.receive	(mw_Response_Base(c_statusLine401, vc_callId, p_cSeq_s)) -> value vc_response
				  {
					tc_ack.stop;
					// set headers via, cseq and authorization
					f_setHeaders_2ndREGISTER();
					f_SendREGISTER(m_REGISTER_Request_IMS(vc_requestUri, vc_callId, vc_cSeq, vc_from, vc_to, vc_via_REG, vc_contact, m_add_Authorization_digest(vc_authorization,{c_Integrity_protected_yes}))); //LibSip
	            
					// awaiting 200 OK REGISTER
					f_awaitingOkResponse(p_cSeq_s);
					f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response);
				  }
				[] SIPP.receive	(mw_Response_Base(c_statusLine200, vc_callId, p_cSeq_s))
				  {
					tc_ack.stop;
					log ("Authorization was not requested as expected");
					setverdict(inconc)
				  }
			  }
			}
			else
			{
			  f_awaitingOkResponse(p_cSeq_s);
			  f_getServiceRouteMapIntoRouteInRegistration(p_cSeq_s, vc_response);
			};
		}//end function f_Registration_IMS

		/**
		 * 
		 * @desc  awaiting UE1 registration (with authentication)
		 * @param p_cSeq_s		cseq parameter 
		 */
		function f_awaitingRegistration_IMS(inout CSeq p_cSeq_s) runs on SipComponent
		{

		//Awaiting 1st REGISTER	
		f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS);

		// 401 response
		f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401,
			vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,
			m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization
									(PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse)))
			);

		//Awaiting 2nd REGISTER	with authorization header
		f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes))));

		// 200OK to complete the request
		vc_contact := vc_request.msgHeader.contact;
		vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2char(3600)}};
		f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE)));

		}//end function f_awaitingRegistration_IMS

	} // end group registration
	
	group preambles {
		/*
@@ -568,7 +706,7 @@ module LibIms_Steps
			f_IMS_preamble_woRegistration(p_userprofile, p_cSeq_s);
	
			//Preamble
			f_Registration(p_cSeq_s, p_register);
			f_Registration(p_cSeq_s, p_register, PX_SIP_REGISTER_AUTHENTICATION_ENABLED);
			
			f_Subscription(p_cSeq_s, m_SUBSCRIBE_Request_UE(vc_requestUri, vc_callId, p_cSeq_s, vc_from, vc_to, vc_via, vc_contact));
		}			
@@ -580,6 +718,29 @@ module LibIms_Steps
		function f_SIP_postamble_IMS1_withoutRegistration () runs on ImsComponent
		{f_terminate_component()};
			
		function f_SIP_postamble_IMS1_awaitDeRegistration () runs on ImsComponent
		{
			//Awaiting 1st REGISTER	
			f_awaitingREGISTER(mw_REGISTER_unauthorizedRequest_IMS);

			// 401 response
			f_sendResponse(m_Response_WWWauthenticate_IMS(c_statusLine401,
				vc_callId, vc_cSeq,vc_caller_From, vc_caller_To, vc_via,
				m_wwwAuthenticate(f_calculatecChallenge_forWWWAuthorization
										(PX_IMS_SUT_UE1_QOP,vc_authorization.body.digestResponse)))
				);

			//Awaiting 2nd REGISTER	with authorization header
			f_awaitingREGISTER(mw_REGISTER_authorizedRequest_IMS(m_Authorization_digest(mw_digestResponse(c_Integrity_protected_yes))));

			// 200OK to complete the request
			vc_contact := vc_request.msgHeader.contact;
			vc_contact.contactBody.contactAddresses[0].contactParams := {{"expires",int2char(3600)}};
			f_sendResponse(m_Response_2xxonREGISTER_IMS(c_statusLine200,vc_callId, vc_cSeq,vc_callee_From, vc_callee_To, vc_via,vc_contact,f_initSipUrl(c_userProfile_SCSCFwithHomeUE)));

			f_terminate_component()
		};

		function f_SIP_postamble_UE1_withoutRegistration () runs on ImsComponent
		{f_terminate_component()};
			
+189 −1
Original line number Diff line number Diff line
@@ -29,6 +29,16 @@ module LibIms_Templates
				headers := *
			}
		}
		
	template Addr_Union mw_UE1_Addr_display := {nameAddr:={displayName:=PX_IMS_SUT_UE1_DISPLAY,addrSpec:=?}};
	
group Subfields{
	
	template SemicolonParam_List mw_semicolonParams_realm (template charstring p_realm)	:=
		superset({"realm",p_realm},{"rand",?},{"autn",?},{"algorithm","AKAv1-MD5"},{"ik",?},{"ck",?}) // set of GenericParam

}

group HeaderFieldTemplates{
	
	template PAccessNetworkInfo m_PAccessNetworkInfo_IEEE_11a :=
@@ -222,6 +232,18 @@ group HeaderFieldTemplates{
			fieldName := WWW_AUTHENTICATE_E,
			challenge := p_challenge
		}

	/*
	 * @desc WWW-Authenticate header field 
	 * @param p_challenge value 
	 */	
		template WwwAuthenticate mw_wwwAuthenticate (template SemicolonParam_List p_semicolonParam_List):=
		{
			fieldName := WWW_AUTHENTICATE_E,
			challenge := 
				{digestCln := p_semicolonParam_List // set of GenericParam
				}
		}
}		
group MessageTemplates {

@@ -454,6 +476,38 @@ group request_send {
		}
	}
	
		
	template REGISTER_Request m_REGISTER_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq,
		From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization)
		modifies m_REGISTER_Request_Base :=
	{
		requestLine	:=
		{
			method := REGISTER_E,
			requestUri := p_requestUri
		},
		msgHeader :=
		{
			authorization := p_authorization,
			callId := p_callId,
			contact	:= p_contact,
			cSeq		:= p_cSeq,
			fromField	:= p_from,
			toField		:= p_to,
			via		:= p_via

		}
	}
	template REGISTER_Request m_REGISTER_Request_expires_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq,
		From p_from, To p_to, Via p_via, Contact p_contact, template Authorization p_authorization, template DeltaSec p_deltaSec)
		modifies m_REGISTER_Request_IMS :=
	{
		msgHeader :=
		{
			expires := {fieldName := EXPIRES_E, deltaSec := p_deltaSec}
		}
	}
	
	template SUBSCRIBE_Request m_SUBSCRIBE_Request_UE (SipUrl p_requestUri, CallId p_callId, 
		CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact)  modifies m_SUBSCRIBE_Request_Base :=
	{
@@ -471,6 +525,24 @@ group request_send {
			expires	:= m_Expires_600000
		}
	}
	
	template SUBSCRIBE_Request m_SUBSCRIBE_Request_IMS (SipUrl p_requestUri, CallId p_callId, 
		CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact)  modifies m_SUBSCRIBE_Request_Base :=
	{
		requestLine	:=
		{
			method := SUBSCRIBE_E,
			requestUri := p_requestUri
		},
		msgHeader :=
		{	
			contact	:= p_contact,
			cSeq	:= {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"},
			event	:= m_Event_reg,
			expires	:= m_Expires_600000
		}
	}
	
}//end group request_send
 
group request_receive {
@@ -488,6 +560,32 @@ group request_receive {
		msgHeader := {pChargingFunctionAddresses := omit}
	  }
	  
	template INVITE_Request mw_INVITE_Request_PAsserted_noPPreferred (template PAssertedID p_pAssertedID)modifies mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {pAssertedID := p_pAssertedID,
					  pPreferredID := omit
					 }
	  }

	template INVITE_Request mw_INVITE_Request_route (template Route p_route) modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {route := p_route}
	  }
	  
	  
	template INVITE_Request mw_INVITE_Request_IMS (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via) modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {
			pChargingVector := p_pChargingVector,
			recordRoute := p_recordRoute,
			route := p_route,
			via := p_via
		}
	  }
	  
	/*
	 * 
	 * @desc Await INVITE using topology hiding
@@ -567,6 +665,23 @@ group request_receive {
						  }
		}
		
	template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityclient_IMS	(template Authorization p_authorization)
		modifies mw_REGISTER_Request_Base
		:=
		{
		  msgHeader := {  authorization := p_authorization,
						  securityClient := omit
						  }
		}
	template REGISTER_Request mw_REGISTER_authorizedRequest_wo_securityheaders_IMS
		modifies mw_REGISTER_Request_Base
		:=
		{
		  msgHeader := {  securityVerify := omit,
						  securityClient := omit
						  }
		}
		
	template REGISTER_Request mw_REGISTER_unauthorizedRequest_IMS	
		modifies mw_REGISTER_Request_Base
		:=
@@ -575,6 +690,21 @@ group request_receive {
						  }
		}

	template SUBSCRIBE_Request mw_SUBSCRIBE_Request_IMS (template From p_from, To p_to, template PAssertedID p_pAssertedID, template PChargingVector p_pChargingVector)  modifies mw_SUBSCRIBE_Request_Base :=
	{
		requestLine	:=
		{
			method := SUBSCRIBE_E
		},
		msgHeader :=
		{	fromField := p_from,
			toField := p_to,
			event	:= m_Event_reg,
			pAccessNetworkInfo := m_PAccessNetworkInfo_IEEE_11a,
			pChargingVector := p_pChargingVector
		}
	}

}//end group request_receive
group response_send
{
@@ -667,6 +797,28 @@ group response_send
		messageBody := p_mb
	}	

	template Response m_Response_2xxonREGISTER_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, SipUrl p_serviceroute_sip_url) 
		  modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			serviceRoute := {fieldName:=SERVICE_ROUTE_E,
				routeBody:={{ nameAddr:= {displayName:=omit,addrSpec:=p_serviceroute_sip_url},rrParam:=omit}}}
		}
	}
	

	template Response m_Response_2xxonSUBSCRIBE_IMS (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact) 
		  modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact
		}
	}

	template Response m_Response_onMESSAGE_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, Contact p_contact) modifies m_Response_Base:=
@@ -800,6 +952,42 @@ group response_receive
	  }
	}

	template Response mw_Response_401onREGISTER_WWWauthenticate_IMS(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq, template WwwAuthenticate p_wwwAuthenticate) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			wwwAuthenticate := p_wwwAuthenticate
	  }
	}

	template Response mw_Response_200onREGISTER_IMS(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq, template SipUrl p_ue_uri, template Contact p_contact, template SipUrl p_sut_scscf_uri) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pAssociatedURI := {fieldName := P_ASSOCIATED_URI_E, nameAddrList:={*,{nameAddr:={addrSpec:=p_ue_uri}},*}},
			path := ?,
			serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={addrSpec:=p_sut_scscf_uri}}}},
			pChargingFunctionAddresses := ?,
			pChargingVector := ?,
			contact := p_contact
	  }
	}
	
	template Response mw_Response_PpreferredID_PassertedID(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq, template PPreferredID p_pPreferredID, template PAssertedID p_pAssertedID) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
		  pAssertedID := p_pAssertedID,
		  pPreferredID := p_pPreferredID
	  }
	}

	template Response mw_Response_PchargingVector(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq, template PChargingVector p_chargingVector) modifies mw_Response_Base:=
	{
@@ -810,7 +998,7 @@ group response_receive
	  }
	}

}
} // end response_receive

}//end modified_templates