From f43522877c2f0c6a426422797267c2b8fa6e56d5 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 18 Jul 2016 11:11:32 -0500 Subject: [PATCH] FS-9356 #resolve [DTMF not recognized when coming from a Cisco SIP trunk] --- src/include/switch_core_media.h | 1 + src/mod/endpoints/mod_sofia/sofia.c | 5 +++-- src/switch_core_media.c | 6 ++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/include/switch_core_media.h b/src/include/switch_core_media.h index 27ab840e38..988ebbea42 100644 --- a/src/include/switch_core_media.h +++ b/src/include/switch_core_media.h @@ -75,6 +75,7 @@ typedef enum { SCMF_RTP_AUTOFLUSH_DURING_BRIDGE, SCMF_MULTI_ANSWER_AUDIO, SCMF_MULTI_ANSWER_VIDEO, + SCMF_RECV_SDP, SCMF_MAX } switch_core_media_flag_t; diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 303330c0e0..bf7ae7b21f 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -7403,9 +7403,10 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, switch_channel_set_variable(channel, SWITCH_ENDPOINT_DISPOSITION_VARIABLE, "RECEIVED_NOSDP"); switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0); switch_core_media_prepare_codecs(session, 1); - switch_core_media_gen_local_sdp(session, SDP_TYPE_RESPONSE, NULL, 0, NULL, 0); - sofia_set_flag_locked(tech_pvt, TFLAG_3PCC); switch_channel_set_state(channel, CS_HIBERNATE); + switch_core_media_gen_local_sdp(session, SDP_TYPE_REQUEST, NULL, 0, NULL, 0); + sofia_set_flag_locked(tech_pvt, TFLAG_3PCC); + if (sofia_use_soa(tech_pvt)) { nua_respond(tech_pvt->nh, SIP_200_OK, SIPTAG_CONTACT_STR(tech_pvt->profile->url), diff --git a/src/switch_core_media.c b/src/switch_core_media.c index c73b73fa00..ab3918bc90 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -3766,7 +3766,9 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s a_engine->new_dtls = 1; a_engine->new_ice = 1; a_engine->reject_avp = 0; - + + switch_media_handle_set_media_flag(smh, SCMF_RECV_SDP); + switch_core_session_parse_crypto_prefs(session); clear_pmaps(a_engine); @@ -8258,7 +8260,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess video: - if (!switch_channel_test_flag(session->channel, CF_VIDEO_POSSIBLE) && sdp_type == SDP_TYPE_REQUEST) { + if (!switch_channel_test_flag(session->channel, CF_VIDEO_POSSIBLE) && switch_media_handle_test_media_flag(smh, SCMF_RECV_SDP)) { has_vid = 0; } else { int i;