<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14511">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">bsc: Refactor altstep as_Media_mgw()<br><br>Move logic handling CRCX and MDCX to function, so they can be reused for<br>other ports in forthcoming commits.<br><br>Change-Id: I07344657c5d1465a8e0c278adb76150ca7f449ba<br>---<br>M bsc/MSC_ConnectionHandler.ttcn<br>1 file changed, 66 insertions(+), 52 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/11/14511/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/bsc/MSC_ConnectionHandler.ttcn b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>index 4436b0c..4f9870f 100644</span><br><span>--- a/bsc/MSC_ConnectionHandler.ttcn</span><br><span>+++ b/bsc/MSC_ConnectionHandler.ttcn</span><br><span>@@ -270,69 +270,83 @@</span><br><span> </span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+function f_rx_crcx(MgcpCommand mgcp_cmd)</span><br><span style="color: hsl(120, 100%, 40%);">+ runs on MSC_ConnHdlr return template MgcpResponse {</span><br><span style="color: hsl(120, 100%, 40%);">+ var MgcpOsmuxCID osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+ var SDP_Message sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer cid := f_get_free_mgcp_conn();</span><br><span style="color: hsl(120, 100%, 40%);">+ if (match(mgcp_cmd.line.ep, t_MGCP_EP_wildcard)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ if (cid != 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "MGCP wildcard EP only works in first CRCX");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ /* we keep the endpoint name allocated during MediaState_init */</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Call Agent allocated endpoint, trust/use it always */</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_ep := mgcp_cmd.line.ep;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ if (isvalue(mgcp_cmd.sdp)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp := mgcp_cmd.sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].peer.host := sdp.connection.conn_addr.addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].peer.port_nr := sdp.media_list[0].media_field.ports.port_number;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var MgcpConnState mgcp_conn := g_media.mgcp_conn[cid];</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp := valueof(ts_SDP(mgcp_conn.mgw.host, mgcp_conn.mgw.host, "foo", "21",</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_conn.mgw.port_nr, { int2str(mgcp_conn.rtp_pt) },</span><br><span style="color: hsl(120, 100%, 40%);">+ {valueof(ts_SDP_rtpmap(mgcp_conn.rtp_pt,</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_conn.mime_type & "/" &</span><br><span style="color: hsl(120, 100%, 40%);">+ int2str(mgcp_conn.sample_rate))),</span><br><span style="color: hsl(120, 100%, 40%);">+ valueof(ts_SDP_ptime(mgcp_conn.ptime)) } ));</span><br><span style="color: hsl(120, 100%, 40%);">+ var template MgcpResponse mgcp_resp;</span><br><span style="color: hsl(120, 100%, 40%);">+ if (g_pars.use_osmux and f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {</span><br><span style="color: hsl(120, 100%, 40%);">+ osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, osmux_cid, sdp);</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ f_mgcp_par_append(mgcp_resp.params, ts_MgcpParSpecEP(g_media.mgcp_ep));</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].crcx_seen := g_media.mgcp_conn[cid].crcx_seen + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ return mgcp_resp;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+function f_rx_mdcx(MgcpCommand mgcp_cmd)</span><br><span style="color: hsl(120, 100%, 40%);">+ runs on MSC_ConnHdlr return template MgcpResponse {</span><br><span style="color: hsl(120, 100%, 40%);">+ var SDP_Message sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+ var integer cid := f_get_mgcp_conn(f_MgcpCmd_extract_conn_id(mgcp_cmd));</span><br><span style="color: hsl(120, 100%, 40%);">+ if (isvalue(mgcp_cmd.sdp)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp := mgcp_cmd.sdp;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].peer.host := sdp.connection.conn_addr.addr;</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].peer.port_nr := sdp.media_list[0].media_field.ports.port_number;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "MDCX has no [recognizable] SDP");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ var MgcpConnState mgcp_conn := g_media.mgcp_conn[cid];</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp := valueof(ts_SDP(mgcp_conn.peer.host, mgcp_conn.peer.host, "foo", "21",</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_conn.peer.port_nr, { int2str(mgcp_conn.rtp_pt) },</span><br><span style="color: hsl(120, 100%, 40%);">+ {valueof(ts_SDP_rtpmap(mgcp_conn.rtp_pt,</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_conn.mime_type & "/" &</span><br><span style="color: hsl(120, 100%, 40%);">+ int2str(mgcp_conn.sample_rate))),</span><br><span style="color: hsl(120, 100%, 40%);">+ valueof(ts_SDP_ptime(mgcp_conn.ptime)) } ));</span><br><span style="color: hsl(120, 100%, 40%);">+ g_media.mgcp_conn[cid].mdcx_seen := g_media.mgcp_conn[cid].mdcx_seen + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ return ts_MDCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* altstep for handling of MGCP media related commands. Activated by as_Media() to test</span><br><span> * MGW level media handling */</span><br><span> altstep as_Media_mgw(boolean norepeat := false) runs on MSC_ConnHdlr {</span><br><span> var MgcpCommand mgcp_cmd;</span><br><span style="color: hsl(0, 100%, 40%);">- var MgcpOsmuxCID osmux_cid;</span><br><span style="color: hsl(120, 100%, 40%);">+ var template MgcpResponse mgcp_resp;</span><br><span> </span><br><span> [] MGCP.receive(tr_CRCX) -> value mgcp_cmd {</span><br><span style="color: hsl(0, 100%, 40%);">- var SDP_Message sdp;</span><br><span style="color: hsl(0, 100%, 40%);">- var integer cid := f_get_free_mgcp_conn();</span><br><span style="color: hsl(0, 100%, 40%);">- if (match(mgcp_cmd.line.ep, t_MGCP_EP_wildcard)) {</span><br><span style="color: hsl(0, 100%, 40%);">- if (cid != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">- Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "MGCP wildcard EP only works in first CRCX");</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- /* we keep the endpoint name allocated during MediaState_init */</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- /* Call Agent allocated endpoint, trust/use it always */</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_ep := mgcp_cmd.line.ep;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- if (isvalue(mgcp_cmd.sdp)) {</span><br><span style="color: hsl(0, 100%, 40%);">- sdp := mgcp_cmd.sdp;</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].peer.host := sdp.connection.conn_addr.addr;</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].peer.port_nr := sdp.media_list[0].media_field.ports.port_number;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- var MgcpConnState mgcp_conn := g_media.mgcp_conn[cid];</span><br><span style="color: hsl(0, 100%, 40%);">- sdp := valueof(ts_SDP(mgcp_conn.mgw.host, mgcp_conn.mgw.host, "foo", "21",</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_conn.mgw.port_nr, { int2str(mgcp_conn.rtp_pt) },</span><br><span style="color: hsl(0, 100%, 40%);">- {valueof(ts_SDP_rtpmap(mgcp_conn.rtp_pt,</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_conn.mime_type & "/" &</span><br><span style="color: hsl(0, 100%, 40%);">- int2str(mgcp_conn.sample_rate))),</span><br><span style="color: hsl(0, 100%, 40%);">- valueof(ts_SDP_ptime(mgcp_conn.ptime)) } ));</span><br><span style="color: hsl(0, 100%, 40%);">- var template MgcpResponse mgcp_resp;</span><br><span style="color: hsl(0, 100%, 40%);">- if (g_pars.use_osmux and f_MgcpCmd_contains_par(mgcp_cmd, "X-OSMUX")) {</span><br><span style="color: hsl(0, 100%, 40%);">- osmux_cid := f_MgcpCmd_extract_osmux_cid(mgcp_cmd);</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_resp := ts_CRCX_ACK_osmux(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, osmux_cid, sdp);</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_resp := ts_CRCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp);</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- f_mgcp_par_append(mgcp_resp.params, ts_MgcpParSpecEP(g_media.mgcp_ep));</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_resp := f_rx_crcx(mgcp_cmd);</span><br><span> MGCP.send(mgcp_resp);</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].crcx_seen := g_media.mgcp_conn[cid].crcx_seen + 1;</span><br><span> if(norepeat == false) {</span><br><span> repeat;</span><br><span> }</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> [] MGCP.receive(tr_MDCX) -> value mgcp_cmd {</span><br><span style="color: hsl(0, 100%, 40%);">- var SDP_Message sdp;</span><br><span style="color: hsl(0, 100%, 40%);">- var integer cid := f_get_mgcp_conn(f_MgcpCmd_extract_conn_id(mgcp_cmd));</span><br><span style="color: hsl(0, 100%, 40%);">- if (isvalue(mgcp_cmd.sdp)) {</span><br><span style="color: hsl(0, 100%, 40%);">- sdp := mgcp_cmd.sdp;</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].peer.host := sdp.connection.conn_addr.addr;</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].peer.port_nr := sdp.media_list[0].media_field.ports.port_number;</span><br><span style="color: hsl(0, 100%, 40%);">- } else {</span><br><span style="color: hsl(0, 100%, 40%);">- Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, "MDCX has no [recognizable] SDP");</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">- var MgcpConnState mgcp_conn := g_media.mgcp_conn[cid];</span><br><span style="color: hsl(0, 100%, 40%);">- sdp := valueof(ts_SDP(mgcp_conn.peer.host, mgcp_conn.peer.host, "foo", "21",</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_conn.peer.port_nr, { int2str(mgcp_conn.rtp_pt) },</span><br><span style="color: hsl(0, 100%, 40%);">- {valueof(ts_SDP_rtpmap(mgcp_conn.rtp_pt,</span><br><span style="color: hsl(0, 100%, 40%);">- mgcp_conn.mime_type & "/" &</span><br><span style="color: hsl(0, 100%, 40%);">- int2str(mgcp_conn.sample_rate))),</span><br><span style="color: hsl(0, 100%, 40%);">- valueof(ts_SDP_ptime(mgcp_conn.ptime)) } ));</span><br><span style="color: hsl(0, 100%, 40%);">- MGCP.send(ts_MDCX_ACK(mgcp_cmd.line.trans_id, mgcp_conn.conn_id, sdp));</span><br><span style="color: hsl(0, 100%, 40%);">- g_media.mgcp_conn[cid].mdcx_seen := g_media.mgcp_conn[cid].mdcx_seen + 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_resp := f_rx_mdcx(mgcp_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+ MGCP.send(mgcp_resp);</span><br><span> if(norepeat == false) {</span><br><span> repeat;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14511">change 14511</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/14511"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-ttcn3-hacks </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I07344657c5d1465a8e0c278adb76150ca7f449ba </div>
<div style="display:none"> Gerrit-Change-Number: 14511 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>