[MERGED] osmo-ttcn3-hacks[master]: Add MGCP_Emulation

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Fri Jan 26 09:44:46 UTC 2018


Harald Welte has submitted this change and it was merged.

Change subject: Add MGCP_Emulation
......................................................................


Add MGCP_Emulation

Change-Id: I5245be2b44e98e1c74b9519c610564667b980a67
---
A library/MGCP_Emulation.ttcn
1 file changed, 149 insertions(+), 0 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/library/MGCP_Emulation.ttcn b/library/MGCP_Emulation.ttcn
new file mode 100644
index 0000000..2ab5669
--- /dev/null
+++ b/library/MGCP_Emulation.ttcn
@@ -0,0 +1,149 @@
+module MGCP_Emulation {
+
+import from MGCP_CodecPort all;
+import from MGCP_CodecPort_CtrlFunct all;
+import from MGCP_Types all;
+import from MGCP_Templates all;
+import from Osmocom_Types all;
+import from IPL4asp_Types all;
+
+type component MGCP_ConnHdlr {
+	port MGCP_Conn_PT MGCP;
+}
+
+/* port between individual per-connection components and this dispatcher */
+type port MGCP_Conn_PT message {
+	inout MgcpCommand, MgcpResponse;
+} with { extension "internal" };
+
+
+type component MGCP_Emulation_CT {
+	/* Port facing to the UDP SUT */
+	port MGCP_CODEC_PT MGCP;
+	/* All MGCP_ConnHdlr MGCP ports connect here
+	 * MGCP_Emulation_CT.main needs to figure out what messages
+	 * to send where with CLIENT.send() to vc_conn */
+	port MGCP_Conn_PT CLIENT;
+	/* currently tracked connections */
+//	var ConnectionData ConnectionTable[16];
+	/* pending expected CRCX */
+	var ExpectData ExpectTable[8];
+	/* procedure based port to register for incoming connections */
+	port MGCPEM_PROC_PT PROC;
+
+	var charstring g_mgcp_id;
+}
+
+type function MGCPCreateCallback(MgcpCommand cmd, charstring id)
+runs on MGCP_Emulation_CT return MGCP_ConnHdlr;
+
+type record MGCPOps {
+	MGCPCreateCallback create_cb
+}
+
+type record MGCP_conn_parameters {
+	charstring callagent_ip,
+	uint16_t callagent_udp_port,
+	charstring mgw_ip,
+	uint16_t mgw_udp_port
+}
+
+function main(MGCP_conn_parameters p, charstring id) runs on MGCP_Emulation_CT {
+	var Result res;
+	g_mgcp_id := id;
+	//f_conn_table_init();
+
+	map(self:MGCP, system:MGCP_CODEC_PT);
+	res := MGCP_CodecPort_CtrlFunct.f_IPL4_connect(MGCP, p.mgw_ip,
+p.mgw_udp_port,
+		p.callagent_ip, p.callagent_udp_port, 0, { udp:={} });
+	
+	
+	while (true) {
+		alt {
+		[] CLIENT.receive(MgcpCommand:?) {
+			}
+		[] MGCP.receive(MGCP_RecvFrom:?) {
+			}
+		}
+	}
+}
+
+/* "Expect" Handling */
+
+/*  */
+type union ExpectCriteria {
+	MgcpConnectionId connid,
+	MgcpEndpoint endpoint,
+	MgcpTransId transid
+}
+
+type record ExpectData {
+	ExpectCriteria crit optional,
+	MGCP_ConnHdlr vc_conn optional
+}
+
+signature MGCPEM_register(in MgcpCommand cmd, in MGCP_ConnHdlr hdlr);
+
+type port MGCPEM_PROC_PT procedure {
+	inout MGCPEM_register;
+} with { extension "internal" };
+
+function f_get_mgcp_by_crit(ExpectCriteria crit)
+return template MgcpCommand {
+	template MgcpCommand ret := {
+	};
+
+	return ret;
+}
+
+/* Function that can be used as create_cb and will usse the expect table */
+function ExpectedCreateCallback(MgcpCommand cmd, charstring id)
+runs on MGCP_Emulation_CT return MGCP_ConnHdlr {
+	var MGCP_ConnHdlr ret := null;
+	var template MgcpCommand mgcpcmd;
+	var integer i;
+
+	/* Ensure cmd is a CRCX? */
+
+	for (i := 0; i < sizeof(ExpectTable); i := i+1) {
+		if (not ispresent(ExpectTable[i].vc_conn)) {
+			continue;
+		}
+		mgcpcmd := f_get_mgcp_by_crit(ExpectTable[i].crit);
+		if (match(cmd, mgcpcmd)) {
+			ret := ExpectTable[i].vc_conn;
+			/* Release this entry */
+			ExpectTable[i].crit := omit;
+			ExpectTable[i].vc_conn := null;
+			log("Found Expect[", i, "] for ", cmd, " handled at ", ret);
+			return ret;
+		}
+	}
+	setverdict(fail, "Couldn't find Expect for CRCX", cmd);
+	return ret;
+}
+
+private function f_create_expect(ExpectCriteria crit, MGCP_ConnHdlr hdlr)
+runs on MGCP_Emulation_CT {
+	var integer i;
+
+	/* Check an entry like this is not already presnt */
+	for (i := 0; i < sizeof(ExpectTable); i := i+1) {
+		if (crit == ExpectTable[i].crit) {
+			setverdict(fail, "Crit already present", crit);
+			self.stop;
+		}
+	}
+	for (i := 0; i < sizeof(ExpectTable); i := i+1) {
+		if (not ispresent(ExpectTable[i].crit)) {
+			ExpectTable[i].crit := crit;
+			ExpectTable[i].vc_conn := hdlr;
+			log("Created Expect[", i, "] for ", crit, " to be handled at ", hdlr);
+			return;
+		}
+	}
+	setverdict(fail, "No space left in ExpectTable")
+}
+
+}

-- 
To view, visit https://gerrit.osmocom.org/6081
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I5245be2b44e98e1c74b9519c610564667b980a67
Gerrit-PatchSet: 1
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillmann at sysmocom.de>



More information about the gerrit-log mailing list