<p>neels has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-msc/+/15060">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mncc: send payload type matching chosen codec<br><br>Change-Id: Id32f32d77d24b753adb96b5393c0363439e312c2<br>---<br>M include/osmocom/msc/mncc_call.h<br>M src/libmsc/gsm_04_08_cc.c<br>2 files changed, 29 insertions(+), 8 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/60/15060/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/msc/mncc_call.h b/include/osmocom/msc/mncc_call.h</span><br><span>index ad0f0f8..e887cbe 100644</span><br><span>--- a/include/osmocom/msc/mncc_call.h</span><br><span>+++ b/include/osmocom/msc/mncc_call.h</span><br><span>@@ -22,6 +22,7 @@</span><br><span>  */</span><br><span> #pragma once</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp_client/mgcp_client.h></span><br><span> #include <osmocom/msc/mncc.h></span><br><span> #include <osmocom/msc/mncc_call.h></span><br><span> </span><br><span>@@ -138,3 +139,5 @@</span><br><span> struct mncc_call *mncc_call_find_by_callref(uint32_t callref);</span><br><span> </span><br><span> void mncc_call_release(struct mncc_call *mncc_call);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+uint32_t mgcp_codec_to_mncc_payload_msg_type(enum mgcp_codecs codec);</span><br><span>diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c</span><br><span>index 03830de..444d860 100644</span><br><span>--- a/src/libmsc/gsm_04_08_cc.c</span><br><span>+++ b/src/libmsc/gsm_04_08_cc.c</span><br><span>@@ -30,6 +30,8 @@</span><br><span> #include <regex.h></span><br><span> #include <sys/types.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/mgcp_client/mgcp_client_endpoint_fsm.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> #include <osmocom/msc/db.h></span><br><span> #include <osmocom/msc/debug.h></span><br><span> #include <osmocom/msc/gsm_data.h></span><br><span>@@ -1667,18 +1669,34 @@</span><br><span>     struct gsm_network *net = msc_a_net(msc_a);</span><br><span>  struct call_leg *cl = msc_a->cc.call_leg;</span><br><span>         struct osmo_sockaddr_str *rtp_cn_local;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct rtp_stream *rtp_cn = cl ? cl->rtp[RTP_TO_CN] : NULL;</span><br><span>       /* FIXME: This has to be set to some meaningful value,</span><br><span>        * before the MSC-Split, this value was pulled from</span><br><span>   * lchan->abis_ip.rtp_payload */</span><br><span>  uint32_t payload_type = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-      int msg_type;</span><br><span style="color: hsl(120, 100%, 40%);">+ int payload_msg_type;</span><br><span style="color: hsl(120, 100%, 40%);">+ const struct mgcp_conn_peer *mgcp_info;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* FIXME This has to be set to some meaningful value.</span><br><span style="color: hsl(0, 100%, 40%);">-    * Possible options are:</span><br><span style="color: hsl(0, 100%, 40%);">-         * GSM_TCHF_FRAME, GSM_TCHF_FRAME_EFR,</span><br><span style="color: hsl(0, 100%, 40%);">-   * GSM_TCHH_FRAME, GSM_TCH_FRAME_AMR</span><br><span style="color: hsl(0, 100%, 40%);">-     * (0 if unknown) */</span><br><span style="color: hsl(0, 100%, 40%);">-    msg_type = GSM_TCHF_FRAME;</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!rtp_cn) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR, "Cannot RTP CREATE to MNCC, no RTP set up for the CN side\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              return -EINVAL;</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%);">+   if (!rtp_cn->codec_known) {</span><br><span style="color: hsl(120, 100%, 40%);">+                LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                             "Cannot RTP CREATE to MNCC, no codec set up for the RTP CN side\n");</span><br><span style="color: hsl(120, 100%, 40%);">+          return -EINVAL;</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%);">+   /* Codec */</span><br><span style="color: hsl(120, 100%, 40%);">+   payload_msg_type = mgcp_codec_to_mncc_payload_msg_type(rtp_cn->codec);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Payload Type number */</span><br><span style="color: hsl(120, 100%, 40%);">+     /* FIXME: since several codecs could be enabled, the proper solution is to forward SDP to MNCC as a</span><br><span style="color: hsl(120, 100%, 40%);">+    * whole. For now, let's just send the first codec, knowing that currently most of our code actually</span><br><span style="color: hsl(120, 100%, 40%);">+       * only sets a single codec to begin with. */</span><br><span style="color: hsl(120, 100%, 40%);">+ mgcp_info = osmo_mgcpc_ep_ci_get_rtp_info(rtp_cn->ci);</span><br><span style="color: hsl(120, 100%, 40%);">+     payload_type = map_codec_to_pt(mgcp_info->ptmap, mgcp_info->ptmap_len, rtp_cn->codec);</span><br><span> </span><br><span>  rtp_cn_local = call_leg_local_ip(cl, RTP_TO_CN);</span><br><span>     if (!rtp_cn_local) {</span><br><span>@@ -1686,7 +1704,7 @@</span><br><span>                 return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return mncc_recv_rtp(net, trans, trans->callref, MNCC_RTP_CREATE, rtp_cn_local, payload_type, msg_type);</span><br><span style="color: hsl(120, 100%, 40%);">+   return mncc_recv_rtp(net, trans, trans->callref, MNCC_RTP_CREATE, rtp_cn_local, payload_type, payload_msg_type);</span><br><span> }</span><br><span> </span><br><span> static int tch_rtp_connect(struct gsm_network *net, const struct gsm_mncc_rtp *rtp)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-msc/+/15060">change 15060</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-msc/+/15060"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id32f32d77d24b753adb96b5393c0363439e312c2 </div>
<div style="display:none"> Gerrit-Change-Number: 15060 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>