aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2022-10-25 13:49:40 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2022-10-26 11:56:05 +0200
commitd1e94c7ac37ad1957d00bc810f5255a74fadea3a (patch)
tree670a48e699a78d533a2d663d214f0615c48bf5fe /src
parent6db3f7f1cbdae87bd1fd03eec528590ff2e85363 (diff)
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
Diffstat (limited to 'src')
-rw-r--r--src/libosmo-mgcp/mgcp_network.c2
-rw-r--r--src/libosmo-mgcp/mgcp_osmux.c18
2 files changed, 9 insertions, 11 deletions
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;
}