From d1e94c7ac37ad1957d00bc810f5255a74fadea3a Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Tue, 25 Oct 2022 13:49:40 +0200 Subject: [PATCH] osmux: Rename function and pass msgb directly to it The new prefix now matches other related functions acting on an osmux connection. Pass the msgb to it so simplify new msgb copy. Change-Id: I8c0121485d0c96f70fe8bcbdb150793d428183ff --- include/osmocom/mgcp/osmux.h | 2 +- src/libosmo-mgcp/mgcp_network.c | 2 +- src/libosmo-mgcp/mgcp_osmux.c | 18 ++++++++---------- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/include/osmocom/mgcp/osmux.h b/include/osmocom/mgcp/osmux.h index 044a33f69..4ea6da72f 100644 --- a/include/osmocom/mgcp/osmux.h +++ b/include/osmocom/mgcp/osmux.h @@ -15,7 +15,7 @@ int osmux_init_conn(struct mgcp_conn_rtp *conn); int conn_osmux_enable(struct mgcp_conn_rtp *conn); void conn_osmux_disable(struct mgcp_conn_rtp *conn); int conn_osmux_event_rx_crcx_mdcx(struct mgcp_conn_rtp *conn); -int osmux_xfrm_to_osmux(char *buf, int buf_len, struct mgcp_conn_rtp *conn); +int conn_osmux_send_rtp(struct mgcp_conn_rtp *conn, struct msgb *msg); int osmux_send_dummy(struct mgcp_conn_rtp *conn); void osmux_cid_pool_get(uint8_t osmux_cid); diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index 6edb4ae19..3248cbd71 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -1020,7 +1020,7 @@ static int mgcp_conn_rtp_dispatch_rtp(struct mgcp_conn_rtp *conn_dst, struct msg LOGPENDP(endp, DRTP, LOGL_DEBUG, "endpoint type is MGCP_RTP_OSMUX, " "using osmux_xfrm_to_osmux() to forward data through OSMUX\n"); - return osmux_xfrm_to_osmux((char*)msgb_data(msg), msgb_length(msg), conn_dst); + return conn_osmux_send_rtp(conn_dst, msg); case MGCP_RTP_IUUP: if (proto == MGCP_PROTO_RTP) { LOGPENDP(endp, DRTP, LOGL_DEBUG, diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c index 0fd1ba784..e1380ecdd 100644 --- a/src/libosmo-mgcp/mgcp_osmux.c +++ b/src/libosmo-mgcp/mgcp_osmux.c @@ -201,14 +201,13 @@ osmux_handle_find_or_create(const struct mgcp_trunk *trunk, const struct osmo_so } /*! send RTP packet through OSMUX connection. - * \param[in] buf rtp data - * \param[in] buf_len length of rtp data * \param[in] conn associated RTP connection + * \param[in] msg msgb containing an RTP AMR packet * \returns 0 on success, -1 on ERROR */ -int osmux_xfrm_to_osmux(char *buf, int buf_len, struct mgcp_conn_rtp *conn) +int conn_osmux_send_rtp(struct mgcp_conn_rtp *conn, struct msgb *msg) { int ret; - struct msgb *msg; + struct msgb *msg2; if (!conn->end.output_enabled) { rtpconn_osmux_rate_ctr_inc(conn, OSMUX_RTP_PACKETS_TX_DROPPED_CTR); @@ -222,14 +221,13 @@ int osmux_xfrm_to_osmux(char *buf, int buf_len, struct mgcp_conn_rtp *conn) return -1; } - msg = msgb_alloc(4096, "RTP"); - if (!msg) + /* msg is not owned by us and will be freed by the caller stack upon return: */ + msg2 = msgb_copy_c(conn->conn, msg, "osmux-rtp-send"); + if (!msg2) return -1; - memcpy(msg->data, buf, buf_len); - msgb_put(msg, buf_len); - while ((ret = osmux_xfrm_input(conn->osmux.in, msg, conn->osmux.remote_cid)) > 0) { + while ((ret = osmux_xfrm_input(conn->osmux.in, msg2, conn->osmux.remote_cid)) > 0) { /* batch full, build and deliver it */ osmux_xfrm_input_deliver(conn->osmux.in); } @@ -237,7 +235,7 @@ int osmux_xfrm_to_osmux(char *buf, int buf_len, struct mgcp_conn_rtp *conn) rtpconn_osmux_rate_ctr_inc(conn, OSMUX_RTP_PACKETS_TX_DROPPED_CTR); } else { rtpconn_osmux_rate_ctr_inc(conn, OSMUX_RTP_PACKETS_TX_CTR); - rtpconn_osmux_rate_ctr_add(conn, OSMUX_AMR_OCTETS_TX_CTR, buf_len - sizeof(struct rtp_hdr)); + rtpconn_osmux_rate_ctr_add(conn, OSMUX_AMR_OCTETS_TX_CTR, msgb_length(msg2) - sizeof(struct rtp_hdr)); } return 0; }