neels has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/30121 )

 (

4 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: [codecs filter] MT call: apply remote call leg codecs
......................................................................

[codecs filter] MT call: apply remote call leg codecs

Collect either the SDP or the Bearer Capabilites in the incoming
MNCC in the new codecs filter.

So far just collect the info and do not change the behavior, using the
filter result will follow in a subsequent patch.

Related: SYS#5066
Change-Id: I84d9bbca3e4061da622b1b2fc0bde8868e7e3521
---
M src/libmsc/gsm_04_08_cc.c
M tests/msc_vlr/msc_vlr_test_call.err
2 files changed, 37 insertions(+), 0 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified




diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c
index 93dcdf8..12f2c89 100644
--- a/src/libmsc/gsm_04_08_cc.c
+++ b/src/libmsc/gsm_04_08_cc.c
@@ -739,9 +739,28 @@
        codec_filter_init(&trans->cc.codecs);
        codec_filter_set_ran(&trans->cc.codecs, trans->msc_a->c.ran->type);
        codec_filter_set_bss(&trans->cc.codecs, 
&trans->msc_a->cc.compl_l3_codec_list_bss_supported);
+       /* sdp.remote: if SDP is included in the MNCC, take that as definitive 
list of remote audio codecs. */
+       if (setup->sdp[0]) {
+               rc = sdp_msg_from_sdp_str(&trans->cc.codecs.remote, setup->sdp);
+               if (rc)
+                       LOG_TRANS(trans, LOGL_ERROR, "Failed to parse remote 
call leg SDP: %d\n", rc);
+       }
+       /* sdp.remote: if there is no SDP information or we failed to parse it, 
try using the Bearer Capability from
+        * MNCC, if any. */
+       if (!trans->cc.codecs.remote.audio_codecs.count && (setup->fields & 
MNCC_F_BEARER_CAP)) {
+               trans->cc.codecs.remote = (struct sdp_msg){};
+               
sdp_audio_codecs_from_bearer_cap(&trans->cc.codecs.remote.audio_codecs,
+                                                &setup->bearer_cap);
+       }
+       if (!trans->cc.codecs.remote.audio_codecs.count)
+               LOG_TRANS(trans, LOGL_INFO,
+                         "Got no information of remote audio codecs: neither 
SDP nor Bearer Capability. Trying anyway.\n");
+
        codec_filter_run(&trans->cc.codecs);
        LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", 
codec_filter_to_str(&trans->cc.codecs));

+       /* NEAR FUTURE: upcoming patch will use the codecs filter to determine 
the Bearer Cap to send to the MS.
+        * So far just gathering information in the new codecs filter. */
        /* bearer capability */
        if (setup->fields & MNCC_F_BEARER_CAP) {
                /* Create a copy of the bearer capability in the transaction 
struct, so we
diff --git a/tests/msc_vlr/msc_vlr_test_call.err 
b/tests/msc_vlr/msc_vlr_test_call.err
index d03ea7b..3c31ab7 100644
--- a/tests/msc_vlr/msc_vlr_test_call.err
+++ b/tests/msc_vlr/msc_vlr_test_call.err
@@ -757,6 +757,7 @@
 DMSC 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_AUTHENTICATED}:
 Received Event MSC_A_EV_TRANSACTION_ACCEPTED
 DMSC 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_AUTHENTICATED}:
 state_chg to MSC_A_ST_COMMUNICATING
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) starting timer T303 with 30 seconds
+DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) Got no information of remote audio codecs: neither SDP nor 
Bearer Capability. Trying anyway.
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) codecs: 
:0{AMR:octet-align=1#112,AMR-WB/16000:octet-align=1#113} (from: 
RAN={AMR:octet-align=1#112,AMR-WB/16000:octet-align=1#113})
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) new state NULL -> CALL_PRESENT
 DIUCS 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}:
 Sending DTAP: CC GSM48_MT_CC_SETUP
@@ -1226,6 +1227,7 @@
 DMSC 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_AUTHENTICATED}:
 Received Event MSC_A_EV_TRANSACTION_ACCEPTED
 DMSC 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_AUTHENTICATED}:
 state_chg to MSC_A_ST_COMMUNICATING
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) starting timer T303 with 30 seconds
+DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) Got no information of remote audio codecs: neither SDP nor 
Bearer Capability. Trying anyway.
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) codecs: 
:0{AMR:octet-align=1#112,AMR-WB/16000:octet-align=1#113} (from: 
RAN={AMR:octet-align=1#112,AMR-WB/16000:octet-align=1#113})
 DCC trans(CC:NULL 
IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP 
callref-0x423 tid-0) new state NULL -> CALL_PRESENT
 DIUCS 
msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}:
 Sending DTAP: CC GSM48_MT_CC_SETUP

--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/30121
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I84d9bbca3e4061da622b1b2fc0bde8868e7e3521
Gerrit-Change-Number: 30121
Gerrit-PatchSet: 8
Gerrit-Owner: neels <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: neels <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-MessageType: merged

Reply via email to