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

Side by Side Diff: net/quic/quic_connection.cc

Issue 11820005: Largest received -> largest observed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "net/quic/quic_connection.h" 5 #include "net/quic/quic_connection.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 scheduler_(new QuicSendScheduler(clock_, kTCP)), 85 scheduler_(new QuicSendScheduler(clock_, kTCP)),
86 packets_resent_since_last_ack_(0), 86 packets_resent_since_last_ack_(0),
87 connected_(true), 87 connected_(true),
88 received_truncated_ack_(false) { 88 received_truncated_ack_(false) {
89 options()->max_num_packets = kMaxPacketsToSerializeAtOnce; 89 options()->max_num_packets = kMaxPacketsToSerializeAtOnce;
90 helper_->SetConnection(this); 90 helper_->SetConnection(this);
91 helper_->SetTimeoutAlarm(timeout_); 91 helper_->SetTimeoutAlarm(timeout_);
92 framer_.set_visitor(this); 92 framer_.set_visitor(this);
93 memset(&last_header_, 0, sizeof(last_header_)); 93 memset(&last_header_, 0, sizeof(last_header_));
94 outgoing_ack_.sent_info.least_unacked = 0; 94 outgoing_ack_.sent_info.least_unacked = 0;
95 outgoing_ack_.received_info.largest_received = 0; 95 outgoing_ack_.received_info.largest_observed = 0;
96 96
97 /* 97 /*
98 if (FLAGS_fake_packet_loss_percentage > 0) { 98 if (FLAGS_fake_packet_loss_percentage > 0) {
99 int32 seed = RandomBase::WeakSeed32(); 99 int32 seed = RandomBase::WeakSeed32();
100 LOG(INFO) << "Seeding packet loss with " << seed; 100 LOG(INFO) << "Seeding packet loss with " << seed;
101 random_.reset(new MTRandom(seed)); 101 random_.reset(new MTRandom(seed));
102 } 102 }
103 */ 103 */
104 } 104 }
105 105
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 helper_->SetSendAlarm(delay); 200 helper_->SetSendAlarm(delay);
201 } 201 }
202 } 202 }
203 203
204 void QuicConnection::OnCongestionFeedbackFrame( 204 void QuicConnection::OnCongestionFeedbackFrame(
205 const QuicCongestionFeedbackFrame& feedback) { 205 const QuicCongestionFeedbackFrame& feedback) {
206 scheduler_->OnIncomingQuicCongestionFeedbackFrame(feedback); 206 scheduler_->OnIncomingQuicCongestionFeedbackFrame(feedback);
207 } 207 }
208 208
209 bool QuicConnection::ValidateAckFrame(const QuicAckFrame& incoming_ack) { 209 bool QuicConnection::ValidateAckFrame(const QuicAckFrame& incoming_ack) {
210 if (incoming_ack.received_info.largest_received > 210 if (incoming_ack.received_info.largest_observed >
211 packet_creator_.sequence_number()) { 211 packet_creator_.sequence_number()) {
212 DLOG(ERROR) << "Client acked unsent packet:" 212 DLOG(ERROR) << "Client observed unsent packet:"
213 << incoming_ack.received_info.largest_received << " vs " 213 << incoming_ack.received_info.largest_observed << " vs "
214 << packet_creator_.sequence_number(); 214 << packet_creator_.sequence_number();
215 // We got an error for data we have not sent. Error out. 215 // We got an error for data we have not sent. Error out.
216 return false; 216 return false;
217 } 217 }
218 218
219 // We can't have too many unacked packets, or our ack frames go over 219 // We can't have too many unacked packets, or our ack frames go over
220 // kMaxPacketSize. 220 // kMaxPacketSize.
221 DCHECK_LE(incoming_ack.received_info.missing_packets.size(), 221 DCHECK_LE(incoming_ack.received_info.missing_packets.size(),
222 kMaxUnackedPackets); 222 kMaxUnackedPackets);
223 223
(...skipping 15 matching lines...) Expand all
239 } 239 }
240 240
241 return true; 241 return true;
242 } 242 }
243 243
244 void QuicConnection::UpdatePacketInformationReceivedByPeer( 244 void QuicConnection::UpdatePacketInformationReceivedByPeer(
245 const QuicAckFrame& incoming_ack) { 245 const QuicAckFrame& incoming_ack) {
246 QuicConnectionVisitorInterface::AckedPackets acked_packets; 246 QuicConnectionVisitorInterface::AckedPackets acked_packets;
247 247
248 // Initialize the lowest unacked packet to the lower of the next outgoing 248 // Initialize the lowest unacked packet to the lower of the next outgoing
249 // sequence number and the largest received packed in the incoming ack. 249 // sequence number and the largest observed packet in the incoming ack.
250 QuicPacketSequenceNumber lowest_unacked = min( 250 QuicPacketSequenceNumber lowest_unacked = min(
251 packet_creator_.sequence_number() + 1, 251 packet_creator_.sequence_number() + 1,
252 incoming_ack.received_info.largest_received + 1); 252 incoming_ack.received_info.largest_observed + 1);
253 253
254 int resent_packets = 0; 254 int resent_packets = 0;
255 255
256 // Go through the packets we have not received an ack for and see if this 256 // Go through the packets we have not received an ack for and see if this
257 // incoming_ack shows they've been seen by the peer. 257 // incoming_ack shows they've been seen by the peer.
258 UnackedPacketMap::iterator it = unacked_packets_.begin(); 258 UnackedPacketMap::iterator it = unacked_packets_.begin();
259 while (it != unacked_packets_.end()) { 259 while (it != unacked_packets_.end()) {
260 if (!incoming_ack.received_info.IsAwaitingPacket(it->first)) { 260 if (!incoming_ack.received_info.IsAwaitingPacket(it->first)) {
261 // Packet was acked, so remove it from our unacked packet list. 261 // Packet was acked, so remove it from our unacked packet list.
262 DVLOG(1) << "Got an ack for " << it->first; 262 DVLOG(1) << "Got an ack for " << it->first;
(...skipping 16 matching lines...) Expand all
279 // seen at the time of this ack being sent out. See if it's our new 279 // seen at the time of this ack being sent out. See if it's our new
280 // lowest unacked packet. 280 // lowest unacked packet.
281 DVLOG(1) << "still missing " << it->first; 281 DVLOG(1) << "still missing " << it->first;
282 if (it->first < lowest_unacked) { 282 if (it->first < lowest_unacked) {
283 lowest_unacked = it->first; 283 lowest_unacked = it->first;
284 } 284 }
285 285
286 // Determine if this packet is being explicitly nacked and, if so, if it 286 // Determine if this packet is being explicitly nacked and, if so, if it
287 // is worth resending. 287 // is worth resending.
288 QuicPacketSequenceNumber resend_number = 0; 288 QuicPacketSequenceNumber resend_number = 0;
289 if (it->first < incoming_ack.received_info.largest_received) { 289 if (it->first < incoming_ack.received_info.largest_observed) {
290 // The peer got packets after this sequence number. This is an explicit 290 // The peer got packets after this sequence number. This is an explicit
291 // nack. 291 // nack.
292 ++(it->second.number_nacks); 292 ++(it->second.number_nacks);
293 if (it->second.number_nacks >= kNumberOfNacksBeforeResend && 293 if (it->second.number_nacks >= kNumberOfNacksBeforeResend &&
294 resent_packets < kMaxResendPerAck) { 294 resent_packets < kMaxResendPerAck) {
295 resend_number = it->first; 295 resend_number = it->first;
296 } 296 }
297 } 297 }
298 298
299 ++it; 299 ++it;
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 << " delta:" << delta.ToMicroseconds(); 767 << " delta:" << delta.ToMicroseconds();
768 if (delta >= timeout_) { 768 if (delta >= timeout_) {
769 SendConnectionClose(QUIC_CONNECTION_TIMED_OUT); 769 SendConnectionClose(QUIC_CONNECTION_TIMED_OUT);
770 return true; 770 return true;
771 } 771 }
772 helper_->SetTimeoutAlarm(timeout_.Subtract(delta)); 772 helper_->SetTimeoutAlarm(timeout_.Subtract(delta));
773 return false; 773 return false;
774 } 774 }
775 775
776 } // namespace net 776 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/congestion_control/quic_send_scheduler_test.cc ('k') | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698