Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: media/cast/net/rtcp/rtcp.cc

Issue 480563004: Cast: Reject old RTCP packets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/cast/net/rtcp/rtcp.h" 5 #include "media/cast/net/rtcp/rtcp.h"
6 6
7 #include "media/cast/cast_config.h" 7 #include "media/cast/cast_config.h"
8 #include "media/cast/cast_defines.h" 8 #include "media/cast/cast_defines.h"
9 #include "media/cast/cast_environment.h" 9 #include "media/cast/cast_environment.h"
10 #include "media/cast/net/cast_transport_defines.h" 10 #include "media/cast/net/cast_transport_defines.h"
11 #include "media/cast/net/rtcp/rtcp_defines.h" 11 #include "media/cast/net/rtcp/rtcp_defines.h"
12 #include "media/cast/net/rtcp/rtcp_sender.h" 12 #include "media/cast/net/rtcp/rtcp_sender.h"
13 #include "media/cast/net/rtcp/rtcp_utility.h" 13 #include "media/cast/net/rtcp/rtcp_utility.h"
14 14
15 using base::TimeDelta; 15 using base::TimeDelta;
16 16
17 namespace media { 17 namespace media {
18 namespace cast { 18 namespace cast {
19 19
20 static const int32 kMaxRttMs = 10000; // 10 seconds. 20 static const int32 kMaxRttMs = 10000; // 10 seconds.
21 // Reject packets that are older than 0.5 seconds older than
22 // the newest packet we've seen so far. This protect internal
23 // 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.
24 static const int32 kOutOfOrderMaxAgeMs = 500;
21 25
22 namespace { 26 namespace {
23 27
24 // A receiver frame event is identified by frame RTP timestamp, event timestamp 28 // A receiver frame event is identified by frame RTP timestamp, event timestamp
25 // and event type. 29 // and event type.
26 // A receiver packet event is identified by all of the above plus packet id. 30 // A receiver packet event is identified by all of the above plus packet id.
27 // The key format is as follows: 31 // The key format is as follows:
28 // First uint64: 32 // First uint64:
29 // bits 0-11: zeroes (unused). 33 // bits 0-11: zeroes (unused).
30 // bits 12-15: event type ID. 34 // bits 12-15: event type ID.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 // Check if this packet is to us. 109 // Check if this packet is to us.
106 uint32 ssrc_of_sender = GetSsrcOfSender(data, length); 110 uint32 ssrc_of_sender = GetSsrcOfSender(data, length);
107 if (ssrc_of_sender != remote_ssrc_) { 111 if (ssrc_of_sender != remote_ssrc_) {
108 return false; 112 return false;
109 } 113 }
110 114
111 // Parse this packet. 115 // Parse this packet.
112 RtcpParser parser(local_ssrc_, remote_ssrc_); 116 RtcpParser parser(local_ssrc_, remote_ssrc_);
113 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length); 117 base::BigEndianReader reader(reinterpret_cast<const char*>(data), length);
114 if (parser.Parse(&reader)) { 118 if (parser.Parse(&reader)) {
119 if (parser.has_receiver_reference_time_report()) {
120 base::TimeTicks t = ConvertNtpToTimeTicks(
121 parser.receiver_reference_time_report().ntp_seconds,
122 parser.receiver_reference_time_report().ntp_fraction);
123 if (t > largest_seen_timestamp_) {
124 largest_seen_timestamp_ = t;
125 } else if ((largest_seen_timestamp_ - t).InMilliseconds() >
126 kOutOfOrderMaxAgeMs) {
127 // Reject packet, it is too old.
128 return true;
Alpha Left Google 2014/08/19 18:01:35 Please add a VLOG here.
hubbe 2014/08/19 18:27:16 Done.
129 }
130
131 OnReceivedNtp(parser.receiver_reference_time_report().ntp_seconds,
132 parser.receiver_reference_time_report().ntp_fraction);
133 }
115 if (parser.has_sender_report()) { 134 if (parser.has_sender_report()) {
116 OnReceivedNtp(parser.sender_report().ntp_seconds, 135 OnReceivedNtp(parser.sender_report().ntp_seconds,
117 parser.sender_report().ntp_fraction); 136 parser.sender_report().ntp_fraction);
118 OnReceivedLipSyncInfo(parser.sender_report().rtp_timestamp, 137 OnReceivedLipSyncInfo(parser.sender_report().rtp_timestamp,
119 parser.sender_report().ntp_seconds, 138 parser.sender_report().ntp_seconds,
120 parser.sender_report().ntp_fraction); 139 parser.sender_report().ntp_fraction);
121 } 140 }
122 if (parser.has_receiver_reference_time_report()) {
123 OnReceivedNtp(parser.receiver_reference_time_report().ntp_seconds,
124 parser.receiver_reference_time_report().ntp_fraction);
125 }
126 if (parser.has_receiver_log()) { 141 if (parser.has_receiver_log()) {
127 if (DedupeReceiverLog(parser.mutable_receiver_log())) { 142 if (DedupeReceiverLog(parser.mutable_receiver_log())) {
128 OnReceivedReceiverLog(parser.receiver_log()); 143 OnReceivedReceiverLog(parser.receiver_log());
129 } 144 }
130 } 145 }
131 if (parser.has_last_report()) { 146 if (parser.has_last_report()) {
132 OnReceivedDelaySinceLastReport(parser.last_report(), 147 OnReceivedDelaySinceLastReport(parser.last_report(),
133 parser.delay_since_last_report()); 148 parser.delay_since_last_report());
134 } 149 }
135 if (parser.has_cast_message()) { 150 if (parser.has_cast_message()) {
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 } 429 }
415 430
416 void Rtcp::OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log) { 431 void Rtcp::OnReceivedReceiverLog(const RtcpReceiverLogMessage& receiver_log) {
417 if (log_callback_.is_null()) 432 if (log_callback_.is_null())
418 return; 433 return;
419 log_callback_.Run(receiver_log); 434 log_callback_.Run(receiver_log);
420 } 435 }
421 436
422 } // namespace cast 437 } // namespace cast
423 } // namespace media 438 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698