blob: 8059bb4e478f06230a1c68dcde30d340937240d8 [file] [log] [blame]
Oliver Smith5375f782023-05-23 13:38:33 +02001/* Filter/overlay codec and CSD bearer service selections for voice calls/CSD,
2 * across MS, RAN and CN limitations
3 *
4 * (C) 2023 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
5 * All Rights Reserved
6 *
7 * Author: Oliver Smith
8 *
9 * SPDX-License-Identifier: AGPL-3.0+
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU Affero General Public License as published by
13 * the Free Software Foundation; either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Affero General Public License for more details.
20 *
21 * You should have received a copy of the GNU Affero General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 */
24
25#include <osmocom/msc/transaction_cc.h>
Oliver Smithc7c40c92023-05-23 17:43:40 +020026#include <osmocom/msc/codec_filter.h>
Oliver Smith5375f782023-05-23 13:38:33 +020027
Oliver Smitha35abb72023-05-23 17:29:57 +020028void trans_cc_filter_init(struct gsm_trans *trans)
29{
30 trans->cc.codecs = (struct codec_filter){};
31}
32
Oliver Smithc7c40c92023-05-23 17:43:40 +020033void trans_cc_filter_set_ran(struct gsm_trans *trans, enum osmo_rat_type ran_type)
34{
35 codec_filter_set_ran(&trans->cc.codecs, ran_type);
36}
37
Oliver Smith5375f782023-05-23 13:38:33 +020038void trans_cc_filter_set_ms_from_bc(struct gsm_trans *trans, const struct gsm_mncc_bearer_cap *bcap)
39{
40 trans->cc.codecs.ms = (struct sdp_audio_codecs){0};
41
42 if (!bcap)
43 return;
44
45 switch (bcap->transfer) {
46 case GSM48_BCAP_ITCAP_SPEECH:
47 sdp_audio_codecs_from_bearer_cap(&trans->cc.codecs.ms, bcap);
48 break;
49 default:
50 LOG_TRANS(trans, LOGL_ERROR, "Handling of information transfer capability %d not implemented\n",
51 bcap->transfer);
52 break;
53 }
54}