bsc: CRCX is answered with (malformed) ACK
Change-Id: I09c1ed467e95be236e0758d6a9c8bbef405c02eb
diff --git a/library/MGCP_Emulation.ttcn b/library/MGCP_Emulation.ttcn
index f8d5a1e..1209ff6 100644
--- a/library/MGCP_Emulation.ttcn
+++ b/library/MGCP_Emulation.ttcn
@@ -33,6 +33,7 @@
port MGCPEM_PROC_PT PROC;
var charstring g_mgcp_id;
+ var integer g_mgcp_conn_id := -1;
}
type function MGCPCreateCallback(MgcpCommand cmd, charstring id)
@@ -49,6 +50,19 @@
uint16_t mgw_udp_port
}
+function tr_MGCP_RecvFrom_R(template MgcpMessage msg)
+runs on MGCP_Emulation_CT return template MGCP_RecvFrom {
+ var template MGCP_RecvFrom mrf := {
+ connId := g_mgcp_conn_id,
+ remName := ?,
+ remPort := ?,
+ locName := ?,
+ locPort := ?,
+ msg := msg
+ }
+ return mrf;
+}
+
function main(MGCPOps ops, MGCP_conn_parameters p, charstring id) runs on MGCP_Emulation_CT {
var Result res;
g_mgcp_id := id;
@@ -60,12 +74,32 @@
p.mgw_udp_port,
p.callagent_ip, p.callagent_udp_port, 0, { udp:={} });
+ g_mgcp_conn_id := res.connId;
while (true) {
+ var MGCP_ConnHdlr vc_conn;
+ var ExpectCriteria crit;
+ var MGCP_RecvFrom mrf;
+ var MgcpMessage msg;
+ var MgcpCommand cmd;
+ var MgcpResponse resp;
+
alt {
- [] CLIENT.receive(MgcpCommand:?) {
+ /* MGCP from client */
+ [] CLIENT.receive(MgcpResponse:?) -> value resp sender vc_conn {
+ /* Pass message through */
+ msg.response := resp;
+ MGCP.send(t_MGCP_Send(g_mgcp_conn_id, msg));
}
- [] MGCP.receive(MGCP_RecvFrom:?) {
+ [] MGCP.receive(tr_MGCP_RecvFrom_R(?)) -> value mrf {
+ if (ischosen(mrf.msg.command)) {
+ cmd := mrf.msg.command;
+ vc_conn := ops.create_cb.apply(cmd, id);
+ f_handle_userData(vc_conn, cmd);
+ } else {
+ setverdict(fail, "Received unexpected MGCP response: ", mrf.msg.response);
+ self.stop;
+ }
}
[] PROC.getcall(MGCPEM_register:{?,?}) -> param(crit, vc_conn) {
f_create_expect(crit, vc_conn);
@@ -75,6 +109,11 @@
}
}
+private function f_handle_userData(MGCP_ConnHdlr conn, MgcpCommand cmd)
+runs on MGCP_Emulation_CT {
+ CLIENT.send(cmd) to conn;
+}
+
/* "Expect" Handling */
/* */