| Index: net/quic/core/quic_protocol.cc
|
| diff --git a/net/quic/core/quic_protocol.cc b/net/quic/core/quic_protocol.cc
|
| index 690e5a2c7c277fb7b6bafa5acd6d6c8f4e0a6189..b074cd1a36689449c7865f64187fe26d473c88b0 100644
|
| --- a/net/quic/core/quic_protocol.cc
|
| +++ b/net/quic/core/quic_protocol.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/strings/string_number_conversions.h"
|
| #include "net/quic/core/quic_flags.h"
|
| #include "net/quic/core/quic_utils.h"
|
| +#include "net/quic/core/quic_versions.h"
|
|
|
| using base::StringPiece;
|
| using std::map;
|
| @@ -17,8 +18,6 @@ using std::string;
|
|
|
| namespace net {
|
|
|
| -const char* const kFinalOffsetHeaderKey = ":final-offset";
|
| -
|
| size_t GetPacketHeaderSize(QuicVersion version,
|
| const QuicPacketHeader& header) {
|
| return GetPacketHeaderSize(version, header.public_header.connection_id_length,
|
| @@ -37,14 +36,12 @@ size_t GetPacketHeaderSize(QuicVersion version,
|
| return kPublicFlagsSize + connection_id_length +
|
| (include_version ? kQuicVersionSize : 0) +
|
| (include_path_id ? kQuicPathIdSize : 0) + packet_number_length +
|
| - (include_diversification_nonce ? kDiversificationNonceSize : 0) +
|
| - (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
|
| + (include_diversification_nonce ? kDiversificationNonceSize : 0);
|
| }
|
|
|
| size_t GetStartOfEncryptedData(QuicVersion version,
|
| const QuicPacketHeader& header) {
|
| - return GetPacketHeaderSize(version, header) -
|
| - (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
|
| + return GetPacketHeaderSize(version, header);
|
| }
|
|
|
| size_t GetStartOfEncryptedData(QuicVersion version,
|
| @@ -56,8 +53,7 @@ size_t GetStartOfEncryptedData(QuicVersion version,
|
| // Encryption starts before private flags.
|
| return GetPacketHeaderSize(version, connection_id_length, include_version,
|
| include_path_id, include_diversification_nonce,
|
| - packet_number_length) -
|
| - (version <= QUIC_VERSION_33 ? kPrivateFlagsSize : 0);
|
| + packet_number_length);
|
| }
|
|
|
| QuicPacketPublicHeader::QuicPacketPublicHeader()
|
| @@ -75,17 +71,10 @@ QuicPacketPublicHeader::QuicPacketPublicHeader(
|
| QuicPacketPublicHeader::~QuicPacketPublicHeader() {}
|
|
|
| QuicPacketHeader::QuicPacketHeader()
|
| - : packet_number(0),
|
| - path_id(kDefaultPathId),
|
| - entropy_flag(false),
|
| - entropy_hash(0) {}
|
| + : packet_number(0), path_id(kDefaultPathId) {}
|
|
|
| QuicPacketHeader::QuicPacketHeader(const QuicPacketPublicHeader& header)
|
| - : public_header(header),
|
| - packet_number(0),
|
| - path_id(kDefaultPathId),
|
| - entropy_flag(false),
|
| - entropy_hash(0) {}
|
| + : public_header(header), packet_number(0), path_id(kDefaultPathId) {}
|
|
|
| QuicPacketHeader::QuicPacketHeader(const QuicPacketHeader& other) = default;
|
|
|
| @@ -96,8 +85,6 @@ QuicPublicResetPacket::QuicPublicResetPacket(
|
| const QuicPacketPublicHeader& header)
|
| : public_header(header), nonce_proof(0), rejected_packet_number(0) {}
|
|
|
| -QuicBufferAllocator::~QuicBufferAllocator() = default;
|
| -
|
| void StreamBufferDeleter::operator()(char* buffer) const {
|
| if (allocator_ != nullptr && buffer != nullptr) {
|
| allocator_->Delete(buffer);
|
| @@ -159,130 +146,6 @@ QuicStreamFrame::QuicStreamFrame(QuicStreamId stream_id,
|
|
|
| QuicStreamFrame::~QuicStreamFrame() {}
|
|
|
| -uint32_t MakeQuicTag(char a, char b, char c, char d) {
|
| - return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 |
|
| - static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24;
|
| -}
|
| -
|
| -bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) {
|
| - return std::find(tag_vector.begin(), tag_vector.end(), tag) !=
|
| - tag_vector.end();
|
| -}
|
| -
|
| -QuicVersionVector AllSupportedVersions() {
|
| - QuicVersionVector supported_versions;
|
| - for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
|
| - supported_versions.push_back(kSupportedQuicVersions[i]);
|
| - }
|
| - return supported_versions;
|
| -}
|
| -
|
| -QuicVersionVector CurrentSupportedVersions() {
|
| - return FilterSupportedVersions(AllSupportedVersions());
|
| -}
|
| -
|
| -QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) {
|
| - QuicVersionVector filtered_versions(versions.size());
|
| - filtered_versions.clear(); // Guaranteed by spec not to change capacity.
|
| - for (QuicVersion version : versions) {
|
| - if (version < QUIC_VERSION_34) {
|
| - if (!FLAGS_quic_disable_pre_34) {
|
| - filtered_versions.push_back(version);
|
| - }
|
| - } else if (version == QUIC_VERSION_35) {
|
| - if (FLAGS_quic_enable_version_35) {
|
| - filtered_versions.push_back(version);
|
| - }
|
| - } else if (version == QUIC_VERSION_36) {
|
| - if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) {
|
| - filtered_versions.push_back(version);
|
| - }
|
| - } else {
|
| - filtered_versions.push_back(version);
|
| - }
|
| - }
|
| - return filtered_versions;
|
| -}
|
| -
|
| -QuicVersionVector VersionOfIndex(const QuicVersionVector& versions, int index) {
|
| - QuicVersionVector version;
|
| - int version_count = versions.size();
|
| - if (index >= 0 && index < version_count) {
|
| - version.push_back(versions[index]);
|
| - } else {
|
| - version.push_back(QUIC_VERSION_UNSUPPORTED);
|
| - }
|
| - return version;
|
| -}
|
| -
|
| -QuicTag QuicVersionToQuicTag(const QuicVersion version) {
|
| - switch (version) {
|
| - case QUIC_VERSION_32:
|
| - return MakeQuicTag('Q', '0', '3', '2');
|
| - case QUIC_VERSION_33:
|
| - return MakeQuicTag('Q', '0', '3', '3');
|
| - case QUIC_VERSION_34:
|
| - return MakeQuicTag('Q', '0', '3', '4');
|
| - case QUIC_VERSION_35:
|
| - return MakeQuicTag('Q', '0', '3', '5');
|
| - case QUIC_VERSION_36:
|
| - return MakeQuicTag('Q', '0', '3', '6');
|
| - default:
|
| - // This shold be an ERROR because we should never attempt to convert an
|
| - // invalid QuicVersion to be written to the wire.
|
| - LOG(ERROR) << "Unsupported QuicVersion: " << version;
|
| - return 0;
|
| - }
|
| -}
|
| -
|
| -QuicVersion QuicTagToQuicVersion(const QuicTag version_tag) {
|
| - for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
|
| - if (version_tag == QuicVersionToQuicTag(kSupportedQuicVersions[i])) {
|
| - return kSupportedQuicVersions[i];
|
| - }
|
| - }
|
| - // Reading from the client so this should not be considered an ERROR.
|
| - DVLOG(1) << "Unsupported QuicTag version: "
|
| - << QuicUtils::TagToString(version_tag);
|
| - return QUIC_VERSION_UNSUPPORTED;
|
| -}
|
| -
|
| -#define RETURN_STRING_LITERAL(x) \
|
| - case x: \
|
| - return #x
|
| -
|
| -string QuicVersionToString(const QuicVersion version) {
|
| - switch (version) {
|
| - RETURN_STRING_LITERAL(QUIC_VERSION_32);
|
| - RETURN_STRING_LITERAL(QUIC_VERSION_33);
|
| - RETURN_STRING_LITERAL(QUIC_VERSION_34);
|
| - RETURN_STRING_LITERAL(QUIC_VERSION_35);
|
| - RETURN_STRING_LITERAL(QUIC_VERSION_36);
|
| - default:
|
| - return "QUIC_VERSION_UNSUPPORTED";
|
| - }
|
| -}
|
| -
|
| -string QuicVersionVectorToString(const QuicVersionVector& versions) {
|
| - string result = "";
|
| - for (size_t i = 0; i < versions.size(); ++i) {
|
| - if (i != 0) {
|
| - result.append(",");
|
| - }
|
| - result.append(QuicVersionToString(versions[i]));
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -ostream& operator<<(ostream& os, const Perspective& s) {
|
| - if (s == Perspective::IS_SERVER) {
|
| - os << "IS_SERVER";
|
| - } else {
|
| - os << "IS_CLIENT";
|
| - }
|
| - return os;
|
| -}
|
| -
|
| ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
|
| os << "{ connection_id: " << header.public_header.connection_id
|
| << ", connection_id_length: " << header.public_header.connection_id_length
|
| @@ -302,9 +165,7 @@ ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
|
| << QuicUtils::HexEncode(StringPiece(header.public_header.nonce->data(),
|
| header.public_header.nonce->size()));
|
| }
|
| - os << ", entropy_flag: " << header.entropy_flag
|
| - << ", entropy hash: " << static_cast<int>(header.entropy_hash)
|
| - << ", path_id: " << static_cast<int>(header.path_id)
|
| + os << ", path_id: " << static_cast<int>(header.path_id)
|
| << ", packet_number: " << header.packet_number << " }\n";
|
| return os;
|
| }
|
| @@ -312,26 +173,19 @@ ostream& operator<<(ostream& os, const QuicPacketHeader& header) {
|
| bool IsAwaitingPacket(const QuicAckFrame& ack_frame,
|
| QuicPacketNumber packet_number,
|
| QuicPacketNumber peer_least_packet_awaiting_ack) {
|
| - if (ack_frame.missing) {
|
| - return packet_number > ack_frame.largest_observed ||
|
| - ack_frame.packets.Contains(packet_number);
|
| - }
|
| return packet_number >= peer_least_packet_awaiting_ack &&
|
| !ack_frame.packets.Contains(packet_number);
|
| }
|
|
|
| QuicStopWaitingFrame::QuicStopWaitingFrame()
|
| - : path_id(kDefaultPathId), entropy_hash(0), least_unacked(0) {}
|
| + : path_id(kDefaultPathId), least_unacked(0) {}
|
|
|
| QuicStopWaitingFrame::~QuicStopWaitingFrame() {}
|
|
|
| QuicAckFrame::QuicAckFrame()
|
| : largest_observed(0),
|
| ack_delay_time(QuicTime::Delta::Infinite()),
|
| - path_id(kDefaultPathId),
|
| - entropy_hash(0),
|
| - is_truncated(false),
|
| - missing(true) {}
|
| + path_id(kDefaultPathId) {}
|
|
|
| QuicAckFrame::QuicAckFrame(const QuicAckFrame& other) = default;
|
|
|
| @@ -388,8 +242,7 @@ QuicFrame::QuicFrame(QuicPathCloseFrame* frame)
|
| : type(PATH_CLOSE_FRAME), path_close_frame(frame) {}
|
|
|
| ostream& operator<<(ostream& os, const QuicStopWaitingFrame& sent_info) {
|
| - os << "{ entropy_hash: " << static_cast<int>(sent_info.entropy_hash)
|
| - << ", least_unacked: " << sent_info.least_unacked << " }\n";
|
| + os << "{ least_unacked: " << sent_info.least_unacked << " }\n";
|
| return os;
|
| }
|
|
|
| @@ -517,11 +370,9 @@ ostream& operator<<(ostream& os, const PacketNumberQueue& q) {
|
| }
|
|
|
| ostream& operator<<(ostream& os, const QuicAckFrame& ack_frame) {
|
| - os << "{ entropy_hash: " << static_cast<int>(ack_frame.entropy_hash)
|
| - << ", largest_observed: " << ack_frame.largest_observed
|
| + os << "{ largest_observed: " << ack_frame.largest_observed
|
| << ", ack_delay_time: " << ack_frame.ack_delay_time.ToMicroseconds()
|
| << ", packets: [ " << ack_frame.packets << " ]"
|
| - << ", is_truncated: " << ack_frame.is_truncated
|
| << ", received_packets: [ ";
|
| for (const std::pair<QuicPacketNumber, QuicTime>& p :
|
| ack_frame.received_packet_times) {
|
| @@ -759,9 +610,7 @@ StringPiece QuicPacket::Plaintext(QuicVersion version) const {
|
| }
|
|
|
| QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions)
|
| - : disable_pre_34_(FLAGS_quic_disable_pre_34),
|
| - enable_version_35_(FLAGS_quic_enable_version_35),
|
| - enable_version_36_(FLAGS_quic_enable_version_36_v2),
|
| + : enable_version_36_(FLAGS_quic_enable_version_36_v3),
|
| allowed_supported_versions_(supported_versions),
|
| filtered_supported_versions_(
|
| FilterSupportedVersions(supported_versions)) {}
|
| @@ -769,18 +618,22 @@ QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions)
|
| QuicVersionManager::~QuicVersionManager() {}
|
|
|
| const QuicVersionVector& QuicVersionManager::GetSupportedVersions() {
|
| - if (disable_pre_34_ != FLAGS_quic_disable_pre_34 ||
|
| - enable_version_35_ != FLAGS_quic_enable_version_35 ||
|
| - enable_version_36_ != FLAGS_quic_enable_version_36_v2) {
|
| - disable_pre_34_ = FLAGS_quic_disable_pre_34;
|
| - enable_version_35_ = FLAGS_quic_enable_version_35;
|
| - enable_version_36_ = FLAGS_quic_enable_version_36_v2;
|
| - filtered_supported_versions_ =
|
| - FilterSupportedVersions(allowed_supported_versions_);
|
| - }
|
| + MaybeRefilterSupportedVersions();
|
| return filtered_supported_versions_;
|
| }
|
|
|
| +void QuicVersionManager::MaybeRefilterSupportedVersions() {
|
| + if (enable_version_36_ != FLAGS_quic_enable_version_36_v3) {
|
| + enable_version_36_ = FLAGS_quic_enable_version_36_v3;
|
| + RefilterSupportedVersions();
|
| + }
|
| +}
|
| +
|
| +void QuicVersionManager::RefilterSupportedVersions() {
|
| + filtered_supported_versions_ =
|
| + FilterSupportedVersions(allowed_supported_versions_);
|
| +}
|
| +
|
| AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener,
|
| QuicPacketLength data_length)
|
| : ack_listener(listener), length(data_length) {
|
| @@ -797,7 +650,6 @@ SerializedPacket::SerializedPacket(QuicPathId path_id,
|
| QuicPacketNumberLength packet_number_length,
|
| const char* encrypted_buffer,
|
| QuicPacketLength encrypted_length,
|
| - QuicPacketEntropyHash entropy_hash,
|
| bool has_ack,
|
| bool has_stop_waiting)
|
| : encrypted_buffer(encrypted_buffer),
|
| @@ -808,7 +660,6 @@ SerializedPacket::SerializedPacket(QuicPathId path_id,
|
| packet_number(packet_number),
|
| packet_number_length(packet_number_length),
|
| encryption_level(ENCRYPTION_NONE),
|
| - entropy_hash(entropy_hash),
|
| has_ack(has_ack),
|
| has_stop_waiting(has_stop_waiting),
|
| transmission_type(NOT_RETRANSMISSION),
|
|
|