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

Side by Side Diff: net/quic/quic_config.cc

Issue 683113005: Update from chromium https://crrev.com/302282 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years, 1 month 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/quic_config.h ('k') | net/quic/quic_connection.h » ('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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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_config.h" 5 #include "net/quic/quic_config.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "net/quic/crypto/crypto_handshake_message.h" 10 #include "net/quic/crypto/crypto_handshake_message.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 } 69 }
70 QuicNegotiableUint32::~QuicNegotiableUint32() {} 70 QuicNegotiableUint32::~QuicNegotiableUint32() {}
71 71
72 void QuicNegotiableUint32::set(uint32 max, uint32 default_value) { 72 void QuicNegotiableUint32::set(uint32 max, uint32 default_value) {
73 DCHECK_LE(default_value, max); 73 DCHECK_LE(default_value, max);
74 max_value_ = max; 74 max_value_ = max;
75 default_value_ = default_value; 75 default_value_ = default_value;
76 } 76 }
77 77
78 uint32 QuicNegotiableUint32::GetUint32() const { 78 uint32 QuicNegotiableUint32::GetUint32() const {
79 if (negotiated_) { 79 if (negotiated()) {
80 return negotiated_value_; 80 return negotiated_value_;
81 } 81 }
82 return default_value_; 82 return default_value_;
83 } 83 }
84 84
85 void QuicNegotiableUint32::ToHandshakeMessage( 85 void QuicNegotiableUint32::ToHandshakeMessage(
86 CryptoHandshakeMessage* out) const { 86 CryptoHandshakeMessage* out) const {
87 if (negotiated_) { 87 if (negotiated()) {
88 out->SetValue(tag_, negotiated_value_); 88 out->SetValue(tag_, negotiated_value_);
89 } else { 89 } else {
90 out->SetValue(tag_, max_value_); 90 out->SetValue(tag_, max_value_);
91 } 91 }
92 } 92 }
93 93
94 QuicErrorCode QuicNegotiableUint32::ProcessPeerHello( 94 QuicErrorCode QuicNegotiableUint32::ProcessPeerHello(
95 const CryptoHandshakeMessage& peer_hello, 95 const CryptoHandshakeMessage& peer_hello,
96 HelloType hello_type, 96 HelloType hello_type,
97 string* error_details) { 97 string* error_details) {
98 DCHECK(!negotiated_); 98 DCHECK(!negotiated());
99 DCHECK(error_details != nullptr); 99 DCHECK(error_details != nullptr);
100 uint32 value; 100 uint32 value;
101 QuicErrorCode error = ReadUint32(peer_hello, 101 QuicErrorCode error = ReadUint32(peer_hello,
102 tag_, 102 tag_,
103 presence_, 103 presence_,
104 default_value_, 104 default_value_,
105 &value, 105 &value,
106 error_details); 106 error_details);
107 if (error != QUIC_NO_ERROR) { 107 if (error != QUIC_NO_ERROR) {
108 return error; 108 return error;
109 } 109 }
110 if (hello_type == SERVER && value > max_value_) { 110 if (hello_type == SERVER && value > max_value_) {
111 *error_details = 111 *error_details =
112 "Invalid value received for " + QuicUtils::TagToString(tag_); 112 "Invalid value received for " + QuicUtils::TagToString(tag_);
113 return QUIC_INVALID_NEGOTIATED_VALUE; 113 return QUIC_INVALID_NEGOTIATED_VALUE;
114 } 114 }
115 115
116 negotiated_ = true; 116 set_negotiated(true);
117 negotiated_value_ = min(value, max_value_); 117 negotiated_value_ = min(value, max_value_);
118 return QUIC_NO_ERROR; 118 return QUIC_NO_ERROR;
119 } 119 }
120 120
121 QuicNegotiableTag::QuicNegotiableTag(QuicTag tag, QuicConfigPresence presence) 121 QuicNegotiableTag::QuicNegotiableTag(QuicTag tag, QuicConfigPresence presence)
122 : QuicNegotiableValue(tag, presence), 122 : QuicNegotiableValue(tag, presence),
123 negotiated_tag_(0), 123 negotiated_tag_(0),
124 default_value_(0) { 124 default_value_(0) {
125 } 125 }
126 126
127 QuicNegotiableTag::~QuicNegotiableTag() {} 127 QuicNegotiableTag::~QuicNegotiableTag() {}
128 128
129 void QuicNegotiableTag::set(const QuicTagVector& possible, 129 void QuicNegotiableTag::set(const QuicTagVector& possible,
130 QuicTag default_value) { 130 QuicTag default_value) {
131 DCHECK(ContainsQuicTag(possible, default_value)); 131 DCHECK(ContainsQuicTag(possible, default_value));
132 possible_values_ = possible; 132 possible_values_ = possible;
133 default_value_ = default_value; 133 default_value_ = default_value;
134 } 134 }
135 135
136 QuicTag QuicNegotiableTag::GetTag() const { 136 QuicTag QuicNegotiableTag::GetTag() const {
137 if (negotiated_) { 137 if (negotiated()) {
138 return negotiated_tag_; 138 return negotiated_tag_;
139 } 139 }
140 return default_value_; 140 return default_value_;
141 } 141 }
142 142
143 void QuicNegotiableTag::ToHandshakeMessage(CryptoHandshakeMessage* out) const { 143 void QuicNegotiableTag::ToHandshakeMessage(CryptoHandshakeMessage* out) const {
144 if (negotiated_) { 144 if (negotiated()) {
145 // Because of the way we serialize and parse handshake messages we can 145 // Because of the way we serialize and parse handshake messages we can
146 // serialize this as value and still parse it as a vector. 146 // serialize this as value and still parse it as a vector.
147 out->SetValue(tag_, negotiated_tag_); 147 out->SetValue(tag_, negotiated_tag_);
148 } else { 148 } else {
149 out->SetVector(tag_, possible_values_); 149 out->SetVector(tag_, possible_values_);
150 } 150 }
151 } 151 }
152 152
153 QuicErrorCode QuicNegotiableTag::ReadVector( 153 QuicErrorCode QuicNegotiableTag::ReadVector(
154 const CryptoHandshakeMessage& msg, 154 const CryptoHandshakeMessage& msg,
(...skipping 18 matching lines...) Expand all
173 *error_details = "Bad " + QuicUtils::TagToString(tag_); 173 *error_details = "Bad " + QuicUtils::TagToString(tag_);
174 break; 174 break;
175 } 175 }
176 return error; 176 return error;
177 } 177 }
178 178
179 QuicErrorCode QuicNegotiableTag::ProcessPeerHello( 179 QuicErrorCode QuicNegotiableTag::ProcessPeerHello(
180 const CryptoHandshakeMessage& peer_hello, 180 const CryptoHandshakeMessage& peer_hello,
181 HelloType hello_type, 181 HelloType hello_type,
182 string* error_details) { 182 string* error_details) {
183 DCHECK(!negotiated_); 183 DCHECK(!negotiated());
184 DCHECK(error_details != nullptr); 184 DCHECK(error_details != nullptr);
185 const QuicTag* received_tags; 185 const QuicTag* received_tags;
186 size_t received_tags_length; 186 size_t received_tags_length;
187 QuicErrorCode error = ReadVector(peer_hello, &received_tags, 187 QuicErrorCode error = ReadVector(peer_hello, &received_tags,
188 &received_tags_length, error_details); 188 &received_tags_length, error_details);
189 if (error != QUIC_NO_ERROR) { 189 if (error != QUIC_NO_ERROR) {
190 return error; 190 return error;
191 } 191 }
192 192
193 if (hello_type == SERVER) { 193 if (hello_type == SERVER) {
(...skipping 10 matching lines...) Expand all
204 received_tags_length, 204 received_tags_length,
205 QuicUtils::LOCAL_PRIORITY, 205 QuicUtils::LOCAL_PRIORITY,
206 &negotiated_tag, 206 &negotiated_tag,
207 nullptr)) { 207 nullptr)) {
208 *error_details = "Unsupported " + QuicUtils::TagToString(tag_); 208 *error_details = "Unsupported " + QuicUtils::TagToString(tag_);
209 return QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP; 209 return QUIC_CRYPTO_MESSAGE_PARAMETER_NO_OVERLAP;
210 } 210 }
211 negotiated_tag_ = negotiated_tag; 211 negotiated_tag_ = negotiated_tag;
212 } 212 }
213 213
214 negotiated_ = true; 214 set_negotiated(true);
215 return QUIC_NO_ERROR; 215 return QUIC_NO_ERROR;
216 } 216 }
217 217
218 QuicFixedUint32::QuicFixedUint32(QuicTag tag, QuicConfigPresence presence) 218 QuicFixedUint32::QuicFixedUint32(QuicTag tag, QuicConfigPresence presence)
219 : QuicConfigValue(tag, presence), 219 : QuicConfigValue(tag, presence),
220 has_send_value_(false), 220 has_send_value_(false),
221 has_receive_value_(false) { 221 has_receive_value_(false) {
222 } 222 }
223 QuicFixedUint32::~QuicFixedUint32() {} 223 QuicFixedUint32::~QuicFixedUint32() {}
224 224
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 426
427 QuicConfig::QuicConfig() 427 QuicConfig::QuicConfig()
428 : max_time_before_crypto_handshake_(QuicTime::Delta::Zero()), 428 : max_time_before_crypto_handshake_(QuicTime::Delta::Zero()),
429 max_idle_time_before_crypto_handshake_(QuicTime::Delta::Zero()), 429 max_idle_time_before_crypto_handshake_(QuicTime::Delta::Zero()),
430 max_undecryptable_packets_(0), 430 max_undecryptable_packets_(0),
431 congestion_feedback_(kCGST, PRESENCE_REQUIRED), 431 congestion_feedback_(kCGST, PRESENCE_REQUIRED),
432 connection_options_(kCOPT, PRESENCE_OPTIONAL), 432 connection_options_(kCOPT, PRESENCE_OPTIONAL),
433 idle_connection_state_lifetime_seconds_(kICSL, PRESENCE_REQUIRED), 433 idle_connection_state_lifetime_seconds_(kICSL, PRESENCE_REQUIRED),
434 keepalive_timeout_seconds_(kKATO, PRESENCE_OPTIONAL), 434 keepalive_timeout_seconds_(kKATO, PRESENCE_OPTIONAL),
435 max_streams_per_connection_(kMSPC, PRESENCE_REQUIRED), 435 max_streams_per_connection_(kMSPC, PRESENCE_REQUIRED),
436 bytes_for_connection_id_(kTCID, PRESENCE_OPTIONAL),
436 initial_congestion_window_(kSWND, PRESENCE_OPTIONAL), 437 initial_congestion_window_(kSWND, PRESENCE_OPTIONAL),
437 initial_round_trip_time_us_(kIRTT, PRESENCE_OPTIONAL), 438 initial_round_trip_time_us_(kIRTT, PRESENCE_OPTIONAL),
438 // TODO(rjshade): Remove this when retiring QUIC_VERSION_19. 439 // TODO(rjshade): Remove this when retiring QUIC_VERSION_19.
439 initial_flow_control_window_bytes_(kIFCW, PRESENCE_OPTIONAL), 440 initial_flow_control_window_bytes_(kIFCW, PRESENCE_OPTIONAL),
440 // TODO(rjshade): Make this PRESENCE_REQUIRED when retiring 441 // TODO(rjshade): Make this PRESENCE_REQUIRED when retiring
441 // QUIC_VERSION_19. 442 // QUIC_VERSION_19.
442 initial_stream_flow_control_window_bytes_(kSFCW, PRESENCE_OPTIONAL), 443 initial_stream_flow_control_window_bytes_(kSFCW, PRESENCE_OPTIONAL),
443 // TODO(rjshade): Make this PRESENCE_REQUIRED when retiring 444 // TODO(rjshade): Make this PRESENCE_REQUIRED when retiring
444 // QUIC_VERSION_19. 445 // QUIC_VERSION_19.
445 initial_session_flow_control_window_bytes_(kCFCW, PRESENCE_OPTIONAL), 446 initial_session_flow_control_window_bytes_(kCFCW, PRESENCE_OPTIONAL),
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 501
501 void QuicConfig::SetMaxStreamsPerConnection(size_t max_streams, 502 void QuicConfig::SetMaxStreamsPerConnection(size_t max_streams,
502 size_t default_streams) { 503 size_t default_streams) {
503 max_streams_per_connection_.set(max_streams, default_streams); 504 max_streams_per_connection_.set(max_streams, default_streams);
504 } 505 }
505 506
506 uint32 QuicConfig::MaxStreamsPerConnection() const { 507 uint32 QuicConfig::MaxStreamsPerConnection() const {
507 return max_streams_per_connection_.GetUint32(); 508 return max_streams_per_connection_.GetUint32();
508 } 509 }
509 510
511 bool QuicConfig::HasSetBytesForConnectionIdToSend() const {
512 return bytes_for_connection_id_.HasSendValue();
513 }
514
515 void QuicConfig::SetBytesForConnectionIdToSend(uint32 bytes) {
516 bytes_for_connection_id_.SetSendValue(bytes);
517 }
518
519 bool QuicConfig::HasReceivedBytesForConnectionId() const {
520 return bytes_for_connection_id_.HasReceivedValue();
521 }
522
523 uint32 QuicConfig::ReceivedBytesForConnectionId() const {
524 return bytes_for_connection_id_.GetReceivedValue();
525 }
526
510 void QuicConfig::SetInitialCongestionWindowToSend(size_t initial_window) { 527 void QuicConfig::SetInitialCongestionWindowToSend(size_t initial_window) {
511 initial_congestion_window_.SetSendValue(initial_window); 528 initial_congestion_window_.SetSendValue(initial_window);
512 } 529 }
513 530
514 bool QuicConfig::HasReceivedInitialCongestionWindow() const { 531 bool QuicConfig::HasReceivedInitialCongestionWindow() const {
515 return initial_congestion_window_.HasReceivedValue(); 532 return initial_congestion_window_.HasReceivedValue();
516 } 533 }
517 534
518 uint32 QuicConfig::ReceivedInitialCongestionWindow() const { 535 uint32 QuicConfig::ReceivedInitialCongestionWindow() const {
519 return initial_congestion_window_.GetReceivedValue(); 536 return initial_congestion_window_.GetReceivedValue();
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 SetInitialFlowControlWindowToSend(kDefaultFlowControlSendWindow); 667 SetInitialFlowControlWindowToSend(kDefaultFlowControlSendWindow);
651 SetInitialStreamFlowControlWindowToSend(kDefaultFlowControlSendWindow); 668 SetInitialStreamFlowControlWindowToSend(kDefaultFlowControlSendWindow);
652 SetInitialSessionFlowControlWindowToSend(kDefaultFlowControlSendWindow); 669 SetInitialSessionFlowControlWindowToSend(kDefaultFlowControlSendWindow);
653 } 670 }
654 671
655 void QuicConfig::ToHandshakeMessage(CryptoHandshakeMessage* out) const { 672 void QuicConfig::ToHandshakeMessage(CryptoHandshakeMessage* out) const {
656 congestion_feedback_.ToHandshakeMessage(out); 673 congestion_feedback_.ToHandshakeMessage(out);
657 idle_connection_state_lifetime_seconds_.ToHandshakeMessage(out); 674 idle_connection_state_lifetime_seconds_.ToHandshakeMessage(out);
658 keepalive_timeout_seconds_.ToHandshakeMessage(out); 675 keepalive_timeout_seconds_.ToHandshakeMessage(out);
659 max_streams_per_connection_.ToHandshakeMessage(out); 676 max_streams_per_connection_.ToHandshakeMessage(out);
677 bytes_for_connection_id_.ToHandshakeMessage(out);
660 initial_congestion_window_.ToHandshakeMessage(out); 678 initial_congestion_window_.ToHandshakeMessage(out);
661 initial_round_trip_time_us_.ToHandshakeMessage(out); 679 initial_round_trip_time_us_.ToHandshakeMessage(out);
662 initial_flow_control_window_bytes_.ToHandshakeMessage(out); 680 initial_flow_control_window_bytes_.ToHandshakeMessage(out);
663 initial_stream_flow_control_window_bytes_.ToHandshakeMessage(out); 681 initial_stream_flow_control_window_bytes_.ToHandshakeMessage(out);
664 initial_session_flow_control_window_bytes_.ToHandshakeMessage(out); 682 initial_session_flow_control_window_bytes_.ToHandshakeMessage(out);
665 socket_receive_buffer_.ToHandshakeMessage(out); 683 socket_receive_buffer_.ToHandshakeMessage(out);
666 connection_options_.ToHandshakeMessage(out); 684 connection_options_.ToHandshakeMessage(out);
667 } 685 }
668 686
669 QuicErrorCode QuicConfig::ProcessPeerHello( 687 QuicErrorCode QuicConfig::ProcessPeerHello(
(...skipping 13 matching lines...) Expand all
683 } 701 }
684 if (error == QUIC_NO_ERROR) { 702 if (error == QUIC_NO_ERROR) {
685 error = keepalive_timeout_seconds_.ProcessPeerHello( 703 error = keepalive_timeout_seconds_.ProcessPeerHello(
686 peer_hello, hello_type, error_details); 704 peer_hello, hello_type, error_details);
687 } 705 }
688 if (error == QUIC_NO_ERROR) { 706 if (error == QUIC_NO_ERROR) {
689 error = max_streams_per_connection_.ProcessPeerHello( 707 error = max_streams_per_connection_.ProcessPeerHello(
690 peer_hello, hello_type, error_details); 708 peer_hello, hello_type, error_details);
691 } 709 }
692 if (error == QUIC_NO_ERROR) { 710 if (error == QUIC_NO_ERROR) {
711 error = bytes_for_connection_id_.ProcessPeerHello(
712 peer_hello, hello_type, error_details);
713 }
714 if (error == QUIC_NO_ERROR) {
693 error = initial_congestion_window_.ProcessPeerHello( 715 error = initial_congestion_window_.ProcessPeerHello(
694 peer_hello, hello_type, error_details); 716 peer_hello, hello_type, error_details);
695 } 717 }
696 if (error == QUIC_NO_ERROR) { 718 if (error == QUIC_NO_ERROR) {
697 error = initial_round_trip_time_us_.ProcessPeerHello( 719 error = initial_round_trip_time_us_.ProcessPeerHello(
698 peer_hello, hello_type, error_details); 720 peer_hello, hello_type, error_details);
699 } 721 }
700 if (error == QUIC_NO_ERROR) { 722 if (error == QUIC_NO_ERROR) {
701 error = initial_flow_control_window_bytes_.ProcessPeerHello( 723 error = initial_flow_control_window_bytes_.ProcessPeerHello(
702 peer_hello, hello_type, error_details); 724 peer_hello, hello_type, error_details);
(...skipping 11 matching lines...) Expand all
714 peer_hello, hello_type, error_details); 736 peer_hello, hello_type, error_details);
715 } 737 }
716 if (error == QUIC_NO_ERROR) { 738 if (error == QUIC_NO_ERROR) {
717 error = connection_options_.ProcessPeerHello( 739 error = connection_options_.ProcessPeerHello(
718 peer_hello, hello_type, error_details); 740 peer_hello, hello_type, error_details);
719 } 741 }
720 return error; 742 return error;
721 } 743 }
722 744
723 } // namespace net 745 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_config.h ('k') | net/quic/quic_connection.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698