<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/20029">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgw: osmux: Avoid sending packets on recvonly connection<br><br>Change-Id: I87b1fb7d73cbbb2a5d4d8a40a9527a3e05d9947b<br>---<br>M src/libosmo-mgcp/mgcp_osmux.c<br>1 file changed, 17 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/29/20029/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>index 5864c95..02e31bb 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_osmux.c</span><br><span>@@ -35,6 +35,7 @@</span><br><span> </span><br><span> struct osmux_handle {</span><br><span>        struct llist_head head;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct mgcp_conn_rtp *conn;</span><br><span>  struct osmux_in_handle *in;</span><br><span>  struct in_addr rem_addr;</span><br><span>     int rem_port; /* network byte order */</span><br><span>@@ -47,14 +48,17 @@</span><br><span> static void osmux_deliver_cb(struct msgb *batch_msg, void *data)</span><br><span> {</span><br><span>        struct osmux_handle *handle = data;</span><br><span style="color: hsl(0, 100%, 40%);">-     struct sockaddr_in out = {</span><br><span style="color: hsl(0, 100%, 40%);">-              .sin_family = AF_INET,</span><br><span style="color: hsl(0, 100%, 40%);">-          .sin_port = handle->rem_port,</span><br><span style="color: hsl(0, 100%, 40%);">-        };</span><br><span style="color: hsl(120, 100%, 40%);">+    struct mgcp_conn_rtp *conn = handle->conn;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-       memcpy(&out.sin_addr, &handle->rem_addr, sizeof(handle->rem_addr));</span><br><span style="color: hsl(0, 100%, 40%);">-       sendto(osmux_fd.fd, batch_msg->data, batch_msg->len, 0,</span><br><span style="color: hsl(0, 100%, 40%);">-           (struct sockaddr *)&out, sizeof(out));</span><br><span style="color: hsl(120, 100%, 40%);">+    if (conn->end.output_enabled) {</span><br><span style="color: hsl(120, 100%, 40%);">+            struct sockaddr_in out = {</span><br><span style="color: hsl(120, 100%, 40%);">+                    .sin_family = AF_INET,</span><br><span style="color: hsl(120, 100%, 40%);">+                        .sin_port = handle->rem_port,</span><br><span style="color: hsl(120, 100%, 40%);">+              };</span><br><span style="color: hsl(120, 100%, 40%);">+            memcpy(&out.sin_addr, &handle->rem_addr, sizeof(handle->rem_addr));</span><br><span style="color: hsl(120, 100%, 40%);">+             sendto(osmux_fd.fd, batch_msg->data, batch_msg->len, 0,</span><br><span style="color: hsl(120, 100%, 40%);">+                 (struct sockaddr *)&out, sizeof(out));</span><br><span style="color: hsl(120, 100%, 40%);">+    }</span><br><span>    msgb_free(batch_msg);</span><br><span> }</span><br><span> </span><br><span>@@ -109,13 +113,15 @@</span><br><span> </span><br><span> /* Allocate free OSMUX handle */</span><br><span> static struct osmux_handle *</span><br><span style="color: hsl(0, 100%, 40%);">-osmux_handle_alloc(struct mgcp_config *cfg, struct in_addr *addr, int rem_port)</span><br><span style="color: hsl(120, 100%, 40%);">+osmux_handle_alloc(struct mgcp_conn_rtp *conn, struct in_addr *addr, int rem_port)</span><br><span> {</span><br><span>       struct osmux_handle *h;</span><br><span style="color: hsl(120, 100%, 40%);">+       struct mgcp_config *cfg = conn->conn->endp->cfg;</span><br><span> </span><br><span>        h = talloc_zero(osmux, struct osmux_handle);</span><br><span>         if (!h)</span><br><span>              return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+  h->conn = conn;</span><br><span>   h->rem_addr = *addr;</span><br><span>      h->rem_port = rem_port;</span><br><span>   h->refcnt++;</span><br><span>@@ -148,7 +154,7 @@</span><br><span> /* Lookup existing handle for a specified address, if the handle can not be</span><br><span>  * found, the function will automatically allocate one */</span><br><span> static struct osmux_in_handle *</span><br><span style="color: hsl(0, 100%, 40%);">-osmux_handle_lookup(struct mgcp_config *cfg, struct osmo_sockaddr *addr, int rem_port)</span><br><span style="color: hsl(120, 100%, 40%);">+osmux_handle_lookup(struct mgcp_conn_rtp *conn, struct osmo_sockaddr *addr, int rem_port)</span><br><span> {</span><br><span>   struct osmux_handle *h;</span><br><span> </span><br><span>@@ -161,7 +167,7 @@</span><br><span>    if (h != NULL)</span><br><span>               return h->in;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    h = osmux_handle_alloc(cfg, &addr->u.sin.sin_addr, rem_port);</span><br><span style="color: hsl(120, 100%, 40%);">+  h = osmux_handle_alloc(conn, &addr->u.sin.sin_addr, rem_port);</span><br><span>        if (h == NULL)</span><br><span>               return NULL;</span><br><span> </span><br><span>@@ -474,7 +480,7 @@</span><br><span>               return -1;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   conn->osmux.in = osmux_handle_lookup(endp->cfg, addr, port);</span><br><span style="color: hsl(120, 100%, 40%);">+    conn->osmux.in = osmux_handle_lookup(conn, addr, port);</span><br><span>   if (!conn->osmux.in) {</span><br><span>            LOGPCONN(conn->conn, DLMGCP, LOGL_ERROR,</span><br><span>                  "Cannot allocate input osmux handle for conn:%s\n",</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/20029">change 20029</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/+/20029"/><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: I87b1fb7d73cbbb2a5d4d8a40a9527a3e05d9947b </div>
<div style="display:none"> Gerrit-Change-Number: 20029 </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>