LibIms_Templates.ttcn 70.1 KB
Newer Older
/*
 *	@author 	STF 346
 *  @version    $Id$
 *	@desc		This module provides the types used by the test component 
 *              for SIP-IMS tests. Module become from STF306 and STF334-336
 */

module LibIms_Templates
{	
	//LibCommon
	import from LibCommon_DataStrings all;
	
	//LibSip
	import from LibSip_SIPTypesAndValues all;
	import from LibSip_SDPTypes all;
	import from LibSip_Templates all;
	import from LibSip_Steps all;
	import from LibSip_PIXITS all;
	import from LibSip_XMLTypes all;
	
	//LibIms
	import from LibIms_SIPTypesAndValues all;
	
	import from LibIms_PIXITS all;
	
	template charstring m_international_number_format := pattern  "\\+\d+";//pattern  "\+\d+";

	template NameAddr mw_SipUrl_SUTinterface(charstring p_host, integer p_port) := 
		{
			displayName := *,
			addrSpec := {
				scheme := "sip:",
				userInfo := *,
				hostPort := {p_host, p_port},
				urlParameters := *,
				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",?}) // ERROR HERE! Superset operation must contain value list - no templates!
		
	template SemicolonParam_List m_semicolonParams_language (template charstring p_language):=
		{{"language",p_language}}
	
	template SemicolonParam_List mw_semicolonParams_language (template charstring p_language):=
		{{"language",p_language}}
}

group HeaderFieldTemplates{
	
	template MinSE m_minSE(DeltaSec p_ds):=
	{
			fieldName := MIN_SE_E,
			deltaSec:=p_ds,
			minSeParam:=omit
	}
	
	template PathValue m_pathvalue (SipUrl p_sipUrl):=
	{
	nameAddr := {displayName := omit, 	 			// optional charstring
				 addrSpec := p_sipUrl		// SipUrl
				},
	rrParam := omit
	}

	template Path m_path (SipUrl p_sipUrl):=
	{
		fieldName := PATH_E,
		pathValues := {
					{nameAddr := {
					displayName := omit, 	 			// optional charstring
					addrSpec := p_sipUrl		// SipUrl
				  	},
					rrParam := omit}
			}
	}

/*
 * @desc Path header field expectation with at least one path value
 * @param p_sipUrl value of the last element in the list of path values
 */	
	template Path mw_path (SipUrl p_sipUrl):=
	{
		fieldName := PATH_E,
		pathValues := {*,m_pathvalue(p_sipUrl)}		// any number of SipUrl may occur before p_sipUrl
	}
	
	template PAccessNetworkInfo m_pAccessNetworkInfo_IEEE_11a :=
	{
		fieldName := P_ACCESS_NETWORK_INFO_E,
		accessType := "IEEE-802.11a",
		genericParams := {{id:="extension-access-info",paramValue :="192.1.1.20"}}
	};
		
	template PAssertedService m_pAssertedService (PAssertedServiceValue p_pAssertedServiceValue):=
	{
		fieldName := P_ASSERTED_SERVICE_E,
		pAssertedServiceValue := p_pAssertedServiceValue
	};
		
	template PChargingFunctionAddresses m_pChargingFunctionAddresses_fixedValue :=
	{
		fieldName := P_CHARGING_FUNCTION_ADDRESSES_E,
		chargeAddrParams := {{id:="ccf",paramValue :="192.1.1.1"}, // value is fixed because it is deleted on proxy 
							 {id:="ecf",paramValue :="192.1.1.2"}} // value is fixed because it is deleted on proxy
	};

	
	template PChargingVector m_pChargingVector_fixedValue(charstring p_homeDomain) :=
	{
		fieldName := P_CHARGING_VECTOR_E,
		chargeParams := {{id:="icid-value",			paramValue :="123abc"},
						 {id:="icid-generated-at",	paramValue :="192.1.1.10"},
						 {id:="orig-ioi",			paramValue := p_homeDomain}}
	};
	template PChargingVector m_pChargingVector_fixedValue1(charstring p_homeDomain) :=
	{
		fieldName := P_CHARGING_VECTOR_E,
		chargeParams := {
						 {id:="icid-generated-at",	paramValue :="192.1.1.10"},
						 {id:="orig-ioi",			paramValue := p_homeDomain}}
	};
	
	template PChargingVector mw_pChargingVector(template charstring p_id, template charstring p_paramValue) :=
	{
		fieldName := P_CHARGING_VECTOR_E,
		chargeParams := superset({id := valueof(p_id), paramValue := p_paramValue})
	};

	template PMediaAuthorization m_pMediaAuthorization_fixedValue :=
	{
		fieldName := P_MEDIA_AUTHORIZATION_E,
		pMediaAuthorizations := {"A"} // example
	};


	template PEarlyMedia m_pEarlyMedia_sup := 
		{fieldName := P_EARLY_MEDIA_E, em_param := {"supported"}};
		
	
	template ProxyRequire m_proxyRequire_secAgree :=
	{
		fieldName := PROXY_REQUIRE_E,
		optionsTags := {"sec-agree"}
	};
	
	template PVisitedNetworkID mw_pVisitedNetworkID := 
	{
	  fieldName := P_VISITED_NETWORK_E,
	  vNetWorkSpec := {{vNetworkSpecToken := PX_IMS_SUT_PCSCF_VisitedNetworkID,
						genericParams := *}}
	}

	template RecordRoute m_recordRoute_notmatching:=
	{   
		fieldName := RECORD_ROUTE_E,
		routeBody :=
		{{
			nameAddr :=
			{
				displayName := omit,
				addrSpec :=
				{
					scheme := c_sipScheme,  			// contains "sip"
					userInfo := {userOrTelephoneSubscriber := "unknown", password := omit},
					hostPort :=
					{
						host := "unknown.domain.name",	// hostname, IPv4 or IPv6 as a charstring
						portField := omit
					},
					urlParameters := omit,
					headers := omit
				}
			},
			rrParam := omit
		} }
	};
	
	template Require m_require_secAgree :=
	{
		fieldName := REQUIRE_E,
		optionsTags := {"sec-agree"}
	};
	
	template Require mw_require_path :=
	{
		fieldName := REQUIRE_E,
		optionsTags := superset("path")
	};

	template Route m_route_interface (in ImsInterfaceProfile p_interfaceprofile):=
	{   
		fieldName := ROUTE_E,
		routeBody := {{nameAddr := {displayName := omit, 
								   addrSpec := 	{scheme := c_sipScheme,  			// contains "sip"
												userInfo := omit,
												hostPort := {host:=p_interfaceprofile.SUTIpaddr, portField:= p_interfaceprofile.SUTPort},
												urlParameters := omit,
												headers := omit}
								   },
					  rrParam := omit}
	}};

    template Route m_route_notmatching:=
	{   
		fieldName := ROUTE_E,
		routeBody :=
		{{
			nameAddr :=
			{
				displayName := omit,
				addrSpec :=
				{
					scheme := c_sipScheme,  			// contains "sip"
					userInfo := {userOrTelephoneSubscriber := "unknown", password := omit},
					hostPort :=
					{
						host := "unknown.domain.name",	// hostname, IPv4 or IPv6 as a charstring
						portField := omit
					},
					urlParameters := omit,
					headers := omit
				}
			},
			rrParam := omit
		} }
	};

	template SessionExpires m_se(DeltaSec p_ds):=
	{
			fieldName := SESSION_EXPIRES_E,
			deltaSec:=p_ds,
			seParam:=omit
	}
	
	template SessionExpires mw_se:=
	{
			fieldName := SESSION_EXPIRES_E,
			deltaSec:=?,
			seParam:=omit
	}
	
	template Supported m_supported_timer:=
	{
			fieldName := SUPPORTED_E,
			optionsTags := {"timer"}
	}
	
	
	template Supported m_supported_fromChange:=
	{
			fieldName := SUPPORTED_E,
			optionsTags := {"from-change"}
	}
	
	template To m_To_targetRefreshRequest(template To p_To) :=
	{
	  fieldName := TO_E,
	  addressField :=
	  {nameAddr := {
		  displayName := p_To.addressField.nameAddr.displayName,
		  addrSpec :=	p_To.addressField.nameAddr.addrSpec
		}},//end addressField
	  toParams := {{id := c_tagId, paramValue := f_getRndTag()}}
	};
	
	template ViaBody m_ViaBody_virtualUEinPCSCF(charstring branch_val,in SipUserProfile p_userprofile) :=
	{
	  sentProtocol := m_SentProtocol(PX_SIP_TRANSPORT),
	  sentBy:={host:=p_userprofile.contactIpaddr, portField:= p_userprofile.contactPort},
	  viaParams:={{id :=c_branchId,paramValue :=branch_val}}
	}

	template Via m_via_notmatching:=
	{   
		fieldName := VIA_E,
		viaBody :=
		{{
			sentProtocol := valueof(m_SentProtocol("UDP")),
					  sentBy:={host:="unknown.domain.name", portField:= 10000},
					  viaParams:={{id :=c_branchId,paramValue :="abcd0000"}}
		} }
	};
	
	/*
	 * @desc WWW-Authenticate header field 
	 * @param p_challenge value 
	 */	
		template WwwAuthenticate m_wwwAuthenticate (Challenge p_challenge):=
		{
			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
				}
		}
		
		
		
	/*
		* @desc AcceptContact header field 
		* @param p_acValues value 
		*/	
		template AcceptContact m_acceptContact (template SemicolonParam_List p_semicolonParam_List):=
		{
			fieldName := ACCEPT_CONTACT_E,
			acValues := {{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam
   						}
		}

	/*
		* @desc Authenticate header field 
		* @param p_challenge value 
		*/	
		template AcceptContact mw_acceptContact (template SemicolonParam_List p_semicolonParam_List):=
		{
			fieldName := ACCEPT_CONTACT_E,
			acValues := 
				{{wildcard:=c_WILDCARD, acRcParams := p_semicolonParam_List} // set of GenericParam
				}
		}
		
		template SubscriptionState mw_subscriptionState(charstring p_state) := {
    		fieldName := SUBSCRIPTION_STATE_E,
    		subState := p_state,
    		substateParams := omit
		}		
		
} // end group HeaderFieldTemplates

group MessageBodyTemplates {
	
group XMLTemplates {
	
	template XmlBody m_XmlBody_ConfInfo(template Conference_info p_confInfo) :=
	{
		conferenceInfo := p_confInfo
	};
	
	template XmlBody m_XmlBody_CUG(template Cug p_cug) :=
	{
		cug := p_cug
	};
	
	template XmlBody m_XmlBody_PSTNTransit(template PSTN_transit p_pstn) :=
	{
		pstnTransit := p_pstn
	};
	
rennoch's avatar
rennoch committed
	template XmlBody m_XmlBody_CDIVN(template Comm_div_info p_cdivn) :=
	{
		cdivn := p_cdivn
	};
		
	template XmlBody mw_XmlBody_ConfInfo(template Conference_info p_confInfo) :=
	{
		conferenceInfo := p_confInfo
	};
	
	template XmlBody mw_XmlBody_CUG(template Cug p_cug) :=
		{
			cug := p_cug
		};
	
	template XmlBody mw_XmlBody_PSTNTransit(template PSTN_transit p_pstn) :=
	{
		pstnTransit := p_pstn
	};
	
rennoch's avatar
rennoch committed
	template XmlBody mw_XmlBody_CDIVN(template Comm_div_info p_cdivn) :=
	{
		cdivn := p_cdivn
	};
		
}// end group XMLTemplates

group CUGTemplates {
	
	template Cug m_CUG (template CugRequestType p_crt,
						template NetworkIdentityType p_nit,
						template SixteenbitType p_cibc,
						template TwoBitType p_cci):=
	{
			cugCallOperation := p_crt,
			networkIndicator := p_nit,
			cugInterlockBinaryCode := p_cibc,
			cugCommunicationIndicator :=p_cci
	}
	
rennoch's avatar
rennoch committed
	      template Cug mw_CUG (template CugRequestType p_crt,
						 template NetworkIdentityType p_nit,
						 template SixteenbitType p_cibc,
						 template TwoBitType p_cci):=
	{
			cugCallOperation := p_crt,
			networkIndicator := p_nit,
			cugInterlockBinaryCode := p_cibc,
			cugCommunicationIndicator := p_cci
	}
	
	template CugRequestType m_cugReqType(template boolean p_outAccessRequest, template integer p_cugIndex) :=
	{
		outgoingAccessRequest := p_outAccessRequest,
		cugIndex := p_cugIndex
	}
rennoch's avatar
rennoch committed
	template CugRequestType mw_cugReqType(template boolean p_outAccessRequest, template integer p_cugIndex) :=
	{
		outgoingAccessRequest := p_outAccessRequest,
		cugIndex := p_cugIndex
	}
}

group PSTNTemplates {
	
	template PSTN_transit m_PSTN_transit(template BearerCapabilityType p_bct,
										 template BearerCapabilityType p_bct2,
										 template HighLayerCompatibilityType p_hlc,
										 template HighLayerCompatibilityType p_hlc2,
										 template LowLayerCompatibilityType p_llc,
										 template ProgressIndicatorType p_pi,
										 template DisplayType p_d) :=
	{
			BearerInfomationElement := {p_bct, p_bct2},
			HighLayerCompatibility := {p_hlc, p_hlc2},
			LowLayerCompatibility := p_llc,
			ProgressIndicator := {p_pi},
			Display := {p_d}
	}

	template PSTN_transit m_PSTN_transit_2PI(template BearerCapabilityType p_bct,
											template BearerCapabilityType p_bct2,
											template HighLayerCompatibilityType p_hlc,
											template HighLayerCompatibilityType p_hlc2,
											template LowLayerCompatibilityType p_llc,
											template ProgressIndicatorType p_pi,
											template ProgressIndicatorType p_pi2,
											template DisplayType p_d) :=
	{
			BearerInfomationElement := {p_bct, p_bct2},
			HighLayerCompatibility := {p_hlc, p_hlc2},
			LowLayerCompatibility := p_llc,
			ProgressIndicator := {p_pi, p_pi2},
			Display := {p_d}
	}

	template PSTN_transit m_PSTN_transit_3PI(template BearerCapabilityType p_bct,
											template BearerCapabilityType p_bct2,
											template HighLayerCompatibilityType p_hlc,
											template HighLayerCompatibilityType p_hlc2,
											template LowLayerCompatibilityType p_llc,
											template ProgressIndicatorType p_pi,
											template ProgressIndicatorType p_pi2,
											template ProgressIndicatorType p_pi3,
											template DisplayType p_d) :=
	{
			BearerInfomationElement := {p_bct, p_bct2},
			HighLayerCompatibility := {p_hlc, p_hlc2},
			LowLayerCompatibility := p_llc,
			ProgressIndicator := {p_pi, p_pi2, p_pi3},
			Display := {p_d}
	}
		
	template PSTN_transit mw_PSTN_transit_bc(template BearerCapabilityType p_bct,
											 template BearerCapabilityType p_bct2) :=
	{
			BearerInfomationElement := {p_bct, p_bct2},
			HighLayerCompatibility := {*, *},
			LowLayerCompatibility := *,
			ProgressIndicator := {*},
			Display := {*}
	}											 
											 
	
	template BearerCapabilityType m_BearerCapabilityType (template Bit5 p_InfoTrfCap):= {
			BCoctet3 	:= {CodingStandard := bit2str('00'B),						//Coding standard = CCITT standardized coding
							InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability
			BCoctet4 	:= {TransferMode := bit2str('00'B),							//Coding standard = CCITT standardized coding
							InformationTransferRate := bit2str('10000'B)},			//Information transfer rate = 64 kbit/s
			BCoctet4_1 	:= omit,
			BCoctet5  	:= omit,
			BCoctet5a  	:= omit,
			BCoctet5bV110  := omit,
			BCoctet5bV120  := omit,
			BCoctet5c 	:= omit,
			BCoctet5d 	:= omit,
			BCoctet6  	:= omit,
			BCoctet7  	:= omit,
			BCoctet7a  	:= omit,
			BCoctet7b  	:= omit 
	}	
	
	template ProgressIndicatorType m_ProgressIndicatorType (template Bit7 p_progDesc) := {
			ProgressOctet3 := {CodingStandard := bit2str('00'B),
							   Location := bit2str('0000'B)
							  },
			ProgressOctet4 := {ProgressDescription := bit2str(p_progDesc)}
	}
	
	template LowLayerCompatibilityType m_LowLayerCompatibilityType (template Bit5 p_InfoTrfCap) := {
			LLOctet3 := {CodingStandard := bit2str('00'B),						 //Coding standard = CCITT standardized coding
						 InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability
			LLOctet3a := omit,
			LLOctet4 := {TransferMode := bit2str('00'B),						//Coding standard = CCITT standardized coding
						 InformationTransferRate := bit2str('10000'B)},			//Information transfer rate = 64 kbit/s
			LLOctet4_1 := omit,
			LLOctet5 := omit,
			LLOctet5a := omit,
			LLOctet5bV110 := omit,
			LLOctet5bV120 := omit,
			LLOctet5c := omit,
			LLOctet5d := omit,
			LLOctet6 := omit,
			LLOctet6aHDLC := omit,
			LLOctet6aUserSpecific := omit,
			LLOctet6b := omit,
			LLOctet7 := omit,
			LLOctet7aUserSpecific := omit,
			LLOctet7aX25 := omit,
			LLOctet7bX25 := omit,
			LLOctet7c := omit,
			LLOctet7aTR9577 := omit,
			LLOctet7bTR9577 := omit 
	}
	
	template HighLayerCompatibilityType m_HighLayerCompatibilityType 
		(template Bit7 p_HLOctet4):= {
			HLOctet3 := {
				CodingStandard :=bit2str('00'B),
				Interpretation :=bit2str('100'B),
				PresentationMethod := bit2str('01'B)
			},
			HLOctet4 := {
				HighLayerCharacteristics := bit2str(p_HLOctet4)
			},
			HLOctet4aMaintenance := omit,
			HLOctet4Audio := omit
	}

	template BearerCapabilityType mw_BearerCapabilityType (template BCOctet3Type p_BCOctet3Type, template BCOctet4Type p_BCOctet4Type):= {
			BCoctet3 	:= p_BCOctet3Type,
			BCoctet4 	:= p_BCOctet4Type,
			BCoctet4_1 	:= * ,
			BCoctet5  	:= * ,
			BCoctet5a  	:= * ,
			BCoctet5bV110  := * ,
			BCoctet5bV120  := * ,
			BCoctet5c 	:= * ,
			BCoctet5d 	:= * ,
			BCoctet6  	:= * ,
			BCoctet7  	:= * ,
			BCoctet7a  	:= * ,
			BCoctet7b  	:= * 
	}	

	template BearerCapabilityType mw_BearerCapabilityType_TrfCap  (template Bit5 p_InfoTrfCap):= {
    		BCoctet3 	:= {CodingStandard := bit2str('00'B),						//Coding standard = CCITT standardized coding
    						InformationTransferCapability := bit2str(p_InfoTrfCap)},//Information transfer capability
    		BCoctet4 	:= {TransferMode := bit2str('00'B),							//Coding standard = CCITT standardized coding
    						InformationTransferRate := bit2str('10000'B)},			//Information transfer rate = 64 kbit/s
			BCoctet4_1 	:= * ,
			BCoctet5  	:= * ,
			BCoctet5a  	:= * ,
			BCoctet5bV110  := * ,
			BCoctet5bV120  := * ,
			BCoctet5c 	:= * ,
			BCoctet5d 	:= * ,
			BCoctet6  	:= * ,
			BCoctet7  	:= * ,
			BCoctet7a  	:= * ,
			BCoctet7b  	:= * 
	}	

	template ProgressIndicatorType mw_ProgressIndicatorType (template ProgressOctet3Type p_ProgressOctet3Type, template ProgressOctet4Type p_ProgressOctet4Type) := {
			ProgressOctet3 := p_ProgressOctet3Type,
			ProgressOctet4 := p_ProgressOctet4Type
	}
	
	template LowLayerCompatibilityType mw_LowLayerCompatibilityType 
		(template LLOctet3Type p_LLOctet3, template LLOctet4Type p_LLOctet4, template LLOctet7Type p_LLOctet7) := {
			LLOctet3 := p_LLOctet3,
			LLOctet3a := * ,
			LLOctet4 := p_LLOctet4,
			LLOctet4_1 := * ,
			LLOctet5 := * ,
			LLOctet5a := * ,
			LLOctet5bV110 := * ,
			LLOctet5bV120 := * ,
			LLOctet5c := * ,
			LLOctet5d := * ,
			LLOctet6 := * ,
			LLOctet6aHDLC := * ,
			LLOctet6aUserSpecific := * ,
			LLOctet6b := * ,
			LLOctet7 := p_LLOctet7,
			LLOctet7aUserSpecific := * ,
			LLOctet7aX25 := * ,
			LLOctet7bX25 := * ,
			LLOctet7c := * ,
			LLOctet7aTR9577 := * ,
			LLOctet7bTR9577 := * 
	}
	
	template HighLayerCompatibilityType mw_HighLayerCompatibilityType 
		(template HLOctet3Type p_HLOctet3, template HLOctet4Type p_HLOctet4):= {
			HLOctet3 := p_HLOctet3,
			HLOctet4 := p_HLOctet4,
			HLOctet4aMaintenance := *,
			HLOctet4Audio := *
	}

rennoch's avatar
rennoch committed
} //end group PSTNTemplates		

group CDIVNTemplates {
	
	/* general CDIVN subscription */
	template Comm_div_info m_CDIVN_sub := {
		entity := ?,
		comm_div_subs_info := {
			anyAttributes := omit,
			comm_div_selection_criteria := {
				anyAttributes := ?,
				originating_user_selection_criteria := omit,
				diverting_user_selection_criteria := omit,
				diverted_to_user_selection_criteria := omit,
				diversion_time_selection_criteria := omit,
				diversion_reason_selection_criteria := omit,
				any_1 := omit
			},
			comm_div_ntfy_trigger_criteria := omit,
			comm_div_info_selection_criteria := omit,
			any_1 := omit
		},
		comm_div_ntfy_info := omit,
		any_1 := omit
	}


} // end grouup CDIVNTemplates
	
} // end group MessageBodyTemplates
		
group MessageTemplates {

group modified_templates {

group request_send {
	
	template BYE_Request m_BYE_Request_IMS
		( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		Via p_via, template Route p_route)
		modifies m_BYE_Request_Base
		:=
		{
		  msgHeader :=
		  {
			route := p_route 
		  }
		}
	
	template BYE_Request m_BYE_Request_Reason_IMS
		( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		Via p_via, template Route p_route, integer p_cause)
		modifies m_BYE_Request_Base
		:=
		{
			msgHeader :=
			{
				reason := mw_Reason(p_cause),
				route := p_route
			}
		}
	
	template BYE_Request m_BYE_Request_UE
		( SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		Via p_via, template Route p_route)
		modifies m_BYE_Request_Base
		:=
		{
		  msgHeader :=
		  {
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
			//securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation
			route := p_route 
		  }
		}
	
	template CANCEL_Request m_CANCEL_Request_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, 
		Via p_via, template Route p_route) modifies m_CANCEL_Request_Base :=
	{
		msgHeader :=
		{
			route := p_route
		}
	}
	
	template CANCEL_Request m_CANCEL_Request_Reason_IMS (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, 
		Via p_via, template Route p_route, integer p_cause) modifies m_CANCEL_Request_Base :=
	{
		msgHeader :=
		{
			reason := mw_Reason(p_cause),
			route := p_route
		}
	}
	
	template CANCEL_Request m_CANCEL_Request_UE (SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to, 
		Via p_via, template Route p_route) modifies m_CANCEL_Request_Base :=
	{
		msgHeader :=
		{
			route := p_route
		}
	}
	
	template INVITE_Request m_INVITE_Request_UE
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route,  template Supported p_supported, template MessageBody p_mb )
	modifies m_INVITE_Request_Base
	:=
	{
	  msgHeader :=
	  {
		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
		pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
		require := p_require,
		route := p_route,
		//securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation 
		supported := p_supported
	  },
	  messageBody := p_mb
poglitsch's avatar
poglitsch committed
	}
	
		template INVITE_Request m_INVITE_Request_Allow_UE
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route,  template Supported p_supported, template MessageBody p_mb, template Allow p_allow)
	modifies m_INVITE_Request_UE
	:=
	{
	  msgHeader :=
	  {
	  	allow := p_allow
	  }
	}
		
	
	/*
	 * 
	 * @desc INVITE message exchanged at Mw
	 *
	 */	
	template INVITE_Request m_INVITE_Request_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route, template RecordRoute p_recordRoute,  template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb )
	modifies m_INVITE_Request_Base
	:=
	{
	  msgHeader :=
	  {
		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
		require := p_require,
		pChargingVector := p_pChargingVector,
		recordRoute := p_recordRoute,
		route := p_route,
		supported := p_supported
	  },
	  messageBody := p_mb
	}	
	
	/*
	* 
	* @desc INVITE message exchanged at Mw
	*
	*/	
	template INVITE_Request m_INVITE_Request_Mime_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			Via p_via, Contact p_contact, template Require p_require,
	template Route p_route, template RecordRoute p_recordRoute,  template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb )
	modifies m_INVITE_Request_IMS
	:=
	{
		msgHeader :=
		{
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_mimeMultipart}
		}
	}	
	
	/*
	* 
	* @desc INVITE message exchanged at Mw
	*
	*/	
	template INVITE_Request m_INVITE_Request_PAsserted_AcceptContact_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			Via p_via, Contact p_contact, template Require p_require,
	template Route p_route, template RecordRoute p_recordRoute, template AcceptContact p_acceptContact, template PAssertedID p_pAssertedID, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb )
	modifies m_INVITE_Request_Base
	:=
	{
		msgHeader :=
		{
    		acceptContact := p_acceptContact,
    		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
    		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
    		require := p_require,
    		pAssertedID := p_pAssertedID,
    		pChargingVector := p_pChargingVector,
    		recordRoute := p_recordRoute,
    		route := p_route,
    		supported := p_supported
		},
		messageBody := p_mb
	}	
	
	/*
	* 
	* @desc INVITE message exchanged at Mw
	*
	*/	
	template INVITE_Request m_INVITE_Request_PAsserted_Privacy_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			Via p_via, Contact p_contact, template Require p_require,
	template Route p_route, template RecordRoute p_recordRoute, template PAssertedID p_pAssertedID, template Privacy p_privacy, template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb )
	modifies m_INVITE_Request_Base
	:=
	{
		msgHeader :=
		{
    		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
    		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
    		require := p_require,
    		pAssertedID := p_pAssertedID,
    		pChargingVector := p_pChargingVector,
    		privacy := p_privacy,
    		recordRoute := p_recordRoute,
    		route := p_route,
    		supported := p_supported
		},
		messageBody := p_mb
	}	

	/*
	 * 
	 * @desc INVITE message exchanged at Mw
	 *
	 */	
	template INVITE_Request m_INVITE_Request_PAssertedService_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route,  template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template PAssertedService p_pAssertedService)
	modifies m_INVITE_Request_Base
	:=
	{
	  msgHeader :=
	  {
		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
		require := p_require,
		pChargingVector := p_pChargingVector,
		route := p_route,
		supported := p_supported,
		pAssertedService := p_pAssertedService
	  },
	  messageBody := p_mb
	}		
	
	/*
	 * 
	 * @desc INVITE message exchanged at Mw
	 *
	 */	
	template INVITE_Request m_INVITE_Request_PEarlyMedia_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route, template RecordRoute p_recordRoute,  template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb )
	modifies m_INVITE_Request_Base
	:=
	{
	  msgHeader :=
	  {
		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
		require := p_require,
		pChargingVector := p_pChargingVector,
		pEarlyMedia := m_pEarlyMedia_sup, 
		recordRoute := p_recordRoute,
		route := p_route,
		supported := p_supported
	  },
	  messageBody := p_mb
	}	

	template INVITE_Request m_INVITE_Request_PPreferred_UE
		(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		  Via p_via, Contact p_contact, template Require p_require,
		template Route p_route,  template Supported p_supported, template MessageBody p_mb,template PPreferredID p_pPreferredID )
		modifies m_INVITE_Request_UE
		:=
		{
		  msgHeader :=
		  {
			pPreferredID := p_pPreferredID
		  }
		}	

	template INVITE_Request m_INVITE_Request_PPreferred_Privacy_UE
		(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
				Via p_via, Contact p_contact, template Require p_require,
		template Route p_route,  template Supported p_supported, template MessageBody p_mb,template PPreferredID p_pPreferredID, template Privacy p_privacy)
		modifies m_INVITE_Request_UE
		:=
		{
				msgHeader :=
				{
			pPreferredID := p_pPreferredID,
			privacy := p_privacy
				}
		}

	template INVITE_Request m_INVITE_Request_SessionExpires_UE
		(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		  Via p_via, Contact p_contact, template Require p_require,
		template Route p_route,  template Supported p_supported, template MessageBody p_mb, template SessionExpires p_se)
		modifies m_INVITE_Request_Base
		:=
		{
		  msgHeader :=
		  {
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
			require := p_require,
			route := p_route,
			//securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation 
			supported := p_supported,
			sessionExpires := p_se
		  },
		  messageBody := p_mb
		}
	
	template INVITE_Request m_INVITE_Request_minSE_UE
		(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
		  Via p_via, Contact p_contact, template Require p_require,
		template Route p_route,  template Supported p_supported, template MessageBody p_mb, template MinSE p_minSE)
		modifies m_INVITE_Request_Base
		:=
		{
		  msgHeader :=
		  {
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
			require := p_require,
			route := p_route,
			//securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation 
			supported := p_supported,
			minSE := p_minSE
		  },
		  messageBody := p_mb
		}
	
	/*
	 * 
	 * @desc INVITE message exchanged at Mw
	 *
	 */	
	template INVITE_Request m_INVITE_Request_minSE_IMS
	(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
	  Via p_via, Contact p_contact, template Require p_require,
	template Route p_route,  template Supported p_supported, template PChargingVector p_pChargingVector, template MessageBody p_mb, template MinSE p_minSE)
	modifies m_INVITE_Request_Base
	:=
	{
	  msgHeader :=
	  {
		contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
		contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
		require := p_require,
		pChargingVector := p_pChargingVector,
		route := p_route,
		supported := p_supported,
			minSE := p_minSE
	  },
	  messageBody := p_mb
	}	

	template MESSAGE_Request m_MESSAGE_Request_NoBody_UE
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
				require := p_require,
				route := p_route,
				supported := p_supported
			  },
			  messageBody := omit
			}
	
	template MESSAGE_Request m_MESSAGE_Request_PCharging_UE
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
				pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
				pChargingVector := m_pChargingVector_fixedValue(PX_IMS_SUT_UE1_HOME_DOMAIN),
				require := p_require,
				route := p_route,
				supported := p_supported
			  },
			  messageBody := omit
			}
	
	template MESSAGE_Request m_MESSAGE_Request_PCharging_IMS
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported, 
			template PChargingVector p_pChargingVector)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
				pChargingVector := p_pChargingVector,
				require := p_require,
				route := p_route,
				supported := p_supported
			  },
			  messageBody := omit
			}

	template MESSAGE_Request m_MESSAGE_Request_PMediaAuth_UE
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
				pMediaAuthorization := m_pMediaAuthorization_fixedValue,
				require := p_require,
				route := p_route,
				supported := p_supported
			  },
			  messageBody := omit
			}

	template MESSAGE_Request m_MESSAGE_Request_PPreferred_UE
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported, template PPreferredID p_pPreferredID)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
				pPreferredID := p_pPreferredID,
				require := p_require,
				route := p_route,
				supported := p_supported
			  },
			  messageBody := omit
			}
	
	template MESSAGE_Request m_MESSAGE_Request_1300Bytes_UE
			(SipUrl p_requestUri, CallId p_callId, CSeq p_cSeq, From p_from, To p_to,
			  Via p_via, template Require p_require,
			template Route p_route,  template Supported p_supported)
			modifies m_MESSAGE_Request_Base
			:=
			{
			  msgHeader :=
			  {
				contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_TextPlainLength(valueof(m_MBody_longPlainText))},
				contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_plainText},
				pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,
				require := p_require,
				route := p_route,
				//securityVerify := p_securityVerify,//TODO check when information will be known regarding security assosiation 
				supported := p_supported
			  },
			  messageBody := m_MBody_longPlainText
	}
		
	template REGISTER_Request m_REGISTER_Request_UE (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 ProxyRequire p_proxyRequire, template Require p_require,
		template SecurityClient p_securityClient, template SecurityVerify p_securityVerify, template Supported p_supported)
		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,
			proxyRequire := p_proxyRequire,
			require := p_require,
			securityClient := p_securityClient,
			securityVerify := p_securityVerify,
			supported := p_supported,
			toField		:= p_to,
			via		:= p_via

		}
	}
	
		
	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 :=
	{
		requestLine	:=
		{
			method := SUBSCRIBE_E,
			requestUri := p_requestUri
		},
		msgHeader :=
		{
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,	
			contact	:= p_contact,
			cSeq	:= {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"},
			event	:= m_Event_reg,
			expires	:= m_Expires_600000
		}
	}
	
rennoch's avatar
rennoch committed
	template SUBSCRIBE_Request m_SUBSCRIBE_Request_mb_UE (SipUrl p_requestUri, CallId p_callId, 
		CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact, template MessageBody p_mb)  modifies m_SUBSCRIBE_Request_Base :=
	{
		requestLine	:=
		{
			method := SUBSCRIBE_E,
			requestUri := p_requestUri
		},
		msgHeader :=
		{
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a,	
			contact	:= p_contact,
			cSeq	:= {fieldName:=CSEQ_E, seqNumber:= p_cSeq.seqNumber, method:= "SUBSCRIBE"},
			event	:= m_Event_reg,
			expires	:= m_Expires_600000
		},
		messageBody := p_mb
	}	
	
	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
		}
	}
	
	template SUBSCRIBE_Request m_SUBSCRIBE_Request_Event (SipUrl p_requestUri, CallId p_callId, 
		CSeq p_cSeq, From p_from, To p_to, Via p_via, Contact p_contact, template Event p_event)  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	:= p_event,
			expires	:= m_Expires_600000
		}
	}
	
}//end group request_send
 
group request_receive {
	
	template ACK_Request mw_ACK_Request_noPaccessNetworkInfo	(template CallId p_callId)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pAccessNetworkInfo := omit}
		}

	template ACK_Request mw_ACK_Request_PchargingVector	(template CallId p_callId, template PChargingVector p_pChargingVector)
		modifies mw_ACK_Request_Base
		:=
		{
		  msgHeader := {  pChargingVector := p_pChargingVector}
		}
		
	template BYE_Request mw_BYE_Request_noPChargingFunction_UE(template CallId p_callId) modifies  mw_BYE_Request_Base
	  :=
	  {
		msgHeader := {pChargingFunctionAddresses := omit,
			          pChargingVector := omit}
	  }
		
	template BYE_Request mw_BYE_Request_via_PChargingVector_UE(template CallId p_callId, template PChargingVector p_pChargingVector, template Via p_via) modifies  mw_BYE_Request_Base
	  :=
	  {
		msgHeader := {pChargingVector := p_pChargingVector,
					  via := p_via}
	  }
		  
	template INVITE_Request mw_INVITE_Request_noPChargingFunction modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {pChargingFunctionAddresses := omit}
	  }
	template INVITE_Request mw_INVITE_Request_PChargingFunction modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {pChargingFunctionAddresses := ?}
	  }	 
	   
	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_PAsserted_AcceptContact (template PAssertedID p_pAssertedID, template AcceptContact p_acceptContact) modifies mw_INVITE_Request_Base
       :=
       {
      msgHeader := {pAssertedID := p_pAssertedID,
					acceptContact := p_acceptContact
          }
       }
   
	template INVITE_Request mw_INVITE_Request_RecordRoute_Via (template RecordRoute p_recordRoute, template Via p_via) modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {recordRoute := p_recordRoute,
					  via := p_via}
	  }

	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_require (
		template Require p_require
	) modifies  mw_INVITE_Request_Base := {
		msgHeader := { require := p_require }
	}
	  
poglitsch's avatar
poglitsch committed
	template INVITE_Request mw_INVITE_Request_supported (
		template Supported p_supported
	) modifies  mw_INVITE_Request_Base := {
		msgHeader := { supported := p_supported }
	}
	  
	template INVITE_Request mw_INVITE_Request_SessionExpires (template SessionExpires p_sessionExpires) modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {sessionExpires := p_sessionExpires}
	  }
	  
	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
		}
	  }
	 
	template INVITE_Request mw_INVITE_Request_IMS_mb (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
		},
		messageBody := ?
	}
	  
	template INVITE_Request mw_INVITE_Request_IMS_cug (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via, template Cug p_cug ) modifies  mw_INVITE_Request_Base
	:=
	{
		msgHeader := {
			pChargingVector := p_pChargingVector,
			recordRoute := p_recordRoute,
			route := p_route,
			via := p_via
		},
		messageBody := (mw_MBody_XML(mw_XmlBody_CUG(p_cug)),
						mw_MBody_MIMESdpXml(?, mw_XmlBody_CUG(p_cug)))
	}
	  
	template INVITE_Request mw_INVITE_Request_IMS_pstn (template PChargingVector p_pChargingVector, template RecordRoute p_recordRoute, template Route p_route, template Via p_via, template PSTN_transit p_pstn ) modifies  mw_INVITE_Request_Base
	:=
	{
		msgHeader := {
			pChargingVector := p_pChargingVector,
			recordRoute := p_recordRoute,
			route := p_route,
			via := p_via
		},
		messageBody := (mw_MBody_XML(mw_XmlBody_PSTNTransit(p_pstn)),
						mw_MBody_MIMESdpXml(?, mw_XmlBody_PSTNTransit(p_pstn)))//m_MBody_PSTN(p_pstn)//PSTN_transit
	}

	/*
	 * 
	 * @desc Await INVITE using topology hiding
	 */
	template INVITE_Request mw_INVITE_Request_TH modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {	pChargingFunctionAddresses := omit,
						pChargingVector := omit}
	  }

	/*
	 * 
	 * @desc Await INVITE without PAsserted and Privacy
	 */
	template INVITE_Request mw_INVITE_Request_noPasserted_noPrivacy (template From p_from)
	  modifies  mw_INVITE_Request_Base
	  :=
	  {
		msgHeader := {  fromField := p_from,
						pAssertedID := omit,
						pPreferredID := omit}
	  }


	/*
	 * 
	 * @desc Await INVITE with PAsserted and Privacy
	 */
	template INVITE_Request mw_INVITE_Request_PassertedPrivacy (template From p_from, template PAssertedID p_pAssertedID, template Privacy p_privacy)
			modifies  mw_INVITE_Request_Base
			:=
			{
		msgHeader := {
			fromField := p_from,
			pAssertedID := p_pAssertedID,
			privacy := p_privacy}
		}
			
     /*
      * 
      * @desc Await INVITE with PAsserted and Privacy
      */
     template INVITE_Request mw_INVITE_Request_Passerted_ifPrivacy (template From p_from, template PAssertedID p_pAssertedID, template Privacy p_privacy)
       modifies  mw_INVITE_Request_Base
       :=
       {
      msgHeader := {
      	  fromField := p_from,
          pAssertedID := p_pAssertedID,
          privacy := p_privacy ifpresent}
       }
rennoch's avatar
rennoch committed

     /*
      * 
      * @desc Await INVITE with PAsserted and Privacy
      */
     template INVITE_Request mw_INVITE_Request_HistoryInfo (template HistoryInfo p_historyInfo)
       modifies  mw_INVITE_Request_Base
       :=
       {
      msgHeader := {
          historyInfo := p_historyInfo}
       }
   
	template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_UE	(template CallId p_callId)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pChargingFunctionAddresses := omit,
				          pChargingVector := omit}
		}
	  
	template MESSAGE_Request mw_MESSAGE_Request_noPchargingFunction_IMS	(template CallId p_callId)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pChargingFunctionAddresses := omit,
						  pChargingVector := omit}
		}	
		  
	template MESSAGE_Request mw_MESSAGE_Request_PAsserted_noPPreferred (template CallId p_callId, template PAssertedID p_pAssertedID)modifies mw_MESSAGE_Request_Base
		:=
	  	{
		  msgHeader := {pAssertedID := p_pAssertedID,
			 		    pPreferredID := omit
					   }
	    }

	template MESSAGE_Request mw_MESSAGE_Request_PchargingVector	(template CallId p_callId,template charstring p_id, template charstring p_paramValue)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pChargingVector := mw_pChargingVector(p_id,p_paramValue)}
		}
	  
	template MESSAGE_Request mw_MESSAGE_Request_noPaccessNetworkInfo	(template CallId p_callId)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pAccessNetworkInfo := omit}
		}

	template MESSAGE_Request mw_MESSAGE_Request_noPMediaAuthorization	(template CallId p_callId)
		modifies mw_MESSAGE_Request_Base
		:=
		{
		  msgHeader := {  pMediaAuthorization := omit}
		}
		
	template PUBLISH_Request mw_PUBLISH_Request_PchargingVector(template CallId p_callId, template PChargingVector p_pChargingVector) modifies mw_PUBLISH_Request_Base :=
	{
		msgHeader := {  pChargingVector := p_pChargingVector}
	}

	template REGISTER_Request mw_REGISTER_Request_IMS	(template Path p_Path, template PChargingVector p_pChargingVector, template PVisitedNetworkID p_pVisitedNetworkID)
		modifies mw_REGISTER_Request_Base
		:=
		{
		  msgHeader := {  authorization := ?,
		  				  path := p_Path,
						  pChargingVector := p_pChargingVector, //mw_pChargingVector(p_id,p_paramValue)
						  pVisitedNetworkID := p_pVisitedNetworkID,
						  require := mw_require_path,
					      securityClient := omit,
						  securityVerify := omit
						  }
		}
	  


	template REGISTER_Request mw_REGISTER_authorizedRequest_IMS	(template Authorization p_authorization)
		modifies mw_REGISTER_Request_Base
		:=
		{
		  msgHeader := {  authorization := p_authorization
						  }
		}
		
	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
		:=
		{
		  msgHeader := {  authorization := omit
						  }
		}

	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
		}
	}
	
	template UPDATE_Request mw_UPDATE_Request_fromChange (template From p_from) modifies mw_UPDATE_Request_Base :=
	{
		msgHeader :=
		{	
			fromField := p_from
		}
	}
	
	template NOTIFY_Request mw_NOTIFY_Request(
		CallId p_callId, 
		charstring p_state,
		charstring p_contentType,
		Event p_event,
		template MessageBody p_mb
	) modifies mw_NOTIFY_Request_Base := {
		msgHeader :=
		{
			subscriptionState := mw_subscriptionState(p_state),
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  p_contentType},
			event := p_event
		},
		messageBody := p_mb
	}

}//end group request_receive
group response_send
{
	template Response m_Response_2xxonBYE_UE (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,
				maxForwards := omit
			}
		}

	template Response m_Response_onCANCEL (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute) 
		modifies m_Response_Base:=
	{
		msgHeader :=
		{
			//contact		:= p_contact,
			maxForwards := omit//,
			//recordRoute := p_recordRoute
		}
	}	
	
	template Response m_Response_18XonINVITE (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,
			//maxForwards := omit,
			//rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		}
	}
	
	template Response m_Response_18XonINVITE_sdp_require (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
			From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb,template Require p_require ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			require		:= p_require,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		},
		messageBody := p_mb
	}
	
	template Response m_Response_18XonINVITE_UE (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,
			maxForwards := omit,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		}
	}


	template Response m_Response_18XonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
			pChargingVector := m_pChargingFunctionAddresses_fixedValue

		}
	}

     template Response m_Response_18XonINVITE_pEearlyMedia (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
        From p_from, To p_to, Via p_via, template PEarlyMedia p_pEarlyMedia ) modifies m_Response_Base:=
     {
      msgHeader :=
      {
		pEarlyMedia := p_pEarlyMedia
      }
     }


	template Response m_Response_18XonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit,
			pPreferredID := p_pPreferredID,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		}
	}	


	template Response m_Response_18XonINVITE_pAsserted_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, template PAssertedID p_pAssertedID ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit,
			pAssertedID := p_pAssertedID,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		}
	}

	template Response m_Response_18XonINVITE_privacy_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, template Privacy p_privacy) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit,
			privacy := p_privacy,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		}
	}
		
	template Response m_Response_18XonINVITE_recordRoute_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999},//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
			recordRoute := p_recordRoute//for INVITE response
		}
	}
	
poglitsch's avatar
poglitsch committed
	template Response m_Response_18XonINVITE_Require (
		StatusLine p_statusLine, 
		CallId p_callId, 
		CSeq p_cSeq,
		From p_from, 
		To p_to, 
		Via p_via, 
		Contact p_contact,
		Require p_require
	) modifies m_Response_Base:= {
		msgHeader :=
		{
			require := p_require
		}
	}
	
	template Response m_Response_18XonINVITE_Require_ifpresent (
		StatusLine p_statusLine, 
		CallId p_callId, 
		CSeq p_cSeq,
		From p_from, 
		To p_to, 
		Via p_via, 
		Contact p_contact,
		Require p_require
	) modifies m_Response_Base:= {
		msgHeader :=
		{
			require := p_require
		}
	}
	
	template Response m_Response_18XonINVITE_Xml (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_xmlAplication},
			maxForwards := omit,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		},
		messageBody := p_mb
	}	
	
	template Response m_Response_18XonINVITE_sdp_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact,template MessageBody p_mb ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		},
		messageBody := p_mb
poglitsch's avatar
poglitsch committed
	}
	
	template Response m_Response_18XonINVITE_require_sdp_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, Require p_require, template MessageBody p_mb ) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			require 	:= p_require,
			rSeq		:= {fieldName:=RSEQ_E, responseNum:= 9999}//Ref: ES 283 003 V2.5.1 ch:A.2.1.4.7
		},
		messageBody := p_mb
	}		
	
	template Response m_Response_2xxonINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) 
		modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			recordRoute := p_recordRoute//for INVITE response
		},
		messageBody := p_mb
	}		
	
	template Response m_Response_2xxonINVITE_Mime (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) 
				modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_mimeMultipart},
			maxForwards := omit,
			recordRoute := p_recordRoute//for INVITE response
		},
		messageBody := p_mb
	}
	
	template Response m_Response_2xxonINVITE_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) 
		  modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			recordRoute := p_recordRoute//for INVITE response
		},
		messageBody := p_mb
	}

	template Response m_Response_2xxonINVITE_PchargingVector (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via,MessageBody p_mb ) modifies m_Response_mbody :=
	{
		msgHeader :=
		{
			pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
			pChargingVector := m_pChargingFunctionAddresses_fixedValue

		}
	}
	
	template Response m_Response_2XXonINVITE_pPreferred_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template PPreferredID p_pPreferredID, template RecordRoute p_recordRoute, template MessageBody p_mb) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			pPreferredID := p_pPreferredID,
			recordRoute := p_recordRoute//for INVITE response
		},
		messageBody := p_mb
	}	

	
	template Response m_Response_2XXonINVITE_pAsserted_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template PAssertedID p_pAssertedID, template RecordRoute p_recordRoute, template MessageBody p_mb) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			pAssertedID := p_pAssertedID,
			recordRoute := p_recordRoute//for INVITE response
		},
		messageBody := p_mb
	}	

	template Response m_Response_2XXonINVITE_privacy_UE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
		  From p_from, To p_to, Via p_via, Contact p_contact, template Privacy p_privacy, template RecordRoute p_recordRoute, template MessageBody p_mb) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			privacy := p_privacy,
			recordRoute := p_recordRoute//for INVITE response
		},
		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_2xxonSUBSCRIBE_UE (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:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			contact		:= p_contact
	  	}
	}

	template Response m_Response_2xxonMESSAGE_PAccessNetwInfo_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pAccessNetworkInfo := m_pAccessNetworkInfo_IEEE_11a
	  	}
	}

	template Response m_Response_2xxonMESSAGE_PCharging_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
			pChargingVector := m_pChargingFunctionAddresses_fixedValue
	  	}
	}


	template Response m_Response_2xxonMESSAGE_PCharging_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, template PChargingVector p_pChargingVector) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pChargingFunctionAddresses := m_pChargingFunctionAddresses_fixedValue,
			pChargingVector := p_pChargingVector
	  	}
	}
	
	template Response m_Response_2xxonMESSAGE_PMediaAuth_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pMediaAuthorization := m_pMediaAuthorization_fixedValue
	  	}
	}
	
	template Response m_Response_2xxonMESSAGE_pPreferredID_UE(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, template PPreferredID p_pPreferredID) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pPreferredID := p_pPreferredID
		}
	}
	
	template Response m_Response_2xxonUPDATE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, template MessageBody p_mb) 
	modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			contentLength	:= {fieldName := CONTENT_LENGTH_E, len:= f_MessageBodyLength(valueof(p_mb))},
			contentType := {fieldName := CONTENT_TYPE_E, mediaType :=  c_sdpAplication},
			maxForwards := omit,
			recordRoute := p_recordRoute
		},
		messageBody := p_mb
	}
	
	template Response m_Response_4XXonINVITE (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,
			maxForwards := omit
		}
	}
		
	template Response m_Response_4XXonINVITE_UE (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,
			maxForwards := omit
		}
	}
	
	template Response m_Response_onINVITE (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit
		}
	}
	
	template Response m_Response_onINVITE_Reason (StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
				From p_from, To p_to, Via p_via, Contact p_contact, template RecordRoute p_recordRoute, integer p_cause) modifies m_Response_Base:=
	{
		msgHeader :=
		{
			contact		:= p_contact,
			maxForwards := omit,
			reason := mw_Reason(p_cause)
		}
	}
			
	template Response m_Response_WWWauthenticate_IMS(StatusLine p_statusLine, CallId p_callId, CSeq p_cSeq,
	From p_from, To p_to, Via p_via, template WwwAuthenticate p_wwwAuthenticate) modifies m_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			wwwAuthenticate := p_wwwAuthenticate
		}
	}	
	
}//end group response_send

group response_receive
{

	template Response mw_Response_200onINVITE_noPChargingVector_UE(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pChargingVector := omit
	  }
	}
poglitsch's avatar
poglitsch committed
	
	template Response mw_Response_200onINVITE_SDP_UE(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		messageBody := {
			sdpMessageBody := ?
		}
	}

	template Response mw_Response_2xxonMESSAGE_noPCharging_UE(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pChargingFunctionAddresses := omit,
			pChargingVector := omit
	  }
	}

	template Response mw_Response_2xxonMESSAGE_noPCharging_IMS(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pChargingFunctionAddresses := omit,
			pChargingVector := omit
	  }
	}


	template Response mw_Response_2xxonMESSAGE_noPAccessNetworkInfo_IMS(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pAccessNetworkInfo := omit
	  }
	}

	template Response mw_Response_2xxonMESSAGE_noPMediaAuthorization_IMS(template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pMediaAuthorization := omit
	  }
	}

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

	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:={displayName:=*,addrSpec:=p_ue_uri},genericParams:=*},*}},
			path := ?,
			serviceRoute := {fieldName := SERVICE_ROUTE_E, routeBody := {{nameAddr:={displayName:=*,addrSpec:=p_sut_scscf_uri},rrParam:=*}}},
			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
	  }
	}

rennoch's avatar
rennoch committed
	template Response mw_Response_PAsserted_Privacy_History (template StatusLine p_statusLine, template CallId p_callId,
		template CSeq p_cSeq, template PAssertedID p_pAssertedID, template Privacy p_privacy, template HistoryInfo p_historyInfo) modifies mw_Response_Base:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
			pAssertedID := p_pAssertedID,
			privacy := p_privacy,
			historyInfo := p_historyInfo
		}
	}

	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:=
	{
		statusLine := {sipVersion := c_sipNameVersion, statusCode := p_statusLine.statusCode, reasonPhrase := ?},
		msgHeader :=
		{
		  pChargingVector := p_chargingVector // mw_pChargingVector(p_id,p_paramValue)
	  }
	}

} // end response_receive

}//end modified_templates

}//end Message_templates

} // end module LibIms_Templates