msc_ho_send_handover_request: support CSD
Related: OS#4394
Change-Id: I5fea299bdc19d2979b5c222d8dd265dac2068307
diff --git a/src/libmsc/msc_ho.c b/src/libmsc/msc_ho.c
index 9e4417f..9748ed9 100644
--- a/src/libmsc/msc_ho.c
+++ b/src/libmsc/msc_ho.c
@@ -413,12 +413,29 @@
: "-");
if (cc_trans) {
- if (sdp_audio_codecs_to_gsm0808_channel_type(&channel_type,
- &cc_trans->cc.local.audio_codecs)) {
- msc_ho_failed(msc_a, GSM0808_CAUSE_EQUIPMENT_FAILURE,
- "Failed to determine Channel Type for Handover Request message\n");
+ switch (cc_trans->bearer_cap.transfer) {
+ case GSM48_BCAP_ITCAP_SPEECH:
+ if (sdp_audio_codecs_to_gsm0808_channel_type(&channel_type,
+ &cc_trans->cc.local.audio_codecs)) {
+ msc_ho_failed(msc_a, GSM0808_CAUSE_EQUIPMENT_FAILURE,
+ "Failed to determine Channel Type for Handover Request message (speech)\n");
+ return;
+ }
+ break;
+ 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,
+ "Failed to determine Channel Type for Handover Request message (CSD)\n");
+ return;
+ }
+ break;
+ default:
+ msc_ho_failed(msc_a, GSM0808_CAUSE_EQUIPMENT_FAILURE, "Failed to create"
+ " Handover Request message for information transfer capability %d\n",
+ cc_trans->bearer_cap.transfer);
return;
}
+
ran_enc_msg.handover_request.geran.channel_type = &channel_type;
ran_enc_msg.handover_request.call_id_present = true;
ran_enc_msg.handover_request.call_id = cc_trans->call_id;