diff --git a/src/mod/endpoints/mod_sofia/sofia.c b/src/mod/endpoints/mod_sofia/sofia.c index cd566c22bd..f9fc330c71 100644 --- a/src/mod/endpoints/mod_sofia/sofia.c +++ b/src/mod/endpoints/mod_sofia/sofia.c @@ -6478,7 +6478,7 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status, switch_channel_set_flag(tech_pvt->channel, CF_REINVITE); if (tech_pvt->mparams.num_codecs) { - match = sofia_media_negotiate_sdp(session, r_sdp, SDP_TYPE_REQUEST); + match = sofia_media_negotiate_sdp(session, r_sdp, SDP_TYPE_RESPONSE); } if (match) { if (switch_core_media_choose_port(tech_pvt->session, SWITCH_MEDIA_TYPE_AUDIO, 0) != SWITCH_STATUS_SUCCESS) { diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 25af9b4e29..873519eb11 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -497,6 +497,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_get_payload_code(switch_core recv_pt = pmap->recv_pt; fmtp = pmap->rm_fmtp; found++; + break; } } switch_mutex_unlock(smh->sdp_mutex); @@ -602,7 +603,12 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se if (sdp_type == SDP_TYPE_REQUEST || !exists) { + int b4 = pmap->pt; pmap->pt = (switch_payload_t) (local_pt ? local_pt : pt); + + if (b4 == 97 && pmap->pt == 109) { + abort(); + } } if (negotiated) { @@ -6354,7 +6360,7 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess pass_fmtp = switch_channel_get_variable(session->channel, "rtp_video_fmtp"); } } - + if (pass_fmtp) { switch_snprintf(buf + strlen(buf), SDPBUFLEN - strlen(buf), "a=fmtp:%d %s\n", v_engine->cur_payload_map->pt, pass_fmtp); } @@ -6433,6 +6439,10 @@ SWITCH_DECLARE(void) switch_core_media_gen_local_sdp(switch_core_session_t *sess fmtp = switch_event_get_header(map, imp->iananame); } + if (smh->fmtps[i]) { + fmtp = smh->fmtps[i]; + } + if (zstr(fmtp)) fmtp = imp->fmtp; if (zstr(fmtp)) fmtp = (char *) pass_fmtp; diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 490137e08b..6e6c594f05 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -5047,6 +5047,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ payload_map_t *pmap; switch_mutex_lock(rtp_session->flag_mutex); for (pmap = *rtp_session->pmaps; pmap && pmap->allocated; pmap = pmap->next) { + if (!pmap->negotiated) { continue; } @@ -5056,6 +5057,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ if (pmapP) { *pmapP = pmap; } + break; } } switch_mutex_unlock(rtp_session->flag_mutex); @@ -5064,6 +5066,7 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ if (!accept_packet && !(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PAYLOAD) && !(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PACKETS)) { /* drop frames of incorrect payload number and return CNG frame instead */ + return_cng_frame(); } }