GSUP: add f_unregister_imsi() to unregister an imsi/connhdlr

Change-Id: I13f6784533fe0e1f42d9595f028861d4645ec1a9
diff --git a/library/GSUP_Emulation.ttcn b/library/GSUP_Emulation.ttcn
index 213810e..5e15d06 100644
--- a/library/GSUP_Emulation.ttcn
+++ b/library/GSUP_Emulation.ttcn
@@ -227,6 +227,10 @@
 			GSUP_PROC.reply(GSUPEM_unregister_expect:{imsi, vc_hdlr}) to vc_hdlr;
 			}
 
+		[] GSUP_PROC.getcall(GSUPEM_unregister_connhdlr:{?}) -> param(imsi) sender vc_hdlr {
+			f_imsi_table_del(imsi);
+			GSUP_PROC.reply(GSUPEM_unregister_connhdlr:{imsi}) to vc_hdlr;
+			}
 		[] GSUP_PROC.getcall(GSUPEM_change_connhdlr:{?,?}) -> param(imsi, vc_hdlr) {
 			f_imsi_table_del(imsi);
 			f_imsi_table_add(vc_hdlr, imsi);
@@ -252,10 +256,12 @@
 /* procedure based port to register for incoming calls */
 signature GSUPEM_register_expect(in charstring imsi, in GSUP_ConnHdlr hdlr);
 signature GSUPEM_unregister_expect(in charstring imsi, in GSUP_ConnHdlr hdlr);
+signature GSUPEM_unregister_connhdlr(in charstring imsi);
 signature GSUPEM_change_connhdlr(in charstring imsi, in GSUP_ConnHdlr hdlr);
 
 type port GSUPEM_PROC_PT procedure {
-	inout GSUPEM_register_expect, GSUPEM_unregister_expect, GSUPEM_change_connhdlr;
+	inout GSUPEM_register_expect, GSUPEM_unregister_expect,
+	      GSUPEM_unregister_connhdlr, GSUPEM_change_connhdlr;
 } with { extension "internal" };
 
 /* CreateCallback that can be used as create_cb and will use the expectation table */
@@ -329,6 +335,13 @@
 	}
 }
 
+function f_unregister_gsup_imsi(charstring imsi) runs on GSUP_ConnHdlr {
+	GSUP_PROC.call(GSUPEM_unregister_connhdlr:{imsi}) {
+		[] GSUP_PROC.getreply(GSUPEM_unregister_connhdlr:{?}) {};
+	}
+}
+
+
 
 /* Same as f_create_gsup_expect, but with explicit addressing. Needed when connecting multiple ports to GSUP_PROC. */
 function f_create_gsup_expect_explicit(charstring imsi, GSUP_Emulation_CT ct) runs on GSUP_ConnHdlr {