<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>