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