From c278c9f63f74fbc93e1b6eef81d19803c36b0fe5 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Mon, 15 Aug 2016 17:10:42 -0500 Subject: [PATCH] FS-9375 #resolve [DTMF not working on OPUS after Call Transfer ] #comment Can we try to reproduce with this version on all 3 boxes (not just the patch but the whole rev as-is) --- src/mod/endpoints/mod_sofia/sofia.c | 25 +++++++++++++++---------- src/switch_core_media.c | 2 +- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index 8d561c3f80..502892a141 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -1590,20 +1590,25 @@ static void our_sofia_event_callback(nua_event_t event, if (channel && sip) { const char *r_sdp = NULL; - if (sofia_test_flag(tech_pvt, TFLAG_PASS_ACK) && sip->sip_payload && sip->sip_payload->pl_data) { - r_sdp = sip->sip_payload->pl_data; + if (sip->sip_payload && sip->sip_payload->pl_data) { + if (sofia_test_flag(tech_pvt, TFLAG_PASS_ACK)) { + r_sdp = sip->sip_payload->pl_data; - if (tech_pvt->mparams.last_sdp_str) { - tech_pvt->mparams.prev_sdp_str = tech_pvt->mparams.last_sdp_str; - } - tech_pvt->mparams.last_sdp_str = NULL; + if (tech_pvt->mparams.last_sdp_str) { + tech_pvt->mparams.prev_sdp_str = tech_pvt->mparams.last_sdp_str; + } + tech_pvt->mparams.last_sdp_str = NULL; - if (!zstr(tech_pvt->mparams.prev_sdp_str) && strcmp(tech_pvt->mparams.prev_sdp_str, sip->sip_payload->pl_data)) { + if (!zstr(tech_pvt->mparams.prev_sdp_str) && strcmp(tech_pvt->mparams.prev_sdp_str, sip->sip_payload->pl_data)) { + switch_channel_set_variable(channel, "sip_reinvite_sdp", sip->sip_payload->pl_data); + tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data); + } else { + tech_pvt->mparams.last_sdp_str = tech_pvt->mparams.prev_sdp_str; + } + } else { switch_channel_set_variable(channel, "sip_reinvite_sdp", sip->sip_payload->pl_data); tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data); - } else { - tech_pvt->mparams.last_sdp_str = tech_pvt->mparams.prev_sdp_str; } } @@ -6872,7 +6877,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, if (tech_pvt->mparams.last_sdp_response) { r_sdp = tech_pvt->mparams.last_sdp_response; } - } else if (ss_state == nua_callstate_received) { + } else if (ss_state == nua_callstate_received || ss_state == nua_callstate_ready) { if (tech_pvt->mparams.last_sdp_str) { r_sdp = tech_pvt->mparams.last_sdp_str; } diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 03678e6e33..4c552b7caf 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -4108,7 +4108,7 @@ SWITCH_DECLARE(uint8_t) switch_core_media_negotiate_sdp(switch_core_session_t *s smh->mparams->num_codecs = 0; smh->num_negotiated_codecs = 0; - switch_core_media_prepare_codecs(session, SWITCH_FALSE); + switch_core_media_prepare_codecs(session, SWITCH_TRUE); codec_array = smh->codecs; total_codecs = smh->mparams->num_codecs;