| Index: net/quic/core/quic_protocol.cc
|
| diff --git a/net/quic/core/quic_protocol.cc b/net/quic/core/quic_protocol.cc
|
| index 6b87945897085e047f28d136d11da8e21ca96c29..586e3160a18600880b41e4b2649b1adfc9603616 100644
|
| --- a/net/quic/core/quic_protocol.cc
|
| +++ b/net/quic/core/quic_protocol.cc
|
| @@ -171,7 +171,7 @@ bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) {
|
| tag_vector.end();
|
| }
|
|
|
| -QuicVersionVector QuicSupportedVersions() {
|
| +QuicVersionVector AllSupportedVersions() {
|
| QuicVersionVector supported_versions;
|
| for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) {
|
| supported_versions.push_back(kSupportedQuicVersions[i]);
|
| @@ -179,6 +179,10 @@ QuicVersionVector QuicSupportedVersions() {
|
| 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.
|
| @@ -188,7 +192,7 @@ QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) {
|
| filtered_versions.push_back(version);
|
| }
|
| } else if (version == QUIC_VERSION_36) {
|
| - if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36) {
|
| + if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) {
|
| filtered_versions.push_back(version);
|
| }
|
| } else {
|
| @@ -198,6 +202,17 @@ QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) {
|
| 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_30:
|
| @@ -727,7 +742,7 @@ QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code,
|
| QuicData::QuicData(const char* buffer, size_t length)
|
| : buffer_(buffer), length_(length), owns_buffer_(false) {}
|
|
|
| -QuicData::QuicData(char* buffer, size_t length, bool owns_buffer)
|
| +QuicData::QuicData(const char* buffer, size_t length, bool owns_buffer)
|
| : buffer_(buffer), length_(length), owns_buffer_(owns_buffer) {}
|
|
|
| QuicData::~QuicData() {
|
| @@ -764,7 +779,7 @@ QuicPacket::QuicPacket(char* buffer,
|
| QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, size_t length)
|
| : QuicData(buffer, length) {}
|
|
|
| -QuicEncryptedPacket::QuicEncryptedPacket(char* buffer,
|
| +QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer,
|
| size_t length,
|
| bool owns_buffer)
|
| : QuicData(buffer, length, owns_buffer) {}
|
| @@ -783,19 +798,33 @@ ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) {
|
| QuicReceivedPacket::QuicReceivedPacket(const char* buffer,
|
| size_t length,
|
| QuicTime receipt_time)
|
| - : QuicEncryptedPacket(buffer, length), receipt_time_(receipt_time) {}
|
| + : QuicEncryptedPacket(buffer, length),
|
| + receipt_time_(receipt_time),
|
| + ttl_(0) {}
|
|
|
| -QuicReceivedPacket::QuicReceivedPacket(char* buffer,
|
| +QuicReceivedPacket::QuicReceivedPacket(const char* buffer,
|
| size_t length,
|
| QuicTime receipt_time,
|
| bool owns_buffer)
|
| : QuicEncryptedPacket(buffer, length, owns_buffer),
|
| - receipt_time_(receipt_time) {}
|
| + receipt_time_(receipt_time),
|
| + ttl_(0) {}
|
| +
|
| +QuicReceivedPacket::QuicReceivedPacket(const char* buffer,
|
| + size_t length,
|
| + QuicTime receipt_time,
|
| + bool owns_buffer,
|
| + int ttl,
|
| + bool ttl_valid)
|
| + : QuicEncryptedPacket(buffer, length, owns_buffer),
|
| + receipt_time_(receipt_time),
|
| + ttl_(ttl_valid ? ttl : -1) {}
|
|
|
| QuicReceivedPacket* QuicReceivedPacket::Clone() const {
|
| char* buffer = new char[this->length()];
|
| memcpy(buffer, this->data(), this->length());
|
| - return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true);
|
| + return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true,
|
| + ttl(), ttl() >= 0);
|
| }
|
|
|
| ostream& operator<<(ostream& os, const QuicReceivedPacket& s) {
|
| @@ -819,18 +848,18 @@ StringPiece QuicPacket::Plaintext(QuicVersion version) const {
|
| length() - start_of_encrypted_data);
|
| }
|
|
|
| -QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) {
|
| - enable_quic_version_35_ = FLAGS_quic_enable_version_35;
|
| - enable_quic_version_36_ = FLAGS_quic_enable_version_36;
|
| - allowed_supported_versions_ = supported_versions;
|
| - filtered_supported_versions_ = FilterSupportedVersions(supported_versions);
|
| -}
|
| +QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions)
|
| + : enable_quic_version_35_(FLAGS_quic_enable_version_35),
|
| + enable_quic_version_36_(FLAGS_quic_enable_version_36_v2),
|
| + allowed_supported_versions_(supported_versions),
|
| + filtered_supported_versions_(
|
| + FilterSupportedVersions(supported_versions)) {}
|
|
|
| const QuicVersionVector& QuicVersionManager::GetSupportedVersions() {
|
| if (enable_quic_version_35_ != FLAGS_quic_enable_version_35 ||
|
| - enable_quic_version_36_ != FLAGS_quic_enable_version_36) {
|
| + enable_quic_version_36_ != FLAGS_quic_enable_version_36_v2) {
|
| enable_quic_version_35_ = FLAGS_quic_enable_version_35;
|
| - enable_quic_version_36_ = FLAGS_quic_enable_version_36;
|
| + enable_quic_version_36_ = FLAGS_quic_enable_version_36_v2;
|
| filtered_supported_versions_ =
|
| FilterSupportedVersions(allowed_supported_versions_);
|
| }
|
|
|