aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManawyrm <git@tbspace.de>2023-10-15 14:37:22 +0200
committerlaforge <laforge@osmocom.org>2023-10-17 11:25:59 +0000
commit2984235454a64f42a76419671c79c65e2b502217 (patch)
tree45f0e8458f253a1c7bdc4b4525f3ef535766ae48
parent1ed12eac93457196b3edeedad3335b46a6227f2c (diff)
csd_bs: force rate adaptation mode for CSD calls to V.110
Certain calls (seen on very old Nokias) won't have the rate adaptation flag set on "analog" CSD calls. The field for the intermediate rate (after RA) is still filled correctly. Workaround this by setting the RA to V.110 whenever the RA is unset but an intermediate rate is specified. Change-Id: I5b3e5649fe071636f1becddfbfee06f9175a5f17
-rw-r--r--src/libmsc/csd_bs.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libmsc/csd_bs.c b/src/libmsc/csd_bs.c
index caea057de..ab0b64309 100644
--- a/src/libmsc/csd_bs.c
+++ b/src/libmsc/csd_bs.c
@@ -236,6 +236,11 @@ enum csd_bs csd_bs_from_bearer_cap(const struct gsm_mncc_bearer_cap *cap, bool t
enum gsm48_bcap_user_rate rate = cap->data.user_rate;
bool async = cap->data.async;
+ /* 3.1kHz CSD calls won't have the rate adaptation field set
+ but do require rate adaptation. */
+ if (cap->data.interm_rate && !ra)
+ ra = GSM48_BCAP_RA_V110_X30;
+
if (ra == GSM48_BCAP_RA_V110_X30 && async && transp) {
switch (rate) {
case GSM48_BCAP_UR_300: