osmo-ttcn3-hacks/ipa/MGCP_Adapter.ttcn

73 lines
1.8 KiB
Plaintext

module MGCP_Adapter {
import from IPL4asp_Types all;
import from MGCP_Types all;
import from MGCP_CodecPort all;
import from MGCP_CodecPort_CtrlFunct all;
import from IPA_Emulation all;
type component MGCP_Adapter_CT {
/* MGCP Codec Port for MGCP-over-UDP */
port MGCP_CODEC_PT MGCP_UDP;
port IPA_MGCP_PT MGCP;
var integer g_mgcp_conn_id := -1;
}
modulepar {
charstring mp_callagent_ip := "127.0.0.1";
PortNumber mp_callagent_udp_port := 2727;
charstring mp_mgw_ip := "127.0.0.1";
PortNumber mp_mgw_udp_port := 2427;
}
/* build a receive template for receiving a MGCP message. You
* pass the MGCP response template in, and it will generate an
* MGCP_RecvFrom template that can match the primitives arriving on the
* MGCP_CodecPort */
function tr_MGCP_RecvFrom_R(template MgcpResponse resp)
runs on MGCP_Adapter_CT return template MGCP_RecvFrom {
var template MGCP_RecvFrom mrf := {
connId := g_mgcp_conn_id,
remName := mp_mgw_ip,
remPort := mp_mgw_udp_port,
locName := mp_callagent_ip,
locPort := mp_callagent_udp_port,
msg := { response := resp }
}
return mrf;
}
function main() runs on MGCP_Adapter_CT {
var Result res;
map(self:MGCP_UDP, system:MGCP_CODEC_PT);
res := MGCP_CodecPort_CtrlFunct.f_IPL4_connect(MGCP_UDP, mp_mgw_ip, mp_mgw_udp_port,
mp_callagent_ip, mp_callagent_udp_port,
0, { udp:={} });
g_mgcp_conn_id := res.connId;
while (true) {
var MgcpCommand mgcp_cmd;
var MGCP_RecvFrom mrf;
alt {
/* From BSC/MGW via UDP up to MSC / Call Agent */
[] MGCP_UDP.receive(tr_MGCP_RecvFrom_R(?)) -> value mrf {
MGCP.send(mrf.msg.response);
}
/* From MSC / Call Agent down to BSC/MGW */
[] MGCP.receive(MgcpCommand:?) -> value mgcp_cmd {
var MgcpMessage msg := { command := mgcp_cmd };
MGCP_UDP.send(t_MGCP_Send(g_mgcp_conn_id, msg));
}
}
}
}
}