| OLD | NEW |
| 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 Loading... |
| 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 return true; | 452 return true; |
| 451 } | 453 } |
| 452 | 454 |
| 453 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { | 455 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { |
| 454 return true; | 456 return true; |
| 455 } | 457 } |
| 456 | 458 |
| 457 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) { | 459 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) { |
| 458 last_decrypted_packet_level_ = level; | 460 last_decrypted_packet_level_ = level; |
| 459 last_packet_decrypted_ = true; | 461 last_packet_decrypted_ = true; |
| 462 // If this packet was foward-secure encrypted and the forward-secure encrypter |
| 463 // is not being used, start using it. |
| 464 if (FLAGS_enable_quic_delay_forward_security && |
| 465 encryption_level_ != ENCRYPTION_FORWARD_SECURE && |
| 466 has_forward_secure_encrypter_ && |
| 467 level == ENCRYPTION_FORWARD_SECURE) { |
| 468 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
| 469 } |
| 460 } | 470 } |
| 461 | 471 |
| 462 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { | 472 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { |
| 463 if (debug_visitor_.get() != nullptr) { | 473 if (debug_visitor_.get() != nullptr) { |
| 464 debug_visitor_->OnPacketHeader(header); | 474 debug_visitor_->OnPacketHeader(header); |
| 465 } | 475 } |
| 466 | 476 |
| 467 if (!ProcessValidatedPacket()) { | 477 if (!ProcessValidatedPacket()) { |
| 468 return false; | 478 return false; |
| 469 } | 479 } |
| (...skipping 1076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1546 | 1556 |
| 1547 void QuicConnection::OnWriteError(int error_code) { | 1557 void QuicConnection::OnWriteError(int error_code) { |
| 1548 DVLOG(1) << ENDPOINT << "Write failed with error: " << error_code | 1558 DVLOG(1) << ENDPOINT << "Write failed with error: " << error_code |
| 1549 << " (" << ErrorToString(error_code) << ")"; | 1559 << " (" << ErrorToString(error_code) << ")"; |
| 1550 // We can't send an error as the socket is presumably borked. | 1560 // We can't send an error as the socket is presumably borked. |
| 1551 CloseConnection(QUIC_PACKET_WRITE_ERROR, false); | 1561 CloseConnection(QUIC_PACKET_WRITE_ERROR, false); |
| 1552 } | 1562 } |
| 1553 | 1563 |
| 1554 void QuicConnection::OnSerializedPacket( | 1564 void QuicConnection::OnSerializedPacket( |
| 1555 const SerializedPacket& serialized_packet) { | 1565 const SerializedPacket& serialized_packet) { |
| 1566 // If a forward-secure encrypter is available but is not being used and this |
| 1567 // packet's sequence number is after the first packet which requires |
| 1568 // forward security, start using the forward-secure encrypter. |
| 1569 if (FLAGS_enable_quic_delay_forward_security && |
| 1570 encryption_level_ != ENCRYPTION_FORWARD_SECURE && |
| 1571 has_forward_secure_encrypter_ && |
| 1572 serialized_packet.sequence_number >= |
| 1573 first_required_forward_secure_packet_) { |
| 1574 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
| 1575 } |
| 1556 if (serialized_packet.retransmittable_frames) { | 1576 if (serialized_packet.retransmittable_frames) { |
| 1557 serialized_packet.retransmittable_frames-> | 1577 serialized_packet.retransmittable_frames-> |
| 1558 set_encryption_level(encryption_level_); | 1578 set_encryption_level(encryption_level_); |
| 1559 } | 1579 } |
| 1560 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_)); | 1580 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_)); |
| 1561 } | 1581 } |
| 1562 | 1582 |
| 1563 void QuicConnection::OnCongestionWindowChange(QuicByteCount congestion_window) { | 1583 void QuicConnection::OnCongestionWindowChange(QuicByteCount congestion_window) { |
| 1564 packet_generator_.OnCongestionWindowChange(congestion_window); | 1584 packet_generator_.OnCongestionWindowChange(congestion_window); |
| 1565 visitor_->OnCongestionWindowChange(clock_->ApproximateNow()); | 1585 visitor_->OnCongestionWindowChange(clock_->ApproximateNow()); |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1646 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime(); | 1666 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime(); |
| 1647 if (rto_timeout.IsInitialized()) { | 1667 if (rto_timeout.IsInitialized()) { |
| 1648 retransmission_alarm_->Set(rto_timeout); | 1668 retransmission_alarm_->Set(rto_timeout); |
| 1649 } | 1669 } |
| 1650 } | 1670 } |
| 1651 } | 1671 } |
| 1652 | 1672 |
| 1653 void QuicConnection::SetEncrypter(EncryptionLevel level, | 1673 void QuicConnection::SetEncrypter(EncryptionLevel level, |
| 1654 QuicEncrypter* encrypter) { | 1674 QuicEncrypter* encrypter) { |
| 1655 framer_.SetEncrypter(level, encrypter); | 1675 framer_.SetEncrypter(level, encrypter); |
| 1676 if (FLAGS_enable_quic_delay_forward_security && |
| 1677 level == ENCRYPTION_FORWARD_SECURE) { |
| 1678 has_forward_secure_encrypter_ = true; |
| 1679 first_required_forward_secure_packet_ = |
| 1680 sequence_number_of_last_sent_packet_ + |
| 1681 // 3 times the current congestion window (in slow start) should cover |
| 1682 // about two full round trips worth of packets, which should be |
| 1683 // sufficient. |
| 1684 3 * sent_packet_manager_.GetCongestionWindow() / max_packet_length(); |
| 1685 } |
| 1656 } | 1686 } |
| 1657 | 1687 |
| 1658 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const { | 1688 const QuicEncrypter* QuicConnection::encrypter(EncryptionLevel level) const { |
| 1659 return framer_.encrypter(level); | 1689 return framer_.encrypter(level); |
| 1660 } | 1690 } |
| 1661 | 1691 |
| 1662 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { | 1692 void QuicConnection::SetDefaultEncryptionLevel(EncryptionLevel level) { |
| 1663 encryption_level_ = level; | 1693 encryption_level_ = level; |
| 1664 packet_generator_.set_encryption_level(level); | 1694 packet_generator_.set_encryption_level(level); |
| 1665 } | 1695 } |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2073 } | 2103 } |
| 2074 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { | 2104 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { |
| 2075 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { | 2105 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { |
| 2076 return true; | 2106 return true; |
| 2077 } | 2107 } |
| 2078 } | 2108 } |
| 2079 return false; | 2109 return false; |
| 2080 } | 2110 } |
| 2081 | 2111 |
| 2082 } // namespace net | 2112 } // namespace net |
| OLD | NEW |