#define WARN_SRTP_ERRS 10
#define MAX_SRTP_ERRS 100
#define NTP_TIME_OFFSET 2208988800UL
+static const switch_payload_t INVALID_PT = 255;
#define DTMF_SANITY (rtp_session->one_second * 30)
*/
if (bytes > rtp_header_len && !rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] &&
- rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
+ rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
switch_size_t len = bytes - rtp_header_len;
unsigned char *packet = (unsigned char *) RTP_BODY(rtp_session);
int end;
switch_time_t now = switch_micro_time_now();
int rate = 0;
- if (rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] && rtp_session->send_msg.header.ts && rtp_session->cng_pt &&
+ if (rtp_session->flags[SWITCH_RTP_FLAG_AUTO_CNG] && rtp_session->send_msg.header.ts && rtp_session->cng_pt != INVALID_PT &&
rtp_session->timer.samplecount >= (rtp_session->last_write_samplecount + (rtp_session->samples_per_interval * 60))) {
uint8_t data[10] = { 0 };
switch_frame_flag_t frame_flags = SFF_NONE;
}
rtp_session->pool = pool;
- rtp_session->te = 0;
- rtp_session->recv_te = 0;
+ rtp_session->te = INVALID_PT;
+ rtp_session->recv_te = INVALID_PT;
+ rtp_session->cng_pt = INVALID_PT;
rtp_session->session = session;
switch_mutex_init(&rtp_session->flag_mutex, SWITCH_MUTEX_NESTED, pool);
int do_cng = 0;
/* Make sure to handle RFC2833 packets, even if we're flushing the packets */
- if (bytes > rtp_header_len && rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
+ if (bytes > rtp_header_len && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
handle_rfc2833(rtp_session, bytes, &do_cng);
#ifdef DEBUG_2833
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "*** RTP packet handled in flush loop %d ***\n", do_cng);
if (rtp_session->flags[SWITCH_RTP_FLAG_RTCP_MUX]) {
*flags &= ~SFF_RTCP;
if (!check_recv_payload(rtp_session) &&
- (!rtp_session->recv_te || rtp_session->recv_msg.header.pt != rtp_session->recv_te) &&
- (!rtp_session->cng_pt || rtp_session->recv_msg.header.pt != rtp_session->cng_pt) &&
+ rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
+ rtp_session->recv_msg.header.pt != rtp_session->cng_pt &&
rtp_session->rtcp_recv_msg_p->header.version == 2 &&
rtp_session->rtcp_recv_msg_p->header.type > 199 && rtp_session->rtcp_recv_msg_p->header.type < 208) { //rtcp muxed
*flags |= SFF_RTCP;
}
if (!rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] && !rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] && !rtp_session->flags[SWITCH_RTP_FLAG_VIDEO] &&
- *bytes && (!rtp_session->recv_te || rtp_session->recv_msg.header.pt != rtp_session->recv_te) &&
+ *bytes && rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
ts && !rtp_session->jb && !rtp_session->pause_jb && jb_valid(rtp_session) && ts == rtp_session->last_cng_ts) {
/* we already sent this frame..... */
*bytes = 0;
#ifdef ENABLE_SRTP
if (rtp_session->flags[SWITCH_RTP_FLAG_SECURE_RECV] && rtp_session->recv_msg.header.version == 2 &&
(check_recv_payload(rtp_session) ||
- (rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) ||
- (rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt))) {
+ rtp_session->recv_msg.header.pt == rtp_session->recv_te ||
+ rtp_session->recv_msg.header.pt == rtp_session->cng_pt)) {
//if (rtp_session->flags[SWITCH_RTP_FLAG_SECURE_RECV] && (!rtp_session->ice.ice_user || rtp_session->recv_msg.header.version == 2)) {
int sbytes = (int) *bytes;
err_status_t stat = 0;
rtp_session->stats.inbound.raw_bytes += *bytes;
- if (rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
+ if (rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
rtp_session->stats.inbound.dtmf_packet_count++;
- } else if (rtp_session->cng_pt && (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13)) {
+ } else if (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13) {
rtp_session->stats.inbound.cng_packet_count++;
} else {
rtp_session->stats.inbound.media_packet_count++;
rtp_session->stats.inbound.packet_count++;
}
- if ((rtp_session->recv_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) ||
+ if (rtp_session->recv_msg.header.pt == rtp_session->recv_te ||
(*bytes < rtp_header_len && *bytes > 0) ||
rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] || rtp_session->flags[SWITCH_RTP_FLAG_UDPTL]) {
return SWITCH_STATUS_SUCCESS;
!rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA] && !rtp_session->flags[SWITCH_RTP_FLAG_UDPTL] &&
rtp_session->recv_msg.header.pt != 13 &&
rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
- (!rtp_session->cng_pt || rtp_session->recv_msg.header.pt != rtp_session->cng_pt)) {
+ rtp_session->recv_msg.header.pt != rtp_session->cng_pt) {
int accept_packet = 1;
}
- if (((rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) || rtp_session->recv_msg.header.pt == 13)) {
+ if (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13) {
*flags |= SFF_NOT_AUDIO;
} else {
*flags &= ~SFF_NOT_AUDIO; /* If this flag was already set, make sure to remove it when we get real audio */
/* ignore packets not meant for us unless the auto-adjust window is open */
if (bytes) {
if (rtp_session->flags[SWITCH_RTP_FLAG_AUTOADJ]) {
- if (((rtp_session->cng_pt && rtp_session->recv_msg.header.pt == rtp_session->cng_pt) || rtp_session->recv_msg.header.pt == 13)) {
+ if (rtp_session->recv_msg.header.pt == rtp_session->cng_pt || rtp_session->recv_msg.header.pt == 13) {
goto recvfrom;
}
memset(data, 0, 2);
data[0] = 65;
- rtp_session->recv_msg.header.pt = (uint32_t) rtp_session->cng_pt ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
+ rtp_session->recv_msg.header.pt = rtp_session->cng_pt != INVALID_PT ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
*flags |= SFF_CNG;
*payload_type = (switch_payload_t) rtp_session->recv_msg.header.pt;
ret = 2 + rtp_header_len;
memset(data, 0, 2);
data[0] = 65;
- rtp_session->recv_msg.header.pt = (uint32_t) rtp_session->cng_pt ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
+ rtp_session->recv_msg.header.pt = rtp_session->cng_pt != INVALID_PT ? rtp_session->cng_pt : SWITCH_RTP_CNG_PAYLOAD;
*flags |= SFF_CNG;
*payload_type = (switch_payload_t) rtp_session->recv_msg.header.pt;
ret = 2 + rtp_header_len;
m = (uint8_t) send_msg->header.m;
if (flags && *flags & SFF_RFC2833) {
+ if (rtp_session->te == INVALID_PT) {
+ ret = 0;
+ goto end;
+ }
send_msg->header.pt = rtp_session->te;
}
data = send_msg->body;
}
} else {
if (*flags & SFF_RFC2833) {
+ if (rtp_session->te == INVALID_PT) {
+ ret = 0;
+ goto end;
+ }
payload = rtp_session->te;
}
rtp_session->stats.rtcp.sent_pkt_count++;
}
- if (rtp_session->cng_pt && send_msg->header.pt == rtp_session->cng_pt) {
+ if (send_msg->header.pt == rtp_session->cng_pt) {
rtp_session->stats.outbound.cng_packet_count++;
} else {
rtp_session->stats.outbound.media_packet_count++;
switch_assert(frame != NULL);
if (switch_test_flag(frame, SFF_CNG)) {
- if (rtp_session->cng_pt) {
+ if (rtp_session->cng_pt != INVALID_PT) {
payload = rtp_session->cng_pt;
} else {
return (int) frame->packetlen;
return 0;
}
+ if (payload == INVALID_PT) {
+ return 0;
+ }
+
WRITE_INC(rtp_session);
rtp_session->write_msg = rtp_session->send_msg;