Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: net/quic/core/quic_protocol.cc

Issue 2236973002: Landing Recent QUIC changes until 4AM, Aug 7, 2016 UTC-4 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: flip quic_sequencer_buffer_retire_block_in_time to true Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/core/quic_protocol.h ('k') | net/quic/core/quic_protocol_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « net/quic/core/quic_protocol.h ('k') | net/quic/core/quic_protocol_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698