| 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)); |
| } |
| |
| } |
| } |
| } |
| |
| } |