<p>lynxis lazus has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/22202">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mncc: add return code for write/send function<br><br>Allow to get errors back for the caller to clean up state.<br><br>Change-Id: Ic926d192c238ef84fb3ad2be27e507e010b0e93f<br>---<br>M src/mncc.c<br>1 file changed, 20 insertions(+), 10 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sip-connector refs/changes/02/22202/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/mncc.c b/src/mncc.c</span><br><span>index 5456ac6..d3d218b 100644</span><br><span>--- a/src/mncc.c</span><br><span>+++ b/src/mncc.c</span><br><span>@@ -130,7 +130,7 @@</span><br><span>     }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mncc_write(struct mncc_connection *conn, struct gsm_mncc *mncc)</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_write(struct mncc_connection *conn, struct gsm_mncc *mncc)</span><br><span> {</span><br><span>       int rc;</span><br><span> </span><br><span>@@ -144,17 +144,19 @@</span><br><span>          LOGP(DMNCC, LOGL_ERROR, "Failed to send message for call(%u)\n", mncc->callref);</span><br><span>                close_connection(conn);</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return rc;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mncc_send(struct mncc_connection *conn, uint32_t msg_type, uint32_t callref)</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_send(struct mncc_connection *conn, uint32_t msg_type, uint32_t callref)</span><br><span> {</span><br><span>    struct gsm_mncc mncc = { 0, };</span><br><span> </span><br><span>   mncc_fill_header(&mncc, msg_type, callref);</span><br><span style="color: hsl(0, 100%, 40%);">- mncc_write(conn, &mncc);</span><br><span style="color: hsl(120, 100%, 40%);">+  return mncc_write(conn, &mncc);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void mncc_rtp_send(struct mncc_connection *conn, uint32_t msg_type, uint32_t callref)</span><br><span style="color: hsl(120, 100%, 40%);">+static int mncc_rtp_send(struct mncc_connection *conn, uint32_t msg_type, uint32_t callref)</span><br><span> {</span><br><span>   int rc;</span><br><span>      struct gsm_mncc_rtp mncc = { 0, };</span><br><span>@@ -167,6 +169,8 @@</span><br><span>             LOGP(DMNCC, LOGL_ERROR, "Failed to send message for call(%u)\n", callref);</span><br><span>                 close_connection(conn);</span><br><span>      }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return rc;</span><br><span> }</span><br><span> </span><br><span> /* Send a MNCC_RTP_CONNECT to the MSC for the given call legs */</span><br><span>@@ -393,7 +397,8 @@</span><br><span>        leg = mncc_find_leg_not_released(rtp->callref);</span><br><span>   if (!leg) {</span><br><span>          LOGP(DMNCC, LOGL_ERROR, "leg(%u) can not be found\n", rtp->callref);</span><br><span style="color: hsl(0, 100%, 40%);">-               return mncc_send(conn, MNCC_REJ_REQ, rtp->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+                mncc_send(conn, MNCC_REJ_REQ, rtp->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+               return;</span><br><span>      }</span><br><span> </span><br><span>        /* extract information about where the RTP is */</span><br><span>@@ -426,7 +431,8 @@</span><br><span>       leg = mncc_find_leg_not_released(rtp->callref);</span><br><span>   if (!leg) {</span><br><span>          LOGP(DMNCC, LOGL_ERROR, "call(%u) can not be found\n", rtp->callref);</span><br><span style="color: hsl(0, 100%, 40%);">-              return mncc_send(conn, MNCC_REJ_REQ, rtp->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+                mncc_send(conn, MNCC_REJ_REQ, rtp->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+               return;</span><br><span>      }</span><br><span> </span><br><span>        /* extract information about where the RTP is */</span><br><span>@@ -488,7 +494,8 @@</span><br><span>                       LOGP(DMNCC, LOGL_ERROR,</span><br><span>                              "MNCC leg(%u) without called addr fields(%u)\n",</span><br><span>                           data->callref, data->fields);</span><br><span style="color: hsl(0, 100%, 40%);">-                     return mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+                       mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+                      return;</span><br><span>              }</span><br><span> </span><br><span>                /* Emergency without a called number present. Use the standard "emergency" number. */</span><br><span>@@ -499,14 +506,16 @@</span><br><span>              LOGP(DMNCC, LOGL_ERROR,</span><br><span>                      "MNCC leg(%u) without calling addr fields(%u)\n",</span><br><span>                  data->callref, data->fields);</span><br><span style="color: hsl(0, 100%, 40%);">-             return mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+               mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span>      }</span><br><span> </span><br><span>        /* TODO.. bearer caps and better audio handling */</span><br><span>   if (!continue_setup(conn, data)) {</span><br><span>           LOGP(DMNCC, LOGL_ERROR,</span><br><span>                      "MNCC screening parameters failed leg(%u)\n", data->callref);</span><br><span style="color: hsl(0, 100%, 40%);">-              return mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+               mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span>      }</span><br><span> </span><br><span>        /* Create an RTP port and then allocate a call */</span><br><span>@@ -514,7 +523,8 @@</span><br><span>      if (!call) {</span><br><span>                 LOGP(DMNCC, LOGL_ERROR,</span><br><span>                      "MNCC leg(%u) failed to allocate call\n", data->callref);</span><br><span style="color: hsl(0, 100%, 40%);">-          return mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+               mncc_send(conn, MNCC_REJ_REQ, data->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+              return;</span><br><span>      }</span><br><span> </span><br><span>        leg = (struct mncc_call_leg *) call->initial;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sip-connector/+/22202">change 22202</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-sip-connector/+/22202"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sip-connector </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ic926d192c238ef84fb3ad2be27e507e010b0e93f </div>
<div style="display:none"> Gerrit-Change-Number: 22202 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>