diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2024-02-07 03:01:05 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2024-02-09 05:17:39 +0100 |
commit | 330c6e65f0f47e98cadca964866a2a7b0f2c1d97 (patch) | |
tree | 9337b9256fe2ec1fde7178e39d219f7d61e6ddf3 | |
parent | 229f4d5184544879f7293a8999997601f91332a9 (diff) |
protect re-assignment codec choice from previous codec
Change-Id: I268e19c032429e87ad8f6c949957a887bcb67650
-rw-r--r-- | src/libmsc/msc_a.c | 7 |
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) { |