SGsAP_Emulation: Add functions to send MME or VLR reset

... including encoding/decoding of names between string and binary labels

Change-Id: I981c7c1d34f0db60031b5436739cd924e5a09407
diff --git a/library/SGsAP_Emulation.ttcn b/library/SGsAP_Emulation.ttcn
index 0c37840..968bcdd 100644
--- a/library/SGsAP_Emulation.ttcn
+++ b/library/SGsAP_Emulation.ttcn
@@ -31,6 +31,7 @@
 import from SGsAP_Templates all;
 import from Osmocom_Types all;
 import from IPL4asp_Types all;
+import from DNS_Helpers all;
 
 type component SGsAP_ConnHdlr {
 	port SGsAP_Conn_PT SGsAP;
@@ -295,6 +296,7 @@
 		var hexstring imsi;
 		var SGsAP_RecvFrom mrf;
 		var PDU_SGsAP msg;
+		var charstring vlr_name, mme_name;
 
 		alt {
 		/* SGsAP from client */
@@ -329,6 +331,24 @@
 			f_create_expect(imsi, vc_conn);
 			SGsAP_PROC.reply(SGsAPEM_register:{imsi, vc_conn}) to vc_conn;
 			}
+		[] SGsAP_PROC.getcall(SGsAPEM_reset_mme:{?,-}) -> param(mme_name) {
+			var octetstring mme_enc, vlr_enc;
+			mme_enc := f_enc_dns_hostname(mme_name);
+			msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_MME(mme_enc));
+			vlr_enc := msg.sGsAP_RESET_ACK.vLR_Name.name;
+			vlr_name := f_dec_dns_hostname(vlr_enc);
+			SGsAP_PROC.reply(SGsAPEM_reset_mme:{mme_name, vlr_name});
+			}
+		[] SGsAP_PROC.getcall(SGsAPEM_reset_vlr:{?,-}) -> param(vlr_name) {
+			var octetstring mme_enc, vlr_enc;
+			vlr_enc := f_enc_dns_hostname(vlr_name);
+			msg := f_sgsap_xceive(ts_SGsAP_RESET_IND_VLR(vlr_enc));
+			mme_enc := msg.sGsAP_RESET_ACK.mME_Name.name;
+			mme_name := f_dec_dns_hostname(mme_enc);
+			SGsAP_PROC.reply(SGsAPEM_reset_vlr:{vlr_name, mme_name});
+			}
+
+
 		}
 
 	}
@@ -343,8 +363,11 @@
 
 signature SGsAPEM_register(in hexstring imsi, in SGsAP_ConnHdlr hdlr);
 
+signature SGsAPEM_reset_vlr(in charstring vlr_name, out charstring mme_name);
+signature SGsAPEM_reset_mme(in charstring mme_name, out charstring vlr_name);
+
 type port SGsAPEM_PROC_PT procedure {
-	inout SGsAPEM_register;
+	inout SGsAPEM_register, SGsAPEM_reset_vlr, SGsAPEM_reset_mme;
 } with { extension "internal" };
 
 /* Function that can be used as create_cb and will usse the expect table */
@@ -399,6 +422,25 @@
 	}
 }
 
+/* client/conn_hdlr side function to use procedure port to send RESET from emulated MME */
+function f_sgsap_reset_mme(charstring mme_name) runs on SGsAP_ConnHdlr return charstring {
+	var charstring vlr_name;
+	SGsAP_PROC.call(SGsAPEM_reset_mme:{mme_name, -}) {
+		[] SGsAP_PROC.getreply(SGsAPEM_reset_mme:{mme_name,?}) -> param(vlr_name) {
+			return vlr_name;
+			};
+	}
+}
+
+/* client/conn_hdlr side function to use procedure port to send RESET from emulated VLR */
+function f_sgsap_reset_vlr(charstring vlr_name) runs on SGsAP_ConnHdlr return charstring {
+	var charstring mme_name;
+	SGsAP_PROC.call(SGsAPEM_reset_vlr:{vlr_name, -}) {
+		[] SGsAP_PROC.getreply(SGsAPEM_reset_vlr:{vlr_name,?}) -> param(mme_name) {
+			return mme_name;
+			};
+	}
+}
 
 private function f_expect_table_init()
 runs on SGsAP_Emulation_CT {