aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManawyrm <git@tbspace.de>2023-10-14 17:23:04 +0200
committerManawyrm <git@tbspace.de>2023-10-14 17:23:04 +0200
commit1ed12eac93457196b3edeedad3335b46a6227f2c (patch)
tree0a9d389ab4320cc4931e911be387ef679b98028a
parent1792ba92c1f939fb232e25ae1124eda7bb11983f (diff)
libmsc: add 3k1_AUDIO and FAX_G3 bearer cap
Bearer capability 3k1_AUDIO and FAX_G3 are only important for the interworking function, the MSC should handle these calls the same as CSD calls with unrestricted digital bearer capability. Change-Id: I198aa867a8f236b8ddd05d3b2356f64b876fd4c1
-rw-r--r--src/libmsc/gsm_04_08_cc.c4
-rw-r--r--src/libmsc/mncc_builtin.c2
-rw-r--r--src/libmsc/msc_a.c2
-rw-r--r--src/libmsc/msc_ho.c2
-rw-r--r--src/libmsc/transaction_cc.c6
5 files changed, 16 insertions, 0 deletions
diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 1e2c5aff9..31fcb23f7 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -825,6 +825,8 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
LOG_TRANS(trans, LOGL_INFO,
"Got no information of remote audio codecs: neither SDP nor Bearer Capability. Trying anyway.\n");
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
if (setup->fields & MNCC_F_BEARER_CAP) {
trans->cc.remote = (struct sdp_msg){};
@@ -878,6 +880,8 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
return rc;
}
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
if (csd_bs_list_to_bearer_cap(&bearer_cap, &trans->cc.local.bearer_services) == 0) {
LOG_TRANS(trans, LOGL_ERROR, "Error composing Bearer Capability for CC Setup\n");
diff --git a/src/libmsc/mncc_builtin.c b/src/libmsc/mncc_builtin.c
index c1debc5b1..647420155 100644
--- a/src/libmsc/mncc_builtin.c
+++ b/src/libmsc/mncc_builtin.c
@@ -88,6 +88,8 @@ static int mncc_setup_ind(struct gsm_call *call,
/* we currently only do speech and CSD */
switch (setup->bearer_cap.transfer) {
case GSM_MNCC_BCAP_SPEECH:
+ case GSM_MNCC_BCAP_AUDIO:
+ case GSM_MNCC_BCAP_FAX_G3:
case GSM_MNCC_BCAP_UNR_DIG:
break;
default:
diff --git a/src/libmsc/msc_a.c b/src/libmsc/msc_a.c
index b4776a025..e64b54d8f 100644
--- a/src/libmsc/msc_a.c
+++ b/src/libmsc/msc_a.c
@@ -669,6 +669,8 @@ static void msc_a_call_leg_ran_local_addr_available(struct msc_a *msc_a)
return;
}
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
if (!cc_trans->cc.local.bearer_services.count) {
LOG_TRANS(cc_trans, LOGL_ERROR, "Assignment not possible, no matching bearer service: %s\n",
diff --git a/src/libmsc/msc_ho.c b/src/libmsc/msc_ho.c
index 9748ed9d5..f82697503 100644
--- a/src/libmsc/msc_ho.c
+++ b/src/libmsc/msc_ho.c
@@ -422,6 +422,8 @@ static void msc_ho_send_handover_request(struct msc_a *msc_a)
return;
}
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
if (csd_bs_list_to_gsm0808_channel_type(&channel_type, &cc_trans->cc.local.bearer_services)) {
msc_ho_failed(msc_a, GSM0808_CAUSE_EQUIPMENT_FAILURE,
diff --git a/src/libmsc/transaction_cc.c b/src/libmsc/transaction_cc.c
index 35ec5dc86..1ea66330e 100644
--- a/src/libmsc/transaction_cc.c
+++ b/src/libmsc/transaction_cc.c
@@ -54,6 +54,8 @@ void trans_cc_filter_run(struct gsm_trans *trans)
LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n",
codec_filter_to_str(&trans->cc.codecs, &trans->cc.local, &trans->cc.remote));
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
csd_filter_run(&trans->cc.csd, &trans->cc.local, &trans->cc.remote);
LOG_TRANS(trans, LOGL_DEBUG, "codec/BS: %s\n",
@@ -78,6 +80,8 @@ void trans_cc_filter_set_ms_from_bc(struct gsm_trans *trans, const struct gsm_mn
case GSM48_BCAP_ITCAP_SPEECH:
sdp_audio_codecs_from_bearer_cap(&trans->cc.codecs.ms, bcap);
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
sdp_audio_codecs_set_csd(&trans->cc.codecs.ms);
csd_bs_list_from_bearer_cap(&trans->cc.csd.ms, bcap);
@@ -101,6 +105,8 @@ void trans_cc_set_remote_from_bc(struct gsm_trans *trans, const struct gsm_mncc_
case GSM48_BCAP_ITCAP_SPEECH:
sdp_audio_codecs_from_bearer_cap(&trans->cc.remote.audio_codecs, bcap);
break;
+ case GSM48_BCAP_ITCAP_3k1_AUDIO:
+ case GSM48_BCAP_ITCAP_FAX_G3:
case GSM48_BCAP_ITCAP_UNR_DIG_INF:
sdp_audio_codecs_set_csd(&trans->cc.remote.audio_codecs);
csd_bs_list_from_bearer_cap(&trans->cc.remote.bearer_services, bcap);