Chromium Code Reviews| Index: media/cast/net/rtcp/rtcp.cc |
| diff --git a/media/cast/net/rtcp/rtcp.cc b/media/cast/net/rtcp/rtcp.cc |
| index c78e63b6c956b86a43265a720a23be936e5459a7..dc94ed82c8ca3575ab320bc49430bff88a468d89 100644 |
| --- a/media/cast/net/rtcp/rtcp.cc |
| +++ b/media/cast/net/rtcp/rtcp.cc |
| @@ -18,6 +18,10 @@ namespace media { |
| namespace cast { |
| static const int32 kMaxRttMs = 10000; // 10 seconds. |
| +// Reject packets that are older than 0.5 seconds older than |
| +// the newest packet we've seen so far. This protect internal |
| +// states from crazy routers. (Based on RTRR) |
|
Alpha Left Google
2014/08/19 18:01:35
nit: RRTR.
hubbe
2014/08/19 18:27:16
Done.
|
| +static const int32 kOutOfOrderMaxAgeMs = 500; |
| namespace { |
| @@ -112,6 +116,21 @@ bool Rtcp::IncomingRtcpPacket(const uint8* data, size_t length) { |
| RtcpParser parser(local_ssrc_, remote_ssrc_); |
| base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); |
| if (parser.Parse(&reader)) { |
| + if (parser.has_receiver_reference_time_report()) { |
| + base::TimeTicks t = ConvertNtpToTimeTicks( |
| + parser.receiver_reference_time_report().ntp_seconds, |
| + parser.receiver_reference_time_report().ntp_fraction); |
| + if (t > largest_seen_timestamp_) { |
| + largest_seen_timestamp_ = t; |
| + } else if ((largest_seen_timestamp_ - t).InMilliseconds() > |
| + kOutOfOrderMaxAgeMs) { |
| + // Reject packet, it is too old. |
| + return true; |
|
Alpha Left Google
2014/08/19 18:01:35
Please add a VLOG here.
hubbe
2014/08/19 18:27:16
Done.
|
| + } |
| + |
| + OnReceivedNtp(parser.receiver_reference_time_report().ntp_seconds, |
| + parser.receiver_reference_time_report().ntp_fraction); |
| + } |
| if (parser.has_sender_report()) { |
| OnReceivedNtp(parser.sender_report().ntp_seconds, |
| parser.sender_report().ntp_fraction); |
| @@ -119,10 +138,6 @@ bool Rtcp::IncomingRtcpPacket(const uint8* data, size_t length) { |
| parser.sender_report().ntp_seconds, |
| parser.sender_report().ntp_fraction); |
| } |
| - if (parser.has_receiver_reference_time_report()) { |
| - OnReceivedNtp(parser.receiver_reference_time_report().ntp_seconds, |
| - parser.receiver_reference_time_report().ntp_fraction); |
| - } |
| if (parser.has_receiver_log()) { |
| if (DedupeReceiverLog(parser.mutable_receiver_log())) { |
| OnReceivedReceiverLog(parser.receiver_log()); |