pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-mgw/+/39186?usp=email )

Change subject: mgw: Clean up access to conn_rtp from conn
......................................................................

mgw: Clean up access to conn_rtp from conn

Add a new mgcp_conn_get_conn_rtp() and use it everywhere instead of
accessing deep structure fields.

Change-Id: Iee2c19598e9570ea3b1ceba3cdfd2a5f5be2c954
---
M include/osmocom/mgcp/mgcp_conn.h
M src/libosmo-mgcp/mgcp_conn.c
M src/libosmo-mgcp/mgcp_e1.c
M src/libosmo-mgcp/mgcp_endp.c
M src/libosmo-mgcp/mgcp_msg.c
M src/libosmo-mgcp/mgcp_osmux.c
M src/libosmo-mgcp/mgcp_protocol.c
M src/libosmo-mgcp/mgcp_stat.c
M src/libosmo-mgcp/mgcp_vty.c
9 files changed, 39 insertions(+), 27 deletions(-)

Approvals:
  pespin: Looks good to me, approved
  Jenkins Builder: Verified
  daniel: Looks good to me, but someone else must approve
  laforge: Looks good to me, but someone else must approve




diff --git a/include/osmocom/mgcp/mgcp_conn.h b/include/osmocom/mgcp/mgcp_conn.h
index de9bae6..106544a 100644
--- a/include/osmocom/mgcp/mgcp_conn.h
+++ b/include/osmocom/mgcp/mgcp_conn.h
@@ -28,6 +28,7 @@
 #include <osmocom/mgcp/osmux.h>
 #include <osmocom/core/linuxlist.h>
 #include <osmocom/core/rate_ctr.h>
+#include <osmocom/core/utils.h>
 #include <osmocom/gsm/iuup.h>
 #include <inttypes.h>

@@ -237,6 +238,12 @@
        return conn->type == MGCP_RTP_IUUP;
 }

+static inline struct mgcp_conn_rtp *mgcp_conn_get_conn_rtp(struct mgcp_conn 
*conn)
+{
+       OSMO_ASSERT(conn->type == MGCP_CONN_TYPE_RTP);
+       return &conn->u.rtp;
+}
+
 struct mgcp_conn *mgcp_conn_alloc(void *ctx, struct mgcp_endpoint *endp,
                                  enum mgcp_conn_type type, char *name);
 void mgcp_conn_free(struct mgcp_conn *conn);
diff --git a/src/libosmo-mgcp/mgcp_conn.c b/src/libosmo-mgcp/mgcp_conn.c
index 9d03550..403cbda 100644
--- a/src/libosmo-mgcp/mgcp_conn.c
+++ b/src/libosmo-mgcp/mgcp_conn.c
@@ -239,13 +239,16 @@
 */
 void mgcp_conn_free(struct mgcp_conn *conn)
 {
+       struct mgcp_conn_rtp *conn_rtp;
+
        if (!conn)
                return;

        switch (conn->type) {
        case MGCP_CONN_TYPE_RTP:
-               aggregate_rtp_conn_stats(conn->endp, &conn->u.rtp);
-               mgcp_rtp_conn_cleanup(&conn->u.rtp);
+               conn_rtp = mgcp_conn_get_conn_rtp(conn);
+               aggregate_rtp_conn_stats(conn->endp, conn_rtp);
+               mgcp_rtp_conn_cleanup(conn_rtp);
                break;
        default:
                /* NOTE: This should never be called with an
@@ -268,24 +271,26 @@
        static char str[sizeof(conn->name)+sizeof(conn->id)+256];
        char ipbuf[INET6_ADDRSTRLEN];
        struct osmo_strbuf sb = { .buf = str, .len = sizeof(str) };
+       struct mgcp_conn_rtp *conn_rtp;

        if (!conn)
                return "NULL";

        switch (conn->type) {
        case MGCP_CONN_TYPE_RTP:
+               conn_rtp = mgcp_conn_get_conn_rtp(conn);
                OSMO_STRBUF_PRINTF(sb, "(%s/%s C:%s r=%s:%u<->l=%s:%u",
                                   conn->name,
                                   mgcp_conn_rtp_type_name(conn->type),
                                   conn->id,
-                                  
osmo_sockaddr_ntop(&conn->u.rtp.end.addr.u.sa, ipbuf) ? : "NULL",
-                                  
osmo_sockaddr_port(&conn->u.rtp.end.addr.u.sa),
-                                  conn->u.rtp.end.local_addr ? : "NULL",
-                                  conn->u.rtp.end.local_port);
+                                  osmo_sockaddr_ntop(&conn_rtp->end.addr.u.sa, 
ipbuf) ? : "NULL",
+                                  osmo_sockaddr_port(&conn_rtp->end.addr.u.sa),
+                                  conn_rtp->end.local_addr ? : "NULL",
+                                  conn_rtp->end.local_port);
 
-               switch (conn->u.rtp.type) {
+               switch (conn_rtp->type) {
                case MGCP_RTP_OSMUX:
-                       OSMO_STRBUF_PRINTF(sb, " CID=%u", 
conn->u.rtp.osmux.local_cid);
+                       OSMO_STRBUF_PRINTF(sb, " CID=%u", 
conn_rtp->osmux.local_cid);
                        break;
                default:
                        break;
diff --git a/src/libosmo-mgcp/mgcp_e1.c b/src/libosmo-mgcp/mgcp_e1.c
index fac1ff6..428d652 100644
--- a/src/libosmo-mgcp/mgcp_e1.c
+++ b/src/libosmo-mgcp/mgcp_e1.c
@@ -650,6 +650,7 @@
 void mgcp_e1_endp_update(struct mgcp_endpoint *endp)
 {
        struct mgcp_conn *conn;
+       struct mgcp_conn_rtp *conn_rtp;
        struct mgcp_rtp_codec *codec;
        enum osmo_tray_sync_pat_id sync_pat_id;

@@ -658,7 +659,8 @@
         * endpoint no more than one connection should exist. */
        conn = mgcp_endp_get_conn_oldest(endp);
        OSMO_ASSERT(conn);
-       codec = conn->u.rtp.end.codec;
+       conn_rtp = mgcp_conn_get_conn_rtp(conn);
+       codec = conn_rtp->end.codec;
        OSMO_ASSERT(codec);

        /* Update codec information */
diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c
index b2ece20..c91a00d 100644
--- a/src/libosmo-mgcp/mgcp_endp.c
+++ b/src/libosmo-mgcp/mgcp_endp.c
@@ -741,7 +741,7 @@
                return NULL;

        if (conn->type == MGCP_CONN_TYPE_RTP)
-               return &conn->u.rtp;
+               return mgcp_conn_get_conn_rtp(conn);

        return NULL;
 }
diff --git a/src/libosmo-mgcp/mgcp_msg.c b/src/libosmo-mgcp/mgcp_msg.c
index 5900a65..2360a0b 100644
--- a/src/libosmo-mgcp/mgcp_msg.c
+++ b/src/libosmo-mgcp/mgcp_msg.c
@@ -110,20 +110,16 @@
                ret = -1;
        }

-       /* Special handling for RTP connections */
-       if (conn->type == MGCP_CONN_TYPE_RTP) {
-               conn->u.rtp.end.output_enabled = !!(conn->mode & 
MGCP_CONN_SEND_ONLY);
-       }
-
        LOGPENDP(endp, DLMGCP, LOGL_DEBUG, "conn:%s\n", mgcp_conn_dump(conn));
-
        LOGPCONN(conn, DLMGCP, LOGL_DEBUG, "connection mode '%s' %d\n",
                 mode, conn->mode);

-       /* Special handling für RTP connections */
+       /* Special handling for RTP connections */
        if (conn->type == MGCP_CONN_TYPE_RTP) {
+               struct mgcp_conn_rtp *conn_rtp = mgcp_conn_get_conn_rtp(conn);
+               conn_rtp->end.output_enabled = !!(conn->mode & 
MGCP_CONN_SEND_ONLY);
                LOGPCONN(conn, DLMGCP, LOGL_DEBUG, "output_enabled %u\n",
-                        conn->u.rtp.end.output_enabled);
+                        conn_rtp->end.output_enabled);
        }

        /* The VTY might change the connection mode at any time, so we have
diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index f8383d6..0c285dd 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -265,7 +265,7 @@
                        if (conn->type != MGCP_CONN_TYPE_RTP)
                                continue;

-                       conn_rtp = &conn->u.rtp;
+                       conn_rtp = mgcp_conn_get_conn_rtp(conn);
                        if (!mgcp_conn_rtp_is_osmux(conn_rtp))
                                continue;

diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index d166a4e..4e63e4d 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -172,7 +172,7 @@
        /* Find the "sister" connection */
        llist_for_each_entry(_conn, &endp->conns, entry) {
                if (_conn->id != conn->conn->id) {
-                       conn_src = &_conn->u.rtp;
+                       conn_src = mgcp_conn_get_conn_rtp(_conn);
                        break;
                }
        }
@@ -819,7 +819,7 @@
        /* Try to find an destination RTP connection that we can include in the 
codec decision. */
        conn_dst = mgcp_find_dst_conn(conn->conn);
        if (conn_dst && conn_dst->type == MGCP_CONN_TYPE_RTP)
-               conn_dst_rtp = &conn_dst->u.rtp;
+               conn_dst_rtp = mgcp_conn_get_conn_rtp(conn_dst);
        else
                conn_dst_rtp = NULL;

@@ -1609,7 +1609,7 @@
                llist_for_each_entry(conn, &endp->conns, entry) {
                        if (conn->type == MGCP_CONN_TYPE_RTP &&
                            conn->mode == MGCP_CONN_RECV_ONLY)
-                               send_dummy(endp, &conn->u.rtp);
+                               send_dummy(endp, mgcp_conn_get_conn_rtp(conn));
                }
        }

diff --git a/src/libosmo-mgcp/mgcp_stat.c b/src/libosmo-mgcp/mgcp_stat.c
index c66ce6b..081a381 100644
--- a/src/libosmo-mgcp/mgcp_stat.c
+++ b/src/libosmo-mgcp/mgcp_stat.c
@@ -141,7 +141,7 @@
         * keep this option open: */
        switch (conn->type) {
        case MGCP_CONN_TYPE_RTP:
-               mgcp_format_stats_rtp(str, str_len, &conn->u.rtp);
+               mgcp_format_stats_rtp(str, str_len, 
mgcp_conn_get_conn_rtp(conn));
                break;
        default:
                break;
diff --git a/src/libosmo-mgcp/mgcp_vty.c b/src/libosmo-mgcp/mgcp_vty.c
index 042841c..8e0360f 100644
--- a/src/libosmo-mgcp/mgcp_vty.c
+++ b/src/libosmo-mgcp/mgcp_vty.c
@@ -254,7 +254,8 @@
                         * connection types (E1) as soon as
                         * the implementation is available */
                        if (conn->type == MGCP_CONN_TYPE_RTP) {
-                               dump_rtp_end(vty, &conn->u.rtp);
+                               struct mgcp_conn_rtp *conn_rtp = 
mgcp_conn_get_conn_rtp(conn);
+                               dump_rtp_end(vty, conn_rtp);
                        }
                }
        }
@@ -1357,10 +1358,11 @@
        endp = trunk->endpoints[endp_no];
        int loop = atoi(argv[2]);
        llist_for_each_entry(conn, &endp->conns, entry) {
-               if (conn->type == MGCP_CONN_TYPE_RTP)
+               if (conn->type == MGCP_CONN_TYPE_RTP) {
                        /* Handle it like a MDCX, switch on SSRC patching if 
enabled */
-                       mgcp_rtp_end_config(endp, 1, &conn->u.rtp.end);
-               else {
+                       struct mgcp_conn_rtp *conn_rtp = 
mgcp_conn_get_conn_rtp(conn);
+                       mgcp_rtp_end_config(endp, 1, &conn_rtp->end);
+               } else {
                        /* FIXME: Introduce support for other connection (E1)
                         * types when implementation is available */
                        vty_out(vty, "%%Can't enable SSRC patching,"

--
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/39186?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: Iee2c19598e9570ea3b1ceba3cdfd2a5f5be2c954
Gerrit-Change-Number: 39186
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to