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_te && rtp_session->recv_msg.header.pt == rtp_session->recv_te) ||
+ *bytes < rtp_header_len ||
+ switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) || switch_test_flag(rtp_session, SWITCH_RTP_FLAG_UDPTL)) {
return SWITCH_STATUS_SUCCESS;
}
-
+
if (rtp_session->jb && rtp_session->recv_msg.header.version == 2 && *bytes) {
if (rtp_session->recv_msg.header.m && rtp_session->recv_msg.header.pt != rtp_session->recv_te &&
goto end;
}
+ if (bytes < rtp_header_len) {
+ bytes = 0;
+ goto do_continue;
+ }
+
if (bytes) {
rtp_session->missed_count = 0;
we put up with as much as we can so we don't have to deal with being punished for
doing it right. Nice guys finish last!
*/
- if (bytes && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) &&
+ if (bytes > rtp_header_len && !switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PROXY_MEDIA) &&
!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_PASS_RFC2833) && rtp_session->recv_msg.header.pt == rtp_session->recv_te) {
switch_size_t len = bytes - rtp_header_len;
unsigned char *packet = (unsigned char *) rtp_session->recv_msg.body;
*datalen = 0;
return SWITCH_STATUS_BREAK;
} else {
- bytes -= rtp_header_len;
+ if (bytes > rtp_header_len) {
+ bytes -= rtp_header_len;
+ }
}
*datalen = bytes;
if (bytes < 0) {
frame->datalen = 0;
return bytes == -2 ? SWITCH_STATUS_TIMEOUT : SWITCH_STATUS_GENERR;
- } else if (bytes == 0) {
+ } else if (bytes < rtp_header_len) {
frame->datalen = 0;
return SWITCH_STATUS_BREAK;
} else {
*datalen = 0;
return SWITCH_STATUS_GENERR;
} else {
- bytes -= rtp_header_len;
+ if (bytes > rtp_header_len) {
+ bytes -= rtp_header_len;
+ }
}
*datalen = bytes;
send_msg->header.pt = rtp_session->te;
}
data = send_msg->body;
- datalen -= rtp_header_len;
+ if (datalen > rtp_header_len) {
+ datalen -= rtp_header_len;
+ }
} else {
uint8_t m = 0;