aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2024-02-07 03:01:05 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2024-02-09 05:17:39 +0100
commit330c6e65f0f47e98cadca964866a2a7b0f2c1d97 (patch)
tree9337b9256fe2ec1fde7178e39d219f7d61e6ddf3
parent229f4d5184544879f7293a8999997601f91332a9 (diff)
protect re-assignment codec choice from previous codec
-rw-r--r--src/libmsc/msc_a.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 084d04fcd..facd9d411 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -641,6 +641,7 @@ void msc_a_tx_assignment_cmd(struct msc_a *msc_a)
struct ran_msg msg;
struct gsm_trans *cc_trans = msc_a->cc.active_trans;
struct gsm0808_channel_type channel_type;
+ struct sdp_audio_codec was_assignment;
if (!cc_trans) {
LOG_MSC_A(msc_a, LOGL_ERROR, "No CC transaction active\n");
@@ -648,7 +649,13 @@ void msc_a_tx_assignment_cmd(struct msc_a *msc_a)
return;
}
+ /* Make sure any previously assigned codec doesn't override other codec preferences: clear any previously
+ * assigned codec. */
+ was_assignment = cc_trans->cc.codecs.assignment;
+ cc_trans->cc.codecs.assignment = (struct sdp_audio_codec){};
trans_cc_filter_run(cc_trans);
+ cc_trans->cc.codecs.assignment = was_assignment;
+
LOG_TRANS(cc_trans, LOGL_DEBUG, "Sending Assignment Command\n");
switch (cc_trans->bearer_cap.transfer) {