<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25447">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">adjust mgcp response context<br><br>This patch also prepares for threading.<br><br>Change-Id: Id17f51d8bc0d1ba26f7fca72b1679ffadc9d6dc8<br>---<br>M src/libosmo-mgcp/mgcp_protocol.c<br>1 file changed, 53 insertions(+), 56 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index 6341f07..f4cdd76 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -173,12 +173,15 @@</span><br><span> }</span><br><span> </span><br><span> /* Helper function to allocate some memory for responses and retransmissions */</span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *mgcp_msgb_alloc(void)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *mgcp_msgb_alloc(void *ctx)</span><br><span> {</span><br><span>  struct msgb *msg;</span><br><span style="color: hsl(0, 100%, 40%);">-       msg = msgb_alloc_headroom(4096, 128, "MGCP msg");</span><br><span style="color: hsl(0, 100%, 40%);">-     if (!msg)</span><br><span style="color: hsl(120, 100%, 40%);">+     msg = msgb_alloc_headroom_c(ctx, 4096, 128, "MGCP msg");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!msg) {</span><br><span>          LOGP(DLMGCP, LOGL_ERROR, "Failed to msgb for MGCP data.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+  }</span><br><span> </span><br><span>        return msg;</span><br><span> }</span><br><span>@@ -186,7 +189,7 @@</span><br><span> /* Helper function for do_retransmission() and create_resp() */</span><br><span> static struct msgb *create_retransmission_response(const struct mgcp_endpoint *endp)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  struct msgb *msg = mgcp_msgb_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+ struct msgb *msg = mgcp_msgb_alloc(endp->trunk);</span><br><span>  if (!msg)</span><br><span>            return NULL;</span><br><span> </span><br><span>@@ -196,15 +199,14 @@</span><br><span>     return msg;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *create_resp(struct mgcp_endpoint *endp, int code,</span><br><span style="color: hsl(0, 100%, 40%);">-                               const char *txt, const char *msg,</span><br><span style="color: hsl(0, 100%, 40%);">-                               const char *trans, const char *param,</span><br><span style="color: hsl(0, 100%, 40%);">-                           const char *sdp)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *create_resp(void *msgctx, struct mgcp_endpoint *endp, int code, const char *txt, const char *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+                               const char *trans, const char *param, const char *sdp)</span><br><span> {</span><br><span>  int len;</span><br><span>     struct msgb *res;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   res = mgcp_msgb_alloc();</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_ASSERT(msgctx != 0);</span><br><span style="color: hsl(120, 100%, 40%);">+     res = mgcp_msgb_alloc(msgctx);</span><br><span>       if (!res)</span><br><span>            return NULL;</span><br><span> </span><br><span>@@ -236,26 +238,22 @@</span><br><span>     return res;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *create_ok_resp_with_param(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         int code, const char *msg,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              const char *trans,</span><br><span style="color: hsl(0, 100%, 40%);">-                                              const char *param)</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *create_ok_resp_with_param(void *msgctx, struct mgcp_endpoint *endp, int code, const char *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+                                        const char *trans, const char *param)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        return create_resp(endp, code, " OK", msg, trans, param, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+     return create_resp(msgctx, endp, code, " OK", msg, trans, param, NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *create_ok_response(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   int code, const char *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *create_ok_response(void *msgctx, struct mgcp_endpoint *endp, int code, const char *msg,</span><br><span>                                      const char *trans)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  return create_ok_resp_with_param(endp, code, msg, trans, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+       return create_ok_resp_with_param(msgctx, endp, code, msg, trans, NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static struct msgb *create_err_response(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     int code, const char *msg,</span><br><span style="color: hsl(120, 100%, 40%);">+static struct msgb *create_err_response(void *msgctx, struct mgcp_endpoint *endp, int code, const char *msg,</span><br><span>                                     const char *trans)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- return create_resp(endp, code, " FAIL", msg, trans, NULL, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+    return create_resp(msgctx, endp, code, " FAIL", msg, trans, NULL, NULL);</span><br><span> }</span><br><span> </span><br><span> /* Format MGCP response string (with SDP attached) */</span><br><span>@@ -278,7 +276,7 @@</span><br><span>   int rc;</span><br><span>      struct msgb *result;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        sdp = msgb_alloc_headroom(4096, 128, "sdp record");</span><br><span style="color: hsl(120, 100%, 40%);">+ sdp = msgb_alloc_headroom_c(endp->trunk, 4096, 128, "sdp record");</span><br><span>      if (!sdp)</span><br><span>            return NULL;</span><br><span> </span><br><span>@@ -309,7 +307,7 @@</span><br><span>       rc = mgcp_write_response_sdp(endp, conn, sdp, addr);</span><br><span>         if (rc < 0)</span><br><span>               goto error;</span><br><span style="color: hsl(0, 100%, 40%);">-     result = create_resp(endp, 200, " OK", msg, trans_id, NULL, (char*) sdp->data);</span><br><span style="color: hsl(120, 100%, 40%);">+  result = create_resp(endp->trunk, endp, 200, " OK", msg, trans_id, NULL, (char *)sdp->data);</span><br><span>         msgb_free(sdp);</span><br><span>      return result;</span><br><span> error:</span><br><span>@@ -376,7 +374,7 @@</span><br><span>       if (rc < 0) {</span><br><span>             LOGP(DLMGCP, LOGL_ERROR, "%s: failed to parse MCGP message\n", rq.name);</span><br><span>           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_GENERAL_RX_FAIL_MSG_PARSE));</span><br><span style="color: hsl(0, 100%, 40%);">-                return create_err_response(NULL, -rc, rq.name, "000000");</span><br><span style="color: hsl(120, 100%, 40%);">+           return create_err_response(cfg, NULL, -rc, rq.name, "000000");</span><br><span>     }</span><br><span> </span><br><span>        /* Locate endpoint and trunk, if no endpoint can be located try at least to identify the trunk. */</span><br><span>@@ -397,7 +395,7 @@</span><br><span>                     if (!rq.trunk) {</span><br><span>                             LOGP(DLMGCP, LOGL_ERROR, "%s: failed to identify trunk for endpoint \"%s\" -- abort\n",</span><br><span>                               rq.name, pdata.epname);</span><br><span style="color: hsl(0, 100%, 40%);">-                            return create_err_response(NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                               return create_err_response(cfg, NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span>                         }</span><br><span>            } else {</span><br><span>                     /* If the endpoint name suggests that the request refers to a specific endpoint, then the</span><br><span>@@ -405,7 +403,7 @@</span><br><span>                      LOGP(DLMGCP, LOGL_NOTICE,</span><br><span>                         "%s: cannot find endpoint \"%s\", cause=%d -- abort\n", rq.name,</span><br><span>                         pdata.epname, -rq.mgcp_cause);</span><br><span style="color: hsl(0, 100%, 40%);">-                     return create_err_response(NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                       return create_err_response(cfg, NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span>                 }</span><br><span>    } else {</span><br><span>             osmo_strlcpy(debug_last_endpoint_name, rq.endp->name, sizeof(debug_last_endpoint_name));</span><br><span>@@ -428,7 +426,7 @@</span><br><span>                            LOGP(DLMGCP, LOGL_ERROR,</span><br><span>                                  "%s: the request handler \"%s\" requires an endpoint resource for \"%s\", which is not available -- abort\n",</span><br><span>                                  rq.name, mgcp_requests[i].debug_name, pdata.epname);</span><br><span style="color: hsl(0, 100%, 40%);">-                               return create_err_response(NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                               return create_err_response(rq.trunk, NULL, -rq.mgcp_cause, rq.name, pdata.trans);</span><br><span>                    }</span><br><span> </span><br><span>                        /* Execute request handler */</span><br><span>@@ -461,7 +459,7 @@</span><br><span> static struct msgb *handle_audit_endpoint(struct mgcp_request_data *rq)</span><br><span> {</span><br><span>  LOGPENDP(rq->endp, DLMGCP, LOGL_NOTICE, "AUEP: auditing endpoint ...\n");</span><br><span style="color: hsl(0, 100%, 40%);">-  return create_ok_response(rq->endp, 200, "AUEP", rq->pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+        return create_ok_response(rq->trunk, rq->endp, 200, "AUEP", rq->pdata->trans);</span><br><span> }</span><br><span> </span><br><span> /* Try to find a free port by attempting to bind on it. Also handle the</span><br><span>@@ -859,7 +857,7 @@</span><br><span>               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: selected endpoint not available!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         return create_err_response(NULL, 501, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(rq->trunk, NULL, 501, "CRCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        /* parse CallID C: and LocalParameters L: */</span><br><span>@@ -879,7 +877,7 @@</span><br><span>                    * together with a CRCX, the MGW will assign the</span><br><span>                      * connection identifier by itself on CRCX */</span><br><span>                        rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_BAD_ACTION));</span><br><span style="color: hsl(0, 100%, 40%);">-                     return create_err_response(NULL, 523, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(rq->trunk, NULL, 523, "CRCX", pdata->trans);</span><br><span>                      break;</span><br><span>               case 'M':</span><br><span>                    mode = (const char *)line + 3;</span><br><span>@@ -905,7 +903,7 @@</span><br><span>                         LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>                           "CRCX: unhandled option: '%c'/%d\n", *line, *line);</span><br><span>                       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_UNHANDLED_PARAM));</span><br><span style="color: hsl(0, 100%, 40%);">-                        return create_err_response(NULL, 539, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(rq->trunk, NULL, 539, "CRCX", pdata->trans);</span><br><span>                      break;</span><br><span>               }</span><br><span>    }</span><br><span>@@ -916,14 +914,14 @@</span><br><span>            LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: insufficient parameters, missing callid\n");</span><br><span>               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_MISSING_CALLID));</span><br><span style="color: hsl(0, 100%, 40%);">-         return create_err_response(endp, 516, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 516, "CRCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        if (!mode) {</span><br><span>                 LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "CRCX: insufficient parameters, missing mode\n");</span><br><span>                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_INVALID_MODE));</span><br><span style="color: hsl(0, 100%, 40%);">-           return create_err_response(endp, 517, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 517, "CRCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        /* Check if we are able to accept the creation of another connection */</span><br><span>@@ -940,7 +938,7 @@</span><br><span>                        /* There is no more room for a connection, leave</span><br><span>                      * everything as it is and return with an error */</span><br><span>                   rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_LIMIT_EXCEEDED));</span><br><span style="color: hsl(0, 100%, 40%);">-                 return create_err_response(endp, 540, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(endp, endp, 540, "CRCX", pdata->trans);</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span>@@ -958,7 +956,7 @@</span><br><span>                  /* This is not our call, leave everything as it is and</span><br><span>                        * return with an error. */</span><br><span>                  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_UNKNOWN_CALLID));</span><br><span style="color: hsl(0, 100%, 40%);">-                 return create_err_response(endp, 400, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(endp, endp, 400, "CRCX", pdata->trans);</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span>@@ -969,7 +967,7 @@</span><br><span>          rc = mgcp_endp_claim(endp, callid);</span><br><span>          if (rc != 0) {</span><br><span>                       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_CRCX_FAIL_CLAIM));</span><br><span style="color: hsl(0, 100%, 40%);">-                  return create_err_response(endp, 502, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(endp, endp, 502, "CRCX", pdata->trans);</span><br><span>              }</span><br><span>    }</span><br><span> </span><br><span>@@ -1088,7 +1086,7 @@</span><br><span>        mgcp_endp_release(endp);</span><br><span>     LOGPENDP(endp, DLMGCP, LOGL_NOTICE,</span><br><span>           "CRCX: unable to create connection\n");</span><br><span style="color: hsl(0, 100%, 40%);">-      return create_err_response(endp, error_code, "CRCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+      return create_err_response(endp, endp, error_code, "CRCX", pdata->trans);</span><br><span> }</span><br><span> </span><br><span> /* MDCX command handler, processes the received command */</span><br><span>@@ -1116,7 +1114,7 @@</span><br><span>                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: selected endpoint not available!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         return create_err_response(NULL, 501, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, NULL, 501, "MDCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        /* Prohibit wildcarded requests */</span><br><span>@@ -1124,14 +1122,14 @@</span><br><span>                 LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: wildcarded endpoint names not supported.\n");</span><br><span>              rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_WILDCARD));</span><br><span style="color: hsl(0, 100%, 40%);">-               return create_err_response(endp, 507, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(rq->trunk, endp, 507, "MDCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        if (llist_count(&endp->conns) <= 0) {</span><br><span>              LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: endpoint is not holding a connection.\n");</span><br><span>                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_NO_CONN));</span><br><span style="color: hsl(0, 100%, 40%);">-                return create_err_response(endp, 400, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 400, "MDCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        for_each_line(line, pdata->save) {</span><br><span>@@ -1181,7 +1179,7 @@</span><br><span>                                 "MDCX: Unhandled MGCP option: '%c'/%d\n",</span><br><span>                                  line[0], line[0]);</span><br><span>                  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_UNHANDLED_PARAM));</span><br><span style="color: hsl(0, 100%, 40%);">-                        return create_err_response(NULL, 539, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(rq->trunk, NULL, 539, "MDCX", pdata->trans);</span><br><span>                      break;</span><br><span>               }</span><br><span>    }</span><br><span>@@ -1191,13 +1189,13 @@</span><br><span>          LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "MDCX: insufficient parameters, missing ci (connectionIdentifier)\n");</span><br><span>            rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_NO_CONNID));</span><br><span style="color: hsl(0, 100%, 40%);">-              return create_err_response(endp, 515, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 515, "MDCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        conn = mgcp_conn_get_rtp(endp, conn_id);</span><br><span>     if (!conn) {</span><br><span>                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_MDCX_FAIL_CONN_NOT_FOUND));</span><br><span style="color: hsl(0, 100%, 40%);">-         return create_err_response(endp, 400, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 400, "MDCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        mgcp_conn_watchdog_kick(conn->conn);</span><br><span>@@ -1304,7 +1302,7 @@</span><br><span>      mgcp_endp_update(endp);</span><br><span>      return create_response_with_sdp(endp, conn, "MDCX", pdata->trans, false, false);</span><br><span> error3:</span><br><span style="color: hsl(0, 100%, 40%);">-        return create_err_response(endp, error_code, "MDCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+      return create_err_response(endp, endp, error_code, "MDCX", pdata->trans);</span><br><span> </span><br><span> out_silent:</span><br><span>    LOGPENDP(endp, DLMGCP, LOGL_DEBUG, "MDCX: silent exit\n");</span><br><span>@@ -1335,14 +1333,14 @@</span><br><span>               rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_AVAIL));</span><br><span>               LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "DLCX: selected endpoint not available!\n");</span><br><span style="color: hsl(0, 100%, 40%);">-         return create_err_response(NULL, 501, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(rq->trunk, NULL, 501, "DLCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        if (endp && !rq->wildcarded && llist_empty(&endp->conns)) {</span><br><span>                LOGPENDP(endp, DLMGCP, LOGL_ERROR,</span><br><span>                    "DLCX: endpoint is not holding a connection.\n");</span><br><span>                 rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_NO_CONN));</span><br><span style="color: hsl(0, 100%, 40%);">-                return create_err_response(endp, 515, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+             return create_err_response(endp, endp, 515, "DLCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        for_each_line(line, pdata->save) {</span><br><span>@@ -1357,7 +1355,7 @@</span><br><span>                                LOGPTRUNK(trunk, DLMGCP, LOGL_NOTICE,</span><br><span>                                          "cannot handle requests with call-id (C) without endpoint -- abort!");</span><br><span>                           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_UNHANDLED_PARAM));</span><br><span style="color: hsl(0, 100%, 40%);">-                                return create_err_response(NULL, 539, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                             return create_err_response(rq->trunk, NULL, 539, "DLCX", pdata->trans);</span><br><span>                      }</span><br><span> </span><br><span>                        if (mgcp_verify_call_id(endp, line + 3) != 0) {</span><br><span>@@ -1373,7 +1371,7 @@</span><br><span>                              LOGPTRUNK(trunk, DLMGCP, LOGL_NOTICE,</span><br><span>                                          "cannot handle requests with conn-id (I) without endpoint -- abort!");</span><br><span>                           rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_UNHANDLED_PARAM));</span><br><span style="color: hsl(0, 100%, 40%);">-                                return create_err_response(NULL, 539, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                             return create_err_response(rq->trunk, NULL, 539, "DLCX", pdata->trans);</span><br><span>                      }</span><br><span> </span><br><span>                        conn_id = (const char *)line + 3;</span><br><span>@@ -1389,7 +1387,7 @@</span><br><span>                    LOGPEPTR(endp, trunk, DLMGCP, LOGL_NOTICE, "DLCX: Unhandled MGCP option: '%c'/%d\n",</span><br><span>                                line[0], line[0]);</span><br><span>                  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_FAIL_UNHANDLED_PARAM));</span><br><span style="color: hsl(0, 100%, 40%);">-                        return create_err_response(NULL, 539, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                     return create_err_response(rq->trunk, NULL, 539, "DLCX", pdata->trans);</span><br><span>                      break;</span><br><span>               }</span><br><span>    }</span><br><span>@@ -1404,7 +1402,7 @@</span><br><span>                    mgcp_endp_release(trunk->endpoints[i]);</span><br><span>           }</span><br><span>            rate_ctr_add(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS), num_conns);</span><br><span style="color: hsl(0, 100%, 40%);">-          return create_ok_response(NULL, 200, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+              return create_ok_response(trunk, NULL, 200, "DLCX", pdata->trans);</span><br><span>      }</span><br><span> </span><br><span>        /* The logic does not permit to go past this point without having the</span><br><span>@@ -1429,7 +1427,7 @@</span><br><span>                /* Note: In this case we do not return any statistics,</span><br><span>                * as we assume that the client is not interested in</span><br><span>                  * this case. */</span><br><span style="color: hsl(0, 100%, 40%);">-                return create_ok_response(endp, 200, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+              return create_ok_response(endp, endp, 200, "DLCX", pdata->trans);</span><br><span>       }</span><br><span> </span><br><span>        /* Find the connection */</span><br><span>@@ -1458,10 +1456,10 @@</span><br><span>  rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, MGCP_DLCX_SUCCESS));</span><br><span>  if (silent)</span><br><span>          goto out_silent;</span><br><span style="color: hsl(0, 100%, 40%);">-        return create_ok_resp_with_param(endp, 250, "DLCX", pdata->trans, stats);</span><br><span style="color: hsl(120, 100%, 40%);">+        return create_ok_resp_with_param(endp, endp, 250, "DLCX", pdata->trans, stats);</span><br><span> </span><br><span> error3:</span><br><span style="color: hsl(0, 100%, 40%);">-     return create_err_response(endp, error_code, "DLCX", pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+      return create_err_response(endp, endp, error_code, "DLCX", pdata->trans);</span><br><span> </span><br><span> out_silent:</span><br><span>    LOGPENDP(endp, DLMGCP, LOGL_DEBUG, "DLCX: silent exit\n");</span><br><span>@@ -1516,14 +1514,13 @@</span><br><span> </span><br><span>   /* we didn't see a signal request with a tone */</span><br><span>         if (tone == CHAR_MAX)</span><br><span style="color: hsl(0, 100%, 40%);">-           return create_ok_response(rq->endp, 200, "RQNT", rq->pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+                return create_ok_response(rq->endp, rq->endp, 200, "RQNT", rq->pdata->trans);</span><br><span> </span><br><span>      if (rq->pdata->cfg->rqnt_cb)</span><br><span>                res = rq->pdata->cfg->rqnt_cb(rq->endp, tone);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-  return res == 0 ?</span><br><span style="color: hsl(0, 100%, 40%);">-           create_ok_response(rq->endp, 200, "RQNT", rq->pdata->trans) :</span><br><span style="color: hsl(0, 100%, 40%);">-        create_err_response(rq->endp, res, "RQNT", rq->pdata->trans);</span><br><span style="color: hsl(120, 100%, 40%);">+  return res == 0 ? create_ok_response(rq->endp, rq->endp, 200, "RQNT", rq->pdata->trans) :</span><br><span style="color: hsl(120, 100%, 40%);">+                               create_err_response(rq->endp, rq->endp, res, "RQNT", rq->pdata->trans);</span><br><span> }</span><br><span> </span><br><span> /* Connection keepalive timer, will take care that dummy packets are send</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25447">change 25447</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-mgw/+/25447"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Id17f51d8bc0d1ba26f7fca72b1679ffadc9d6dc8 </div>
<div style="display:none"> Gerrit-Change-Number: 25447 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </div>
<div style="display:none"> Gerrit-Owner: Hoernchen <ewild@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>