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;
}
}
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;
}
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;