| 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/core/quic_protocol.h" | 5 #include "net/quic/core/quic_protocol.h" |
| 6 | 6 |
| 7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "net/quic/core/quic_flags.h" | 9 #include "net/quic/core/quic_flags.h" |
| 10 #include "net/quic/core/quic_utils.h" | 10 #include "net/quic/core/quic_utils.h" |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 uint32_t MakeQuicTag(char a, char b, char c, char d) { | 164 uint32_t MakeQuicTag(char a, char b, char c, char d) { |
| 165 return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 | | 165 return static_cast<uint32_t>(a) | static_cast<uint32_t>(b) << 8 | |
| 166 static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24; | 166 static_cast<uint32_t>(c) << 16 | static_cast<uint32_t>(d) << 24; |
| 167 } | 167 } |
| 168 | 168 |
| 169 bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) { | 169 bool ContainsQuicTag(const QuicTagVector& tag_vector, QuicTag tag) { |
| 170 return std::find(tag_vector.begin(), tag_vector.end(), tag) != | 170 return std::find(tag_vector.begin(), tag_vector.end(), tag) != |
| 171 tag_vector.end(); | 171 tag_vector.end(); |
| 172 } | 172 } |
| 173 | 173 |
| 174 QuicVersionVector QuicSupportedVersions() { | 174 QuicVersionVector AllSupportedVersions() { |
| 175 QuicVersionVector supported_versions; | 175 QuicVersionVector supported_versions; |
| 176 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { | 176 for (size_t i = 0; i < arraysize(kSupportedQuicVersions); ++i) { |
| 177 supported_versions.push_back(kSupportedQuicVersions[i]); | 177 supported_versions.push_back(kSupportedQuicVersions[i]); |
| 178 } | 178 } |
| 179 return supported_versions; | 179 return supported_versions; |
| 180 } | 180 } |
| 181 | 181 |
| 182 QuicVersionVector CurrentSupportedVersions() { |
| 183 return FilterSupportedVersions(AllSupportedVersions()); |
| 184 } |
| 185 |
| 182 QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) { | 186 QuicVersionVector FilterSupportedVersions(QuicVersionVector versions) { |
| 183 QuicVersionVector filtered_versions(versions.size()); | 187 QuicVersionVector filtered_versions(versions.size()); |
| 184 filtered_versions.clear(); // Guaranteed by spec not to change capacity. | 188 filtered_versions.clear(); // Guaranteed by spec not to change capacity. |
| 185 for (QuicVersion version : versions) { | 189 for (QuicVersion version : versions) { |
| 186 if (version == QUIC_VERSION_35) { | 190 if (version == QUIC_VERSION_35) { |
| 187 if (FLAGS_quic_enable_version_35) { | 191 if (FLAGS_quic_enable_version_35) { |
| 188 filtered_versions.push_back(version); | 192 filtered_versions.push_back(version); |
| 189 } | 193 } |
| 190 } else if (version == QUIC_VERSION_36) { | 194 } else if (version == QUIC_VERSION_36) { |
| 191 if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36) { | 195 if (FLAGS_quic_enable_version_35 && FLAGS_quic_enable_version_36_v2) { |
| 192 filtered_versions.push_back(version); | 196 filtered_versions.push_back(version); |
| 193 } | 197 } |
| 194 } else { | 198 } else { |
| 195 filtered_versions.push_back(version); | 199 filtered_versions.push_back(version); |
| 196 } | 200 } |
| 197 } | 201 } |
| 198 return filtered_versions; | 202 return filtered_versions; |
| 199 } | 203 } |
| 200 | 204 |
| 205 QuicVersionVector VersionOfIndex(const QuicVersionVector& versions, int index) { |
| 206 QuicVersionVector version; |
| 207 int version_count = versions.size(); |
| 208 if (index >= 0 && index < version_count) { |
| 209 version.push_back(versions[index]); |
| 210 } else { |
| 211 version.push_back(QUIC_VERSION_UNSUPPORTED); |
| 212 } |
| 213 return version; |
| 214 } |
| 215 |
| 201 QuicTag QuicVersionToQuicTag(const QuicVersion version) { | 216 QuicTag QuicVersionToQuicTag(const QuicVersion version) { |
| 202 switch (version) { | 217 switch (version) { |
| 203 case QUIC_VERSION_30: | 218 case QUIC_VERSION_30: |
| 204 return MakeQuicTag('Q', '0', '3', '0'); | 219 return MakeQuicTag('Q', '0', '3', '0'); |
| 205 case QUIC_VERSION_31: | 220 case QUIC_VERSION_31: |
| 206 return MakeQuicTag('Q', '0', '3', '1'); | 221 return MakeQuicTag('Q', '0', '3', '1'); |
| 207 case QUIC_VERSION_32: | 222 case QUIC_VERSION_32: |
| 208 return MakeQuicTag('Q', '0', '3', '2'); | 223 return MakeQuicTag('Q', '0', '3', '2'); |
| 209 case QUIC_VERSION_33: | 224 case QUIC_VERSION_33: |
| 210 return MakeQuicTag('Q', '0', '3', '3'); | 225 return MakeQuicTag('Q', '0', '3', '3'); |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, | 735 QuicGoAwayFrame::QuicGoAwayFrame(QuicErrorCode error_code, |
| 721 QuicStreamId last_good_stream_id, | 736 QuicStreamId last_good_stream_id, |
| 722 const string& reason) | 737 const string& reason) |
| 723 : error_code(error_code), | 738 : error_code(error_code), |
| 724 last_good_stream_id(last_good_stream_id), | 739 last_good_stream_id(last_good_stream_id), |
| 725 reason_phrase(reason) {} | 740 reason_phrase(reason) {} |
| 726 | 741 |
| 727 QuicData::QuicData(const char* buffer, size_t length) | 742 QuicData::QuicData(const char* buffer, size_t length) |
| 728 : buffer_(buffer), length_(length), owns_buffer_(false) {} | 743 : buffer_(buffer), length_(length), owns_buffer_(false) {} |
| 729 | 744 |
| 730 QuicData::QuicData(char* buffer, size_t length, bool owns_buffer) | 745 QuicData::QuicData(const char* buffer, size_t length, bool owns_buffer) |
| 731 : buffer_(buffer), length_(length), owns_buffer_(owns_buffer) {} | 746 : buffer_(buffer), length_(length), owns_buffer_(owns_buffer) {} |
| 732 | 747 |
| 733 QuicData::~QuicData() { | 748 QuicData::~QuicData() { |
| 734 if (owns_buffer_) { | 749 if (owns_buffer_) { |
| 735 delete[] const_cast<char*>(buffer_); | 750 delete[] const_cast<char*>(buffer_); |
| 736 } | 751 } |
| 737 } | 752 } |
| 738 | 753 |
| 739 QuicWindowUpdateFrame::QuicWindowUpdateFrame(QuicStreamId stream_id, | 754 QuicWindowUpdateFrame::QuicWindowUpdateFrame(QuicStreamId stream_id, |
| 740 QuicStreamOffset byte_offset) | 755 QuicStreamOffset byte_offset) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 757 buffer_(buffer), | 772 buffer_(buffer), |
| 758 connection_id_length_(connection_id_length), | 773 connection_id_length_(connection_id_length), |
| 759 includes_version_(includes_version), | 774 includes_version_(includes_version), |
| 760 includes_path_id_(includes_path_id), | 775 includes_path_id_(includes_path_id), |
| 761 includes_diversification_nonce_(includes_diversification_nonce), | 776 includes_diversification_nonce_(includes_diversification_nonce), |
| 762 packet_number_length_(packet_number_length) {} | 777 packet_number_length_(packet_number_length) {} |
| 763 | 778 |
| 764 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, size_t length) | 779 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, size_t length) |
| 765 : QuicData(buffer, length) {} | 780 : QuicData(buffer, length) {} |
| 766 | 781 |
| 767 QuicEncryptedPacket::QuicEncryptedPacket(char* buffer, | 782 QuicEncryptedPacket::QuicEncryptedPacket(const char* buffer, |
| 768 size_t length, | 783 size_t length, |
| 769 bool owns_buffer) | 784 bool owns_buffer) |
| 770 : QuicData(buffer, length, owns_buffer) {} | 785 : QuicData(buffer, length, owns_buffer) {} |
| 771 | 786 |
| 772 QuicEncryptedPacket* QuicEncryptedPacket::Clone() const { | 787 QuicEncryptedPacket* QuicEncryptedPacket::Clone() const { |
| 773 char* buffer = new char[this->length()]; | 788 char* buffer = new char[this->length()]; |
| 774 memcpy(buffer, this->data(), this->length()); | 789 memcpy(buffer, this->data(), this->length()); |
| 775 return new QuicEncryptedPacket(buffer, this->length(), true); | 790 return new QuicEncryptedPacket(buffer, this->length(), true); |
| 776 } | 791 } |
| 777 | 792 |
| 778 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { | 793 ostream& operator<<(ostream& os, const QuicEncryptedPacket& s) { |
| 779 os << s.length() << "-byte data"; | 794 os << s.length() << "-byte data"; |
| 780 return os; | 795 return os; |
| 781 } | 796 } |
| 782 | 797 |
| 783 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, | 798 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
| 784 size_t length, | 799 size_t length, |
| 785 QuicTime receipt_time) | 800 QuicTime receipt_time) |
| 786 : QuicEncryptedPacket(buffer, length), receipt_time_(receipt_time) {} | 801 : QuicEncryptedPacket(buffer, length), |
| 802 receipt_time_(receipt_time), |
| 803 ttl_(0) {} |
| 787 | 804 |
| 788 QuicReceivedPacket::QuicReceivedPacket(char* buffer, | 805 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
| 789 size_t length, | 806 size_t length, |
| 790 QuicTime receipt_time, | 807 QuicTime receipt_time, |
| 791 bool owns_buffer) | 808 bool owns_buffer) |
| 792 : QuicEncryptedPacket(buffer, length, owns_buffer), | 809 : QuicEncryptedPacket(buffer, length, owns_buffer), |
| 793 receipt_time_(receipt_time) {} | 810 receipt_time_(receipt_time), |
| 811 ttl_(0) {} |
| 812 |
| 813 QuicReceivedPacket::QuicReceivedPacket(const char* buffer, |
| 814 size_t length, |
| 815 QuicTime receipt_time, |
| 816 bool owns_buffer, |
| 817 int ttl, |
| 818 bool ttl_valid) |
| 819 : QuicEncryptedPacket(buffer, length, owns_buffer), |
| 820 receipt_time_(receipt_time), |
| 821 ttl_(ttl_valid ? ttl : -1) {} |
| 794 | 822 |
| 795 QuicReceivedPacket* QuicReceivedPacket::Clone() const { | 823 QuicReceivedPacket* QuicReceivedPacket::Clone() const { |
| 796 char* buffer = new char[this->length()]; | 824 char* buffer = new char[this->length()]; |
| 797 memcpy(buffer, this->data(), this->length()); | 825 memcpy(buffer, this->data(), this->length()); |
| 798 return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true); | 826 return new QuicReceivedPacket(buffer, this->length(), receipt_time(), true, |
| 827 ttl(), ttl() >= 0); |
| 799 } | 828 } |
| 800 | 829 |
| 801 ostream& operator<<(ostream& os, const QuicReceivedPacket& s) { | 830 ostream& operator<<(ostream& os, const QuicReceivedPacket& s) { |
| 802 os << s.length() << "-byte data"; | 831 os << s.length() << "-byte data"; |
| 803 return os; | 832 return os; |
| 804 } | 833 } |
| 805 | 834 |
| 806 StringPiece QuicPacket::AssociatedData(QuicVersion version) const { | 835 StringPiece QuicPacket::AssociatedData(QuicVersion version) const { |
| 807 return StringPiece( | 836 return StringPiece( |
| 808 data(), GetStartOfEncryptedData(version, connection_id_length_, | 837 data(), GetStartOfEncryptedData(version, connection_id_length_, |
| 809 includes_version_, includes_path_id_, | 838 includes_version_, includes_path_id_, |
| 810 includes_diversification_nonce_, | 839 includes_diversification_nonce_, |
| 811 packet_number_length_)); | 840 packet_number_length_)); |
| 812 } | 841 } |
| 813 | 842 |
| 814 StringPiece QuicPacket::Plaintext(QuicVersion version) const { | 843 StringPiece QuicPacket::Plaintext(QuicVersion version) const { |
| 815 const size_t start_of_encrypted_data = GetStartOfEncryptedData( | 844 const size_t start_of_encrypted_data = GetStartOfEncryptedData( |
| 816 version, connection_id_length_, includes_version_, includes_path_id_, | 845 version, connection_id_length_, includes_version_, includes_path_id_, |
| 817 includes_diversification_nonce_, packet_number_length_); | 846 includes_diversification_nonce_, packet_number_length_); |
| 818 return StringPiece(data() + start_of_encrypted_data, | 847 return StringPiece(data() + start_of_encrypted_data, |
| 819 length() - start_of_encrypted_data); | 848 length() - start_of_encrypted_data); |
| 820 } | 849 } |
| 821 | 850 |
| 822 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) { | 851 QuicVersionManager::QuicVersionManager(QuicVersionVector supported_versions) |
| 823 enable_quic_version_35_ = FLAGS_quic_enable_version_35; | 852 : enable_quic_version_35_(FLAGS_quic_enable_version_35), |
| 824 enable_quic_version_36_ = FLAGS_quic_enable_version_36; | 853 enable_quic_version_36_(FLAGS_quic_enable_version_36_v2), |
| 825 allowed_supported_versions_ = supported_versions; | 854 allowed_supported_versions_(supported_versions), |
| 826 filtered_supported_versions_ = FilterSupportedVersions(supported_versions); | 855 filtered_supported_versions_( |
| 827 } | 856 FilterSupportedVersions(supported_versions)) {} |
| 828 | 857 |
| 829 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { | 858 const QuicVersionVector& QuicVersionManager::GetSupportedVersions() { |
| 830 if (enable_quic_version_35_ != FLAGS_quic_enable_version_35 || | 859 if (enable_quic_version_35_ != FLAGS_quic_enable_version_35 || |
| 831 enable_quic_version_36_ != FLAGS_quic_enable_version_36) { | 860 enable_quic_version_36_ != FLAGS_quic_enable_version_36_v2) { |
| 832 enable_quic_version_35_ = FLAGS_quic_enable_version_35; | 861 enable_quic_version_35_ = FLAGS_quic_enable_version_35; |
| 833 enable_quic_version_36_ = FLAGS_quic_enable_version_36; | 862 enable_quic_version_36_ = FLAGS_quic_enable_version_36_v2; |
| 834 filtered_supported_versions_ = | 863 filtered_supported_versions_ = |
| 835 FilterSupportedVersions(allowed_supported_versions_); | 864 FilterSupportedVersions(allowed_supported_versions_); |
| 836 } | 865 } |
| 837 return filtered_supported_versions_; | 866 return filtered_supported_versions_; |
| 838 } | 867 } |
| 839 | 868 |
| 840 QuicVersionManager::~QuicVersionManager() {} | 869 QuicVersionManager::~QuicVersionManager() {} |
| 841 | 870 |
| 842 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, | 871 AckListenerWrapper::AckListenerWrapper(QuicAckListenerInterface* listener, |
| 843 QuicPacketLength data_length) | 872 QuicPacketLength data_length) |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 905 is_unackable(false), | 934 is_unackable(false), |
| 906 has_crypto_handshake(has_crypto_handshake), | 935 has_crypto_handshake(has_crypto_handshake), |
| 907 num_padding_bytes(num_padding_bytes), | 936 num_padding_bytes(num_padding_bytes), |
| 908 retransmission(0) {} | 937 retransmission(0) {} |
| 909 | 938 |
| 910 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; | 939 TransmissionInfo::TransmissionInfo(const TransmissionInfo& other) = default; |
| 911 | 940 |
| 912 TransmissionInfo::~TransmissionInfo() {} | 941 TransmissionInfo::~TransmissionInfo() {} |
| 913 | 942 |
| 914 } // namespace net | 943 } // namespace net |
| OLD | NEW |