MNCC_Emulation: allow moving call handling to another test component

Will be used by MSC_Tests.TC_call_re_establishment in
Ifdff5573eeb3b3d41e8599b9b0228411d2576864
where a call from one vc_conn gets re-established in another vc_conn.

Related: SYS#5130
Change-Id: If7e952e54ebd1bb88cce11ec5f0ff4826e02cb63
diff --git a/library/MNCC_Emulation.ttcn b/library/MNCC_Emulation.ttcn
index 49b1249..66294a4 100644
--- a/library/MNCC_Emulation.ttcn
+++ b/library/MNCC_Emulation.ttcn
@@ -287,6 +287,7 @@
 		var MNCC_PDU mncc;
 		var MNCC_ConnHdlr vc_hdlr;
 		var charstring dest_nr;
+		var uint32_t mncc_call_id;
 
 		alt {
 		/* MNCC -> Client: UNIT-DATA (connectionless SCCP) from a BSC */
@@ -360,6 +361,11 @@
 			MNCC_PROC.reply(MNCCEM_register:{dest_nr, vc_hdlr}) to vc_hdlr;
 			}
 
+		[] MNCC_PROC.getcall(MNCCEM_change_connhdlr:{?,?}) -> param(mncc_call_id, vc_hdlr) {
+			f_call_table_del(mncc_call_id);
+			f_call_table_add(vc_hdlr, mncc_call_id);
+			MNCC_PROC.reply(MNCCEM_change_connhdlr:{mncc_call_id, vc_hdlr}) to vc_hdlr;
+			}
 		}
 	}
 }
@@ -384,9 +390,10 @@
 
 /* procedure based port to register for incoming calls */
 signature MNCCEM_register(in charstring dest_nr, in MNCC_ConnHdlr hdlr);
+signature MNCCEM_change_connhdlr(in uint32_t mncc_call_id, in MNCC_ConnHdlr hdlr);
 
 type port MNCCEM_PROC_PT procedure {
-	inout MNCCEM_register;
+	inout MNCCEM_register, MNCCEM_change_connhdlr;
 } with { extension "internal" };
 
 /* CreateCallback that can be used as create_cb and will use the expectation table */
@@ -445,6 +452,13 @@
 	}
 }
 
+/* Move MNCC handling for a given call id to another MNCC_ConnHdlr test component. */
+function f_mncc_change_connhdlr(uint32_t mncc_call_id) runs on MNCC_ConnHdlr {
+	MNCC_PROC.call(MNCCEM_change_connhdlr:{mncc_call_id, self}) {
+		[] MNCC_PROC.getreply(MNCCEM_change_connhdlr:{?,?}) {};
+	}
+}
+
 function DummyUnitdataCallback(MNCC_PDU mncc)
 runs on MNCC_Emulation_CT return template MNCC_PDU {
 	log("Ignoring MNCC ", mncc);