MGCP_Emulation part of "bsc: Register expect criteria for MGCP CRCX"

Change-Id: I466df816eef9863bf1664e785b996c0697dc04e3
This commit is contained in:
Daniel Willmann 2018-01-17 15:22:32 +01:00 committed by Harald Welte
parent 34e7dd0cca
commit 955627afed
1 changed files with 25 additions and 11 deletions

View File

@ -48,10 +48,11 @@ type record MGCP_conn_parameters {
uint16_t mgw_udp_port
}
function main(MGCP_conn_parameters p, charstring id) runs on MGCP_Emulation_CT {
function main(MGCPOps ops, MGCP_conn_parameters p, charstring id) runs on MGCP_Emulation_CT {
var Result res;
g_mgcp_id := id;
//f_conn_table_init();
f_expect_table_init();
map(self:MGCP, system:MGCP_CODEC_PT);
res := MGCP_CodecPort_CtrlFunct.f_IPL4_connect(MGCP, p.mgw_ip,
@ -65,6 +66,10 @@ p.mgw_udp_port,
}
[] MGCP.receive(MGCP_RecvFrom:?) {
}
[] PROC.getcall(MGCPEM_register:{?,?}) -> param(crit, vc_conn) {
f_create_expect(crit, vc_conn);
PROC.reply(MGCPEM_register:{crit, vc_conn});
}
}
}
}
@ -72,18 +77,18 @@ p.mgw_udp_port,
/* "Expect" Handling */
/* */
type union ExpectCriteria {
MgcpConnectionId connid,
MgcpEndpoint endpoint,
MgcpTransId transid
type record ExpectCriteria {
MgcpConnectionId connid optional,
MgcpEndpoint endpoint optional,
MgcpTransId transid optional
}
type record ExpectData {
ExpectCriteria crit optional,
MGCP_ConnHdlr vc_conn optional
MGCP_ConnHdlr vc_conn
}
signature MGCPEM_register(in MgcpCommand cmd, in MGCP_ConnHdlr hdlr);
signature MGCPEM_register(in ExpectCriteria cmd, in MGCP_ConnHdlr hdlr);
type port MGCPEM_PROC_PT procedure {
inout MGCPEM_register;
@ -107,18 +112,19 @@ runs on MGCP_Emulation_CT return MGCP_ConnHdlr {
/* Ensure cmd is a CRCX? */
for (i := 0; i < sizeof(ExpectTable); i := i+1) {
if (not ispresent(ExpectTable[i].vc_conn)) {
if (not ispresent(ExpectTable[i].crit)) {
continue;
}
mgcpcmd := f_get_mgcp_by_crit(ExpectTable[i].crit);
if (match(cmd, mgcpcmd)) {
/* FIXME: Ignore criteria for now */
// 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;
@ -146,4 +152,12 @@ runs on MGCP_Emulation_CT {
setverdict(fail, "No space left in ExpectTable")
}
private function f_expect_table_init()
runs on MGCP_Emulation_CT {
var integer i;
for (i := 0; i < sizeof(ExpectTable); i := i + 1) {
ExpectTable[i].crit := omit;
}
}
}