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.orgReview at https://gerrit.osmocom.org/6212 bsc: Handle wildcard endpoint name in MGCP CRCX MGCP permits for the CallAgent to send a wildcarded endpoint name, at which point the MGW itself must allocate an endpoint name and return it as SpecificEndpointId parameter in the CRCX response. Change-Id: I704bbe4e11b27e83a6ae6a71aa6a715dc8301f34 --- M bsc/MSC_ConnectionHandler.ttcn M library/MGCP_Emulation.ttcn M library/MGCP_Templates.ttcn 3 files changed, 49 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/12/6212/1 diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn index 55cdb89..b6e6540 100644 --- a/bsc/MSC_ConnectionHandler.ttcn +++ b/bsc/MSC_ConnectionHandler.ttcn @@ -75,7 +75,7 @@ peer := - } - //g_media.mgcp_ep := int2str(i) & "@mgw"; + g_media.mgcp_ep := "rtpbridge/" & int2str(nr) & "@mgw"; for (var integer i:= 0; i < sizeof(g_media.mgcp_conn); i := i+1) { g_media.mgcp_conn[i].mime_type := "AMR"; @@ -169,6 +169,16 @@ [] MGCP.receive(tr_CRCX) -> value mgcp_cmd { var SDP_Message sdp; var integer cid := f_get_free_mgcp_conn(); + if (match(mgcp_cmd.line.ep, t_MGCP_EP_wildcard)) { + if (cid != 0) { + setverdict(fail, "MGCP wildcard EP only works in first CRCX"); + self.stop; + } + /* we keep the endpoint name allocated during MediaState_init */ + } else { + /* Call Agent allocated endpoint, trust/use it always */ + g_media.mgcp_ep := mgcp_cmd.line.ep; + } if (isvalue(mgcp_cmd.sdp)) { sdp := mgcp_cmd.sdp; g_media.mgcp_conn[cid].peer.host := sdp.connection.conn_addr.addr; @@ -181,7 +191,10 @@ mgcp_conn.mime_type & "/" & int2str(mgcp_conn.sample_rate))), valueof(ts_SDP_ptime(mgcp_conn.ptime)) } )); - MGCP.send(ts_CRCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp)); + var template MgcpResponse mgcp_resp; + mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp); + f_mgcp_par_append(mgcp_resp.params, ts_MgcpParSpecEP(g_media.mgcp_ep)); + MGCP.send(mgcp_resp); g_media.mgcp_conn[cid].crcx_seen := true; repeat; } diff --git a/library/MGCP_Emulation.ttcn b/library/MGCP_Emulation.ttcn index df8e4b4..adcb8b5 100644 --- a/library/MGCP_Emulation.ttcn +++ b/library/MGCP_Emulation.ttcn @@ -208,8 +208,12 @@ if (ischosen(msg.command)) { return msg.command.line.ep; } else { - /* FIXME */ - return "null at none"; + var MgcpEndpoint ep; + if (f_mgcp_find_param(msg, "Z", ep) == false) { + setverdict(fail, "No SpecificEndpointName in MGCP response", msg); + self.stop; + } + return ep; } } @@ -273,7 +277,8 @@ } else { if (cmd.line.verb == "CRCX") { vc_conn := ops.create_cb.apply(cmd, id); - if (true /* non-wildcard EP */) { + if (not match(cmd.line.ep, t_MGCP_EP_wildcard)) { + /* non-wildcard EP, use directly */ f_ep_table_add(vc_conn, cmd.line.ep); } else { /* add this transaction to list of pending transactions */ diff --git a/library/MGCP_Templates.ttcn b/library/MGCP_Templates.ttcn index 5a8d9b1..9e32a34 100644 --- a/library/MGCP_Templates.ttcn +++ b/library/MGCP_Templates.ttcn @@ -34,6 +34,12 @@ val := hex2str(rid) }; + /* 3.2.1.3 SpecificEndpointId */ + template MgcpParameter ts_MgcpParSpecEP(MgcpEndpoint ep) := { + code := "Z", + val := ep + }; + /* 3.2.2.10: LocalConnectionOptions (codec, packetization, bandwidth, ToS, eco, gain, silence, ...) */ template MgcpParameter t_MgcpParLocConnOpt(template charstring lco) := { "L", lco }; @@ -326,5 +332,25 @@ sdp := * } + function f_mgcp_find_param(MgcpMessage msg, MgcpInfoCode code, out charstring ret) + return boolean { + var MgcpParameterList pars; + if (ischosen(msg.command)) { + pars := msg.command.params; + } else { + pars := msg.response.params; + } + for (var integer i := 0; i < sizeof(pars); i := i+1) { + if (pars[i].code == code) { + ret := pars[i].val; + return true; + } + } + return false; + } + + /* template to determine if a MGCP endpoint is a wildcard endpoint */ + template charstring t_MGCP_EP_wildcard := (pattern "\*@*", pattern "rtpbridge/\*@*"); + } -- To view, visit https://gerrit.osmocom.org/6212 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I704bbe4e11b27e83a6ae6a71aa6a715dc8301f34 Gerrit-PatchSet: 1 Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Owner: Harald Welte <laforge at gnumonks.org>