aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2023-08-23 13:11:44 +0200
committerOliver Smith <osmith@sysmocom.de>2023-08-23 16:42:24 +0200
commit59efa6dde355e4675f55b16a4d6968e3470b5fde (patch)
tree7a6957da8cdf1cfd6feef575e44621f53efa1a30
parentcfa37cb70b8722261247dca077d40cb2ecbe0c12 (diff)
msc_a_up_call_assignment_complete: check CSD codec
Reject any other codec than GSM0808_SCT_CSD in Assignment Complete from RAN, if OsmoMSC is preparing a CSD call. Related: OS#4394 Change-Id: I94de84df41bcd050d0e7b4e4fea1c6a6551ef7d3
-rw-r--r--src/libmsc/msc_a.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 0d8a747e3..087f61092 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -1483,6 +1483,15 @@ static void msc_a_up_call_assignment_complete(struct msc_a *msc_a, const struct
return;
}
+ /* Check for unexpected codec with CSD */
+ if (cc_trans->bearer_cap.transfer == GSM48_BCAP_ITCAP_UNR_DIG_INF &&
+ codec_if_known->type != GSM0808_SCT_CSD) {
+ LOG_TRANS(cc_trans, LOGL_ERROR, "Unexpected codec in Assignment Complete for CSD: %s\n",
+ gsm0808_speech_codec_type_name(codec_if_known->type));
+ call_leg_release(msc_a->cc.call_leg);
+ return;
+ }
+
/* Update RAN-side endpoint CI from Assignment result -- unless it is forced by the ran_infra, in which
* case it remains unchanged as passed to the earlier call of call_leg_ensure_ci(). */
if (msc_a->c.ran->force_mgw_codecs_to_ran.count == 0)