aboutsummaryrefslogtreecommitdiffstats
path: root/src/libmsc/msc_a.c
diff options
context:
space:
mode:
authorNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-01-26 15:00:06 +0100
committerNeels Hofmeyr <nhofmeyr@sysmocom.de>2023-03-18 03:05:34 +0100
commit11a746acd3de12e8b067283f977c6f7eaeb3ada1 (patch)
tree2928f875a76f5cdcc46428b27817348c8a925cf5 /src/libmsc/msc_a.c
parent81938fd9a7bd14321b1239897e2350a1e6e0ea7f (diff)
[codecs filter] use codecs filter on crcx ok
Diffstat (limited to 'src/libmsc/msc_a.c')
-rw-r--r--src/libmsc/msc_a.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index 387532d43..a7424e03c 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -577,11 +577,22 @@ static void msc_a_call_leg_ran_local_addr_available(struct msc_a *msc_a)
return;
}
- /* Once a CI is known, we could also CRCX the CN side of the MGW endpoint, but it makes sense to wait for the
- * codec to be determined by the Assignment Complete message, first. */
+ 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));
+
+ if (!cc_trans->cc.codecs.result.audio_codecs.count) {
+ LOG_TRANS(cc_trans, LOGL_ERROR, "Assignment not possible, no matching codec: %s\n",
+ codec_filter_to_str(&cc_trans->cc.codecs));
+ call_leg_release(msc_a->cc.call_leg);
+ return;
+ }
- if (mncc_bearer_cap_to_channel_type(&channel_type, &cc_trans->bearer_cap)) {
- LOG_MSC_A(msc_a, LOGL_ERROR, "Cannot compose Channel Type from bearer capabilities\n");
+ /* Compose 48.008 Channel Type from the current set of codecs determined from both local and remote codec
+ * capabilities. */
+ if (sdp_audio_codecs_to_gsm0808_channel_type(&channel_type, &cc_trans->cc.codecs.result.audio_codecs)) {
+ LOG_MSC_A(msc_a, LOGL_ERROR, "Cannot compose Channel Type (Permitted Speech) from codecs: %s\n",
+ codec_filter_to_str(&cc_trans->cc.codecs));
trans_free(cc_trans);
return;
}