From cca55247edbbad81c19294039b630afbdf520b95 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 24 Oct 2022 17:14:33 +0200 Subject: [PATCH] Rename and move func checking if amr mode is explicitly configured The previous naming was quite confusing, since the function is not really checking whether a conversion is needed, but rather whether the codec has the AMR RTP mode defined explicitly and hence forced. The previous naming didn't harm because the amr_oa_bwe_convert also supports the conversion path OA<->OA and BE<->BE. Hence nowadays the amr_oa_bwe_convert() function is called always if the dst conn has its codec with AMR RTP mode explicitly set, no matter if the src and dst conn have the same mode. Related: SYS#6161 Change-Id: I8dce3038ebccf5e1e37e2908070a67d66693a96f --- include/osmocom/mgcp/mgcp_codec.h | 1 + src/libosmo-mgcp/mgcp_codec.c | 12 ++++++++++++ src/libosmo-mgcp/mgcp_network.c | 18 ++---------------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/include/osmocom/mgcp/mgcp_codec.h b/include/osmocom/mgcp/mgcp_codec.h index 97e6b8d33..994d77054 100644 --- a/include/osmocom/mgcp/mgcp_codec.h +++ b/include/osmocom/mgcp/mgcp_codec.h @@ -17,4 +17,5 @@ int mgcp_codec_decide(struct mgcp_conn_rtp *conn); int mgcp_codec_pt_translate(struct mgcp_conn_rtp *conn_src, struct mgcp_conn_rtp *conn_dst, int payload_type); const struct mgcp_rtp_codec *mgcp_codec_pt_find_by_subtype_name(struct mgcp_conn_rtp *conn, const char *subtype_name, unsigned int match_nr); +bool mgcp_codec_amr_align_mode_is_indicated(const struct mgcp_rtp_codec *codec); bool mgcp_codec_amr_is_octet_aligned(const struct mgcp_rtp_codec *codec); diff --git a/src/libosmo-mgcp/mgcp_codec.c b/src/libosmo-mgcp/mgcp_codec.c index 38aa0a79f..1a8d26a61 100644 --- a/src/libosmo-mgcp/mgcp_codec.c +++ b/src/libosmo-mgcp/mgcp_codec.c @@ -345,6 +345,18 @@ int mgcp_codec_decide(struct mgcp_conn_rtp *conn) return -EINVAL; } +/* Check if the codec has a specific AMR mode (octet-aligned or bandwith-efficient) set. */ +bool mgcp_codec_amr_align_mode_is_indicated(const struct mgcp_rtp_codec *codec) +{ + if (codec->param_present == false) + return false; + if (!codec->param.amr_octet_aligned_present) + return false; + if (strcmp(codec->subtype_name, "AMR") != 0) + return false; + return true; +} + /* Return true if octet-aligned is set in the given codec. Default to octet-aligned=0, i.e. bandwidth-efficient mode. * See RFC4867 "RTP Payload Format for AMR and AMR-WB" sections "8.1. AMR Media Type Registration" and "8.2. AMR-WB * Media Type Registration": diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c index 55f49c4cf..26f34757c 100644 --- a/src/libosmo-mgcp/mgcp_network.c +++ b/src/libosmo-mgcp/mgcp_network.c @@ -769,20 +769,6 @@ static int amr_oa_bwe_convert(struct mgcp_endpoint *endp, struct msgb *msg, return msgb_trim(msg, rc + sizeof(struct rtp_hdr)); } -/* Check if a conversion between octet-aligned and bandwith-efficient mode is - * indicated. */ -static bool amr_oa_bwe_convert_indicated(struct mgcp_rtp_codec *codec) -{ - if (codec->param_present == false) - return false; - if (!codec->param.amr_octet_aligned_present) - return false; - if (strcmp(codec->subtype_name, "AMR") != 0) - return false; - return true; -} - - /* Return whether an RTP packet with AMR payload is in octet-aligned mode. * Return 0 if in bandwidth-efficient mode, 1 for octet-aligned mode, and negative if the RTP data is invalid. */ static int amr_oa_check(char *data, int len) @@ -1221,7 +1207,7 @@ int mgcp_send(struct mgcp_endpoint *endp, int is_rtp, struct osmo_sockaddr *addr if (mgcp_conn_rtp_is_iuup(conn_dst) || mgcp_conn_rtp_is_iuup(conn_src)) { /* the iuup code will correctly transform to the correct AMR mode */ - } else if (amr_oa_bwe_convert_indicated(conn_dst->end.codec)) { + } else if (mgcp_codec_amr_align_mode_is_indicated(conn_dst->end.codec)) { rc = amr_oa_bwe_convert(endp, msg, conn_dst->end.codec->param.amr_octet_aligned); if (rc < 0) { @@ -1535,7 +1521,7 @@ static int rx_rtp(struct msgb *msg) * defined, then we check if the incoming payload matches that * expectation. */ if (mc->proto == MGCP_PROTO_RTP && - amr_oa_bwe_convert_indicated(conn_src->end.codec)) { + mgcp_codec_amr_align_mode_is_indicated(conn_src->end.codec)) { int oa = amr_oa_check((char*)msgb_data(msg), msgb_length(msg)); if (oa < 0) return -1;