From de8a282d8d74ffc64d4ed5c48803abb575e123a9 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Wed, 7 Feb 2024 03:01:05 +0100 Subject: [PATCH] protect re-assignment codec choice from previous codec Change-Id: I268e19c032429e87ad8f6c949957a887bcb67650 --- src/libmsc/msc_a.c | 7 +++++++ 1 file changed, 7 insertions(+) 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) {