asterisk: IMS: Set expires=N on REGISTER response

Related: SYS#6983
Change-Id: I0682fbc97128ed8aa193cb14ea571a8db9ee3279
diff --git a/asterisk/IMS_ConnectionHandler.ttcn b/asterisk/IMS_ConnectionHandler.ttcn
index 69e8abf..ba2a2fd 100644
--- a/asterisk/IMS_ConnectionHandler.ttcn
+++ b/asterisk/IMS_ConnectionHandler.ttcn
@@ -94,6 +94,7 @@
 	SipAddr registrar_sip_record,
 	CallidString registrar_sip_call_id,
 	integer registrar_sip_seq_nr,
+	integer registrar_expires,
 	SipUrl local_sip_url_ext,
 	SipAddr local_sip_record,
 	Contact registered_contact optional,
@@ -214,6 +215,7 @@
 					   f_sip_str_quote(display_name)),
 	registrar_sip_call_id := hex2str(f_rnd_hexstring(15)) & "@" & domain,
 	registrar_sip_seq_nr := f_sip_rand_seq_nr(),
+	registrar_expires := c_def_expires,
 	local_sip_url_ext := ts_SipUrl(ts_HostPort(domain, local_sip_port),
 				       ts_UserInfo(imsi)),
 	local_sip_record := ts_SipAddr(ts_HostPort(domain),
@@ -922,6 +924,7 @@
 	[] SIP.receive(exp_req) -> value g_rx_sip_req {
 		var template (value) PDU_SIP_Response tx_resp;
 		var Via via;
+		var Contact contact;
 		var CallidString sip_call_id;
 		var template (value) From from_addr;
 		var template (value) To to_addr;
@@ -970,9 +973,16 @@
 									  scheme := "tel"))),
 				ts_P_Assoc_uri_spec(g_rx_sip_req.msgHeader.toField.addressField.nameAddr)
 			}));
-		f_ims_validate_register_contact(g_rx_sip_req.msgHeader.contact);
-		f_ims_parse_register_contact(g_rx_sip_req.msgHeader.contact);
-		g_pars.subscr.registered_contact := g_rx_sip_req.msgHeader.contact;
+
+		contact := g_rx_sip_req.msgHeader.contact;
+		f_ims_validate_register_contact(contact);
+		f_ims_parse_register_contact(contact);
+		g_pars.subscr.registered_contact := contact;
+		/* Set expires= to configured value: RFC3261 10.3 8) */
+		for (var integer i := 0; i < lengthof(contact.contactBody.contactAddresses); i := i + 1) {
+			contact.contactBody.contactAddresses[i].contactParams :=
+				valueof({ ts_Param("expires", int2str(g_pars.subscr.registrar_expires)) });
+		}
 
 		/* Tx 200 OK */
 		to_addr.toParams := f_sip_param_set(to_addr.toParams, "tag", f_sip_rand_tag());
@@ -983,6 +993,7 @@
 			sip_seq_nr,
 			"OK",
 			via,
+			contact := contact,
 			p_associated_uri := g_pars.subscr.p_associated_uri,
 			require := require,
 			server := g_pars.server_name,