aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2023-05-24 11:15:52 +0200
committerOliver Smith <osmith@sysmocom.de>2023-06-15 15:06:46 +0200
commitceca8e6d2d057c49b98a3cb4d8565c1220ca0f95 (patch)
tree066400acd2256e8a9153a7403fa81b3d7dba4358 /src
parent1c7f1787bdef689e4046dd29fa2fb0989bfa73ab (diff)
codec_filter_run: prepare for CSD
Diffstat (limited to 'src')
-rw-r--r--src/libmsc/gsm_04_08_cc.c28
-rw-r--r--src/libmsc/msc_a.c11
-rw-r--r--src/libmsc/transaction_cc.c6
3 files changed, 21 insertions, 24 deletions
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 810b404dd..5f54a58c8 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -676,11 +676,10 @@ static int gsm48_cc_rx_setup(struct gsm_trans *trans, struct msgb *msg)
trans_cc_filter_set_bss(trans, trans->msc_a);
if (setup.fields & MNCC_F_BEARER_CAP)
trans_cc_filter_set_ms_from_bc(trans, &trans->bearer_cap);
- codec_filter_run(&trans->cc.codecs);
+ trans_cc_filter_run(trans);
LOG_TRANS(trans, setup.emergency ? LOGL_NOTICE : LOGL_INFO, "%sSETUP to %s\n",
setup.emergency ? "EMERGENCY_" : "", setup.called.number);
- LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
rate_ctr_inc(rate_ctr_group_get_ctr(trans->net->msc_ctrs, MSC_CTR_CALL_MO_SETUP));
@@ -822,8 +821,7 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
LOG_TRANS(trans, LOGL_INFO,
"Got no information of remote audio codecs: neither SDP nor Bearer Capability. Trying anyway.\n");
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
/* Compose Bearer Capability information that reflects only the codecs (Speech Versions) remaining after
* intersecting MS, BSS and remote call leg restrictions. To store in trans for later use, and to include in
@@ -982,8 +980,7 @@ static int gsm48_cc_mt_rtp_port_and_codec_known(struct gsm_trans *trans)
}
codec_filter_set_local_rtp(&trans->cc.codecs, rtp_cn_local);
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
/* If we haven't completed Assignment yet, don't sent MNCC_RTP_CREATE */
if (!sdp_audio_codec_is_set(&trans->cc.codecs.assignment)) {
@@ -1062,8 +1059,7 @@ static int gsm48_cc_rx_alerting(struct gsm_trans *trans, struct msgb *msg)
new_cc_state(trans, GSM_CSTATE_CALL_RECEIVED);
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
rc = sdp_msg_to_sdp_str_buf(alerting.sdp, sizeof(alerting.sdp), &trans->cc.codecs.result);
if (rc >= sizeof(alerting.sdp)) {
LOG_TRANS(trans, LOGL_ERROR, "MNCC_ALERT_IND: SDP too long (%d > %zu bytes)\n",
@@ -1100,9 +1096,8 @@ static int gsm48_cc_tx_alerting(struct gsm_trans *trans, void *arg)
struct call_leg *cl = trans->msc_a->cc.call_leg;
struct rtp_stream *rtp_cn = cl ? cl->rtp[RTP_TO_CN] : NULL;
codec_filter_set_remote(&trans->cc.codecs, alerting->sdp);
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "%s codecs: %s\n",
- get_mncc_name(alerting->msg_type), codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
+ LOG_TRANS(trans, LOGL_DEBUG, "msg_type=%s\n", get_mncc_name(alerting->msg_type));
if (rtp_cn) {
rtp_stream_set_remote_addr_and_codecs(rtp_cn, &trans->cc.codecs.remote);
rtp_stream_commit(rtp_cn);
@@ -1160,10 +1155,8 @@ static int gsm48_cc_tx_connect(struct gsm_trans *trans, void *arg)
struct call_leg *cl = trans->msc_a->cc.call_leg;
struct rtp_stream *rtp_cn = cl ? cl->rtp[RTP_TO_CN] : NULL;
rx_mncc_sdp(trans, connect->msg_type, connect->sdp);
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "%s codecs: %s\n",
- get_mncc_name(connect->msg_type),
- codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
+ LOG_TRANS(trans, LOGL_DEBUG, "msg_type=%s\n", get_mncc_name(connect->msg_type));
if (rtp_cn) {
rtp_stream_set_remote_addr_and_codecs(rtp_cn, &trans->cc.codecs.remote);
rtp_stream_commit(rtp_cn);
@@ -1212,7 +1205,7 @@ static int gsm48_cc_rx_connect(struct gsm_trans *trans, struct msgb *msg)
new_cc_state(trans, GSM_CSTATE_CONNECT_REQUEST);
rate_ctr_inc(rate_ctr_group_get_ctr(trans->net->msc_ctrs, MSC_CTR_CALL_MT_CONNECT));
- codec_filter_run(&trans->cc.codecs);
+ trans_cc_filter_run(trans);
sdp_msg_to_sdp_str_buf(connect.sdp, sizeof(connect.sdp), &trans->cc.codecs.result);
return mncc_recvmsg(trans->net, trans, MNCC_SETUP_CNF, &connect);
}
@@ -2050,8 +2043,7 @@ int gsm48_tch_rtp_create(struct gsm_trans *trans)
return -EINVAL;
}
- codec_filter_run(&trans->cc.codecs);
- LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
+ trans_cc_filter_run(trans);
codecs = &trans->cc.codecs.result.audio_codecs;
if (!codecs->count) {
LOG_TRANS_CAT(trans, DMNCC, LOGL_ERROR,
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 917422e41..d53404f37 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -36,6 +36,7 @@
#include <osmocom/msc/signal.h>
#include <osmocom/msc/vlr.h>
#include <osmocom/msc/transaction.h>
+#include <osmocom/msc/transaction_cc.h>
#include <osmocom/msc/ran_peer.h>
#include <osmocom/msc/ran_msg_a.h>
#include <osmocom/msc/ran_msg_iu.h>
@@ -47,7 +48,6 @@
#include <osmocom/msc/rtp_stream.h>
#include <osmocom/msc/msc_ho.h>
#include <osmocom/msc/codec_mapping.h>
-#include <osmocom/msc/codec_filter.h>
#define MSC_A_USE_WAIT_CLEAR_COMPLETE "wait-Clear-Complete"
@@ -637,9 +637,8 @@ static void msc_a_call_leg_ran_local_addr_available(struct msc_a *msc_a)
return;
}
- codec_filter_run(&cc_trans->cc.codecs);
- LOG_TRANS(cc_trans, LOGL_DEBUG, "Sending Assignment Command with codecs: %s\n",
- codec_filter_to_str(&cc_trans->cc.codecs));
+ trans_cc_filter_run(cc_trans);
+ LOG_TRANS(cc_trans, LOGL_DEBUG, "Sending Assignment Command\n");
if (!cc_trans->cc.codecs.result.audio_codecs.count) {
LOG_TRANS(cc_trans, LOGL_ERROR, "Assignment not possible, no matching codec: %s\n",
@@ -1453,7 +1452,7 @@ static void msc_a_up_call_assignment_complete(struct msc_a *msc_a, const struct
if (ac->assignment_complete.codec_list_bss_supported)
codec_filter_set_bss(&cc_trans->cc.codecs, ac->assignment_complete.codec_list_bss_supported);
- codec_filter_run(&cc_trans->cc.codecs);
+ trans_cc_filter_run(cc_trans);
LOG_TRANS(cc_trans, LOGL_INFO, "Assignment Complete: RAN: %s, CN: %s\n",
sdp_audio_codecs_to_str(&rtps_to_ran->codecs),
sdp_audio_codecs_to_str(&cc_trans->cc.codecs.result.audio_codecs));
@@ -1865,7 +1864,7 @@ static int msc_a_start_assignment(struct msc_a *msc_a, struct gsm_trans *cc_tran
return -EINVAL;
/* See if we can set a preliminary codec. If not, pass none for the time being. */
- codec_filter_run(&cc_trans->cc.codecs);
+ trans_cc_filter_run(cc_trans);
cn_rtp_available = call_leg_local_ip(cl, RTP_TO_CN);
ran_rtp_available = call_leg_local_ip(cl, RTP_TO_RAN);
diff --git a/src/libmsc/transaction_cc.c b/src/libmsc/transaction_cc.c
index 58617cd26..96087b89f 100644
--- a/src/libmsc/transaction_cc.c
+++ b/src/libmsc/transaction_cc.c
@@ -40,6 +40,12 @@ void trans_cc_filter_set_bss(struct gsm_trans *trans, struct msc_a *msc_a)
codec_filter_set_bss(&trans->cc.codecs, &msc_a->cc.compl_l3_codec_list_bss_supported);
}
+void trans_cc_filter_run(struct gsm_trans *trans)
+{
+ codec_filter_run(&trans->cc.codecs);
+ LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
+}
+
void trans_cc_filter_set_ms_from_bc(struct gsm_trans *trans, const struct gsm_mncc_bearer_cap *bcap)
{
trans->cc.codecs.ms = (struct sdp_audio_codecs){0};