asterisk: test Precondition extension in IMS MO call

Related: SYS#6969
Change-Id: I1e26f3bb9e54be5b5e15a003b2000ae3e88b9027
diff --git a/library/SIP_Templates.ttcn b/library/SIP_Templates.ttcn
index 77d4ee0..cfe21eb 100644
--- a/library/SIP_Templates.ttcn
+++ b/library/SIP_Templates.ttcn
@@ -284,6 +284,24 @@
 	p_assoc_uris := p_assoc_uris
 }
 
+// RFC 3262
+template (value) RAck ts_RAck(template (value) integer response_num,
+			      template (value) integer seq_nr,
+			      template (value) charstring method := "INVITE") := {
+	fieldName := RACK_E,
+	response_num := response_num,
+	seqNumber := seq_nr,
+	method := method
+}
+template (present) RAck tr_RAck(template (present) integer response_num := ?,
+			        template (present) integer seq_nr := ?,
+			        template (present) charstring method := ?) := {
+	fieldName := RACK_E,
+	response_num := response_num,
+	seqNumber := seq_nr,
+	method := method
+}
+
 // [20.32]
 template (value) Require ts_Require(template (value) OptionTag_List optionsTags := {}) := {
 	fieldName := REQUIRE_E,
@@ -294,6 +312,16 @@
 	optionsTags := optionsTags
 }
 
+// RFC 3262
+template (value) RSeq ts_RSeq(template (value) integer response_num) := {
+	fieldName := RSEQ_E,
+	response_num := response_num
+}
+template (present) RSeq tr_RSeq(template (present) integer response_num := ?) := {
+	fieldName := RSEQ_E,
+	response_num := response_num
+}
+
 // [20.35 RFC2616 14.38]
 template (value) Server ts_Server(template (value) ServerVal_List serverBody := {}) := {
 	fieldName := SERVER_E,
@@ -652,7 +680,9 @@
 		template (omit) Allow allow := ts_Allow(c_SIP_defaultMethods),
 		template (omit) Expires expires := omit,
 		template (omit) P_Associated_Uri p_associated_uri := omit,
+		template (omit) RAck rack := omit,
 		template (omit) Require require := omit,
+		template (omit) RSeq rseq := omit,
 		template (omit) Security_client security_client := omit,
 		template (omit) Security_server security_server := omit,
 		template (omit) Server server := omit,
@@ -677,7 +707,9 @@
 	expires := expires,
 	fromField := from_addr,
 	p_associated_uri := p_associated_uri,
+	rack := rack,
 	require := require,
+	rseq := rseq,
 	security_client := security_client,
 	security_server := security_server,
 	server := server,
@@ -702,6 +734,7 @@
 		template Authorization authorization := *,
 		template Expires expires := *,
 		template P_Associated_Uri p_associated_uri := *,
+		template RAck rack := *,
 		template Require require := *,
 		template Security_client security_client := *,
 		template Security_server security_server := *,
@@ -727,6 +760,7 @@
 	expires := expires,
 	fromField := from_addr,
 	p_associated_uri := p_associated_uri,
+	rack := rack,
 	require := require,
 	security_client := security_client,
 	security_server := security_server,
@@ -905,6 +939,42 @@
 	payload := omit
 }
 
+template (present) PDU_SIP_Request
+tr_SIP_PRACK(template (present) SipUrl uri,
+	     template CallidString call_id,
+	     template From from_addr,
+	     template To to_addr,
+	     template Via via,
+	     template integer seq_nr,
+	     template RAck rack := tr_RAck(?, ?, ?),
+	     template charstring body := *) := {
+	requestLine := tr_SIP_ReqLine(PRACK_E, uri),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, *,
+				     via,
+				     "PRACK", seq_nr,
+				     rack := rack),
+	messageBody := body,
+	payload := omit
+}
+
+template (present) PDU_SIP_Request
+tr_SIP_UPDATE(template (present) SipUrl uri,
+	      template CallidString call_id,
+	      template From from_addr,
+	      template To to_addr,
+	      template Via via,
+	      template integer seq_nr,
+	      template Require require := *,
+	      template charstring body) := {
+	requestLine := tr_SIP_ReqLine(UPDATE_E, uri),
+	msgHeader := tr_SIP_msgh_std(call_id, from_addr, to_addr, *,
+				     via,
+				     "UPDATE", seq_nr,
+				     require := require),
+	messageBody := body,
+	payload := omit
+}
+
 template (value) PDU_SIP_Response
 ts_SIP_Response(template (value) CallidString call_id,
 		template (value) From from_addr,
@@ -979,6 +1049,29 @@
 	payload := omit
 }
 
+/* 183 Session Progress */
+template (value) PDU_SIP_Response
+ts_SIP_Response_SessionProgress(
+	template (value) CallidString call_id,
+	template (value) From from_addr,
+	template (value) To to_addr,
+	Via via,
+	integer seq_nr,
+	charstring method := "INVITE",
+	template (omit) Require require := ts_Require({"100rel", "precondition"}),
+	template (omit) RSeq rseq := ts_RSeq(1),
+	template (omit) charstring body := omit) := {
+	statusLine := ts_SIP_StatusLine(183, "Session Progress"),
+	msgHeader := ts_SIP_msgh_std(call_id, from_addr, to_addr, omit, method, seq_nr,
+				     via,
+				     content_length := f_ContentLength(body),
+				     content_type := f_ContentTypeOrOmit(ts_CT_SDP, body),
+				     require := require,
+				     rseq := rseq),
+	messageBody := body,
+	payload := omit
+}
+
 /* 401 Unauthorized */
 template (value) PDU_SIP_Response
 ts_SIP_Response_Unauthorized(