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

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

Issue 536743002: Change IsRetransmittable to not check transmission type but instead let (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@change_CongestionMap_74321352
Patch Set: Created 6 years, 3 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
« no previous file with comments | « net/quic/quic_connection.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <string.h> 7 #include <string.h>
8 #include <sys/types.h> 8 #include <sys/types.h>
9 #include <algorithm> 9 #include <algorithm>
10 #include <iterator> 10 #include <iterator>
(...skipping 1286 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 if (!delay.IsZero()) { 1297 if (!delay.IsZero()) {
1298 send_alarm_->Update(now.Add(delay), QuicTime::Delta::FromMilliseconds(1)); 1298 send_alarm_->Update(now.Add(delay), QuicTime::Delta::FromMilliseconds(1));
1299 DVLOG(1) << "Delaying sending."; 1299 DVLOG(1) << "Delaying sending.";
1300 return false; 1300 return false;
1301 } 1301 }
1302 send_alarm_->Cancel(); 1302 send_alarm_->Cancel();
1303 return true; 1303 return true;
1304 } 1304 }
1305 1305
1306 bool QuicConnection::WritePacket(const QueuedPacket& packet) { 1306 bool QuicConnection::WritePacket(const QueuedPacket& packet) {
1307 QuicPacketSequenceNumber sequence_number = 1307 if (ShouldDiscardPacket(packet)) {
1308 packet.serialized_packet.sequence_number;
1309 if (ShouldDiscardPacket(packet.encryption_level,
1310 sequence_number,
1311 IsRetransmittable(packet))) {
1312 ++stats_.packets_discarded; 1308 ++stats_.packets_discarded;
1313 return true; 1309 return true;
1314 } 1310 }
1315 // Connection close packets are encypted and saved, so don't exit early. 1311 // Connection close packets are encypted and saved, so don't exit early.
1316 if (writer_->IsWriteBlocked() && !IsConnectionClose(packet)) { 1312 if (writer_->IsWriteBlocked() && !IsConnectionClose(packet)) {
1317 return false; 1313 return false;
1318 } 1314 }
1319 1315
1316 QuicPacketSequenceNumber sequence_number =
1317 packet.serialized_packet.sequence_number;
1320 // Some encryption algorithms require the packet sequence numbers not be 1318 // Some encryption algorithms require the packet sequence numbers not be
1321 // repeated. 1319 // repeated.
1322 DCHECK_LE(sequence_number_of_last_sent_packet_, sequence_number); 1320 DCHECK_LE(sequence_number_of_last_sent_packet_, sequence_number);
1323 sequence_number_of_last_sent_packet_ = sequence_number; 1321 sequence_number_of_last_sent_packet_ = sequence_number;
1324 1322
1325 QuicEncryptedPacket* encrypted = framer_.EncryptPacket( 1323 QuicEncryptedPacket* encrypted = framer_.EncryptPacket(
1326 packet.encryption_level, 1324 packet.encryption_level,
1327 sequence_number, 1325 sequence_number,
1328 *packet.serialized_packet.packet); 1326 *packet.serialized_packet.packet);
1329 if (encrypted == NULL) { 1327 if (encrypted == NULL) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
1429 } 1427 }
1430 1428
1431 if (result.status == WRITE_STATUS_ERROR) { 1429 if (result.status == WRITE_STATUS_ERROR) {
1432 OnWriteError(result.error_code); 1430 OnWriteError(result.error_code);
1433 return false; 1431 return false;
1434 } 1432 }
1435 1433
1436 return true; 1434 return true;
1437 } 1435 }
1438 1436
1439 bool QuicConnection::ShouldDiscardPacket( 1437 bool QuicConnection::ShouldDiscardPacket(const QueuedPacket& packet) {
1440 EncryptionLevel level,
1441 QuicPacketSequenceNumber sequence_number,
1442 HasRetransmittableData retransmittable) {
1443 if (!connected_) { 1438 if (!connected_) {
1444 DVLOG(1) << ENDPOINT 1439 DVLOG(1) << ENDPOINT
1445 << "Not sending packet as connection is disconnected."; 1440 << "Not sending packet as connection is disconnected.";
1446 return true; 1441 return true;
1447 } 1442 }
1448 1443
1444 QuicPacketSequenceNumber sequence_number =
1445 packet.serialized_packet.sequence_number;
1449 // If the packet has been discarded before sending, don't send it. 1446 // If the packet has been discarded before sending, don't send it.
1450 // This occurs if a packet gets serialized, queued, then discarded. 1447 // This occurs if a packet gets serialized, queued, then discarded.
1451 if (!sent_packet_manager_.IsUnacked(sequence_number)) { 1448 if (!sent_packet_manager_.IsUnacked(sequence_number)) {
1452 DVLOG(1) << ENDPOINT << "Dropping packet before sending: " 1449 DVLOG(1) << ENDPOINT << "Dropping packet before sending: "
1453 << sequence_number << " since it has already been discarded."; 1450 << sequence_number << " since it has already been discarded.";
1454 return true; 1451 return true;
1455 } 1452 }
1456 1453
1457 if (encryption_level_ == ENCRYPTION_FORWARD_SECURE && 1454 if (encryption_level_ == ENCRYPTION_FORWARD_SECURE &&
1458 level == ENCRYPTION_NONE) { 1455 packet.encryption_level == ENCRYPTION_NONE) {
1459 // Drop packets that are NULL encrypted since the peer won't accept them 1456 // Drop packets that are NULL encrypted since the peer won't accept them
1460 // anymore. 1457 // anymore.
1461 DVLOG(1) << ENDPOINT << "Dropping NULL encrypted packet: " 1458 DVLOG(1) << ENDPOINT << "Dropping NULL encrypted packet: "
1462 << sequence_number << " since the connection is forward secure."; 1459 << sequence_number << " since the connection is forward secure.";
1463 LOG_IF(DFATAL, 1460 LOG_IF(DFATAL,
1464 sent_packet_manager_.HasRetransmittableFrames(sequence_number)) 1461 sent_packet_manager_.HasRetransmittableFrames(sequence_number))
1465 << "Once forward secure, all NULL encrypted packets should be " 1462 << "Once forward secure, all NULL encrypted packets should be "
1466 << "neutered."; 1463 << "neutered.";
1467 return true; 1464 return true;
1468 } 1465 }
1469 1466
1470 if (retransmittable == HAS_RETRANSMITTABLE_DATA && 1467 if (packet.transmission_type != NOT_RETRANSMISSION &&
1471 !sent_packet_manager_.HasRetransmittableFrames(sequence_number)) { 1468 !sent_packet_manager_.HasRetransmittableFrames(sequence_number)) {
1472 DVLOG(1) << ENDPOINT << "Dropping unacked packet: " << sequence_number 1469 DVLOG(1) << ENDPOINT << "Dropping unacked packet: " << sequence_number
1473 << " A previous transmission was acked while write blocked."; 1470 << " A previous transmission was acked while write blocked.";
1474 return true; 1471 return true;
1475 } 1472 }
1476 1473
1477 return false; 1474 return false;
1478 } 1475 }
1479 1476
1480 void QuicConnection::OnWriteError(int error_code) { 1477 void QuicConnection::OnWriteError(int error_code) {
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 // If we changed the generator's batch state, restore original batch state. 1968 // If we changed the generator's batch state, restore original batch state.
1972 if (!already_in_batch_mode_) { 1969 if (!already_in_batch_mode_) {
1973 DVLOG(1) << "Leaving Batch Mode."; 1970 DVLOG(1) << "Leaving Batch Mode.";
1974 connection_->packet_generator_.FinishBatchOperations(); 1971 connection_->packet_generator_.FinishBatchOperations();
1975 } 1972 }
1976 DCHECK_EQ(already_in_batch_mode_, 1973 DCHECK_EQ(already_in_batch_mode_,
1977 connection_->packet_generator_.InBatchMode()); 1974 connection_->packet_generator_.InBatchMode());
1978 } 1975 }
1979 1976
1980 HasRetransmittableData QuicConnection::IsRetransmittable( 1977 HasRetransmittableData QuicConnection::IsRetransmittable(
1981 QueuedPacket packet) { 1978 const QueuedPacket& packet) {
1982 // TODO(cyr): Understand why the first check here is necessary. Without it, 1979 // Retransmitted packets retransmittable frames are owned by the unacked
1983 // DiscardRetransmit test fails. 1980 // packet map, but are not present in the serialized packet.
1984 if (packet.transmission_type != NOT_RETRANSMISSION || 1981 if (packet.transmission_type != NOT_RETRANSMISSION ||
1985 packet.serialized_packet.retransmittable_frames != NULL) { 1982 packet.serialized_packet.retransmittable_frames != NULL) {
1986 return HAS_RETRANSMITTABLE_DATA; 1983 return HAS_RETRANSMITTABLE_DATA;
1987 } else { 1984 } else {
1988 return NO_RETRANSMITTABLE_DATA; 1985 return NO_RETRANSMITTABLE_DATA;
1989 } 1986 }
1990 } 1987 }
1991 1988
1992 bool QuicConnection::IsConnectionClose( 1989 bool QuicConnection::IsConnectionClose(
1993 QueuedPacket packet) { 1990 QueuedPacket packet) {
1994 RetransmittableFrames* retransmittable_frames = 1991 RetransmittableFrames* retransmittable_frames =
1995 packet.serialized_packet.retransmittable_frames; 1992 packet.serialized_packet.retransmittable_frames;
1996 if (!retransmittable_frames) { 1993 if (!retransmittable_frames) {
1997 return false; 1994 return false;
1998 } 1995 }
1999 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { 1996 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) {
2000 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { 1997 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) {
2001 return true; 1998 return true;
2002 } 1999 }
2003 } 2000 }
2004 return false; 2001 return false;
2005 } 2002 }
2006 2003
2007 } // namespace net 2004 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698