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 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 | 460 |
461 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { | 461 bool QuicConnection::OnUnauthenticatedHeader(const QuicPacketHeader& header) { |
462 return true; | 462 return true; |
463 } | 463 } |
464 | 464 |
465 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) { | 465 void QuicConnection::OnDecryptedPacket(EncryptionLevel level) { |
466 last_decrypted_packet_level_ = level; | 466 last_decrypted_packet_level_ = level; |
467 last_packet_decrypted_ = true; | 467 last_packet_decrypted_ = true; |
468 // If this packet was foward-secure encrypted and the forward-secure encrypter | 468 // If this packet was foward-secure encrypted and the forward-secure encrypter |
469 // is not being used, start using it. | 469 // is not being used, start using it. |
470 if (FLAGS_enable_quic_delay_forward_security && | 470 if (encryption_level_ != ENCRYPTION_FORWARD_SECURE && |
471 encryption_level_ != ENCRYPTION_FORWARD_SECURE && | 471 has_forward_secure_encrypter_ && level == ENCRYPTION_FORWARD_SECURE) { |
472 has_forward_secure_encrypter_ && | |
473 level == ENCRYPTION_FORWARD_SECURE) { | |
474 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); | 472 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
475 } | 473 } |
476 } | 474 } |
477 | 475 |
478 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { | 476 bool QuicConnection::OnPacketHeader(const QuicPacketHeader& header) { |
479 if (debug_visitor_.get() != nullptr) { | 477 if (debug_visitor_.get() != nullptr) { |
480 debug_visitor_->OnPacketHeader(header); | 478 debug_visitor_->OnPacketHeader(header); |
481 } | 479 } |
482 | 480 |
483 if (!ProcessValidatedPacket()) { | 481 if (!ProcessValidatedPacket()) { |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 last_stop_waiting_frames_.clear(); | 933 last_stop_waiting_frames_.clear(); |
936 last_rst_frames_.clear(); | 934 last_rst_frames_.clear(); |
937 last_goaway_frames_.clear(); | 935 last_goaway_frames_.clear(); |
938 last_window_update_frames_.clear(); | 936 last_window_update_frames_.clear(); |
939 last_blocked_frames_.clear(); | 937 last_blocked_frames_.clear(); |
940 last_ping_frames_.clear(); | 938 last_ping_frames_.clear(); |
941 last_close_frames_.clear(); | 939 last_close_frames_.clear(); |
942 } | 940 } |
943 | 941 |
944 void QuicConnection::MaybeCloseIfTooManyOutstandingPackets() { | 942 void QuicConnection::MaybeCloseIfTooManyOutstandingPackets() { |
945 if (!FLAGS_quic_too_many_outstanding_packets) { | |
946 return; | |
947 } | |
948 // This occurs if we don't discard old packets we've sent fast enough. | 943 // This occurs if we don't discard old packets we've sent fast enough. |
949 // It's possible largest observed is less than least unacked. | 944 // It's possible largest observed is less than least unacked. |
950 if (sent_packet_manager_.largest_observed() > | 945 if (sent_packet_manager_.largest_observed() > |
951 (sent_packet_manager_.GetLeastUnacked() + kMaxTrackedPackets)) { | 946 (sent_packet_manager_.GetLeastUnacked() + kMaxTrackedPackets)) { |
952 SendConnectionCloseWithDetails( | 947 SendConnectionCloseWithDetails( |
953 QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, | 948 QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, |
954 StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets)); | 949 StringPrintf("More than %" PRIu64 " outstanding.", kMaxTrackedPackets)); |
955 } | 950 } |
956 // This occurs if there are received packet gaps and the peer does not raise | 951 // This occurs if there are received packet gaps and the peer does not raise |
957 // the least unacked fast enough. | 952 // the least unacked fast enough. |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1577 << " (" << ErrorToString(error_code) << ")"; | 1572 << " (" << ErrorToString(error_code) << ")"; |
1578 // We can't send an error as the socket is presumably borked. | 1573 // We can't send an error as the socket is presumably borked. |
1579 CloseConnection(QUIC_PACKET_WRITE_ERROR, false); | 1574 CloseConnection(QUIC_PACKET_WRITE_ERROR, false); |
1580 } | 1575 } |
1581 | 1576 |
1582 void QuicConnection::OnSerializedPacket( | 1577 void QuicConnection::OnSerializedPacket( |
1583 const SerializedPacket& serialized_packet) { | 1578 const SerializedPacket& serialized_packet) { |
1584 // If a forward-secure encrypter is available but is not being used and this | 1579 // If a forward-secure encrypter is available but is not being used and this |
1585 // packet's sequence number is after the first packet which requires | 1580 // packet's sequence number is after the first packet which requires |
1586 // forward security, start using the forward-secure encrypter. | 1581 // forward security, start using the forward-secure encrypter. |
1587 if (FLAGS_enable_quic_delay_forward_security && | 1582 if (encryption_level_ != ENCRYPTION_FORWARD_SECURE && |
1588 encryption_level_ != ENCRYPTION_FORWARD_SECURE && | |
1589 has_forward_secure_encrypter_ && | 1583 has_forward_secure_encrypter_ && |
1590 serialized_packet.sequence_number >= | 1584 serialized_packet.sequence_number >= |
1591 first_required_forward_secure_packet_) { | 1585 first_required_forward_secure_packet_) { |
1592 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); | 1586 SetDefaultEncryptionLevel(ENCRYPTION_FORWARD_SECURE); |
1593 } | 1587 } |
1594 if (serialized_packet.retransmittable_frames) { | 1588 if (serialized_packet.retransmittable_frames) { |
1595 serialized_packet.retransmittable_frames-> | 1589 serialized_packet.retransmittable_frames-> |
1596 set_encryption_level(encryption_level_); | 1590 set_encryption_level(encryption_level_); |
1597 } | 1591 } |
1598 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_)); | 1592 SendOrQueuePacket(QueuedPacket(serialized_packet, encryption_level_)); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime(); | 1683 QuicTime rto_timeout = sent_packet_manager_.GetRetransmissionTime(); |
1690 if (rto_timeout.IsInitialized()) { | 1684 if (rto_timeout.IsInitialized()) { |
1691 retransmission_alarm_->Set(rto_timeout); | 1685 retransmission_alarm_->Set(rto_timeout); |
1692 } | 1686 } |
1693 } | 1687 } |
1694 } | 1688 } |
1695 | 1689 |
1696 void QuicConnection::SetEncrypter(EncryptionLevel level, | 1690 void QuicConnection::SetEncrypter(EncryptionLevel level, |
1697 QuicEncrypter* encrypter) { | 1691 QuicEncrypter* encrypter) { |
1698 framer_.SetEncrypter(level, encrypter); | 1692 framer_.SetEncrypter(level, encrypter); |
1699 if (FLAGS_enable_quic_delay_forward_security && | 1693 if (level == ENCRYPTION_FORWARD_SECURE) { |
1700 level == ENCRYPTION_FORWARD_SECURE) { | |
1701 has_forward_secure_encrypter_ = true; | 1694 has_forward_secure_encrypter_ = true; |
1702 first_required_forward_secure_packet_ = | 1695 first_required_forward_secure_packet_ = |
1703 sequence_number_of_last_sent_packet_ + | 1696 sequence_number_of_last_sent_packet_ + |
1704 // 3 times the current congestion window (in slow start) should cover | 1697 // 3 times the current congestion window (in slow start) should cover |
1705 // about two full round trips worth of packets, which should be | 1698 // about two full round trips worth of packets, which should be |
1706 // sufficient. | 1699 // sufficient. |
1707 3 * sent_packet_manager_.EstimateMaxPacketsInFlight( | 1700 3 * sent_packet_manager_.EstimateMaxPacketsInFlight( |
1708 max_packet_length()); | 1701 max_packet_length()); |
1709 } | 1702 } |
1710 } | 1703 } |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2099 } | 2092 } |
2100 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { | 2093 for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) { |
2101 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { | 2094 if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) { |
2102 return true; | 2095 return true; |
2103 } | 2096 } |
2104 } | 2097 } |
2105 return false; | 2098 return false; |
2106 } | 2099 } |
2107 | 2100 |
2108 } // namespace net | 2101 } // namespace net |
OLD | NEW |