compose trans->bearer_cap from remote MNCC codec info
Related: SYS#5066 Change-Id: Ic9aab3be5e683bea0319345c7e9cca836667f61f
This commit is contained in:
parent
9e1584a031
commit
b7343a58cf
|
@ -662,6 +662,7 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
|
|||
struct gsm48_hdr *gh;
|
||||
struct gsm_mncc *setup = arg;
|
||||
int rc, trans_id;
|
||||
struct gsm_mncc_bearer_cap bearer_cap;
|
||||
|
||||
gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
|
||||
|
||||
|
@ -724,13 +725,41 @@ static int gsm48_cc_tx_setup(struct gsm_trans *trans, void *arg)
|
|||
LOG_TRANS(trans, LOGL_ERROR,
|
||||
"Got no information of remote audio codecs: neither SDP nor Bearer Capability. Trying anyway.\n");
|
||||
|
||||
/* bearer capability */
|
||||
if (setup->fields & MNCC_F_BEARER_CAP) {
|
||||
/* Compose outgoing Bearer Capabilities: translate SDP to bearer capability Speech Version entries.
|
||||
* Send only codecs that remain according to the codec filter. */
|
||||
/* Create a copy of the bearer capability in the transaction struct, so we
|
||||
* can use this information later */
|
||||
memcpy(&trans->bearer_cap, &setup->bearer_cap, sizeof(trans->bearer_cap));
|
||||
gsm48_encode_bearer_cap(msg, 0, &setup->bearer_cap);
|
||||
codec_filter_run(&trans->cc.codecs);
|
||||
LOG_TRANS(trans, LOGL_DEBUG, "codecs: %s\n", codec_filter_to_str(&trans->cc.codecs));
|
||||
bearer_cap = (struct gsm_mncc_bearer_cap){
|
||||
.speech_ver = { -1 },
|
||||
};
|
||||
sdp_audio_codecs_to_bearer_cap(&bearer_cap, &trans->cc.codecs.result.audio_codecs);
|
||||
rc = bearer_cap_set_radio(&bearer_cap);
|
||||
if (rc) {
|
||||
LOG_TRANS(trans, LOGL_ERROR, "Error composing Bearer Capability for CC Setup\n");
|
||||
trans_free(trans);
|
||||
msgb_free(msg);
|
||||
return rc;
|
||||
}
|
||||
/* (As earlier code did, keep a copy in trans->bearer_cap) */
|
||||
trans->bearer_cap = bearer_cap;
|
||||
/* If no resulting codecs remain, error out. If the MGW were able to transcode, we would just use unidentical
|
||||
* codecs on each conn of the MGW endpoint. */
|
||||
if (bearer_cap.speech_ver[0] == -1) {
|
||||
LOG_TRANS(trans, LOGL_ERROR, "%s: no codec match possible: %s\n",
|
||||
get_mncc_name(setup->msg_type), codec_filter_to_str(&trans->cc.codecs));
|
||||
|
||||
/* incompatible codecs */
|
||||
rc = mncc_release_ind(trans->net, trans, trans->callref,
|
||||
GSM48_CAUSE_LOC_PRN_S_LU,
|
||||
GSM48_CC_CAUSE_INCOMPAT_DEST /* TODO: correct cause code? */);
|
||||
trans_free(trans);
|
||||
msgb_free(msg);
|
||||
return rc;
|
||||
}
|
||||
gsm48_encode_bearer_cap(msg, 0, &bearer_cap);
|
||||
|
||||
/* facility */
|
||||
if (setup->fields & MNCC_F_FACILITY)
|
||||
gsm48_encode_facility(msg, 0, &setup->facility);
|
||||
|
|
|
@ -316,7 +316,7 @@ static void test_call_mt()
|
|||
VERBOSE_ASSERT(security_mode_ctrl_sent, == true, "%d");
|
||||
|
||||
btw("MS sends SecurityModeControl acceptance, VLR accepts, sends CC Setup");
|
||||
dtap_expect_tx("0305" /* CC: Setup */);
|
||||
dtap_expect_tx("0305" /* CC: Setup */ "04 07 60 04 05 0b 06 08 87" /* Bearer Cap */);
|
||||
ms_sends_security_mode_complete(1);
|
||||
|
||||
btw("MS confirms call, we create a RAN-side RTP and forward MNCC_CALL_CONF_IND");
|
||||
|
@ -419,7 +419,7 @@ static void test_call_mt2()
|
|||
VERBOSE_ASSERT(security_mode_ctrl_sent, == true, "%d");
|
||||
|
||||
btw("MS sends SecurityModeControl acceptance, VLR accepts, sends CC Setup");
|
||||
dtap_expect_tx("0305" /* CC: Setup */);
|
||||
dtap_expect_tx("0305" /* CC: Setup */ "04 07 60 04 05 0b 06 08 87" /* Bearer Cap */);
|
||||
ms_sends_security_mode_complete(1);
|
||||
|
||||
btw("MS confirms call, we create a RAN-side RTP and forward MNCC_CALL_CONF_IND");
|
||||
|
|
|
@ -768,10 +768,11 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RES
|
|||
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) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} result=:0{(no-codecs)}
|
||||
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: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} result=:0{AMR:octet-align=1#112,AMR-WB: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
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: RAN encode: DTAP on UTRAN-Iu
|
||||
- DTAP --UTRAN-Iu--> MS: GSM48_MT_CC_SETUP: 0305
|
||||
- DTAP --UTRAN-Iu--> MS: GSM48_MT_CC_SETUP: 030504076004050b060887
|
||||
- DTAP matches expected message
|
||||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
DREF VLR subscr IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100 - Paging: now used by 3 (attached,CC,active-conn)
|
||||
|
@ -812,9 +813,10 @@ DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RE
|
|||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codecs to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423 codecs=unset
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423 codecs=AMR:octet-align=1#112,AMR-WB:octet-align=1#113
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codecs to AMR:octet-align=1#112,AMR-WB:octet-align=1#113
|
||||
- When the CN side RTP address is known, send MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
|
@ -1244,10 +1246,11 @@ DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RES
|
|||
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) codecs: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} result=:0{(no-codecs)}
|
||||
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: RAN={AMR:octet-align=1#112,AMR-WB:octet-align=1#113} result=:0{AMR:octet-align=1#112,AMR-WB: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
|
||||
DMSC msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){MSC_A_ST_COMMUNICATING}: RAN encode: DTAP on UTRAN-Iu
|
||||
- DTAP --UTRAN-Iu--> MS: GSM48_MT_CC_SETUP: 0305
|
||||
- DTAP --UTRAN-Iu--> MS: GSM48_MT_CC_SETUP: 030504076004050b060887
|
||||
- DTAP matches expected message
|
||||
DMSC dummy_msc_i(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){0}: Received Event MSC_I_EV_FROM_A_FORWARD_ACCESS_SIGNALLING_REQUEST
|
||||
DREF VLR subscr IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100 - Paging: now used by 3 (attached,CC,active-conn)
|
||||
|
@ -1288,9 +1291,10 @@ DIUCS msc_a(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RE
|
|||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI){UNINITIALIZED}: setting codecs to AMR:octet-align=1#112
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23){UNINITIALIZED}: setting remote addr to 1.2.3.4:1234
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_RAN:no-CI:local-10-23-23-1-23:remote-1-2-3-4-1234){UNINITIALIZED}: Not committing: no MGW endpoint CI set up
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423 codecs=unset
|
||||
MGW <--CRCX to RTP_TO_CN-- MSC: callref=0x423 codecs=AMR:octet-align=1#112,AMR-WB:octet-align=1#113
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: Allocated
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){UNINITIALIZED}: is child of call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP)
|
||||
DCC rtp_stream(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP:trans-0:call-1059:RTP_TO_CN:no-CI){UNINITIALIZED}: setting codecs to AMR:octet-align=1#112,AMR-WB:octet-align=1#113
|
||||
- When the CN side RTP address is known, send MNCC_RTP_CREATE
|
||||
MGW --CRCX OK to RTP_TO_CN--> MSC
|
||||
DCC call_leg(IMSI-901700000010650:MSISDN-42342:TMSI-0x03020100:UTRAN-Iu:PAGING_RESP){ESTABLISHING}: Received Event CALL_LEG_EV_RTP_STREAM_ADDR_AVAILABLE
|
||||
|
|
Loading…
Reference in New Issue