switch_mutex_lock(smh->sdp_mutex);
+
for (pmap = engine->payload_map; pmap && pmap->allocated; pmap = pmap->next) {
if (sdp_type == SDP_TYPE_RESPONSE) {
exists = (type == pmap->type && !strcasecmp(name, pmap->iananame) && pmap->pt == pt && (!pmap->rate || rate == pmap->rate) && (!pmap->ptime || pmap->ptime == ptime));
break;
case SWITCH_MEDIA_TYPE_VIDEO:
- exists = (type == pmap->type && !strcasecmp(name, pmap->iananame));
+ if (sdp_type == SDP_TYPE_RESPONSE) {
+ exists = (pmap->sdp_type == SDP_TYPE_REQUEST && type == pmap->type && !strcasecmp(name, pmap->iananame));
+ } else {
+ exists = (type == pmap->type && !strcasecmp(name, pmap->iananame));
+ }
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "CHECK PMAP %s:%s %d %s:%s %d ... %d\n",
+ name, sdp_type == SDP_TYPE_REQUEST ? "REQ" : "RES", pt,
+ pmap->iananame, pmap->sdp_type == SDP_TYPE_REQUEST ? "REQ" : "RES", pmap->pt, exists);
+
+
break;
}
pmap->channels = 1;
}
- pmap->sdp_type = sdp_type;
-
if (ptime) {
pmap->ptime = ptime;
}
}
if (!exists) {
+ pmap->sdp_type = sdp_type;
+
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "ADD PMAP %s %s %d\n", sdp_type == SDP_TYPE_REQUEST ? "REQ" : "RES", name, pt);
+
if (pmap == engine->payload_map) {
engine->pmap_tail = pmap;
} else if (!engine->payload_map) {
SWITCH_MEDIA_TYPE_VIDEO,
matches[j].map->rm_encoding,
matches[j].imp->modname,
- matches[j].map->rm_fmtp,
+ consider_video_fmtp ? matches[j].map->rm_fmtp : NULL,
sdp_type,
matches[j].map->rm_pt,
matches[j].imp->samples_per_second,
{
int ok = 1;
- if (rtp_session->pmaps && *rtp_session->pmaps) {
+ if (!(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PAYLOAD) && rtp_session->pmaps && *rtp_session->pmaps) {
payload_map_t *pmap;
ok = 0;
continue;
}
- if (rtp_session->last_rtp_hdr.pt == pmap->recv_pt) {
+ if (rtp_session->last_rtp_hdr.pt == pmap->pt) {
ok = 1;
}
}
int accept_packet = 1;
- if (rtp_session->pmaps && *rtp_session->pmaps) {
+ if (!(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PAYLOAD) &&
+ !(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PACKETS) && rtp_session->pmaps && *rtp_session->pmaps) {
payload_map_t *pmap;
accept_packet = 0;
continue;
}
- if (rtp_session->last_rtp_hdr.pt == pmap->recv_pt) {
+ if (rtp_session->last_rtp_hdr.pt == pmap->pt) {
accept_packet = 1;
if (pmapP) {
*pmapP = pmap;
switch_mutex_unlock(rtp_session->flag_mutex);
}
- if (!accept_packet && !(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PAYLOAD) && !(rtp_session->rtp_bugs & RTP_BUG_ACCEPT_ANY_PACKETS)) {
+ if (!accept_packet) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(rtp_session->session), SWITCH_LOG_DEBUG1,
"Invalid Packet SEQ: %d TS: %d PT:%d ignored\n",
ntohs(rtp_session->recv_msg.header.seq), ntohl(rtp_session->last_rtp_hdr.ts), rtp_session->last_rtp_hdr.pt);