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

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

Issue 693943003: Update from https://crrev.com/302630 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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') | net/quic/quic_connection_test.cc » ('j') | 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 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 const PacketWriterFactory& writer_factory, 189 const PacketWriterFactory& writer_factory,
190 bool owns_writer, 190 bool owns_writer,
191 bool is_server, 191 bool is_server,
192 const QuicVersionVector& supported_versions) 192 const QuicVersionVector& supported_versions)
193 : framer_(supported_versions, helper->GetClock()->ApproximateNow(), 193 : framer_(supported_versions, helper->GetClock()->ApproximateNow(),
194 is_server), 194 is_server),
195 helper_(helper), 195 helper_(helper),
196 writer_(writer_factory.Create(this)), 196 writer_(writer_factory.Create(this)),
197 owns_writer_(owns_writer), 197 owns_writer_(owns_writer),
198 encryption_level_(ENCRYPTION_NONE), 198 encryption_level_(ENCRYPTION_NONE),
199 has_forward_secure_encrypter_(false),
200 first_required_forward_secure_packet_(0),
199 clock_(helper->GetClock()), 201 clock_(helper->GetClock()),
200 random_generator_(helper->GetRandomGenerator()), 202 random_generator_(helper->GetRandomGenerator()),
201 connection_id_(connection_id), 203 connection_id_(connection_id),
202 peer_address_(address), 204 peer_address_(address),
203 migrating_peer_port_(0), 205 migrating_peer_port_(0),
204 last_packet_decrypted_(false), 206 last_packet_decrypted_(false),
205 last_packet_revived_(false), 207 last_packet_revived_(false),
206 last_size_(0), 208 last_size_(0),
207 last_decrypted_packet_level_(ENCRYPTION_NONE), 209 last_decrypted_packet_level_(ENCRYPTION_NONE),
208 largest_seen_packet_with_ack_(0), 210 largest_seen_packet_with_ack_(0),
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 sent_packet_manager_.SetFromConfig(config); 280 sent_packet_manager_.SetFromConfig(config);
279 if (FLAGS_allow_truncated_connection_ids_for_quic && 281 if (FLAGS_allow_truncated_connection_ids_for_quic &&
280 config.HasReceivedBytesForConnectionId() && 282 config.HasReceivedBytesForConnectionId() &&
281 can_truncate_connection_ids_) { 283 can_truncate_connection_ids_) {
282 packet_generator_.SetConnectionIdLength( 284 packet_generator_.SetConnectionIdLength(
283 config.ReceivedBytesForConnectionId()); 285 config.ReceivedBytesForConnectionId());
284 } 286 }
285 max_undecryptable_packets_ = config.max_undecryptable_packets(); 287 max_undecryptable_packets_ = config.max_undecryptable_packets();
286 } 288 }
287 289
290 void QuicConnection::SetNumOpenStreams(size_t num_streams) {
291 sent_packet_manager_.SetNumOpenStreams(num_streams);
292 }
293
288 bool QuicConnection::SelectMutualVersion( 294 bool QuicConnection::SelectMutualVersion(
289 const QuicVersionVector& available_versions) { 295 const QuicVersionVector& available_versions) {
290 // Try to find the highest mutual version by iterating over supported 296 // Try to find the highest mutual version by iterating over supported
291 // versions, starting with the highest, and breaking out of the loop once we 297 // versions, starting with the highest, and breaking out of the loop once we
292 // find a matching version in the provided available_versions vector. 298 // find a matching version in the provided available_versions vector.
293 const QuicVersionVector& supported_versions = framer_.supported_versions(); 299 const QuicVersionVector& supported_versions = framer_.supported_versions();
294 for (size_t i = 0; i < supported_versions.size(); ++i) { 300 for (size_t i = 0; i < supported_versions.size(); ++i) {
295 const QuicVersion& version = supported_versions[i]; 301 const QuicVersion& version = supported_versions[i];
296 if (std::find(available_versions.begin(), available_versions.end(), 302 if (std::find(available_versions.begin(), available_versions.end(),
297 version) != available_versions.end()) { 303 version) != available_versions.end()) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 return true; 456 return true;
451 } 457 }
452 458
453 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { 459 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) {
454 return true; 460 return true;
455 } 461 }
456 462
457 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) { 463 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) {
458 last_decrypted_packet_level_ = level; 464 last_decrypted_packet_level_ = level;
459 last_packet_decrypted_ = true; 465 last_packet_decrypted_ = true;
466 // If this packet was foward-secure encrypted and the forward-secure encrypter
467 // is not being used, start using it.
468 if (FLAGS_enable_quic_delay_forward_security &&
469 encryption_level_ != ENCRYPTION_FORWARD_SECURE &&
470 has_forward_secure_encrypter_ &&
471 level == ENCRYPTION_FORWARD_SECURE) {
472 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
473 }
460 } 474 }
461 475
462 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { 476 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) {
463 if (debug_visitor_.get() != nullptr) { 477 if (debug_visitor_.get() != nullptr) {
464 debug_visitor_->OnPacketHeader(header); 478 debug_visitor_->OnPacketHeader(header);
465 } 479 }
466 480
467 if (!ProcessValidatedPacket()) { 481 if (!ProcessValidatedPacket()) {
468 return false; 482 return false;
469 } 483 }
(...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after
1546 1560
1547 void QuicConnection::OnWriteError(int error_code) { 1561 void QuicConnection::OnWriteError(int error_code) {
1548 DVLOG(1) << ENDPOINT << "Write failed with error: " << error_code 1562 DVLOG(1) << ENDPOINT << "Write failed with error: " << error_code
1549 << " (" << ErrorToString(error_code) << ")"; 1563 << " (" << ErrorToString(error_code) << ")";
1550 // We can't send an error as the socket is presumably borked. 1564 // We can't send an error as the socket is presumably borked.
1551 CloseConnection(QUIC_PACKET_WRITE_ERROR, false); 1565 CloseConnection(QUIC_PACKET_WRITE_ERROR, false);
1552 } 1566 }
1553 1567
1554 void QuicConnection::OnSerializedPacket( 1568 void QuicConnection::OnSerializedPacket(
1555 const SerializedPacket& serialized_packet) { 1569 const SerializedPacket& serialized_packet) {
1570 // If a forward-secure encrypter is available but is not being used and this
1571 // packet's sequence number is after the first packet which requires
1572 // forward security, start using the forward-secure encrypter.
1573 if (FLAGS_enable_quic_delay_forward_security &&
1574 encryption_level_ != ENCRYPTION_FORWARD_SECURE &&
1575 has_forward_secure_encrypter_ &&
1576 serialized_packet.sequence_number >=
1577 first_required_forward_secure_packet_) {
1578 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE);
1579 }
1556 if (serialized_packet.retransmittable_frames) { 1580 if (serialized_packet.retransmittable_frames) {
1557 serialized_packet.retransmittable_frames-> 1581 serialized_packet.retransmittable_frames->
1558 set_encryption_level(encryption_level_); 1582 set_encryption_level(encryption_level_);
1559 } 1583 }
1560 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_)); 1584 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_));
1561 } 1585 }
1562 1586
1563 void QuicConnection::OnCongestionWindowChange(QuicByteCount congestion_window) { 1587 void QuicConnection::OnCongestionWindowChange() {
1564 packet_generator_.OnCongestionWindowChange(congestion_window); 1588 packet_generator_.OnCongestionWindowChange(
1589 sent_packet_manager_.GetCongestionWindow());
1565 visitor_->OnCongestionWindowChange(clock_->ApproximateNow()); 1590 visitor_->OnCongestionWindowChange(clock_->ApproximateNow());
1566 } 1591 }
1567 1592
1568 void QuicConnection::OnHandshakeComplete() { 1593 void QuicConnection::OnHandshakeComplete() {
1569 sent_packet_manager_.SetHandshakeConfirmed(); 1594 sent_packet_manager_.SetHandshakeConfirmed();
1570 } 1595 }
1571 1596
1572 void QuicConnection::SendOrQueuePacket(QueuedPacket packet) { 1597 void QuicConnection::SendOrQueuePacket(QueuedPacket packet) {
1573 // The caller of this function is responsible for checking CanWrite(). 1598 // The caller of this function is responsible for checking CanWrite().
1574 if (packet.serialized_packet.packet == nullptr) { 1599 if (packet.serialized_packet.packet == nullptr) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime(); 1671 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime();
1647 if (rto_timeout.IsInitialized()) { 1672 if (rto_timeout.IsInitialized()) {
1648 retransmission_alarm_->Set(rto_timeout); 1673 retransmission_alarm_->Set(rto_timeout);
1649 } 1674 }
1650 } 1675 }
1651 } 1676 }
1652 1677
1653 void QuicConnection::SetEncrypter(EncryptionLevel level, 1678 void QuicConnection::SetEncrypter(EncryptionLevel level,
1654 QuicEncrypter* encrypter) { 1679 QuicEncrypter* encrypter) {
1655 framer_.SetEncrypter(level, encrypter); 1680 framer_.SetEncrypter(level, encrypter);
1681 if (FLAGS_enable_quic_delay_forward_security &&
1682 level == ENCRYPTION_FORWARD_SECURE) {
1683 has_forward_secure_encrypter_ = true;
1684 first_required_forward_secure_packet_ =
1685 sequence_number_of_last_sent_packet_ +
1686 // 3 times the current congestion window (in slow start) should cover
1687 // about two full round trips worth of packets, which should be
1688 // sufficient.
1689 3 * sent_packet_manager_.GetCongestionWindow() / max_packet_length();
1690 }
1656 } 1691 }
1657 1692
1658 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const { 1693 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const {
1659 return framer_.encrypter(level); 1694 return framer_.encrypter(level);
1660 } 1695 }
1661 1696
1662 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { 1697 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) {
1663 encryption_level_ = level; 1698 encryption_level_ = level;
1664 packet_generator_.set_encryption_level(level); 1699 packet_generator_.set_encryption_level(level);
1665 } 1700 }
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
2073 } 2108 }
2074 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { 2109 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) {
2075 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { 2110 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) {
2076 return true; 2111 return true;
2077 } 2112 }
2078 } 2113 }
2079 return false; 2114 return false;
2080 } 2115 }
2081 2116
2082 } // namespace net 2117 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_connection.h ('k') | net/quic/quic_connection_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698