diff --git a/src/libmsc/codec_mapping.c b/src/libmsc/codec_mapping.c index 579ea8dab..a1f31db7d 100644 --- a/src/libmsc/codec_mapping.c +++ b/src/libmsc/codec_mapping.c @@ -458,9 +458,8 @@ int sdp_audio_codec_add_to_bearer_cap(struct gsm_mncc_bearer_cap *bearer_cap, co int added = 0; codec_mapping_foreach(m) { int i; - if (strcmp(m->sdp.subtype_name, codec->subtype_name)) + if (sdp_audio_codec_cmp(&m->sdp, codec, true, false)) continue; - /* TODO also match rate and fmtp? */ for (i = 0; i < m->speech_ver_count; i++) added += bearer_cap_add_speech_ver(bearer_cap, m->speech_ver[i]); } @@ -613,7 +612,7 @@ int sdp_audio_codecs_to_gsm0808_channel_type(struct gsm0808_channel_type *ct, co bool dup; idx++; codec_mapping_foreach(m) { - if (strcmp(m->sdp.subtype_name, codec->subtype_name)) + if (sdp_audio_codec_cmp(codec, &m->sdp, true, false)) continue; switch (m->perm_speech) { @@ -675,7 +674,7 @@ enum mgcp_codecs sdp_audio_codec_to_mgcp_codec(const struct sdp_audio_codec *cod { const struct codec_mapping *m; codec_mapping_foreach(m) { - if (!sdp_audio_codec_cmp(&m->sdp, codec, false, false)) + if (!sdp_audio_codec_cmp(&m->sdp, codec, true, false)) return m->mgcp; } return NO_MGCP_CODEC; diff --git a/src/libmsc/gsm_04_08_cc.c b/src/libmsc/gsm_04_08_cc.c index 63b1699ab..033039296 100644 --- a/src/libmsc/gsm_04_08_cc.c +++ b/src/libmsc/gsm_04_08_cc.c @@ -2165,7 +2165,13 @@ int gsm48_tch_rtp_create(struct gsm_trans *trans) /* Populate the legacy MNCC codec elements: payload_type and payload_msg_type */ codec = &codecs->codec[0]; - m = codec_mapping_by_subtype_name(codec->subtype_name); + codec_mapping_foreach (m) { + if (!m->mncc_payload_msg_type) + continue; + if (sdp_audio_codec_cmp(&m->sdp, codec, true, false)) + continue; + break; + } mncc_payload_msg_type = m ? m->mncc_payload_msg_type : 0; rtp_cn_local = call_leg_local_ip(cl, RTP_TO_CN);